Google Maps Leads & Email Scraper avatar

Google Maps Leads & Email Scraper

Pricing

from $4.00 / 1,000 place scrapeds

Go to Apify Store
Google Maps Leads & Email Scraper

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

Bruno

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

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 — when true (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

  1. 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 until maxResults is reached or it stops growing (Google lazy-loads results as you scroll).
  2. For each result, it opens the business's own Maps page and reads its real data-item-id fields (address, phone, website) plus name, category, rating, review count, opening hours, and the lat/lng embedded in the page URL.
  3. Enrichment (if enrichContacts): opens the business website in a fresh browser tab (same proxy), scans mailto: links and page HTML for emails (filtered against tracking/CDN/placeholder domains — never asset filenames), wa.me / api.whatsapp.com links 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 BLOCKED with 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, emails comes back empty and contactEnrichmentError explains why.
  • Fields depend on Google's current DOM structure (data-item-id attributes); if Google changes markup, affected fields fall back to null rather 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.