Google Maps Email Extractor & Business Leads
Pricing
Pay per usage
Google Maps Email Extractor & Business Leads
Find Google Maps businesses and public website emails with source URLs, phone numbers, deduplication, role-address ranking, and honest syntax and MX-domain checks.
Pricing
Pay per usage
Rating
0.0
(0)
Developer
Ula Ula
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
1
Monthly active users
21 days ago
Last modified
Categories
Share
Turn Google Maps searches into a clean business lead list with public website emails, phone numbers, addresses, ratings, and source evidence. Enter a business category and location, run the Actor, and download the results as Excel, CSV, JSON, or through the Apify API.
Unlike email tools that return an address without context, this Google Maps email extractor records the exact public page where every email was found. It also checks email syntax and the domain's MX records without pretending that an individual mailbox was confirmed.
What you get
- One deduplicated business record per Google Place ID
- Business name, category, address, city, coordinates, phone, website, rating, review count, and Google Maps URL
- A preferred public email plus every other email found on the business website
- Source URL, page type, extraction method, and extraction timestamp for each email
- Syntax, disposable-domain, role-address, and MX-domain classification
- A run summary with coverage, email hit rate, errors, nested run ID, and observed upstream cost
Common use cases
Build local business lead lists
Find dentists, roofers, restaurants, real estate agencies, accountants, gyms, clinics, contractors, or any other local business category in a city or region.
Enrich CRM and sales research
Add public company websites, phone numbers, and role-based addresses such as
info@, sales@, or contact@ to an existing prospecting workflow.
Research markets and directories
Compare business density, categories, ratings, and contact coverage across locations without manually copying Google Maps results.
Create auditable data pipelines
Use source URLs and extraction metadata to review where an email came from before importing it into a CRM or another business process.
Quick start
Use a focused query and location:
{"searchQueries": ["dentists", "orthodontists"],"locationQuery": "Austin, Texas, USA","countryCode": "US","language": "en","maxLeads": 100,"maxPagesPerSite": 3,"requireEmail": true,"requireWebsite": true,"maxUpstreamChargeUsd": 3}
For your first test, set maxLeads to 5 or 10. Increase it after reviewing
the output and observed cost.
Example result
{"place_id": "ChIJ...","name": "Example Dental","category": "Dentist","address": "100 Main Street, Austin, TX","phone": "+1 512-555-0100","website": "https://example-dental.com/","google_maps_url": "https://www.google.com/maps/place/...","rating": 4.8,"reviews_count": 142,"email": "contact@example-dental.com","email_status": "domain_deliverable","emails": [{"email": "contact@example-dental.com","domain": "example-dental.com","source_url": "https://example-dental.com/contact","page_type": "contact","extraction_method": "mailto","is_role_address": true,"mx_records": ["mx.example-dental.com"],"verification_status": "domain_deliverable","mailbox_confirmed": false}]}
The default dataset contains the lead records. The OUTPUT record contains the
run summary.
What “verified email” means here
This Actor uses honest domain-level verification:
domain_deliverable— valid syntax and MX records were found for the domainunknown— DNS could not be checked reliablyinvalid— invalid syntax, disposable domain, missing domain, or no MXcatch_all_unknown— reserved for an explicit catch-all signal
An MX record proves that a domain can receive email. It does not prove that a
specific mailbox exists. mailbox_confirmed is therefore always false. The
Actor never sends email and never performs SMTP mailbox probes.
How the Google Maps lead scraper works
- A replaceable upstream Actor retrieves public Google Maps business records.
- Results are normalized and deduplicated by Google Place ID.
- Business websites are deduplicated by registrable domain, so branches that share a website do not trigger duplicate crawls.
- A bounded crawler checks the homepage and selected contact, about, or team pages.
- Public emails are extracted from visible text,
mailtolinks, JSON-LD, contact forms, and Cloudflare email protection. - Emails are normalized, classified, checked for MX records, and ranked.
- Leads and an auditable run summary are written to Apify storage.
The website crawler respects robots.txt by default. It blocks localhost,
private, link-local, and other non-public destinations before requests and
after redirects. It also limits response size, redirects, content types,
timeouts, pages per domain, and concurrency. HTML is not retained.
Important inputs
searchQueries— business categories or keyword searcheslocationQuery— city, region, postal code, or countrymaxLeads— maximum unique Google Place IDs to processmaxPagesPerSite— homepage plus selected contact pages, from 1 to 5requireEmail— output only leads with a usable public emailrequireWebsite— discard businesses without a websiterequirePhone— discard businesses without a published phone numberrespectRobotsTxt— respect website crawler directivesmaxUpstreamChargeUsd— spending ceiling for the nested Maps ActorupstreamActorId— replace the default Google Maps data provider
Use from JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('dataforge_labs/google-maps-leads-verified-emails').call({searchQueries: ['roofers'],locationQuery: 'Phoenix, Arizona, USA',maxLeads: 25,requireEmail: true,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Use from Python
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ["APIFY_TOKEN"])run = client.actor("dataforge_labs/google-maps-leads-verified-emails").call(run_input={"searchQueries": ["HVAC contractors"],"locationQuery": "Denver, Colorado, USA","maxLeads": 25,"requireEmail": True,})items = client.dataset(run["defaultDatasetId"]).list_items().itemsprint(items)
You can also save the configuration as an Apify Task, run it on a schedule, or connect it to Make, Zapier, n8n, Google Sheets, webhooks, and the Apify API.
Pricing and upstream costs
This Actor currently uses pay-per-platform-usage pricing. The caller also pays for the nested Google Maps upstream Actor and any applicable platform compute or proxy usage. These are separate charges.
Use maxUpstreamChargeUsd to cap supported pay-per-event upstream charges.
Start with a small maxLeads value and review the run's Usage tab before scaling
up. Provider pricing and Google Maps behavior can change over time.
Responsible use
Public business contact data can still be personal data. You are responsible for complying with applicable privacy, marketing, Google, and website terms, including GDPR, UK GDPR, ePrivacy/PECR, CCPA/CPRA, and local rules.
This Actor does not send messages and should not be used for unsolicited mass messaging. Reviews, reviewer profiles, personal employee leads, login-protected content, and CAPTCHA bypass are deliberately excluded.
FAQ
Does this Actor confirm that every mailbox exists?
No. It validates syntax and checks the email domain's MX records. It does not send mail or probe SMTP mailboxes.
Where do the emails come from?
They come from public pages on each business's own website. Every email includes the source page and extraction method.
Can I search multiple categories?
Yes. Add multiple values to searchQueries. A single locationQuery applies
to all searches in the run.
Why are some businesses missing an email?
The business may not publish one, may block crawling through robots.txt, may
use an unsupported page format, or may not have a website. Set
requireEmail: false to keep businesses without an email.
Are results deduplicated?
Yes. Businesses are deduplicated by Place ID. Websites are crawled once per registrable domain while separate branch Place IDs remain separate leads.
Can I export the leads?
Yes. Apify datasets can be downloaded as CSV, Excel, JSON, XML, RSS, or HTML and accessed through the API.
Start with a small lead search
Run 5–10 results for one category and city, review the source evidence, then scale the same input into a repeatable lead-generation workflow.