Google Maps Email Extractor & Business Leads avatar

Google Maps Email Extractor & Business Leads

Pricing

Pay per usage

Go to Apify Store
Google Maps Email Extractor & Business Leads

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

Ula Ula

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

1

Monthly active users

21 days ago

Last modified

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 domain
  • unknown — DNS could not be checked reliably
  • invalid — invalid syntax, disposable domain, missing domain, or no MX
  • catch_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

  1. A replaceable upstream Actor retrieves public Google Maps business records.
  2. Results are normalized and deduplicated by Google Place ID.
  3. Business websites are deduplicated by registrable domain, so branches that share a website do not trigger duplicate crawls.
  4. A bounded crawler checks the homepage and selected contact, about, or team pages.
  5. Public emails are extracted from visible text, mailto links, JSON-LD, contact forms, and Cloudflare email protection.
  6. Emails are normalized, classified, checked for MX records, and ranked.
  7. 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 searches
  • locationQuery — city, region, postal code, or country
  • maxLeads — maximum unique Google Place IDs to process
  • maxPagesPerSite — homepage plus selected contact pages, from 1 to 5
  • requireEmail — output only leads with a usable public email
  • requireWebsite — discard businesses without a website
  • requirePhone — discard businesses without a published phone number
  • respectRobotsTxt — respect website crawler directives
  • maxUpstreamChargeUsd — spending ceiling for the nested Maps Actor
  • upstreamActorId — 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 os
from apify_client import ApifyClient
client = 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().items
print(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.

Run 5–10 results for one category and city, review the source evidence, then scale the same input into a repeatable lead-generation workflow.