Google Maps Scraper — Local Leads & Emails
Pricing
from $1.60 / 1,000 business scrapeds
Google Maps Scraper — Local Leads & Emails
Google Maps scraper for local lead generation: phone, address, rating, hours and Maps URL. Optional website emails and decision-maker enrichment. Country sweep (IT, FR, DE, ES, GB, NL, BE, PT, US). Pay per business; contacts billed only when found. No proxy setup.
Pricing
from $1.60 / 1,000 business scrapeds
Rating
5.0
(3)
Developer
Pequod
Maintained by CommunityActor stats
1
Bookmarked
6
Total users
4
Monthly active users
3 days ago
Last modified
Categories
Share
What is a Google Maps scraper for local lead generation?
A Google Maps scraper is a tool that searches Maps by keyword and area, then exports structured local business leads — phone, address, rating, hours and Maps URL — into a dataset you can download as CSV or JSON. This Apify Actor is built for lead generation and optional emails from each business website (not review text or photo galleries). You pay per business delivered on Apify; contact and decision-maker add-ons bill only when data is found. No Google Maps API key and no proxies to configure on your side.
Measured at a glance. Listing benchmark (9 countries, 1,582 businesses): phone fill ~97%, website on Maps ~89%. Contact extraction benchmark (~480 websites attempted across IT, ES, US, BE, DE): 54–80% email yield by country — e.g. ~71% in Spain, 80% in Germany and Belgium. Pay-per-event pricing on Apify: $2.50 / 1,000 businesses delivered, $2.50 / 1,000 website-contact hits, $0.22 per verified decision maker found. Country sweep covers 9 countries (IT, FR, DE, ES, GB, NL, BE, PT, US) with resumable state — no API key, no proxies.
Google Maps leads scraper & email extractor — how it works
- Map search — set
searchTermsplus an area (locationQueryor coordinates +radiusKm), or enable country sweep for an entire market. - Listing parse — each Maps result becomes one row: name, category, address, phone, rating, review count, opening hours, website and Maps URL. Optional filters:
minRating,websiteFilter. - Optional website crawl — when enabled, visits the official site linked on Maps for public emails and phones, and optionally runs a decision-maker lookup (named contact + verified email).
- Data export — rows stream to the Apify dataset (JSON items, CSV download, or API). Billing fires per event only for rows and add-ons actually delivered.
Configure everything in the Apify Console input form — no coding required for a standard run.
What data can you extract from Google Maps?
Each dataset row is one billable local business (place-scraped event). Enable Extract website contacts to fill emails and phonesFromSite from the official site (website-contacts event, only when contacts are found).
| Field | Example |
|---|---|
name | Trattoria Da Mario |
category | Restaurant |
address | Via Garibaldi 12, 10122 Torino TO, Italy |
phone | +39 011 436 7890 |
website | https://trattoriadamario.it |
rating | 4.6 |
reviewCount | 128 |
openingHours | { "Monday": "12:00–15:00, 19:00–23:00", ... } |
mapsUrl | https://www.google.com/maps/place/?q=place_id:ChIJ… |
searchTerm | restaurants |
emails | ["info@trattoriadamario.it"] (add-on) |
phonesFromSite | ["+39 011 436 7891"] (add-on) |
Business identity & location
Name, category, categories, address, latitude, longitude, Maps URL (mapsUrl), and the search term that matched the listing.
Phones, websites & Maps URLs
Phone number and website URL as shown on Google Maps — ready for CRM import or outbound workflows.
Ratings, review counts & opening hours
Google rating, review count, price level when available, and openingHours by weekday when Maps exposes them.
Website emails & phones (optional add-on)
When Extract website contacts is enabled, the Actor visits each business website and extracts public emails and phone numbers into emails and phonesFromSite. Billed only when contacts are found.
Decision-maker name & verified email (optional add-on)
When Find the decision maker is enabled, the Actor attaches decisionMakerName, decisionMakerRole, decisionMakerEmail, decisionMakerEmailSendable, and decisionMakerLinkedin for businesses with a website (up to maxDecisionMakers lookups per run). Expect ~30–60 seconds per business looked up. The decision-maker event fires only when a named decision maker is found with a verified contact email. For the full waterfall with alternates and bulk domain input, use the standalone Decision Maker Finder.
What this Google Maps scraper does not extract
No review text, no photo galleries, no menus, no popular-times heatmaps. This Actor optimizes for lead fields — identity, location, phones, websites, rating counts and hours — plus optional website contacts and decision makers. If you need full-feature Maps crawling (reviews, photos, deep place metadata), use a category-leading full Maps crawler on the Apify Store instead.
How it compares to other Google Maps scrapers on Apify
| Approach | Typical focus | This Actor |
|---|---|---|
| Full-featured Maps crawlers on Apify | Reviews, photos, rich place metadata, maximum field coverage | Lead-first: phone, address, hours, Maps URL, optional site emails — you pay $2.50 / 1,000 businesses and only for contacts actually found |
| Email-only Maps extractors on Apify | Pull emails from Maps-linked sites | Listing + emails + optional DM in one dataset row; filters (minRating, websiteFilter) included at no extra filter fee |
| DIY scripts / extensions | Free tiers, self-hosted | Managed Apify run: no API key, no proxy setup, resumable country sweep across 9 countries, pay-per-result billing |
We do not claim to replace every Maps scraper on Apify — we compete where you want local business leads and verified website contacts, not a media archive of reviews and images.
How much does Google Maps lead scraping cost?
Configure list prices on Apify; the Actor charges by event name:
| Event | Typical price | When charged |
|---|---|---|
apify-actor-start | $0.00005 (FREE tier) | Once at run start |
place-scraped | $2.50 / 1,000 (FREE tier) | Each business delivered to the dataset |
website-contacts | $2.50 / 1,000 (FREE tier) | Each business where site emails/phones are found (add-on) |
decision-maker | $0.22 (FREE tier) | Each business where a named decision maker with a verified email is found (add-on) |
Example: 1,000 restaurants with listing only ≈ $2.50 in place events (+ $0.00005 start). Same 1,000 with contacts found on 600 sites ≈ $2.50 + $1.50 = $4.00 total. Filters (minRating, websiteFilter) are free.
Is there a free Google Maps scraper? Apify’s free plan includes about $5 of platform credits per month — enough for small test runs (set a low maxPlaces and a spending limit). This is not unlimited free scraping; at scale you pay pay-per-event prices above. No fake “free forever” lead lists.
Your run spending limit caps how many place-scraped events can fire; the Actor stops cleanly when the limit is reached.
Find businesses without a website on Google Maps
Set websiteFilter: none to return only businesses that have no website listed on Maps — a strong fit for web design prospecting and agencies selling sites to shops that still lack an online presence. Listing-only rows still bill place-scraped; no website means no website-contact or decision-maker add-on for those rows.
Scrape Google Maps leads by country (country sweep)
Country sweep mode walks a supported country locality by locality (towns and cities from GeoNames cities500, filtered to populated places). Each run delivers up to maxPlaces new businesses; progress is saved in a named key-value store so the next run with the same countryCode, searchTerms, and geographic selection resumes where the previous run stopped. Place IDs already delivered in earlier runs are not charged again.
Supported countries: IT, FR, DE, ES, GB, NL, BE, PT, US.
This is a Google Maps scraper by country without you configuring proxies or API keys — the Actor handles data access while you sweep an entire market niche by niche.
Restrict to regions, provinces, or municipalities
Leave the geo filters empty to sweep the whole country. Or pass any combination of:
sweepRegions— GeoNames admin1 names (Italian regions, US states, …)sweepProvinces— GeoNames admin2 names (Italian provinces / metropolitan cities, US counties, …)sweepLocalities— individual town / municipality names from the bundled dataset
Filters use union semantics: a locality is included if its region or province or name matches any selected value. Matching is case- and accent-insensitive. Homonyms (same town name in different provinces) are all included.
Friendly name matching: type native official names for regions (e.g. Lombardia or Lombardy both work). For provinces and US counties, administrative prefixes and trailing County are ignored — Milano matches Città metropolitana di Milano, Los Angeles matches Los Angeles County, Cuneo matches Provincia di Cuneo.
Province names for all countries are listed in docs/GEO_NAMES.md.
Any municipality name from the bundled GeoNames cities500 extract also works via
sweepLocalities (case- and accent-insensitive).
Each distinct geographic selection (plus searchTerms + country) uses its own resumable state store, so a Lombardy-only sweep never shares progress with a full-country run.
Example input (country sweep)
{"searchTerms": ["plumber", "heating engineer"],"countryCode": "IT","countrySweep": true,"maxPlaces": 500,"sweepMinPopulation": 2000}
Example input (region / province / comune filter)
{"searchTerms": ["idraulico"],"countryCode": "IT","countrySweep": true,"sweepRegions": ["Lombardia", "Toscana"],"sweepProvinces": ["Milano", "Torino"],"sweepLocalities": ["Alba", "Bra"],"maxPlaces": 200}
Optional startFromLocality: jump the sweep to a named town (case-insensitive match on the active locality list after geo filters). With a homonym name, the sweep jumps to the first matching locality in that list (population-descending order). When set, this always moves the cursor to that locality for the run — even if a saved sweep cursor already exists — for example to retry or prioritize a town. searchTerms (and geo filters) must still match the store fingerprint.
After each run, check RUN_SUMMARY for nextLocalityIndex, nextLocalityName, sweepCompleted, stateStoreName, and sweepGeoScope (null when unfiltered). When sweepCompleted is true, every locality in the (filtered) dataset has been processed for your search terms.
Resume workflow
- Run with
countrySweep: trueuntilmaxPlacesis reached (or the spending limit caps delivery). - Start a new run with the same
searchTerms,countryCode, and geo filters — the Actor reopens the same state store and continues fromnextLocalityIndex. - Repeat until
sweepCompletedistrueinRUN_SUMMARY.
Do not change searchTerms mid-sweep: the saved state is keyed to your term list; different terms require a new sweep (new state store). Changing region/province/locality filters also opens a different state store.
Coverage in dense areas and megacities
Maps results are paginated (~20 places per page, capped per cell). When a cell still returns a full last page, the Actor subdivides that cell once and re-queries the four finer anchors — still under the same query budget — so dense city centers lose fewer leads past the page cap. RUN_SUMMARY exposes saturatedCells (cells that hit the page cap) and splitCells (finer anchors scheduled by subdivision). Country sweep also uses a wider 15 km grid for megacities (population ≥ 2M) so outskirts beyond the GeoNames city centroid are covered.
Each run has a fixed upstream query budget derived from maxPlaces (COGS guard). With many searchTerms, that budget is shared fairly across terms — each term covers the central cells first, spiralling outward. If queryBudgetExhausted is true in RUN_SUMMARY, split the run into fewer terms or a smaller geographic area.
Concurrent runs with the same searchTerms, country, and geo selection use a best-effort lock in the named key-value store (15-minute window). If another run is still active, the Actor fails with a clear message rather than corrupting shared state. This is not a hard distributed lock — avoid launching duplicate sweeps on purpose.
GeoNames attribution
Locality names, coordinates, and admin region/province labels are derived from GeoNames data (CC BY 4.0). GeoNames is an open geographical database. When publishing results built with country sweep, please credit GeoNames appropriately (e.g. “Contains data from GeoNames, licensed under CC BY 4.0”).
Google Maps lead generation use cases
Local sales call lists
Build call lists of shops, clinics or trades in a city with phone and address ready for CRM import.
Outbound email from real website inboxes
Enable website contact extraction to pull info@ and similar addresses from the business’s own site, not guessed inboxes.
Web design prospecting (no website)
Set websiteFilter: none to find businesses without a website on Maps — prospects who need a new site.
Multi-niche market mapping
Compare categories and ratings across neighborhoods with multiple searchTerms in one run (up to 20 terms).
Input example
City + term with website contact extraction (see also .actor/example_run_input.json):
{"searchTerms": ["ristoranti", "restaurants"],"locationQuery": "Milan, Italy","countryCode": "it","maxPlaces": 100,"radiusKm": 5,"enrichWebsiteContacts": true}
Tips: use locationQuery or latitude + longitude, not both. websiteFilter: none for no-website prospecting. Up to 20 searchTerms per run.
Output example (JSON)
{"placeId": "ChIJexample123","name": "Trattoria Da Mario","category": "Restaurant","categories": ["Restaurant", "Italian restaurant"],"address": "Via Garibaldi 12, 10122 Torino TO, Italy","latitude": 45.0703,"longitude": 7.6869,"rating": 4.6,"reviewCount": 128,"priceLevel": 2,"phone": "+39 011 436 7890","website": "https://trattoriadamario.it","mapsUrl": "https://www.google.com/maps/place/?q=place_id:ChIJexample123","openingHours": {"Monday": "12:00–15:00, 19:00–23:00","Tuesday": "12:00–15:00, 19:00–23:00"},"sourceProvider": "maps-live","searchTerm": "restaurants","emails": ["info@trattoriadamario.it"],"phonesFromSite": []}
- Dataset: one item per business (
place-scraped). - Key-value store
RUN_SUMMARY: places pushed, contacts found, query budget, provider mix and failure reasons.
Do you need a Google Maps API key or proxies?
No. You do not configure a Google Maps API key, proxies or upstream credentials. This Actor operates the data layer for you — a practical option when you want Google Maps leads without API key setup or proxy maintenance. Compliance with Google’s terms and your local prospecting laws remains your responsibility.
FAQ
How can I generate leads using Google Maps?
Define search terms (business types) and an area (city or coordinates). The Actor returns structured local business leads — phone, address, rating, hours and Maps URL — ready for CRM or outbound. Optional add-ons enrich rows with website emails or decision-maker contacts.
How do I extract emails from Google Maps businesses?
Enable Extract website contacts. Emails come from the official website linked on Maps, not from guessed patterns on the Maps listing itself. You are billed website-contacts only when at least one email or phone is found on the site.
Is there a free Google Maps scraper?
Apify’s free plan includes about $5 of platform credits per month — enough to test this Actor with a small maxPlaces and a spending limit. There is no unlimited free lead export; scale runs use pay-per-event pricing (place-scraped, optional website-contacts and decision-maker). Honest freemium, not a fake “100% free scraper.”
Can I scrape Google Maps without coding or an API key?
Yes. Use the Apify Console input form: search terms, location, filters and add-on toggles — no Google Maps API key, no proxy configuration, and no code required for a standard run. Developers can also trigger runs via the Apify API or integrations (n8n, Make, Zapier).
Is it legal to scrape data from Google Maps?
This Actor collects public business listing fields exposed on Maps and, when enabled, contact details published on linked websites. Laws vary by country (GDPR, anti-spam, local marketing rules). You are the data controller for exports — obtain appropriate legal advice before outbound campaigns.
How do I find businesses without websites on Google Maps?
Set websiteFilter: none. You receive only listings where Maps shows no website — ideal for agencies prospecting businesses that need a new site.
Can I scrape Google Maps leads for an entire country?
Yes — enable countrySweep: true with a supported countryCode. The Actor walks localities from bundled GeoNames data, saves progress in a named key-value store, and skips already-delivered place IDs on resume.
Do I need a Google Maps API key or proxies?
No. We handle data access; you configure search terms, area and filters only.
Do you scrape Google Maps reviews or photos?
No. Focus is lead fields: identity, location, contact channels, rating counts and hours — not review text or photo galleries.
Where do emails come from?
From the business’s official website linked on Maps (add-on). We do not invent email patterns.
Come estrarre email e contatti da Google Maps?
Imposta termini di ricerca + area (es. ristoranti, Milano, Italy), abilita Extract website contacts (enrichWebsiteContacts: true). Le email provengono dal sito ufficiale indicato su Maps, non da pattern inventati.
Related Actors (Pequod portfolio)
| Step | Actor | When |
|---|---|---|
| 1. Discover | Google Maps Local Leads (this actor) | Local businesses by area + term |
| 1. Discover | Lookalike Discovery | Domain/niche-based ecommerce stores |
| 1. Discover | Instagram TikTok Shop Leads | Hashtag-driven social sellers |
| 2. Enrich contact | Decision Maker Finder | Named decision makers on the company domain |
| 3. Enrich shipping | Shipping Intelligence | Carriers and policies for ecommerce sites |