Google Maps Scraper — Verified Business Email Leads avatar

Google Maps Scraper — Verified Business Email Leads

Pricing

from $3.00 / 1,000 leads

Go to Apify Store
Google Maps Scraper — Verified Business Email Leads

Google Maps Scraper — Verified Business Email Leads

Returns one row per local business: MX-checked email, owner name when found, phone, website and socials. Search Google Maps by term + location, or enrich a Maps dataset you already have and skip the Maps bill. No login or cookies. Billed per row delivered.

Pricing

from $3.00 / 1,000 leads

Rating

0.0

(0)

Developer

Mohammed Samaan

Mohammed Samaan

Maintained by Community

Actor stats

0

Bookmarked

65

Total users

17

Monthly active users

11 hours ago

Last modified

Share

Find local businesses on Google Maps and get back a checked business email — not just a scraped address, one whose domain is confirmed to accept mail (MX check) and tagged with its bounce-risk class — plus phone, website, rating, address, coordinates, opening hours and social links, as one clean CSV/JSON row per business.

Already have Google Maps data? Pick that dataset in placesDatasetId (from any Google Maps scraper) and this Actor skips the Maps step entirely — you pay only for our enrichment (email, contact name, socials, website signals) on the places that have a website, not for the Maps scrape again.

Two ways to feed it:

  1. Search — give it search terms + a location and it pulls the places from Google Maps through a maintained Maps actor, then enriches them.
  2. Enrich a dataset you already have — pick any Google Maps scraper run from your account (placesDatasetId) and it skips the Maps step entirely, visiting each business website and adding checked emails and socials. No second Maps bill.

The enrichment step uses no browser and no proxies: plain HTTP requests to each business's own home / contact / about pages, then a DNS MX lookup per domain.

Who it's for

  • Cold-email agencies and SMMAs building local-business lead lists
  • SDR teams tired of cleaning scraped lists before they can send
  • Anyone pitching local businesses (web design, marketing, SaaS) who needs a contact email, not just a name and a phone number
  • Teams that already scrape Google Maps and just want the email layer added

What you get

FieldWhat it is
name / categoryBusiness name and Google Maps category
emailBest available email for the business
emailStatusvalid (domain has mail servers, named inbox) / risky-role (generic inbox like info@) / invalid (no MX)
emailSourceWhich page the email was found on
phone / websiteContact details
rating / reviewsGoogle rating and review count
address / city / country / lat / lngLocation
placeId / mapsUrlGoogle Maps identifiers (when the Maps data has them)
openingHoursFlattened hours string
facebook / instagram / linkedin / twitter / youtube / tiktokSocial profile links found on the site
allEmails / emailCountEvery email found, each tagged with its status
searchTerm / scrapedAtProvenance

Input

{
"searchTerms": ["dentist", "orthodontist"],
"location": "Austin, TX",
"maxResults": 50,
"verifyEmails": true,
"onlyWithEmail": true,
"maxEmailsPerSite": 5
}

Or, to enrich an existing Google Maps dataset (skips the Maps search):

