How to scrape Google Places with Python

This guide shows how to scrape Google Places with Python: call one endpoint, get each place as clean JSON with name, address, category, and rating, then save it to a CSV file. No browser automation.

3,000 free credits / month, no card Name, address, category, rating Clean JSON, no HTML parsing
PULLED LIVE FROM THE API, JULY 20, 2026

One request, real response

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

# one credit per successful search, however many places come back; zero results cost nothing curl "https://crustapi.com/v1/search?type=places&q=coffee shops in Seattle, WA" -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": "places", "q": "coffee shops in Seattle, WA"}, headers={"x-api-key": "YOUR_KEY"}, ) data = resp.json() for place in data["places"]: print(place["title"], place["rating"], place["ratingCount"], place["category"])

Here are the first two places that came back, shown as CSV so they drop straight into Sheets or a CRM:

name,address,category,rating,reviews,cid "Storyville Coffee Pike Place","94 Pike St Top floor Suite 34, Seattle, WA 98101","Coffee shop",4.6,3119,8582500234709843288 "Coffee TAB","211 Lenora St Suit A, Seattle, WA 98121","Coffee shop",4.7,600,2974918998768439842

Change q to any search you would type into the Google box, like plumbers in Miami or dentists near 90210. Add page=2, page=3 to walk further down the list; an empty places array means you have reached the end.

WHAT EVERY PLACE INCLUDES

The full record, ready to use

Every place comes back with its position, name, address, coordinates, category, star rating, review count, price level, and a Google cid you can keep as a stable ID. The same record as CSV, ready for Sheets or a database:

name,address,category,rating,reviews,priceLevel,lat,lng,cid,position "Storyville Coffee Pike Place","94 Pike St Top floor Suite 34, Seattle, WA 98101","Coffee shop",4.6,3119,,47.60895,-122.3404309,8582500234709843288,1

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

// one place in full { "position": 1, "title": "Storyville Coffee Pike Place", "address": "94 Pike St Top floor Suite 34, Seattle, WA 98101", "latitude": 47.60895, "longitude": -122.3404309, "rating": 4.6, "ratingCount": 3119, "priceLevel": null, "category": "Coffee shop", "cid": "8582500234709843288" }

Need phone numbers, websites, and opening hours too? Use type=maps for the richer record. The places type is the lean, fast listing.

HOW IT COMPARES

vs writing your own scraper

You can build a Places 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 requests3,000 credits / month, no card
Cost modelServer, proxy, and developer timeOne credit per search, however many places come back; 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. A search that returns 20 places costs one credit; a search that returns none costs nothing.

Run your first Places search free
3,000 credits a month. No card, no contract.
Get started →
THE LAST STEP

Page through results and save to CSV

Because the response is plain JSON, a short loop pages through the results and Python's built-in csv module writes them to a file. No extra libraries. This reads pages one through three, stops early when a page comes back empty, and writes one row each:

# page through results and save each place to a CSV file import csv, requests rows = [] for page in range(1, 4): data = requests.get( "https://crustapi.com/v1/search", params={"type": "places", "q": "coffee shops in Seattle, WA", "page": page}, headers={"x-api-key": "YOUR_KEY"}, ).json() places = data["places"] if not places: break rows += places with open("places.csv", "w", newline="") as f: writer = csv.writer(f) writer.writerow(["name", "address", "category", "rating", "reviews", "cid"]) for p in rows: writer.writerow([p["title"], p["address"], p.get("category", ""), p.get("rating", ""), p.get("ratingCount", ""), p["cid"]])

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

Related: Google Places Scraper · Places API pricing · Google Maps Scraper API · Scrape Google Maps with Python · API docs

FAIR PLAY

When a different tool fits better: live driving directions, real-time traffic, or a contract with a formal SLA are Google Cloud products, not scraping. This endpoint returns the public place listing anyone sees in Google search, which is what most lead-gen and research work needs, but it is not the official Google Places API.

BEFORE YOU ASK

Common questions

WORKS WITH YOUR STACK

Try it on a city 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