Google Maps Scraper — Places, Leads & Contact Data
Pricing
from $4.00 / 1,000 results
Google Maps Scraper — Places, Leads & Contact Data
Scrape Google Maps places by search query. Returns name, full address, latitude/longitude, phone, website, rating, review count, category, price level, neighborhood, timezone, place ID and CID. HTTP-only — no browser, fast and cheap.
Pricing
from $4.00 / 1,000 results
Rating
0.0
(0)
Developer
yossef Nagy
Maintained by CommunityActor stats
0
Bookmarked
84
Total users
46
Monthly active users
14 hours ago
Last modified
Categories
Share
Google Maps Scraper — Places, Leads, Reviews & Contact Data
Extract business data from Google Maps at scale — names, addresses, phone numbers, websites, ratings, reviews, photos, opening hours, amenities, coordinates and more — for any type of business in any location. No browser required: the Actor talks to Google Maps' internal endpoints directly over HTTP, so it's fast and cheap.
It also ships powerful, optional layers: precise targeting (batch queries, map URLs, or a drawn area), deep reviews, complete place data, plus experimental lead enrichment (emails, socials, people/contacts) and ad intelligence (is the business advertising on Meta / Google right now?).
What does it do?
- Searches Google Maps for your query and covers the whole area with a grid search, finding businesses that a single search page misses.
- Extracts a clean record for every business — the full place profile.
- Optionally enriches each business with deeper place data, full reviews, website contact data, the people who work there, and live ad-spend signals.
Features
- 🗺️ Comprehensive place data — name, address, phone, website, rating, review count, category list, coordinates, opening hours, price level, photos, amenities, Plus Code, permanently-closed status.
- 🎯 Precise targeting — search by a plain query, a batch of queries, Google Maps URLs, or a custom area (lat/lng + radius, or a GeoJSON polygon).
- ⭐ Deep reviews — review text, rating, date, author, owner responses, reviewer stats, language, review photos, plus rating / keyword filters.
- 📩 Lead enrichment (experimental) — emails (MX-validated) and social profiles harvested from each business's own website.
- 👤 People / contacts (experimental) — the actual people at a business with their own name, title, email, phone and LinkedIn.
- 📣 Ad intelligence (experimental) — detect which businesses are actively running ads on Meta (Facebook/Instagram) and Google (Search/YouTube/Display), with sample creatives.
- ⚡ No browser — pure HTTP, residential proxy by default, automatic IP rotation and retry; built to keep running against Google's defenses.
Quick start
Just enter what you'd type in the Google Maps search box — include the location:
restaurants in New York
dentists in Miami, FL
coffee shops 90210
That's it. Everything else has a sensible default. Turn on the optional layers below only when you need them.
Targeting (how to choose what to scrape)
You can target in four ways — use whichever fits:
| Input | Use it for |
|---|---|
query | A single search, e.g. plumbers in Chicago. The location is auto-detected. |
searchQueries | A batch of searches in one run, e.g. ["dentists in Miami", "dentists in Orlando"]. Results are de-duplicated across queries. |
startUrls | Direct Google Maps URLs (place or search URLs). |
customGeolocation | A custom area — either a point + radius { "lat": 25.77, "lng": -80.19, "radiusMeters": 1500 } or a GeoJSON Polygon / MultiPolygon (coordinates in [lng, lat] order). |
If you provide an advanced targeting input you can leave query empty.
Output
Each business is one dataset item. Base fields (always present when Include Place Details is on):
{"name": "Joe's Pizza","address": "7 Carmine St, New York, NY 10014","phone": "+1 212-366-1182","website": "https://www.joespizzanyc.com","rating": 4.5,"reviews_count": 12847,"category": "Pizza restaurant","categories": ["Pizza restaurant", "Italian restaurant"],"latitude": 40.7304,"longitude": -74.0022,"place_id": "ChIJr3k0v6VZwokRPCxBJnIcdTA","google_maps_url": "https://www.google.com/maps/place/?q=place_id:ChIJr3k0v6VZwokRPCxBJnIcdTA","hours": { "monday": "10 AM-2 AM", "tuesday": "10 AM-2 AM" },"price_level": "$10-20","photos": ["https://lh3.googleusercontent.com/..."],"amenities": ["Outdoor seating", "Takeout", "Wheelchair accessible entrance"],"plus_code": "76QXQR66+RC"}
Additional fields appear when the matching option is enabled: reviews, permanently_closed, popular_times, found_via (which target produced the row), the lead-enrichment columns (email, emails, facebook … whatsapp, website_reachable), the people columns (business_lead, contacts), and the ad-intelligence columns (meta_ads_*, google_ads_*). Anything not found is null — the base scrape is never affected.
Input reference
Results & detail
| Field | Type | Default | Description |
|---|---|---|---|
maxResults | integer | 100 | Max businesses to extract (0 = unlimited). |
language | string | en | Two-letter result language (Google hl). |
zoom | integer | 13 | Search granularity (1–21). Lower = wider area, higher = more detail. |
includeDetails | boolean | true | Fetch full place details (hours, phone, website, price level, photos…). |
Complete place data
| Field | Type | Default | Description |
|---|---|---|---|
includePhotos | boolean | true | Include up to 10 photo URLs per place. |
includePlaceExtras | boolean | true | Include amenities, Plus Code and permanently-closed status. |
includePopularTimes | boolean | false | Include the weekly popular-times histogram when available (experimental). |
Reviews
| Field | Type | Default | Description |
|---|---|---|---|
includeReviews | boolean | false | Extract reviews for each business. |
reviewsLimit | integer | 5 | Max reviews per business (up to 1000). |
minReviewRating | integer | 0 | Keep only reviews rated ≥ this (1–5; 0 = off). |
reviewKeyword | string | — | Keep only reviews whose text contains this keyword. |
reviewsSort | select | newest | newest or relevant. |
Each review includes author, rating, date, text, review_id, author_photo, plus (when present) owner_response_text, owner_response_date, reviewer_review_count, reviewer_is_local_guide, review_language and review_images.
Lead enrichment (experimental add-on)
Visits each business's own website (plus contact/about/imprint pages) to extract contact data. Off by default; never changes the base scrape.
| Field | Type | Default | Description |
|---|---|---|---|
includeEmails | boolean | false | Find email addresses (deduplicated and MX-validated). |
includeSocials | boolean | false | Find social profiles (Facebook, Instagram, LinkedIn, X/Twitter, YouTube, TikTok, WhatsApp). |
emailOnly | boolean | false | Keep only businesses with an email (implies includeEmails). |
socialOnly | boolean | false | Keep only businesses with a social profile (implies includeSocials). |
onlyWithWebsite | boolean | false | Keep only businesses that have a real website. |
onlyWithoutWebsite | boolean | false | Keep only businesses without a website (prospects for web/design agencies). |
maxPagesPerSite | integer | 4 | Advanced: max pages crawled per website (1–10). |
People / contacts (experimental add-on)
| Field | Type | Default | Description |
|---|---|---|---|
includePersonnel | boolean | false | Extract the people at each business (name, title, their own email/phone/LinkedIn). |
maxContactsPerBusiness | integer | 10 | Max contacts per business (highest-confidence first). |
personnelMinConfidence | select | low | Drop contacts below this tier (low/medium/high). |
onlyWithPersonnel | boolean | false | Keep only businesses with at least one contact. |
Each business gains business_lead (org-level email/phone/socials) and contacts[] (people with name, title, email, phone, linkedin, confidence, tier, source_urls).
Ad intelligence (experimental add-on)
| Field | Type | Default | Description |
|---|---|---|---|
includeMetaAds | boolean | false | Check the Meta Ad Library — is the business running Facebook/Instagram ads? With sample creatives. |
includeGoogleAds | boolean | false | Check the Google Ads Transparency Center — is it running Search/YouTube/Display ads? |
onlyRunningAds | boolean | false | Keep only businesses currently running ads. |
adCountry | string | US | Two-letter country code for where the ads are shown (applies to both sources). |
Proxy
| Field | Type | Default | Description |
|---|---|---|---|
proxyConfiguration | object | Apify Residential | Recommended — Google blocks datacenter IPs on Maps. Leave as-is. |
proxyUrl | string | — | Advanced: a single custom HTTP proxy used instead of Apify Proxy. |
Recipes
Web-design leads (businesses with no website):
{ "query": "restaurants in Austin, TX", "onlyWithoutWebsite": true, "includePersonnel": true }
Warm leads — businesses advertising right now, with their contacts:
{ "query": "dentists in Miami, FL", "includeMetaAds": true, "includeGoogleAds": true,"onlyRunningAds": true, "includeEmails": true, "includePersonnel": true }
Reputation / review mining (5★ reviews mentioning a topic):
{ "query": "hotels in Paris", "includeReviews": true, "reviewsLimit": 50,"minReviewRating": 5, "reviewKeyword": "breakfast" }
Whole-area sweep with a custom radius:
{ "query": "gyms", "customGeolocation": { "lat": 34.0522, "lng": -118.2437, "radiusMeters": 5000 } }
Tips
- Include a location in your query (
plumbers in Chicago); plain phrases likeplumbers Chicagoorcoffee 90210also work. - Keep the residential proxy — Google blocks datacenter IPs on Maps search.
- Start with a small
maxResultsto test, then scale up. - The optional enrichment / ad-intelligence layers add run time and are off by default — they never change the base scrape.
Limitations
- Results depend on what Google Maps returns for your query and location; some businesses have incomplete data.
popular_timesis experimental and not available for every place.- The Google Ads Transparency Center does not expose the text of search ads (only creative previews/metadata).
- For ad lookups outside the US, set
adCountryto the business's country (e.g.GB,DE) for accurate results.