B2B Google Maps Lead Scraper
Pricing
from $0.01 / 1,000 results
B2B Google Maps Lead Scraper
Scrape B2B leads from Google Maps with phone, email, social links, ratings, reviews, and coordinates. Network-interception powered, proxy-ready, streaming output.
Pricing
from $0.01 / 1,000 results
Rating
0.0
(0)
Developer
Riad Hossain
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
10 days ago
Last modified
Categories
Share
Extract verified B2B leads from Google Maps — business name, phone, website, emails, social profiles, ratings, reviews, and GPS coordinates — in a single high-throughput Actor. Network-interception first, with graceful DOM fallback when Google changes its UI.
What you get
For every business matching your query, the Actor returns a structured record:
| Field | Always returned | Notes |
|---|---|---|
business_name | ✅ | Full business name |
category | ✅ | Primary Google Maps category (Dental clinic, Plumber, etc.) |
address | ✅ | Full + parsed street / city / state / postal_code / country |
phone | ✅ | Direct phone line when public |
website | ✅ | Business homepage URL |
rating & review_count | ✅ | Google Maps aggregate |
location.lat / lng | ✅ | GPS coordinates |
place_id | ✅ | Google Maps ChIJ... identifier — useful for de-duplication |
emails | extract_depth: full | Generic (info@, contact@) and personal inboxes, classified |
social_links | extract_depth: full | Facebook, LinkedIn, Instagram, Twitter |
All results are streamed directly to the dataset — no in-memory batching, so you can pull 5,000 leads in one run without exhausting RAM.
Why this scraper is faster than DOM-only scrapers
Google Maps renders hundreds of DOM nodes per card, and Google rewrites the DOM tree on every UI redesign — selectors break weekly. Instead of fighting the DOM, this Actor intercepts the internal /maps/rpc/ JSON endpoints that Google itself uses to populate the page. The result:
- 3–5× faster than selector-based scrapers on the same query
- Resistant to UI redesigns — the RPC schema is far more stable than the DOM
- Falls back to DOM parsing automatically when interception yields nothing, so the Actor keeps working even if Google changes its protocol
How much does it cost to scrape Google Maps?
Pricing is pay-per-event — you only pay for what you scrape.
| Event | Free tier | Paid tier | Triggered when |
|---|---|---|---|
place-scraped | $0.004 | $0.003 | One business card is fully scraped |
contact-scraped | $0.002 | $0.002 | Phone or website is present on the listing |
lead-enriched | $0.10 | $0.005 | Email or social link extracted (only with extract_depth: full) |
Typical budgets:
- 1,000 places, basic depth → ~$4
- 1,000 places, full enrichment with emails → ~$5–$10 (depending on how many listings publish emails)
- 10,000 places, basic depth → ~$40
Apify also bills a flat apify-default-dataset-item event (~$0.0001) per row written to the dataset.
Tutorial: scrape 100 dental clinics in Houston
- Open the Actor → click Try for free (Apify gives you $5 monthly free credit).
- Fill in the input form:
- Search queries:
["dental clinics"] - Location:
Houston TX - Max results:
100 - Extract depth:
basic(fast) orfull(adds emails + socials) - Enrichment: toggle
extract_emails/extract_socialsif you pickedfull - Proxy: leave default (Apify's residential proxy is used automatically)
- Search queries:
- Click Start and watch the live log + dataset fill in real time.
- Export the dataset as JSON, CSV, Excel, or HTML table.
Sample input (JSON)
{"search_queries": ["dental clinics", "orthodontists"],"location": "Houston TX","max_results": 100,"extract_depth": "full","enrichment": { "extract_emails": true, "extract_socials": true },"filters": { "min_rating": 4.0, "min_reviews": 20, "has_website": true }}
Sample output (one lead)
{"place_id": "ChIJh2YNot3AQiYRvK_QxGTBm0Q","business_name": "Bright Smile Dental Houston","category": "Dental clinic","address": {"full": "7700 Main St, Houston, TX 77025, USA","street": "7700 Main St","city": "Houston","state": "TX","postal_code": "77025","country": "USA"},"contact": {"phone": "+1-713-555-0142","website": "https://www.brightsmilehouston.com","emails": [{ "email": "hello@brightsmilehouston.com", "type": "generic" }],"social_links": {"facebook": "https://facebook.com/brightsmilehouston","instagram": "https://instagram.com/brightsmilehouston"}},"metrics": { "rating": 4.7, "review_count": 213 },"location": { "lat": 29.7189, "lng": -95.3912 },"scraped_at": "2026-08-28T12:04:33.401Z"}
Tips for best results
- Always enable Apify's proxy (
proxy_config.use_apify_proxy: true) for production runs. Google rate-limits unproxied Maps scraping within ~50 results. - Use
extract_depth: 'full'only when you actually need emails — it adds 1–3 seconds per lead because the Actor visits each business's homepage. - Batch by city, not by state.
["dental clinics"] + "Houston TX"gives you ~500 unique leads;["dental clinics"] + "Texas"caps at the same ~500 because Google de-duplicates by proximity. - Add filters to cut noise:
min_rating: 4.0andmin_reviews: 20will drop brand-new and one-star businesses from your dataset. - For >1,000 leads, split into multiple queries (by neighborhood or category) and run them as separate Apify tasks.
FAQ
Will Google block me?
Apify's residential proxy rotates IPs on every request, so blocking is rare. If a particular query returns zero results, the Actor automatically retries once with a different proxy session.
Can I scrape reviews too?
Not in this version — only the aggregate rating and review_count. A reviews-scraping endpoint is on the roadmap.
How current is the data?
Google Maps listings update daily; the Actor returns whatever Google has live at the moment of scraping. The scraped_at field gives you an ISO-8601 timestamp per lead.
Is this legal?
Scraping publicly available business contact info for B2B outreach is generally permitted in most jurisdictions, but you should consult your legal counsel and respect Google's Terms of Service. The Actor includes built-in filters to skip listings without websites (signals a business that does not want to be contacted digitally).
I need >50,000 leads — can this scale?
Yes. Run the Actor with max_results: 5000 per query, split into ~10 separate Apify runs in parallel. Each run uses its own proxy session, so they don't interfere.
Support
Found a bug or want a feature? Open an issue on the Actor's Apify Console page → Issues tab, or contact the author via Apify Store. We respond within 24 hours on business days.
Use cases
- B2B sales prospecting — build lists of qualified leads (e.g. all dental clinics in Texas with 4+ star ratings and 50+ reviews)
- Market research — analyze competitor density, rating distribution, and category saturation by region
- SEO outreach — find local businesses with weak websites (no SSL, broken links) and pitch web dev services
- Lead enrichment — append emails and social profiles to an existing list of business names
- Recruiting — find independent businesses (restaurants, salons, clinics) and reach out about hiring needs
License & source
The Actor is closed-source on the Apify Store but uses an MIT-licensed core. For development documentation, see DEVELOPERS.md (available in the source distribution).