Google Maps B2B Leads Scraper + Verified Emails ($3/1k) avatar

Google Maps B2B Leads Scraper + Verified Emails ($3/1k)

Pricing

from $3.00 / 1,000 lead scrapeds

Go to Apify Store
Google Maps B2B Leads Scraper + Verified Emails ($3/1k)

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

Mohammad Palekar

Maintained by Community

Actor stats

0

Bookmarked

8

Total users

2

Monthly active users

16 days ago

Last modified

Share

πŸ“ Google Maps B2B Leads Scraper + Verified Emails ($3/1k)

Apify Actor Price Free Tier Live SMTP Handshake Bounce Rate Integrations

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

FeatureThis ActorStandard Google Maps ScrapersOutscraper / PhantomBuster
Price per 1,000 Leads$3.00$3.50 – $5.00$10.00 – $30.00
Free Tier Allowance100 Leads / Run10 – 25 LeadsLimited / 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%) β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
  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.
  2. 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.
  3. 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.
  4. Cloudflare Email Deobfuscation: Millions of local websites use Cloudflare to hide email addresses behind data-cfemail attributes. Our scraper decrypts them on the fly.
  5. 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.
  6. 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).
  7. 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:

  1. 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 select Other / Custom City and type any custom location worldwide.
  2. Enter Business Niche: Enter one or more categories in searchTerms (e.g., HVAC contractors, Plumbers, Roofing companies, Dental clinics).
  3. Keep 10x Lead Yield Enabled: Ensure autoExpandMetro is checked (true). The engine will automatically generate suburb queries and industry synonyms to collect hundreds of leads across the entire metropolitan area.
  4. Click "Start": The Actor launches, streams progress messages in real time, and immediately pushes each verified lead into your dataset.
  5. 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

ParameterTypeDefaultDescription
countryString (select)"US"Target country. Tunes regional business directories and search locale (US, GB, CA, AU, DE, FR, GLOBAL).
targetCityString (select)"Miami, FL"Pre-configured metro dropdown (NYC, LA, Chicago, Miami, Dallas, London, Toronto, Sydney, etc.) or CUSTOM.
customCityString""Custom city, town, or zip code when CUSTOM is selected above (e.g. Boise, ID, Manchester, UK).
searchTermsArray of Strings["HVAC contractors"]Business categories or keywords to search. Also accepts direct Google Maps URLs!
autoExpandMetroBooleantrueRecommended. Automatically splits metros into suburbs and generates keyword synonyms to bypass Google's 100-result viewport cap.
maxPlacesPerSearchInteger100Maximum number of places to collect ($0.003/lead). Set to 0 for unlimited leads.
extractContactsBooleantrueIncluded free ($0). Crawls websites for emails, phones, social links, and owner names.
verifyEmailsBooleantrue+$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.
onlyWithWebsiteBooleanfalseWhen enabled, listings without a website are excluded from output.
onlyWithEmailBooleanfalseWhen enabled, only leads with a verified deliverable email are saved.
startUrlsArray of Strings[]Direct Google Maps search links, coordinate zoom links, place URLs, or shortlinks.
locationsArray of Strings[]Additional custom cities or areas to search in addition to targetCity.
concurrencyInteger5Number 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

FieldTypeDescription
titleStringOfficial business name registered on Google Maps
categoryStringPrimary Google business category (e.g. HVAC contractor)
phoneStringFormatted international telephone number
websiteStringCanonical URL of the business website
domainStringClean website domain root (e.g. miamicoolingpros.com)
ratingNumberGoogle Maps star rating score (1.0 to 5.0)
reviewsCountIntegerTotal count of public user reviews on Google Maps
addressStringFull physical street address
cityStringCity name extracted from the listing address
stateStringState / province code extracted from the address
googleMapsUrlStringDirect permanent link to the listing on Google Maps
placeIdStringUnique Google Place ID identifier
emailStringDiscovered deliverable work or executive email address
email_statusStringDeliverability status: valid, risky, invalid
confidenceStringDiscovery source (e.g. high (owner permutation verified), website plaintext)
is_catch_allBooleanWhether the target domain is configured as a catch-all mailbox
smtp_responseStringRaw socket response code from the recipient mail server (250 OK)
owner_nameStringIdentified business owner, founder, or executive name
linkedinStringCompany or executive LinkedIn profile URL
facebookStringOfficial Facebook company page URL
instagramStringOfficial Instagram profile URL
twitterStringOfficial X / Twitter handle URL
youtubeStringOfficial YouTube channel URL
scrapedAtStringISO 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 completion
const run = await client.actor('blessiticus/google-maps-leads-scraper-with-emails').call(input);
// Fetch items from the default dataset
const { 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 ApifyClient
client = 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 results
run = 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

  1. In Clay, add an HTTP API enrichment column to your table.
  2. Select Method: POST
  3. Endpoint URL:
    https://api.apify.com/v2/acts/blessiticus~google-maps-leads-scraper-with-emails/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN
  4. 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:

EventPriceDescription
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 Allowance100 Leads / Run FreeTest 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:

  1. Leave autoExpandMetro enabled (default): The backend automatically splits the metropolitan area into surrounding municipalities and expands your niche into related synonyms.
  2. Add Custom Locations: In locations, add surrounding suburbs or postal codes (e.g. Coral Gables, FL, Fort Lauderdale, FL, Doral, FL).
  3. 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.