📍 Google Maps Email Scraper — Scored Business Leads avatar

📍 Google Maps Email Scraper — Scored Business Leads

Pricing

from $3.00 / 1,000 results

Go to Apify Store
📍 Google Maps Email Scraper — Scored Business Leads

📍 Google Maps Email Scraper — Scored Business Leads

Most Google Maps scrapers just dump raw leads. This one scores every lead by how reachable it is and tags why it's worth contacting — no website, weak reviews, a dated site, no marketing — then gives you a one-page market summary. Emails included, all in one run, flat JSON.

Pricing

from $3.00 / 1,000 results

Rating

0.0

(0)

Developer

Gezgin Data

Gezgin Data

Maintained by Community

Actor stats

1

Bookmarked

7

Total users

1

Monthly active users

5 days ago

Last modified

Share

Find business leads on Google Maps anywhere in the world - and get their contact email in the same run. This scraper pulls the business name, address, phone, website, rating, review count, GPS coordinates and a contact email for any business type, in any city, and gives it all back as clean, flat JSON.

One run, all the data, email included. No add-ons, no second tool, no nested objects to untangle.

It also does the triage for you. Every lead is scored by how easy it is to reach, and tagged with the reasons it might be worth a call - no website, thin reviews, an ageing site, no marketing on their pages. At the end of each run you get a short market summary of everything it found, so you start from a worked list instead of a raw dump.

What does the Google Maps Lead Scraper do?

You tell it what to look for (for example "dentists") and where (for example "London, UK"), and it does three things:

  1. It searches Google Maps and collects every matching business it can find.
  2. For each business with a website, it opens that site and pulls a real contact email, along with a few signals about the site itself - whether it runs on HTTPS, whether it is mobile-friendly, what it is built with, and whether it has any marketing tracking.
  3. It scores and tags each lead so you can see at a glance who to contact first and why, and writes a one-page market summary for the whole run.

The result is a lead list you can work from straight away. Because it runs on the Apify platform, you also get scheduling, an API, integrations with tools like Make and n8n, and the option to export to JSON, CSV or Excel.

Why scrape business leads from Google Maps?

Most Google Maps scrapers stop at the place data and leave the emails to you - which usually means paying for a second enrichment tool and then stitching the two exports back together by hand. This one pulls the contact email in the same run, so there is no second tool, no second bill, and nothing to merge afterwards. In a typical run, most businesses that actually publish a website come back with a usable email, and everything arrives as one flat structure that drops straight into a CRM or an automation without any reshaping.

On top of that, it tells you which leads are worth your time. Instead of working through an unsorted list of a few hundred businesses, you can sort by how reachable each one is and filter to the ones with an obvious reason to switch.

It is built for:

  • Sales teams building targeted prospect lists by city and industry, and working the most reachable ones first.
  • Agencies finding local businesses that fit an ideal-customer profile and have a clear opening - an outdated site, weak reviews, or no online marketing.
  • Automation builders feeding clean JSON into Make, n8n, Clay or a custom AI workflow.
  • Market research mapping competitor density, contactability and digital maturity across a city.

How to scrape Google Maps leads with emails

  1. Click Try for free.
  2. Enter the business type (for example dentists) and the location (for example London, UK).
  3. Optionally set filters: minimum rating, only businesses with a website, language.
  4. Click Start and wait for the run to finish.
  5. Download the results as JSON, CSV or Excel, or pull them through the API.

No coding needed - you just fill in a form and run it.

Input

The Actor takes a simple JSON input. Here is a typical example:

{
"searchTerms": ["dentists"],
"location": "London, UK",
"maxResults": 100,
"extractEmail": true,
"enrichLeads": true,
"minRating": 4.0,
"onlyWithWebsite": true,
"language": "en"
}

You can also configure everything through the visual input form in the Apify Console - no JSON required.

Output

Every business comes back as one flat JSON object. Here is a real example - this one has no open opportunities, but many leads will come back with one or more tags:

{
"place_id": "ChIJYyTiQ1gbdkgRnDRYs8__GbY",
"name": "London Dental Centre",
"category": "Dentist",
"address": "109 Lever St, London EC1V 3RQ, United Kingdom",
"city": "London",
"country": "United Kingdom",
"phone": "+44 20 3667 7070",
"website": "http://www.thelondondentalcentre.co.uk/",
"email": "info@thelondondentalcentre.co.uk",
"email_source": "mailto_link",
"rating": 4.8,
"review_count": 296,
"latitude": 51.527144,
"longitude": -0.095682,
"maps_url": "https://www.google.com/maps/place/London+Dental+Centre/...",
"opening_hours": ["Monday: 9:00-18:00", "Tuesday: 9:00-18:00"],
"price_level": 2,
"is_permanently_closed": false,
"contactability_score": 100,
"lead_priority": "warm",
"opportunity_tags": [],
"opportunity_count": 0,
"has_ssl": true,
"site_reachable": true,
"mobile_friendly": true,
"cms": "squarespace",
"copyright_year": 2025,
"has_tracking": true,
"tracking_tools": ["google_analytics", "meta_pixel"],
"social_links": { "facebook": "https://www.facebook.com/...", "instagram": "https://www.instagram.com/..." },
"has_contact_form": true,
"scraped_at": "2026-06-24T09:13:00Z"
}

