Two ways to scrape Google Maps: build a headless browser scraper yourself, or call one API that returns the same business data as clean JSON in about a second. Real code and a real response below.
Google Maps looks easy to scrape. The names, phones, and websites are right there on a public page. Then you try it, and you hit four walls in roughly this order:
| The wall | What actually happens |
|---|---|
| The data is not in the HTML | Google Maps is a JavaScript app. A plain HTTP GET returns a shell full of scripts, and the listings render later in the browser. So you need Puppeteer, Playwright, or Selenium, plus a machine with enough RAM to keep Chrome instances alive. |
| One search caps out | The results list stops loading after a few scrolls. In our own test, one "dentists in Miami" search returned about 100 businesses. The metro has over 1,000. Covering a full city means a full-area sweep that returns every business, deduplicated. |
| Google blocks bot IPs | Run a headless browser from a datacenter IP and you get CAPTCHAs and empty pages fast. Clean IPs cost real money, and a burned IP stays burned for a while. |
| The markup shifts under you | Class names in the page are machine-generated strings, and they rotate. Your selectors break without warning, and the scraper fails quietly until someone notices the empty spreadsheet. |
None of this is impossible. It is a real engineering project with ongoing upkeep, proxy bills, and 3 a.m. selector fixes. Whether that is worth it depends on what you are actually after: the craft, or the data.
There are three real ways to get Google Maps business data: build the scraper, pay Google's official Places API, or use a scraper API that does the collection for you.
| Build it yourself | Official Places API | CrustAPI | |
|---|---|---|---|
| Setup | Days of code, then upkeep forever | An afternoon | One HTTP request |
| Cost | Proxies + servers + your hours | $35 per 1,000 requests at the tier that includes phone, website, and hours | $1.96 per 1,000 businesses at entry |
| Results per search | ~100 before the list stops loading | 60 max across 3 billed pages | Up to 100 in one request |
| Keeping the data | You store what you scrape | Storing prohibited beyond place IDs | No storage limits |
| When it breaks | Your problem, at 3 a.m. | Google's problem | Our problem, and failed queries cost nothing |
Official Places figures from Google Maps Platform pricing and the Text Search docs, checked July 12, 2026. Full worked math on our Places API alternative page.
No browser, no proxies, no selectors. You make one HTTPS request and get JSON back. Here is the whole tutorial:
Sign up and your key is on the dashboard. Every account gets 3,000 free credits a month, no card. One credit = one business returned, and searches that return nothing are free.
Any search you would type into the Google Maps box works as the q parameter. Set limit up to 100.
This is the actual response from that request, pulled July 17, 2026, in about a second. One record shown, trimmed, phone masked for this page. Here it is as CSV, the way it lands in a spreadsheet:
And the same record as raw JSON:
The same call in Python, if curl is not your thing:
Every record carries the full field set: name, address, phone, website, rating, review count, categories, hours, and lat/lng. The field-by-field breakdown lives on the Google Maps scraper API page. Prefer clicking to coding? The playground runs the same searches in the browser.
The first three businesses from that Boise search, as they land in a spreadsheet. Phones are masked here on the page; the API returns them in full, formatted and E.164.
| Business | Category | Rating | Reviews | Phone | Website |
|---|---|---|---|---|---|
| Express Plumbing Heating & Air | Plumber | 4.8 | 1,923 | (208) 3••-••09 | expressplumbingidaho.com |
| Beacon Plumbing, Heating, Air-Conditioning, and Electrical | Plumber | 5.0 | 1,780 | (208) 5••-••61 | beaconplumbing.com |
| Perfect Plumbing Heating & Air | Plumber | 4.8 | 5,587 | (208) 2••-••87 | perfectplumbingheatingair.com |
One search caps at 100 businesses. CrustAPI sweeps the whole metro for you and returns every business past that cap, deduplicated, from a single call. No stitching searches together on your end.
Want the actual review text for any of those places? Swap to type=reviews with the placeId you already have. Reviews respond in about 0.3 seconds, with rating, text, author, date, sorting, and pagination. More on the Google Reviews API page.
Google Maps data does not include email addresses. Not from us, and not from anyone scraping Maps, because the listings themselves do not show one. You get name, address, phone, website, rating, reviews, categories, and hours. If you need verified emails for the people behind those businesses, that comes from a different source: our LinkedIn people search returns public profiles with verified emails attached.
Prepaid packs, and credits never expire: 25k for $49 · 100k for $149 · 500k for $549 · 2.5M for $1,999. A search that returns 40 businesses costs 40 credits. A search that returns none costs nothing, so you can experiment with queries without burning money.
When you should not use us: if you are building live location features inside an app (map views, place lookups, autocomplete), Google's official Places API is the right tool, with an SLA and support contracts behind it. And if you want to learn browser automation, or you need screenshots and photos off the page, building your own Playwright scraper is a genuinely good project. This API is for when you need the data, at volume, without the upkeep.
Related: Google Maps Scraper API · Google Reviews API · Google Search API
3,000 free credits covers a real lead list. Run one search and look at the JSON that comes back.
Get 3,000 free credits