Google Maps Scraper
Pricing
Pay per event
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
Maintained by CommunityActor 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.
maxCrawledPlacesPerSearchis 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
| Field | Type | Notes |
|---|---|---|
searchStringsArray | string[] | Search terms / categories. Each runs as its own search with its own cap. |
startUrls | url[] | Google Maps place or search URLs to scrape directly. Location fields are not applied to these. |
locationQuery, city, state, county, postalCode | string | Location parts, combined into one suffix appended to every search term. |
countryCode | enum | ISO 3166-1 alpha-2. |
language | enum | Google Maps interface language. Default en. |
maxCrawledPlacesPerSearch | int | Cap per term/URL after filtering + dedupe. Default 100. |
areaSearch | bool | Geocode the location to a bbox and grid-scrape it. |
customGeolocation | object | Explicit area: GeoJSON Polygon/MultiPolygon, or {southWest:{lat,lng}, northEast:{lat,lng}}. Overrides areaSearch. |
gridCellKm, zoom | int | Grid cell size and per-cell zoom. |
scrapePlaceDetailPage | bool | Full detail page vs fast mode. Default true. |
extraReviews | bool | Deep review pagination. Default true. |
scrapeContacts | bool | Website crawl for email + phone + social. |
scrapeSocialMediaProfiles | object | Which networks to keep. Enabling any turns enrichment on. |
verifyLeadsEnrichmentEmails | bool | MX-record check per extracted email. |
placeMinimumStars | enum | Minimum average rating. |
categoryFilterWords | string[] | Keep only places whose Google category contains one of these words. |
searchMatching | enum | all / only_includes / only_exact on the place title. |
website | enum | allPlaces / withWebsite / withoutWebsite. |
skipClosedPlaces | bool | Drop closed places. |
maxConcurrency | int | Parallel workers per search. Default 4. |
proxyConfiguration | proxy | Apify 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:
| Field | When |
|---|---|
search_term, search_query | always |
emails | scrapeContacts and an email was found on the website |
emails_verified | verifyLeadsEnrichmentEmails |
contact_phones | contact enrichment found tel: links |
social_media | contact enrichment found profile links |
enrichment_source | set 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
gridCellKmandmaxCrawledPlacesPerSearch. - 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.