How to scrape Google Search with Python

One endpoint, organic results as clean JSON, saved to CSV.

Free to try, no card Title, link, snippet as JSON Clean JSON, no HTML parsing
PULLED LIVE FROM THE API, AUGUST 4, 2026

How do you scrape Google Search?

Scraping Google 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 results; zero results cost nothing curl "https://crustapi.com/v1/search?type=web&q=best crm software" -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": "web", "q": "best crm software"}, headers={"x-api-key": "YOUR_KEY"}, ) data = resp.json() for result in data["organic"]: print(result["position"], result["title"]) print(result["link"]) print(result.get("snippet", "")) print()

The organic list holds the ranked results in order. Here are the first two that came back, shown as CSV so they drop straight into Sheets or a spreadsheet:

positiontitlelinksnippet
127 of the Best CRM Software Companies to Know About for ...https://solutionsreview.com/crm/2026/01/05/best-crm-companies-to-know-about/The Best CRM Software Companies for 2026, Act!, ActiveCampaign, Agile CRM, Apptivo, Bitrix24, Brevo, Copper, Creatio. Description: ...
3Best CRM Software: Everything To Considerhttps://www.salesforce.com/crm/best-crm/Salesforce is consistently named the #1 CRM by IDC for providing world-class apps for every team and a unified platform that connects data, AI, and apps

Change q to any search you would type into Google, like project management tools or plumbers in miami.

WHAT EVERY RESULT INCLUDES

What data do you get?

Every result carries title, link, snippet, and position, plus a date when Google shows one. The snippet feeds a RAG pipeline or a report with no extra fetch. One result as CSV:

positiontitlelinkdatesnippet
6The 11 best CRM software in 2026https://zapier.com/blog/best-crm-app/Jun 22, 2026Best CRM for versatility HubSpot (Web, iOS, Android) Zoho CRM (Web, iOS, Android) power to save some money. Pipedrive (Web, iOS, Android) ...

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

// one organic result in full { "title": "The 11 best CRM software in 2026", "link": "https://zapier.com/blog/best-crm-app/", "snippet": "Best CRM for versatility HubSpot (Web, iOS, Android) Zoho CRM (Web, iOS, Android) power to save some money. Pipedrive (Web, iOS, Android) ...", "date": "Jun 22, 2026", "position": 6 }

The top level of the response wraps that list with the query you sent, the People Also Ask questions, and the related searches, so you capture the whole page in one call:

// the shape of every response { "searchParameters": { "q": "best crm software", "gl": "us", "hl": "en", "page": 1, "type": "web" }, "organic": [ /* the results, shown above */ ], "peopleAlsoAsk": [ { "question": "What is the #1 CRM platform?" } ], "relatedSearches": [ { "query": "Top 10 CRM software" } ] }
HOW IT COMPARES

vs writing your own scraper

You can build a Google Search 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 results page yourself; selectors break when the layout changesClean JSON from the API, or the same rows as CSV
MaintenanceFix the parser each time Google changes the pageWe 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, however many results; empty searches free
Storing the dataYours to manageNo storage limits. Export to CSV or a database
PRICING

How much does scraping Google cost?

Each successful search is billed once at your Google Search rate, however many results 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 search free
Try it free. No card, no contract.
Try for free
THE LAST STEP

Save the results to a CSV file

To go past the first page, add a page parameter and loop it: page 1 is the default, so set it to 2, 3, and up to walk deeper. Because the response is plain JSON, Python's built-in csv module writes every result to a file with no extra libraries:

# loop three pages of results and save them all to CSV import csv, requests rows = [] for page in range(1, 4): # pages 1, 2, and 3 data = requests.get( "https://crustapi.com/v1/search", params={"type": "web", "q": "best crm software", "page": page}, headers={"x-api-key": "YOUR_KEY"}, ).json() rows += data["organic"] with open("results.csv", "w", newline="") as f: writer = csv.writer(f) writer.writerow(["position", "title", "link", "date", "snippet"]) for r in rows: writer.writerow([r["position"], r["title"], r["link"], r.get("date", ""), r.get("snippet", "")])

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

WHO IT'S FOR

Who scrapes Google Search?

Related: Google Search API · Scrape Google search results · Serper alternative · Scrape Google Maps with Python · API docs

FAIR PLAY

When a different tool fits better: a formal contract with an SLA, guaranteed uptime, or Google's own ranking APIs are Google Cloud products, not scraping. This endpoint returns the public results anyone sees on the page, which is what most SEO research, rank tracking, and RAG work needs, but it is not the official Custom Search 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, link, snippet, position, and a date when Google shows one. The response also includes the People Also Ask questions and related searches, so you get the whole page as structured data.

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 page.

Add a page parameter to the request and loop it. Page 1 is the default, so set page to 2, 3, and on to walk deeper into the results. Each page is its own search, so you pay one charge per page, however many results come back.

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 query 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