You can download the dataset in various formats such as JSON, HTML, CSV or Excel.

Data fields

Every field is always present. When a value is missing it comes back as null instead of being dropped, so your downstream tools never break on a missing key.

FieldDescription
place_idUnique Google Maps ID, useful for deduplicating across runs
nameBusiness name
categoryPrimary category, e.g. Dentist, Restaurant, Lawyer
addressFull address string
cityCity parsed from the address
countryCountry parsed from the address
phonePhone number
websiteWebsite URL
emailContact email extracted from the business website
email_sourceWhere the email was found: mailto_link, structured_data, cloudflare, raw_source, homepage or contact_page
ratingGoogle rating from 0 to 5
review_countNumber of Google reviews
latitudeGPS latitude
longitudeGPS longitude
maps_urlDirect link to the Google Maps listing
opening_hoursList of opening hours per day
price_levelPrice bracket from 1 to 4
is_permanently_closedTrue if the business is permanently closed
scraped_atTimestamp in ISO 8601 format

When lead enrichment is on (the default), each lead also carries these:

FieldDescription
contactability_scoreHow reachable the lead is, from 0 to 100
lead_priorityhot, warm or cold, derived from the score and the tags
opportunity_tagsReasons the lead may be worth contacting: needs_website, weak_reviews, stale_site, no_marketing
opportunity_countHow many opportunity tags the lead has
has_sslWhether the website loads over HTTPS
site_reachableWhether the website responded when we visited it
mobile_friendlyWhether the site is built for mobile screens
cmsWhat the site is built with, e.g. WordPress, Wix, Squarespace
copyright_yearMost recent copyright year found in the page footer
has_trackingWhether the site runs analytics or ad tracking
tracking_toolsWhich tracking it uses, e.g. Google Analytics, Meta Pixel
social_linksSocial profile links found on the site
has_contact_formWhether the homepage has a contact form

How email extraction from business websites works

There is no magic and no third-party AI involved - just a careful, layered approach that is transparent about where each email came from:

  1. mailto links on the homepage - the fastest and most reliable source.
  2. Structured data - the schema.org business markup that many sites embed for Google often carries the contact email directly.
  3. Cloudflare-protected emails - addresses that sites hide behind Cloudflare's email obfuscation are decoded automatically, so they are not lost.
  4. Page source and plain text - emails written into the page or its scripts, not just the visible text.
  5. The contact or imprint page - the Actor looks for a "contact", "imprint" or "Impressum" link, opens it, and repeats the search there.

The email_source field tells you exactly which step found the email, so you always know how it was obtained.

A realistic expectation: how many businesses yield an email depends heavily on the industry and on whether they publish a website at all. For local service businesses with a website, roughly two-thirds to three-quarters come back with an email in practice. Businesses without a website are skipped for email, since there is nowhere to look.

How the lead scoring works

Collecting the leads is half the job. Knowing which ones to call first is the other half, so alongside the raw data each business gets two things.

The first is a contactability score from 0 to 100. It is a plain, transparent tally - points for a working email, a phone number, a website, and a site that actually loads when the Actor visits it. Sort by this and the easiest businesses to reach sit at the top. The output includes a ready-made "Hot Leads" view that does this sorting for you.

The second is a set of opportunity tags, short labels for why a business might be worth approaching:

  • needs_website - the business has no website at all.
  • weak_reviews - very few reviews, or a low rating.
  • stale_site - the site looks dated: an old copyright year, no HTTPS, or not built for mobile.
  • no_marketing - no analytics or advertising tracking on the site, so they are probably not running any online marketing yet.

These are filters, not verdicts. A web-design agency cares about needs_website and stale_site; a reputation service cares about weak_reviews; a marketing agency cares about no_marketing. Pick the tag that matches what you sell and work that slice of the list.

All of this is read from data the Actor already gathers during the email step, so turning it on does not slow the run down or add to the cost. If you only want the plain place data, set enrichLeads to false.

The market summary

At the end of every run the Actor writes a one-page summary to the run's key-value store, under the key MARKET_INSIGHTS. It covers how many businesses you found, how many came back with an email, the average rating and median review count, how many leads fall into each opportunity tag, the most common categories, and which website builders show up most often.

It is a quick read of the market you just scraped - useful for sizing up a city before a campaign, or for showing a client why a campaign is worth running.

