How to scrape Google Videos with Python

One endpoint, each video as clean JSON, saved to CSV.

Free to try, no card Title, channel, duration, date Direct video links and thumbnails
PULLED LIVE FROM THE API, AUGUST 2, 2026

How do you scrape Google Videos?

Scraping the Videos tab yourself means driving a browser, dodging blocks, and parsing a page that keeps changing. Here you send one HTTP request and read JSON. Three steps:

  1. 1

    Create a free account. Try it free, no card needed.

  2. 2

    Copy your API key. It is on the dashboard right after signup.

  3. 3

    Run the code below. Start with the curl test, then the Python script.

First a quick test with curl:

# the applicable price per successful search, however many videos come back; zero results cost nothing curl "https://crustapi.com/v1/search?type=videos&q=guitar tutorial" -H "x-api-key: YOUR_KEY"

Then the same call in Python with the requests library. Install it with pip install requests, drop in a key, and run:

# pip install requests, then run this file import requests resp = requests.get( "https://crustapi.com/v1/search", params={"type": "videos", "q": "guitar tutorial"}, headers={"x-api-key": "YOUR_KEY"}, ) data = resp.json() for video in data["videos"]: print(video["title"], video["channel"], video["videoUrl"])

The response is one JSON object. The searchParameters field echoes your query, and videos is the list of results. Here are the first two that came back, shown as CSV so they drop straight into Sheets or a database:

titlechanneldurationdatevideoUrl
Guitar Lesson 1 - Absolute Beginner? Start Here! [Free 10 Day ...Andy Guitar16:11Sep 2, 2016https://www.youtube.com/watch?v=BBz-Jyr23M4
First Guitar Lesson for Complete Beginners (Start Playing in ...Good Guitarist11:14Jan 3, 2026https://www.youtube.com/watch?v=jh7_FRlFPw4

Each request returns one page of results. To pull more, pass a page number and loop, collecting every page into one list:

# page through more results import requests all_videos = [] for page in range(1, 4): # pages 1, 2, 3 resp = requests.get( "https://crustapi.com/v1/search", params={"type": "videos", "q": "guitar tutorial", "page": page}, headers={"x-api-key": "YOUR_KEY"}, ) all_videos += resp.json()["videos"] print(len(all_videos), "videos")

Change q to any search you would type into the Videos tab, like python tutorial or how to change a tire.

WHAT EVERY VIDEO INCLUDES

What data do you get?

Every result comes complete, so you build a research set or a content feed with no second call. Here is one record as CSV, ready for Sheets or a database:

titlechannelsourcedurationdatepositionvideoUrlimageUrl
First Guitar Lesson for Complete Beginners (Start Playing in ...Good GuitaristYouTube11:14Jan 3, 20262https://www.youtube.com/watch?v=jh7_FRlFPw4https://i.ytimg.com/vi/jh7_FRlFPw4/hqdefault.jpg

Or the same record as JSON, exactly as the API returns it:

// one video in full { "title": "First Guitar Lesson for Complete Beginners (Start Playing in ...", "link": "https://www.youtube.com/watch?v=jh7_FRlFPw4", "snippet": "Just finished your first guitar lesson? Here's your next step - my FREE songbook. 15 iconic songs you can play starting with just 2 chords, ...", "imageUrl": "https://i.ytimg.com/vi/jh7_FRlFPw4/hqdefault.jpg", "videoUrl": "https://www.youtube.com/watch?v=jh7_FRlFPw4", "duration": "11:14", "source": "YouTube", "channel": "Good Guitarist", "date": "Jan 3, 2026", "position": 2 }
HOW IT COMPARES

vs writing your own scraper

You can build a video-results scraper with a headless browser and a parser, and plenty of tutorials show how. The trade is maintenance. Here is the difference in practice.

Writing it yourselfCrustAPI
SetupInstall a headless browser, handle blocks and page changesOne GET request, no browser
OutputParse the HTML yourself; fields break when the layout changesClean JSON from the API, or the same rows as CSV
MaintenanceFix the scraper each time the page changesWe keep it working
Free tierFree, but you pay in time and blocked requests$6 of free usage each month
Cost modelServer, proxy, and developer timePay per successful search, any number of videos; empty searches free
Storing the dataYours to manageNo storage limits. Export to CSV or a database
PRICING

How much does scraping Google Videos cost?

Each successful video search is billed once at your Google Search rate, however many videos come back. Empty searches cost nothing. Paid funds never expire.

DepositGoogle Search / 1,000 requestsMaps / 1,000 businessesLinkedIn reads / 1,000 requestsPeople, Jobs, Refresh / 1,000 units
$10+$1.00$1.96$6.00$1.96
$149+$0.76$1.49$4.50$1.49
$549+$0.56$1.10$3.30$1.10
$1,999+$0.41$0.80$2.45$0.80
$6,500+$0.33$0.65$1.95$0.65
$27,500+$0.28$0.55$1.65$0.55
$50,000+$0.26$0.50$1.50$0.50
$100,000+$0.20$0.40$1.50$0.40

Every eligible account gets $6 of free usage monthly. Each deposit keeps its prices until spent; paid funds never expire. People and Jobs bill per successful search, Refresh per accessible profile. Full profiles in People use the read rate per full profile. See all billing details.

Larger deposits unlock lower endpoint prices. Each deposit keeps its prices until spent. See the full deposit table on the pricing page. Prices in USD, ex-tax.

Run your first video search free
Try it free. No card, no contract.
Try for free
THE LAST STEP

Save the results to a CSV file

Because the response is plain JSON, Python's built-in csv module writes it to a file in a few lines. No extra libraries. This reads every video from the search and writes one row each:

# save every video to a CSV file with the built-in csv module import csv, requests data = requests.get( "https://crustapi.com/v1/search", params={"type": "videos", "q": "guitar tutorial"}, headers={"x-api-key": "YOUR_KEY"}, ).json() with open("videos.csv", "w", newline="") as f: writer = csv.writer(f) writer.writerow(["title", "channel", "duration", "date", "videoUrl"]) for v in data["videos"]: writer.writerow([v["title"], v["channel"], v.get("duration", ""), v.get("date", ""), v["videoUrl"]])

Open videos.csv in Sheets or Excel and you have a finished list. Swap the query, run it again, and append to build a bigger dataset.

WHO IT'S FOR

Who scrapes Google Videos?

Related: Google Videos Scraper · Google Search API · Google Images API · API docs

FAIR PLAY

When a different tool fits better: pulling a channel's full upload history, comment threads, or view counts is what the YouTube Data API is built for. This endpoint returns the public video results Google shows for a search, which is what most research and content work needs, but it is not the official YouTube API.

BEFORE YOU ASK

Common questions

No. With the CrustAPI endpoint you send one HTTP request with the requests library and get clean JSON back. There is no browser to drive and no HTML to parse, so the code above is the whole scraper.

Title, channel, duration, publish date, source, the video link, and a thumbnail image URL, plus its position in the results. Enough to build a research set or a content feed without a second call.

Logged-out, public-only collection has repeatedly defeated computer-fraud and contract claims, while Google's Terms restrict automated access that violates instructions like robots.txt. What you get is the same public results anyone sees on the Videos tab.

A search returns the videos Google shows for that query on one page. You pay the applicable price per successful search, however many videos come back, and a search that finds none costs nothing. Pass a page number to pull more.

The response is plain JSON, so Python's built-in csv module writes it to a file in a few lines. The Save to CSV section above has the exact code, no extra libraries.

Yes. Try it free, no credit card, and paid funds never expire. That is enough to pull several full result pages while you build.

WORKS WITH YOUR STACK

Try it on a search you know

the free plan covers a real search. Run one query and look at the JSON that comes back.

Try for free
No credit card required