How to scrape Google Search with Python

This guide shows how to scrape Google Search with Python: call one endpoint, get the organic results as clean JSON, then save them to a CSV file. No browser automation, no parsing HTML.

3,000 free results / month, no card Title, link, snippet as JSON Clean JSON, no HTML parsing
PULLED LIVE FROM THE API, JULY 20, 2026

One request, real response

The hard part of scraping Google Search yourself is driving a browser, dodging blocks, and parsing a results page that keeps changing. Instead you send one HTTP request to a search endpoint and get structured data back. First a quick test with curl:

# one credit 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:

position,title,link,snippet 1,"27 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: ..." 3,"Best CRM Software: Everything To Consider","https://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

The full record, ready to use

Every result carries title, link, snippet, and position, plus a date when Google shows one. The snippet is the summary text, so it feeds a RAG pipeline or a report with no extra fetch. One result as CSV, ready for a spreadsheet or a database:

position,title,link,date,snippet 4,"The 11 best CRM software in 2026","https://zapier.com/blog/best-crm-app/","Jun 22, 2026","We put dozens of Salesforce alternatives through the wringer and came up with the 11 best CRM apps on the market."

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": "We put dozens of Salesforce alternatives through the wringer and came up with the 11 best CRM apps on the market.", "date": "Jun 22, 2026", "position": 4 }

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 in the world?" } ], "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 requests3,000 results / month, no card
Cost modelServer, proxy, and developer timeOne credit per successful search, however many results; empty searches free
Storing the dataYours to manageNo storage limits. Export to CSV or a database
PRICING

One credit per search

Prepaid packs, and credits never expire: 25k for $49 · 100k for $149 · 500k for $549 · 2.5M for $1,999 · up to 250M, all self-serve, ex-tax. Each successful search costs one credit, however many results come back; a search that returns none costs nothing.

Run your first search free
3,000 credits a month. No card, no contract.
Get started →
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.

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

WORKS WITH YOUR STACK

Try it on a query you know

3,000 free credits covers a real search. Run one query and look at the JSON that comes back.

Get 3,000 free credits
No credit card required