One endpoint, every review as clean JSON, no browser automation.
From zero to live review 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 Reviews yourself is driving a browser, scrolling the review panel, and parsing markup 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:
The response is one JSON object: searchParameters, a reviews list, and a nextPageToken for the following page. Here are the first two reviews that came back, shown as CSV so they drop straight into Sheets or a database:
Change q to any business you want reviews for, like Blue Bottle Coffee Oakland or a place name plus its city.
Every review comes complete, so you run sentiment analysis or track feedback with no second call. likes counts reader reactions, and a response object carries the business reply when there is one. The same review as CSV, ready for Sheets or a database:
Or the same review as JSON, exactly as the API returns it:
One call returns the first page of reviews. To pull the rest, read nextPageToken from the response and pass it back on the next request. Keep looping until the token stops coming, and you have the whole review history:
Each request is one request charge, however many reviews come back, so paging through the full history costs one charge per page and empty pages cost nothing.
You can build a reviews 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, scroll the review panel, handle blocks | One GET request, no browser |
| Output | Parse the HTML yourself; fields break when the layout changes | Clean JSON with rating, date, author, and text named, or the same rows as CSV |
| Paging | Track scroll state and dedupe rows by hand | Follow one nextPageToken to the end |
| Maintenance | Fix the scraper each time the page changes | We keep it working |
| Free tier | Free, but you pay in time and blocked requests | $6 of free usage each month |
| Cost model | Server, proxy, and developer time | One charge per search, however many reviews; empty results free |
You pay the applicable price per successful search. Eight reviews back or 80 is still one request charge, and a search that returns none costs nothing. Funds are prepaid and 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, Python's built-in csv module writes it to a file in a few lines. No extra libraries. This reads every review from the search and writes one row each:
Open reviews.csv in Sheets or Excel and you have a clean feedback log. Swap the business, run it again, and append to track many locations at once.
Related: Google Reviews API · Google Reviews Scraper · Google Maps Scraper API · Scrape Google Maps with Python · API docs
When a different tool fits better: replying to reviews, managing your own listing, or a contract with a formal SLA are Google Business Profile products, not scraping. This endpoint returns the public reviews anyone sees on a listing, which is what most research and monitoring work needs, but it is not the official Google Business Profile 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.
The star rating, a relative date and an ISO timestamp, the review text, a likes count, the author name with their total review and photo counts, any attached photos, and a link to the review. When the business replied, a response object carries the reply date and text. Enough to run sentiment analysis or track feedback without a second call.
Each response includes a nextPageToken. Pass it back on the next request to get the following page, and keep looping until the token is missing. The Page through every review section above has the exact loop.
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 reviews anyone sees on the listing.
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 pages of reviews while you build.
the free plan covers a real search. Run one query and look at the JSON that comes back.
Try for free