Google Maps Scraper avatar

Google Maps Scraper

Pricing

Pay per event

Go to Apify Store
Google Maps Scraper

Google Maps Scraper

Fast Google Maps scraper: business details, emails, social profiles, deep reviews, hours and geo. Grid/area coverage breaks Google's ~120-results-per-area limit.

Pricing

Pay per event

Rating

0.0

(0)

Developer

massi inable

massi inable

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Categories

Share

Extract structured business data from Google Maps at scale — fast, with a low, predictable cost.

Built on the gosom/google-maps-scraper Go engine, wrapped with grid/area coverage, contact enrichment, proxy rotation and per-search result caps.

Why this Actor

  • Breaks the 120-per-area limit. Google Maps only shows ~120 results per view. Turn on Area coverage and the Actor sweeps a bounding box as a grid of cells, de-duplicating by place ID, so you get the full set.
  • Fast + cheap. The Go engine is significantly lighter than a full browser crawler, so large jobs finish quicker and cost less.
  • Contact enrichment built in. Optionally crawls each business website for emails, extra phone numbers and social-media profiles (Facebook, Instagram, LinkedIn, X/Twitter, YouTube, TikTok), with optional MX verification.
  • Real per-search caps. maxCrawledPlacesPerSearch is enforced per search term / URL, not across the whole run.
  • Deep reviews. Review pagination is on by default, so high-review places return their full review history, not just the first page.

Input

FieldTypeNotes
searchStringsArraystring[]Search terms / categories. Each runs as its own search with its own cap.
startUrlsurl[]Google Maps place or search URLs to scrape directly. Location fields are not applied to these.
locationQuery, city, state, county, postalCodestringLocation parts, combined into one suffix appended to every search term.
countryCodeenumISO 3166-1 alpha-2.
languageenumGoogle Maps interface language. Default en.
maxCrawledPlacesPerSearchintCap per term/URL after filtering + dedupe. Default 100.
areaSearchboolGeocode the location to a bbox and grid-scrape it.
customGeolocationobjectExplicit area: GeoJSON Polygon/MultiPolygon, or {southWest:{lat,lng}, northEast:{lat,lng}}. Overrides areaSearch.
gridCellKm, zoomintGrid cell size and per-cell zoom.
scrapePlaceDetailPageboolFull detail page vs fast mode. Default true.
extraReviewsboolDeep review pagination. Default true.
scrapeContactsboolWebsite crawl for email + phone + social.
scrapeSocialMediaProfilesobjectWhich networks to keep. Enabling any turns enrichment on.
verifyLeadsEnrichmentEmailsboolMX-record check per extracted email.
placeMinimumStarsenumMinimum average rating.
categoryFilterWordsstring[]Keep only places whose Google category contains one of these words.
searchMatchingenumall / only_includes / only_exact on the place title.
websiteenumallPlaces / withWebsite / withoutWebsite.
skipClosedPlacesboolDrop closed places.
maxConcurrencyintParallel workers per search. Default 4.
proxyConfigurationproxyApify Proxy. Residential recommended for large runs.

At least one of searchStringsArray or startUrls is required.

Output

One dataset item per place. Core fields from the engine include title, address, phone, web_site, review_rating, review_count, reviews_per_rating, categories, open_hours, popular_times, price_range, latitude, longitude, place_id, cid, plus_code, images, thumbnail, timezone, plus review detail when extraReviews is on.

Added by this Actor:

FieldWhen
search_term, search_queryalways
emailsscrapeContacts and an email was found on the website
emails_verifiedverifyLeadsEnrichmentEmails
contact_phonescontact enrichment found tel: links
social_mediacontact enrichment found profile links
enrichment_sourceset to website_crawl when any signal was added

Example

{
"searchStringsArray": ["coffee shop"],
"locationQuery": "Ashburn, Virginia",
"maxCrawledPlacesPerSearch": 50,
"areaSearch": true,
"gridCellKm": 3,
"scrapeContacts": true,
"verifyLeadsEnrichmentEmails": true,
"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
}

Notes & limits

  • Base image is pinned by digest for a stable CLI contract.
  • Area/grid runs are much slower and produce more items than a single search — tune gridCellKm and maxCrawledPlacesPerSearch.
  • Contact enrichment fetches third-party websites; results depend on how each site exposes its contact details.
  • Email verification is an MX-record check only (no SMTP probe), so it confirms the domain can receive mail, not that a specific mailbox exists.