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
83
Total users
45
Monthly active users
15 minutes ago
Last modified
Categories
Share
Google Maps Scraper
Extract business data from Google Maps at scale. Get names, addresses, phone numbers, websites, ratings, reviews, opening hours, and more for any type of business in any location.
What does Google Maps Scraper do?
This Actor searches Google Maps for businesses matching your query and extracts structured data for each result. It uses grid-based search for comprehensive coverage, finding businesses that don't appear in standard search results.
No browser required — uses Google Maps' internal APIs directly for fast, efficient extraction.
Features
- Comprehensive data: name, address, phone, website, rating, reviews, hours, categories, coordinates, and more
- Grid-based search: covers entire areas systematically, not just the first page of results
- Scale: extract hundreds or thousands of businesses per run
- Place details: optionally fetch full business details including opening hours and amenities
- Reviews: optionally extract customer reviews for each business
- Lead enrichment (experimental): optionally find emails and social-media profiles from each business's own website — off by default, billed separately, never changes the base scrape
- People / contacts (experimental): optionally extract the people who work at each business — name, title, their own email / phone / LinkedIn — from the business's own website
- Ad intelligence (experimental): optionally detect which businesses are actively running ads on Meta (Facebook / Instagram) and Google (Search / YouTube / Display) — a strong buy signal for agencies
Input
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
query | string | Yes | — | Search query including location, e.g. "restaurants in New York" |
maxResults | integer | No | 100 | Maximum businesses to extract (0 = unlimited) |
language | string | No | "en" | Language code for results |
zoom | integer | No | 13 | Google Maps zoom level (1-21) |
includeDetails | boolean | No | true | Fetch detailed place info (hours, phone, website) |
includeReviews | boolean | No | false | Fetch customer reviews |
reviewsLimit | integer | No | 5 | Max reviews per business |
proxyConfiguration | object | No | Apify Residential | Proxy settings — the default (Apify Residential) is recommended; leave as-is |
proxyUrl | string | No | — | Advanced: a single custom HTTP proxy URL used INSTEAD of proxyConfiguration |
Optional add-on fields (all off by default; see the sections below): includeEmails, includeSocials, emailOnly, socialOnly, onlyWithWebsite, onlyWithoutWebsite, includePersonnel, maxContactsPerBusiness, personnelMinConfidence, onlyWithPersonnel, includeMetaAds, includeGoogleAds, onlyRunningAds, adCountry.
Output
Each business in the dataset contains:
{"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:00 AM - 2:00 AM","tuesday": "10:00 AM - 2:00 AM"},"price_level": 1}
Lead enrichment (experimental add-on)
Experimental / beta. This add-on is new and under active testing. It is off by default and does not change the base scraper's behavior, output, or cost when left off. Turn it on only if you want extra contact data and are comfortable with a feature that is still being refined.
When enabled, the scraper visits each business's own website (plus its contact / about / imprint pages) and extracts:
- Emails (
includeEmails) — deduplicated and syntax-checked, and the domain must actually accept mail (MX-validated) before an email counts. - Social profiles (
includeSocials) — Facebook, Instagram, LinkedIn, X/Twitter, YouTube, TikTok, WhatsApp.
You can also filter which businesses are kept:
| Field | Type | Default | Description |
|---|---|---|---|
includeEmails | boolean | false | Find email addresses on each business website |
includeSocials | boolean | false | Find social-media profile links |
emailOnly | boolean | false | Only keep businesses for which an email was found (implies includeEmails) |
socialOnly | boolean | false | Only keep businesses for which a social profile was found (implies includeSocials) |
onlyWithWebsite | boolean | false | Only keep businesses that have a real website |
onlyWithoutWebsite | boolean | false | Only keep businesses WITHOUT a website (prospects for web/design agencies) |
Enrichment adds these fields to each output record (all are null when nothing is found, or when the add-on is off):
{"email": "hello@business.com","emails": ["hello@business.com", "sales@business.com"],"facebook": "https://facebook.com/business","instagram": "https://instagram.com/business","linkedin": null,"twitter": null,"youtube": null,"tiktok": null,"whatsapp": null,"website_reachable": true}
Enrichment runs over HTTP only (no browser), tries cheap datacenter proxies first and only escalates to residential when a site blocks it. It is billed separately, per enriched lead — a lead counts only when at least one email or social profile is actually found on the business's website.
People / contacts (experimental add-on)
Experimental / beta. Off by default; never changes the base scrape.
When includePersonnel is enabled, the scraper extracts the people who work at each business from its own website (team / about / contact pages): name, title, and their own email / phone / LinkedIn where published. Each record gains:
business_lead— an org-level contact summary (best email, all emails, phone, socials)contacts— the people found, highest-confidence first, each withname,title,email,phone,linkedin,socials,confidence,tierand thesource_urlsthey were found on
Control it with maxContactsPerBusiness (default 10), personnelMinConfidence (low keeps everything; raise to medium / high for precision), and the onlyWithPersonnel filter (only keep businesses where at least one contact was found).
Ad intelligence (experimental add-on)
Experimental / beta. Off by default; never changes the base scrape. Billed separately, per matched advertiser.
Detect which businesses are actively running ads — a strong buy signal for marketing agencies:
includeMetaAds— checks the public Meta Ad Library and reports whether the business runs Facebook / Instagram ads, withmeta_ads_running, the matched page, active-ad count, platforms, and the ads themselves as sample creatives — headline (title), ad copy (body_snippet), call-to-action, landing link, an image/video preview URL and a Meta Ad Library link per sample (meta_ads_*columns). To find the business's Facebook page for exact matching, the actor also peeks at the business website's homepage. Matching is conservative (exact Facebook page id or page URL, name, or an ad that lands on the business's own website) so unrelated advertisers are never attributed.includeGoogleAds— checks the Google Ads Transparency Center by the business's own website domain and reportsgoogle_ads_running, the advertiser, ad counts, first/last shown dates, formats, and sample creatives with a preview image and an official Transparency Center link that renders each ad (google_ads_*columns). Note: the Transparency Center does not expose the text of search ads — the per-ad link shows the rendered creative instead. Lookups retry over fresh proxies automatically when Google blocks an IP.onlyRunningAds— filter: only keep businesses currently advertising on an enabled source (if neither source is selected, both are checked).adCountry— two-letter country code for where the ads are shown (defaultUS). Applies to both sources: the Meta Ad Library search and the Google Ads Transparency Center region — set it to the business's country for accurate results outside the US (e.g.GB,DE,FR).
Usage examples
Basic search:
restaurants in New York
Specific business type:
dentists in Los Angeles, CA
International search:
hotels near Paris, France
Tips
- Include a location in your query. "plumbers in Chicago" works best, but plain phrases like "plumbers Chicago" or "coffee shops 90210" also work — the location is detected automatically. Avoid a bare category with no place ("plumbers")
- Use a proxy for reliable extraction — Google blocks datacenter IPs
- Start with a small
maxResultsto test, then scale up - Enable
includeDetailsto get phone numbers, websites, and opening hours (slightly slower) - Adjust zoom level: lower zoom (10-12) covers larger areas, higher zoom (14-17) finds more businesses in small areas
Proxy
Google Maps blocks requests from datacenter IPs. The default proxyConfiguration (Apify Residential proxy) handles this — leave it as-is for reliable extraction. Only set proxyUrl if you want to route everything through your own single HTTP proxy instead.
Limitations
- Results depend on what Google Maps returns for your query and location
- Some businesses may have incomplete data (missing phone, website, or hours)
- Rate limiting may apply for very large extractions