Google Maps Scraper + Email Extractor avatar

Google Maps Scraper + Email Extractor

Pricing

from $0.84 / 1,000 results

Go to Apify Store
Google Maps Scraper + Email Extractor

Google Maps Scraper + Email Extractor

Scrapes Google Maps business listings — name, address, coordinates, rating, review count, phone, website, categories and opening status — with real pagination. Optionally visits each business website to extract contact emails. HTTP only, no API key.

Pricing

from $0.84 / 1,000 results

Rating

0.0

(0)

Developer

Ibnu Adzim

Ibnu Adzim

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Categories

Share

Pulls business listings straight from Google Maps — name, address, coordinates, rating, review count, phone, website, categories and opening status — and optionally visits each business's own website to find a contact email.

Per queryReal pagination, ~20 places per page, no duplicates
Returnsname · full address · lat/lng · rating · review count · phone · website · categories · neighbourhood · opening status
Emailsoptional — visits the business website and its contact pages
MethodHTTP only. No API key, no login, no browser
Anti-botnone on this endpoint — 6/6 TLS profiles answered 200 cold

Example input

{
"searchQueries": ["digital marketing agency jakarta"],
"latitude": -6.2,
"longitude": 106.8,
"maxPlacesPerQuery": 60,
"extractEmails": true
}

Set the search centre — it is a real filter

latitude / longitude are not a hint. Google searches around that point, so the same query at a different centre returns a different neighbourhood's businesses. Changing the query but leaving the default centre is the single most common way to get confusing results — if you ask for "dentist in Berlin" while the centre is still Jakarta, Google will do its best with Jakarta.

searchRadiusHint widens or narrows the area around that centre.

Email extraction

Turn on extractEmails and every place that lists a website gets visited: homepage first, then /contact, /contact-us, /kontak, /hubungi-kami, /about — stopping as soon as an address turns up.

It costs no extra Google traffic at all, only requests to the businesses' own sites, so it is safe to leave on; it just makes runs longer. On a sample run of 20 agencies, 20 had a website and 12 yielded an email.

Addresses written as name (at) domain (dot) com are decoded. Template boilerplate — example@, noreply@, Sentry and Wix CMS addresses, and image filenames that happen to look like addresses — is filtered out.

Output

Every row carries the portfolio envelope — _input, _source, _scrapedAt, recordType:

  • PLACE — one per business.
  • SEARCH_SUMMARY — one per query: how many places came back, how many pages were read, how many had a website, how many yielded an email, and the Maps vs website request counts so the cost of a run is visible in the data.
  • ERROR — one per query that failed, so every input maps to at least one row.

Known limits — worth reading

  • Review count is missing on roughly one run in five. Google serves the place record in two variants at random, and only one of them carries the count — in the other it is absent from the response entirely, so there is nothing to parse. The actor re-asks once when a page comes back without it, which covers most of the gap; when it still is not there the field is honestly null rather than guessed. Nothing in the request controls which variant you get.
  • No reviews. Google's review endpoints are either retired (the one its robots.txt permits) or require an authenticated session (the one that still works, which robots.txt also disallows). A review scraper is not buildable HTTP-only, so this actor does not pretend to.
  • No web search results. This scrapes Google Maps, not Google Search. Google no longer serves organic results as HTML to non-JavaScript clients — eleven request shapes were tested, including from a residential connection — so a SERP scraper needs a real browser, which this actor deliberately is not.
  • Around 400 places per query, in practice fewer. Results thin out and start repeating well before that; the actor stops as soon as a page adds nothing new rather than paying for pages that repeat themselves.
  • Some places have no website or phone. That is the listing, not a miss — 48 of 80 sampled places had a website.

Proxy and cost

Defaults to Apify Proxy on the shared datacenter pool, which is included in your plan at no extra cost and works fine here. If you ever see Google's rate wall, switch the group to Residential in the proxy field — it uses real consumer IPs, but Apify bills residential traffic per gigabyte, so leave it off unless you need it.