All input options

  • searchTerms (required, list) - business types to search for. Multiple terms widen coverage. Examples: ["dentists"], ["Italian restaurants"], ["plumbers", "electricians"].
  • location (required, text) - city and country. Examples: "London, UK", "Berlin, Germany", "Tokyo, Japan".
  • maxResults (default 50) - maximum places per search term, up to 500.
  • extractEmail (default true) - visit each website to pull a contact email. This is the main value of the Actor, so keep it on unless you only need map data.
  • enrichLeads (default true) - score and tag each lead and write the market summary, using data already gathered during the email step. Turn it off if you only want the plain place data.
  • minRating (default 0) - only keep businesses at or above this rating. Set 4.0 for higher-quality leads.
  • onlyWithWebsite (default false) - skip businesses with no website.
  • onlyWithPhone (default false) - skip businesses with no phone number.
  • language (default "en") - search language. Available: en, de, fr, es, it, nl, pt, pl, tr, sv.
  • maxRunTimeSecs (default 3000) - a safety limit. The Actor saves everything collected so far and exits cleanly before this time, so a large job never gets killed by the platform timeout with empty output.

Pricing - how much does it cost to scrape Google Maps?

This Actor uses pay-per-event pricing, so you only pay for what you actually run:

  • $0.00005 per run, charged once when the run starts.
  • $0.003 per business result.

There are no subscriptions and no minimum spend. The lead scoring, tags and market summary are included at no extra cost - they are built from data the Actor already collects.

VolumeApproximate cost
100 leadsabout $0.30
1,000 leadsabout $3.00
10,000 leadsabout $30.00

How long does a run take?

Reliability is the priority here, so by default the Actor scrapes carefully rather than aggressively. As a rough guide, expect a few seconds per business - a 40-lead run takes around five to six minutes, and larger runs scale roughly in proportion.

If you need large jobs to finish faster, increase the Actor's memory in the run settings. The Actor automatically scrapes more pages in parallel when it has more CPU available (on Apify, CPU scales with memory), so a higher memory setting directly translates into a faster run.

How to get more Google Maps results per city

A single Google Maps query usually returns somewhere between 20 and 120 results. To cover a large city more thoroughly, run several search terms aimed at different districts:

{
"searchTerms": [
"Zahnarzt Berlin Mitte",
"Zahnarzt Berlin Kreuzberg",
"Zahnarzt Berlin Prenzlauer Berg",
"Zahnarzt Berlin Charlottenburg"
],
"location": "Berlin, Germany",
"maxResults": 50
}

Results are automatically deduplicated by place_id, so overlapping districts will not create duplicate rows.

Use the Google Maps scraper via API

You can run this Actor from any application. Here is a Python example using the Apify client:

from apify_client import ApifyClient
client = ApifyClient("YOUR_API_TOKEN")
run_input = {
"searchTerms": ["dentists"],
"location": "London, UK",
"maxResults": 50,
"extractEmail": True,
"enrichLeads": True,
"minRating": 4.0,
}
run = client.actor("berkaydev/google-maps-email-scraper-business-leads").call(run_input=run_input)
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(f"Got {len(items)} leads")
# The market summary lives in the run's key-value store
insights = client.key_value_store(run["defaultKeyValueStoreId"]).get_record("MARKET_INSIGHTS")

For no-code tools like Make, n8n or Zapier, search for this Actor in the Apify integrations and connect it without writing any code.

FAQ

What email hit rate can I expect? It varies a lot by industry and by how many of the businesses actually have a website. For local services with a website, roughly two-thirds to three-quarters is a fair expectation. Treat any single number as a rough guide, not a guarantee.

What do the opportunity tags actually mean? They flag a plausible reason to reach out, read from the business's own website and listing - no website, few reviews, a dated site, or no marketing tracking. They are a starting point for a conversation, not a definitive audit. Always glance at the site yourself before you use a tag in your pitch.

Can I turn the scoring off? Yes. Set enrichLeads to false and you get just the place data and email, nothing else.

Can I import the results into HubSpot or Salesforce? Yes. Export as CSV from Apify, or use the API. The flat structure imports cleanly with no transformation step.

What happens on very large jobs? The Actor keeps an eye on the clock and exits cleanly with everything collected so far before it can hit the platform timeout. You get a partial result you can use, never an empty failed run.

Support? Use the Issues tab on this Actor's page. I read and respond to every report.

This Actor extracts publicly available business information from Google Maps - the same names, addresses, phone numbers and websites that Google shows to everyone.

You are responsible for using that data lawfully. In practice that means:

  • For B2B outreach, make sure your offer is genuinely relevant to the business you contact.
  • Follow the rules that apply to you - for example GDPR in the EU, CAN-SPAM in the US, CASL in Canada, and UWG in Germany.
  • Always identify yourself clearly and make opting out easy.
  • Do not send mass spam, do not resell the raw data without proper licensing, and do not keep contacting a business that has asked you to stop.

The Actor is a technical tool. Lawful use of what it collects is your responsibility, and if you are unsure, talk to a data protection lawyer.


More data tools by Gezgin Data