One endpoint, each place as clean JSON, saved to CSV.
From zero to live place data in about two minutes:
Create a free account. Try it free, no card needed.
Copy your API key from the dashboard.
Run the curl or the script below. Clean JSON comes back, ready to save as CSV.
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:
Then the same call in Python with the requests library. Install it with pip install requests, drop in a key, and run:
Here are the first two places that came back, shown as CSV so they drop straight into Sheets or a CRM:
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.
Every place comes back with its position, name, address, coordinates, category, star rating, review count, price level, phone number, website, and a Google cid you can keep as a stable ID. The same record as CSV, ready for Sheets or a database:
Or the same record as JSON, exactly as the API returns it:
The priceLevel field carries Google's price band, like $1–10 or $10–20, and comes back null when Google shows none. Phone number and website can be null too when Google does not list them. Need opening hours and the richer record? Use type=maps. The places type is the lean, fast listing.
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 yourself | CrustAPI | |
|---|---|---|
| Setup | Install a headless browser, handle blocks and page changes | One GET request, no browser |
| Output | Parse the HTML yourself; fields break when the layout changes | Clean JSON from the API, or the same rows as CSV |
| Maintenance | Fix the scraper each time the page changes | We keep it working |
| Free tier | Free, but you pay in time and blocked requests | Free to try, no card |
| Cost model | Server, proxy, and developer time | One charge per search, however many places come back; empty searches free |
| Storing the data | Yours to manage | No storage limits. Export to CSV or a database |
You pay the applicable price per successful search. Places costs one charge per successful search, regardless of how many places come back. Empty searches are free. Paid funds never expire.
| Deposit | Google Search / 1,000 requests | Maps / 1,000 businesses | LinkedIn reads / 1,000 requests | People, 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.
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:
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
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.
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.
Position, name, full address, category, star rating, review count, price level, phone number, website, coordinates, and a Google cid you can keep as a stable ID. Enough to build a list or a dataset from one call.
The places type is the lean, fast listing, and it includes each place's phone number and website. For opening hours and the richer record, use type=maps. A places search bills one charge per search, however many places come back.
Logged-out, public-only collection has repeatedly defeated computer-fraud and contract claims. Google's Terms restrict automated access that violates instructions like robots.txt. What you get is the same public place listing anyone sees in Google search.
Add page=2, page=3 to walk down the list, and stop when the places array comes back empty. You pay one charge per search, however many places come back, so a page that finds 20 costs one request charge and an empty page costs nothing.
Yes. Try it free, no credit card, and paid funds never expire. That is enough to pull several full result pages while you build.
the free plan covers a real search. Run one query and look at the JSON that comes back.
Try for free