{
"placesDatasetId": "<pick one of your datasets>",
"verifyEmails": true,
"onlyWithEmail": true
}
  • searchTerms — business types to search; location — a city or area.
  • maxResults — places per search term.
  • verifyEmails (on) — the MX check that tags each email valid / risky-role / invalid.
  • onlyWithEmail (on) — only businesses with an email are delivered and billed.
  • placesDatasetId — any dataset whose rows have a website field (compass, lukaskrivka, or this actor's own output all work).

Pricing — read this before your first run

This actor is pay-per-result: one charge per row delivered, and with onlyWithEmail on (the default) only rows with an email are delivered. The per-row price is on the Pricing tab.

In search mode the Google Maps step is a separate actor with its own price. This actor calls compass/crawler-google-places in your account, and Apify bills that run to you directly at that actor's rate (about $4 per 1,000 places on the free plan, less on paid plans) plus its compute. A run that finds 1,000 places and 350 emails therefore costs roughly the Maps actor's price for 1,000 places + this actor's price for 350 rows.

If you already have Google Maps data, use placesDatasetId and pay only for the enrichment rows.

How it compares

Most Google Maps scrapers hand you a raw list; every email here is MX-checked and tagged with a bounce-risk class before it reaches your dataset, and social links are pulled from the business site at no extra step. What this actor does not do: mailbox-level (SMTP) verification or catch-all detection — an MX check confirms the domain accepts mail, not that the exact inbox exists. Run the output through the Bulk Email Verifier if you need that.

Use with n8n / Make / Zapier / MCP

Add an Apify integration node, point it at this actor, run it with your input, then read the finished dataset back into your workflow — feed the rows straight into your CRM or outreach tool. Every input has an example value, so an AI agent can call it via the Apify MCP server without guidance.

FAQ

Does it need my own Google Maps API key? No. In search mode it runs a maintained Google Maps actor in your account; that actor's usage is billed to you by Apify separately from this actor's per-row price (see Pricing above). In dataset mode there is no Maps step at all.

What does "risky-role" mean? The domain accepts mail but the address is a generic inbox like info@ or sales@ rather than a named person — still worth having, just a lower reply rate.

Why is email sometimes null? Not every business site has a discoverable email on its home / contact / about pages, or the domain has no mail servers. With onlyWithEmail off those businesses still come through with phone, website, rating and socials.

Can I run it against a whole country? Run it per city — Google Maps results are location-bound, and splitting by city keeps runs fast and easy to re-run.

Does it respect site terms? It only visits each business's own public site pages. You are responsible for lawful use of the contact data you collect.

Send results to Notion (new, Sep 2026)

Authorize Notion once in Apify Console → Settings → API & Integrations → MCP connectors (choose Notion, sign in). Then pick that connector in Notion connector and paste the link of any Notion page in Notion page to create the table in. The first run creates a table inside that page and fills it with the Maps leads (up to 500 rows per run; the full set is always in the dataset). To keep adding to the same table on later runs, paste the table ID from the log into Existing Notion table ID. This Actor never sees your Notion login: Apify's connector proxy holds it. If the Notion step fails, your dataset results are still delivered and the reason is logged.

Use it from an AI agent (MCP)

Add this Actor to any MCP client (Claude, Cursor, VS Code) with one URL:

https://mcp.apify.com?tools=leadharbor/google-maps-verified-email-scraper

Or call it through the Apify API with an input like this:

{
"searchTerms": [
"dentist"
],
"location": "Austin, TX",
"maxResults": 20
}

Returns one row per local business: name, category, MX-checked email, phone, website, address, owner name when found, social links. Results land in the run's default dataset (JSON, CSV or Excel). No login or API key is needed for the sites it reads, and pay-per-event pricing works with Apify's x402 agent payments.

Changelog

28 Sep 2026 — More place fields (state, postal code, all categories, price level); works with a dataset alone; optional Notion output; MCP agent section. Plus 5 public example tasks with their own pages.

More from leadharbor


Using this actor? A quick review helps other buyers find it: google-maps-verified-email-scraper

New output fields (Sep 2026)

FieldWhat it is
contactName, contactRoleThe owner / founder / principal when the website clearly names one (e.g. "Dr Adil Sarwar, Founder"). An AI model only selects among names that appear on the site — it never invents one. Empty when the site doesn't name anyone.
siteLooksOutdated, siteCopyrightYearCopyright year in the footer; true when it is 3+ years old — a common sign of a neglected site.
siteMobileFriendlyWhether the homepage declares a mobile viewport.
siteHasAnalytics, siteHasFacebookPixel, siteCmsGoogle Analytics / Tag Manager present, Meta pixel present, and the site builder (WordPress, Wix, Squarespace, Shopify, Webflow).

When a site lists several emails, the returned email is the business's own main inbox — form placeholders (example@mysite.com, you@company.com), platform addresses and jobs inboxes are no longer picked.