Google Maps Leads & Email Scraper
Pricing
from $4.00 / 1,000 place scrapeds
Google Maps Leads & Email Scraper
Scrape Google Maps businesses by search term and location: name, category, rating, reviews, address, phone, website, coordinates. Optional contact enrichment (email, social).
Pricing
from $4.00 / 1,000 place scrapeds
Rating
0.0
(0)
Developer
Bruno
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Google Maps Leads Scraper + Email Enrichment
A real headless browser (Playwright, via Crawlee's PlaywrightCrawler) drives Google Maps through an Apify RESIDENTIAL proxy to pull real business leads — then visits each business's own website with another real browser page to enrich it with emails, WhatsApp and social links. This is lead generation, not a demo: no raw-HTTP tricks against Maps (Google blocks those instantly) and no fabricated data — if a field truly isn't on the page, it comes back null; if Maps blocks the request, you get an honest error, never invented results.
Why it's useful
Google Maps is the single best public source of local-business leads (dentists, restaurants, contractors, agencies...) with a phone number and website attached. The hard, valuable part is turning that into a contactable lead — an email address, a WhatsApp number, a social handle. This Actor does both steps in one run.
Input
{"searchQueries": ["dentists in Austin", "restaurantes em Lisboa"],"maxResults": 40,"enrichContacts": true,"language": "en","timeoutSecs": 60}
searchQueries(required) — one or more Google Maps search terms. Each is searched separately.maxResults— max businesses per query (default 40). The results feed is scrolled repeatedly until this many are loaded or the feed stops growing.enrichContacts— whentrue(default), each business's website (and its/contact-style page, if one is found) is opened with a real browser page to extract emails, a WhatsApp link/number, and social links (Instagram, Facebook, LinkedIn, Twitter/X, TikTok, YouTube).language— Maps UI/results language code (en,pt-BR,es, ...).proxyConfiguration— defaults to Apify RESIDENTIAL. Datacenter proxies get blocked by Maps quickly; residential is strongly recommended.timeoutSecs— how long to wait for the results feed / each business page to render.
Output (per business)
{"searchQuery": "dentists in Austin","name": "Example Dental Studio","category": "Dentist","rating": 4.8,"reviewsCount": 312,"address": "123 Congress Ave, Austin, TX 78701","phone": "+15125550123","website": "https://exampledentalstudio.com","hours": "Monday 8 AM–5 PM | Tuesday 8 AM–5 PM | ...","lat": 30.2672,"lng": -97.7431,"mapsUrl": "https://www.google.com/maps/place/...","emails": ["hello@exampledentalstudio.com"],"whatsapp": "+15125550123","socials": { "instagram": "https://instagram.com/exampledental", "facebook": "https://facebook.com/exampledental" },"contactEnrichmentError": null}
Any field the real page didn't have comes back null / empty — never guessed.
How it works
- Maps: navigates
google.com/maps/search/<query>, dismisses the EU/UK consent wall if shown, waits for the results feed (div[role="feed"]), and scrolls it untilmaxResultsis reached or it stops growing (Google lazy-loads results as you scroll). - For each result, it opens the business's own Maps page and reads its real
data-item-idfields (address, phone, website) plus name, category, rating, review count, opening hours, and the lat/lng embedded in the page URL. - Enrichment (if
enrichContacts): opens the business website in a fresh browser tab (same proxy), scansmailto:links and page HTML for emails (filtered against tracking/CDN/placeholder domains — never asset filenames),wa.me/api.whatsapp.comlinks for WhatsApp, and anchor links for social profiles. If a same-domain "contact" link is found, it visits that too (bounded to 2 pages per site total).
Honesty / limits
- If Google serves a CAPTCHA/anti-bot challenge instead of results, the item reports
BLOCKEDwith a snippet of what was actually shown — it does not retry-and-fabricate. - If a website is down, times out, or has no public email,
emailscomes back empty andcontactEnrichmentErrorexplains why. - Fields depend on Google's current DOM structure (
data-item-idattributes); if Google changes markup, affected fields fall back tonullrather than wrong values.
⭐ Enjoying this Actor?
A quick rating/review helps others find it. Want CSV export presets, per-city batching, or CRM webhook push added? Open a ticket on the Issues tab.