Google Maps B2B Leads Scraper + Verified Emails ($3/1k)
Pricing
from $3.00 / 1,000 lead scrapeds
Google Maps B2B Leads Scraper + Verified Emails ($3/1k)
Scrape Google Maps businesses with phone numbers, websites, social profiles, owner names, and live SMTP-verified work emails. 0% bounce rate guarantee ($3 per 1,000 leads). Save 70%+ vs Apollo & Hunter.
Pricing
from $3.00 / 1,000 lead scrapeds
Rating
5.0
(21)
Developer
Mohammad Palekar
Maintained by CommunityActor stats
0
Bookmarked
8
Total users
2
Monthly active users
16 days ago
Last modified
Categories
Share
π Google Maps B2B Leads Scraper + Verified Emails ($3/1k)
Extract high-converting B2B local business leads from Google Maps complete with Business Name, Category, Phone, Address, Website, Social Links (LinkedIn, Facebook, Instagram), Owner / Founder Names, and Live SMTP-Verified Work Emails.
[!NOTE] π Free Tier Included: Extract up to 100 leads per run completely free on trial accounts to test our multi-vector email discovery and live verification with zero upfront commitment!
Stop wasting hours downloading Google Maps places only to discover that 80% have no emails or bounce when you launch cold outreach. This Actor combines high-speed Google Maps extraction with an automatic multi-vector website contact crawler and real-time SMTP mailbox verification (250 OK) so every single lead is 100% campaign-ready out of the box.
[!TIP] Already have an existing lead list to clean or find emails for?
- Email Verifier Pro: Clean bulk email lists with live SMTP handshakes at $0.85 per 1,000 emails.
- B2B Work Email Finder: Find verified work emails from prospect Names & Company Domains at $5 per 1,000 verified emails found.
Table of Contents
- Features
- Use Cases
- How It Works
- Step-by-Step Guide
- Input Configuration
- Output Data & Schema
- Integrations & API Examples
- Pricing & Free Tier
- Frequently Asked Questions (FAQ)
- Support & Feedback
Features
| Feature | This Actor | Standard Google Maps Scrapers | Outscraper / PhantomBuster |
|---|---|---|---|
| Price per 1,000 Leads | $3.00 | $3.50 β $5.00 | $10.00 β $30.00 |
| Free Tier Allowance | 100 Leads / Run | 10 β 25 Leads | Limited / Trial only |
| Live SMTP Mailbox Verification | β Real 250 OK Check | β None (or regex guess) | β Stale database |
| 10x Lead Yield Engine | β Auto Metro Expansion | β Trapped at 100 cap | β Manual suburb lists |
| Multi-Vector Owner Detection | β 5-Stage Engine | β No | β Add-on fee |
| Cloudflare Email Deobfuscation | β
Decodes __cf_email__ | β Fails / Misses | β Fails |
| Fallback Executive Inboxes | β
Tests owner@, office@ | β Gives up | β No |
| Permutations for Missing Emails | β Generated & Verified | β Gives up | β No |
| Social Media Profiles | β LinkedIn, FB, IG, X, YT | β Basic or none | β Extra credits |
| Bounce Rate for Cold Email | < 1% Guaranteed | β 15% β 35% Bounces | β 10% β 20% Bounces |
| Extraction Latency | β‘ ~15ms DOM parser | β Slow 4GB RAM runs | β Slow batch queues |
Use Cases
- Cold Email Outreach & B2B Sales Prospecting: Generate laser-targeted prospect lists of local business owners with verified email addresses that will never bounce or burn your sending domain reputation.
- Local Agency Client Acquisition: Digital marketing, SEO, web design, and advertising agencies can easily find local businesses with low reviews, missing websites, or outdated web presences.
- Recruitment & Staffing: Target medical practices, dental clinics, accounting firms, and legal offices to reach decision-makers directly.
- CRM Enrichment & Directory Building: Populate your HubSpot, Salesforce, Pipedrive, or custom directories with complete business listings, phone numbers, addresses, and social links.
- Market Research & Competitor Mapping: Analyze competitor density, service offerings, review counts, and ratings across entire metropolitan areas.
How It Works
Most Google Maps scrapers only do a naive regex search on the homepage HTML. If an email is hidden behind Cloudflare, obfuscated, or replaced with a contact form, competitors give up.
Our Actor uses an end-to-end Multi-Vector Intelligence Pipeline to achieve industry-leading email yield and decision-maker accuracy:
Google Maps Places Extracted (~15ms DOM Parser)ββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββ STAGE 1: MULTI-VECTOR DISCOVERY ENGINE βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€β 1. Business Title Mining: "Dave's AC" β "Dave" ββ 2. Schema.org JSON-LD: Parses "founder", "employee" ββ 3. Cloudflare Decryptor: Unlocks __cf_email__ tags ββ 4. LinkedIn Link Mining: /in/{slug} β Executive Name ββ 5. Deep Subpages: /team, /about, /doctors, /contact βββββββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββ STAGE 2: DECISION-MAKER PERMUTATION ENGINE βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€β When owner/founder is found: ββ Generates corporate email permutations: ββ [dave@domain.com, d.miller@domain.com, etc.] βββββββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββ STAGE 3: EXECUTIVE INBOX RESCUE (NO EMAIL ON SITE)βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€β If site only has a contact form (no plaintext email):ββ Tests standard SMB inboxes live: ββ [owner@, contact@, info@, office@, service@, admin@] βββββββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββββββββββββββββββββ STAGE 4: LIVE 250 OK SMTP MAILBOX HANDSHAKE βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€β Real-time socket check directly with mail exchanger: ββ - Confirms recipient mailbox physically exists ββ - Detects catch-all & disposable domains ββ - Zero bounce rate guarantee (< 1%) βββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
- High-Speed DOM Extraction: Evaluates Google Maps place cards directly in the browser runtime in ~15ms per batch, extracting titles, categories, reviews, phones, addresses, and website URLs.
- Business Title Entity Mining: Local service businesses frequently incorporate the founder's name in their title (
Dave's Heating and Cooling,Dr. Sarah Jenkins Orthodontics,Carlos Mendez Plumbing). Our NLP parser extracts the executive's name automatically. - Schema.org JSON-LD Structured Data: Modern WordPress, Wix, and Squarespace sites embed structured JSON-LD with
@type: "LocalBusiness","founder", and"employee"tags. We parse these structured signals with zero false positives. - Cloudflare Email Deobfuscation: Millions of local websites use Cloudflare to hide email addresses behind
data-cfemailattributes. Our scraper decrypts them on the fly. - Personal LinkedIn Profile Link Mining: When a company links to their executive's personal profile (
linkedin.com/in/{slug}), we parse the slug to extract the verified executive name. - Smart Priority Subpage Crawling: We crawl up to 4 high-priority subpages scored by link priority (
/team,/about-us,/our-team,/leadership,/doctors,/staff,/contact,/privacy). - Executive Inbox Rescue Engine: When a business uses a contact form and never writes their email in plaintext, our engine tests high-priority executive inboxes (
owner@,contact@,info@,office@,service@) live via SMTP. If an active mailbox exists, we capture it instantly!
Step-by-Step Guide
Follow these steps to extract your first lead list in under 2 minutes:
- Select Target Country & City: Use the pre-populated dropdowns to pick your target country (e.g.
United States πΊπΈ) and major metro area (e.g.Miami, FL), or selectOther / Custom Cityand type any custom location worldwide. - Enter Business Niche: Enter one or more categories in
searchTerms(e.g.,HVAC contractors,Plumbers,Roofing companies,Dental clinics). - Keep 10x Lead Yield Enabled: Ensure
autoExpandMetrois checked (true). The engine will automatically generate suburb queries and industry synonyms to collect hundreds of leads across the entire metropolitan area. - Click "Start": The Actor launches, streams progress messages in real time, and immediately pushes each verified lead into your dataset.
- Download Your Data: Once complete, export your clean lead list in CSV, Excel, JSON, or XML format from the Dataset tab, or push leads directly to your CRM via Webhook.
Input Configuration
Parameter Reference
| Parameter | Type | Default | Description |
|---|---|---|---|
country | String (select) | "US" | Target country. Tunes regional business directories and search locale (US, GB, CA, AU, DE, FR, GLOBAL). |
targetCity | String (select) | "Miami, FL" | Pre-configured metro dropdown (NYC, LA, Chicago, Miami, Dallas, London, Toronto, Sydney, etc.) or CUSTOM. |
customCity | String | "" | Custom city, town, or zip code when CUSTOM is selected above (e.g. Boise, ID, Manchester, UK). |
searchTerms | Array of Strings | ["HVAC contractors"] | Business categories or keywords to search. Also accepts direct Google Maps URLs! |
autoExpandMetro | Boolean | true | Recommended. Automatically splits metros into suburbs and generates keyword synonyms to bypass Google's 100-result viewport cap. |
maxPlacesPerSearch | Integer | 100 | Maximum number of places to collect ($0.003/lead). Set to 0 for unlimited leads. |
extractContacts | Boolean | true | Included free ($0). Crawls websites for emails, phones, social links, and owner names. |
verifyEmails | Boolean | true | +$0.002 per verified email found. Executes live SMTP handshakes (250 OK) to guarantee 0% bounce rate. Toggle off if you only want scraped leads. |
onlyWithWebsite | Boolean | false | When enabled, listings without a website are excluded from output. |
onlyWithEmail | Boolean | false | When enabled, only leads with a verified deliverable email are saved. |
startUrls | Array of Strings | [] | Direct Google Maps search links, coordinate zoom links, place URLs, or shortlinks. |
locations | Array of Strings | [] | Additional custom cities or areas to search in addition to targetCity. |
concurrency | Integer | 5 | Number of business websites to crawl and verify in parallel (1 to 15). |
Example 1: Easy Setup (Country & City Dropdown)
{"country": "US","targetCity": "Miami, FL","searchTerms": ["HVAC contractors"],"autoExpandMetro": true,"maxPlacesPerSearch": 100,"extractContacts": true,"verifyEmails": true}
Example 2: Direct Google Maps URLs
Paste exact Google Maps links directly into startUrls (supports coordinate zoom URLs, search links, and place links):
{"startUrls": ["https://www.google.com/maps/search/HVAC+contractors/@25.7616798,-80.1917902,12z","https://www.google.com/maps/search/plumbers+in+downtown+miami/","https://maps.app.goo.gl/sampleShortlink"],"maxPlacesPerSearch": 100,"extractContacts": true,"verifyEmails": true}
Output Data & Schema
All scraped leads are streamed into the default dataset. You can view them in the Apify Console as an interactive table, or download the full export as CSV, Excel (XLSX), JSON, HTML, or XML.
Output Field Reference
| Field | Type | Description |
|---|---|---|
title | String | Official business name registered on Google Maps |
category | String | Primary Google business category (e.g. HVAC contractor) |
phone | String | Formatted international telephone number |
website | String | Canonical URL of the business website |
domain | String | Clean website domain root (e.g. miamicoolingpros.com) |
rating | Number | Google Maps star rating score (1.0 to 5.0) |
reviewsCount | Integer | Total count of public user reviews on Google Maps |
address | String | Full physical street address |
city | String | City name extracted from the listing address |
state | String | State / province code extracted from the address |
googleMapsUrl | String | Direct permanent link to the listing on Google Maps |
placeId | String | Unique Google Place ID identifier |
email | String | Discovered deliverable work or executive email address |
email_status | String | Deliverability status: valid, risky, invalid |
confidence | String | Discovery source (e.g. high (owner permutation verified), website plaintext) |
is_catch_all | Boolean | Whether the target domain is configured as a catch-all mailbox |
smtp_response | String | Raw socket response code from the recipient mail server (250 OK) |
owner_name | String | Identified business owner, founder, or executive name |
linkedin | String | Company or executive LinkedIn profile URL |
facebook | String | Official Facebook company page URL |
instagram | String | Official Instagram profile URL |
twitter | String | Official X / Twitter handle URL |
youtube | String | Official YouTube channel URL |
scrapedAt | String | ISO 8601 UTC timestamp of when the lead was extracted |
Sample JSON Output
{"title": "Miami Cooling & Heating Pros","category": "HVAC contractor","phone": "+1-305-555-0199","website": "https://miamicoolingpros.com","domain": "miamicoolingpros.com","rating": 4.9,"reviewsCount": 184,"address": "1200 Brickell Ave, Miami, FL 33131","city": "Miami","state": "FL","googleMapsUrl": "https://www.google.com/maps/place/...","placeId": "ChIJN1t_tDeuEmsRUsoyG83frY4","searchQuery": "HVAC contractors in Miami, FL","email": "john.miller@miamicoolingpros.com","email_status": "valid","confidence": "high (owner permutation verified)","is_catch_all": false,"smtp_response": "250 OK β Mailbox exists","owner_name": "John Miller","linkedin": "https://www.linkedin.com/company/miami-cooling-pros","facebook": "https://www.facebook.com/miamicoolingpros","instagram": "https://www.instagram.com/miamicoolingpros","twitter": "","youtube": "","scrapedAt": "2026-10-05T12:00:00.000Z"}
Integrations & API Examples
You can run this Actor programmatically or plug it directly into automated outbound workflows.
Node.js / JavaScript SDK
Install the official client:
$npm install apify-client
import { ApifyClient } from 'apify-client';const client = new ApifyClient({token: 'YOUR_APIFY_TOKEN',});const input = {country: 'US',targetCity: 'Miami, FL',searchTerms: ['HVAC contractors'],autoExpandMetro: true,maxPlacesPerSearch: 50,extractContacts: true,verifyEmails: true,};// Run the Actor and wait for completionconst run = await client.actor('blessiticus/google-maps-leads-scraper-with-emails').call(input);// Fetch items from the default datasetconst { items } = await client.dataset(run.defaultDatasetId).listItems();for (const lead of items) {console.log(`π’ ${lead.title} | π ${lead.phone} | βοΈ ${lead.email} (${lead.email_status})`);}
Python SDK
Install the official client:
$pip install apify-client
from apify_client import ApifyClientclient = ApifyClient("YOUR_APIFY_TOKEN")run_input = {"country": "US","targetCity": "Miami, FL","searchTerms": ["HVAC contractors"],"autoExpandMetro": True,"maxPlacesPerSearch": 50,"extractContacts": True,"verifyEmails": True,}# Run the Actor and stream resultsrun = client.actor("blessiticus/google-maps-leads-scraper-with-emails").call(run_input=run_input)for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(f"π’ {item.get('title')} | π {item.get('phone')} | βοΈ {item.get('email')} ({item.get('email_status')})")
Apify CLI & cURL (REST API)
Run directly via cURL:
curl -X POST "https://api.apify.com/v2/acts/blessiticus~google-maps-leads-scraper-with-emails/runs?token=YOUR_APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"country": "US","targetCity": "Miami, FL","searchTerms": ["Dentists"],"maxPlacesPerSearch": 25,"extractContacts": true,"verifyEmails": true}'
Clay.com Table Integration
- In Clay, add an HTTP API enrichment column to your table.
- Select Method:
POST - Endpoint URL:
https://api.apify.com/v2/acts/blessiticus~google-maps-leads-scraper-with-emails/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN
- Request Body:
{"country": "US","targetCity": "Miami, FL","searchTerms": ["Dentists"],"maxPlacesPerSearch": 25,"extractContacts": true,"verifyEmails": true}
Pricing & Free Tier
This Actor operates on transparent Pay-Per-Event (PPE) pricing. You only pay for what you extract:
| Event | Price | Description |
|---|---|---|
| Lead Scraped | $0.003 / lead ($3.00 per 1,000) | Charged per business place extracted from Google Maps. |
| Website & Social Scraping | $0.00 (Included Free) | Crawls website for emails, phone numbers, and social links at no extra cost. |
| Email Found & Verified | +$0.002 / email ($2.00 per 1,000) | Charged only when a deliverable work email is found and verified via live SMTP (250 OK). |
| Free Tier Allowance | 100 Leads / Run Free | Test email yield, data accuracy, and delivery with zero upfront commitment. |
[!NOTE] Store Discounts: Additional tiered discounts are automatically applied if you are subscribed to a paid Apify plan.
Frequently Asked Questions (FAQ)
How do you extract emails when a business only has a contact form?
Most competitors give up when there is no mailto: link on the homepage. Our Actor extracts founder names from business titles (Dave's Heating β Dave), parses Schema.org JSON-LD for employees/founders, and if no email is written in plaintext, our Executive Rescue Engine tests standard executive mailboxes (owner@, contact@, info@, office@, service@) live via SMTP. If an active mailbox exists, we capture it instantly!
How does the Free Tier work?
Every user on the Apify platform can extract up to 100 leads per run completely free on trial runs! This gives you plenty of free quota to test email yield, data accuracy, and verify deliverability before scaling up.
What does 250 OK SMTP Verification mean?
We connect directly to the business mail exchanger and perform a handshake protocol (HELO / MAIL FROM / RCPT TO). If the mail server replies 250 OK, the mailbox physically exists. If it replies 550 User not found, we discard it so your outreach emails never bounce.
How do I bypass Google's 100-result viewport limit to get 1,000+ leads?
Google Maps enforces a platform-level ceiling: for any single search query or map viewport, Google only displays a maximum of ~100β120 places before displaying "You've reached the end of the list". To extract 500 to 2,000+ leads across a metro area:
- Leave
autoExpandMetroenabled (default): The backend automatically splits the metropolitan area into surrounding municipalities and expands your niche into related synonyms. - Add Custom Locations: In
locations, add surrounding suburbs or postal codes (e.g.Coral Gables, FL,Fort Lauderdale, FL,Doral, FL). - Use Direct Zoom URLs: Zoom into specific districts on Google Maps and paste those URLs into
startUrls.
Can I scrape multiple cities at once?
Yes! Simply provide multiple locations in the locations input (e.g. Miami, FL, Orlando, FL, Tampa, FL). The Actor automatically iterates through each location and aggregates all leads into a single dataset.
Can I scrape without verifying emails?
Yes. If you only want local business information (names, phones, addresses, ratings, websites, and social links) and do not need SMTP mailbox validation, set verifyEmails: false. You will only be billed the base rate of $0.003 per lead ($3/1k).
Support & Feedback
If you encounter any issues, need custom adaptations, or have questions about scaling your lead generation workflows:
- Submit an issue on the Issues tab in the Apify Console.
- Leave a review or feedback on the Actor's Apify Store page.
- Our team monitors runs and updates scraping algorithms regularly to keep up with Google Maps UI updates.