Google Maps Scraper: Places, Emails, Phone Numbers & B2B Leads
Pricing
$0.50 / 1,000 place scrapeds
Google Maps Scraper: Places, Emails, Phone Numbers & B2B Leads
Google Maps scraper & Google Places extractor for B2B leads: emails, phone numbers, contact details, websites, Instagram/Facebook, rating, reviews count, opening hours. Any city, ZIP code, county, region or whole country, radius or GeoJSON. No 120-result cap. $0.50 per 1,000 places, all included.
Pricing
$0.50 / 1,000 place scrapeds
Rating
5.0
(1)
Developer
D N
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
4 hours ago
Last modified
Categories
Share
What is this Google Maps Scraper?
Google Maps Scraper that turns any Google Maps search into a ready-to-use lead list. For every place you get the name, categories, full address (street, city, ZIP/postal code, county, region, country), GPS coordinates, phone numbers, website, emails, social profiles, rating, reviews count and opening hours. $0.50 per 1,000 places, all included: emails, social profiles, place details, proxies and platform usage. No add-ons, no start fee.
Google Maps shows at most about 120 results per search. This Google Maps extractor takes the real boundary of your area from OpenStreetMap and covers it with an adaptive grid, so you can scrape a whole city, ZIP code, county, region or country, up to 50,000 places per search term and location. It uses plain HTTP requests, with no browser and no Google API key: a 20-place search finishes in about 12 seconds, and 1,000 places with emails take about 80 seconds (measured, October 2026).
Use it for B2B lead generation and cold outreach, local SEO, market research or data enrichment. Run it from Apify Console, through the API, on a schedule, or from Make, n8n and Zapier. Apify's free plan ($5 of monthly credit) covers up to 10,000 places a month.
🇫🇷 Extracteur Google Maps : entreprises par ville, code postal, département ou région, avec e-mails, téléphones, sites web, notes et horaires. 0,50 $ les 1 000 lieux, tout compris. 🇩🇪 Google Maps Scraper: Firmen, Adressen, Telefonnummern und E-Mails nach Stadt, PLZ oder Region. 0,50 $ pro 1.000 Einträge, alles inklusive. 🇪🇸 Extractor de Google Maps: empresas por ciudad, código postal o región, con emails, teléfonos y redes sociales. 0,50 $ por 1.000 lugares.
- 50+ fields per place. In our benchmark of 1,000 restaurants in Lyon (median of 3 runs): phone on 95% of places, website on 84%, rating and reviews count on 99%, full weekly opening hours on 96%. Also secondary hours (kitchen, takeout, delivery), main photo and photo count, attributes, booking links, business status, plus code, place ID and Google Maps link.
- Emails and social profiles from each business website (the home page, then contact or legal pages when needed): Facebook, Instagram, LinkedIn, X, YouTube, TikTok, Pinterest. Generic emails of website builders and booking platforms are filtered out, so you get the business's own contacts.
- Any area, beyond the 120-result limit. A city, ZIP/postal code, county, region or whole country, several locations in one run, a custom GeoJSON polygon, or a radius around GPS coordinates. Duplicates are removed by place ID.
- Free filters. Minimum rating, only places with or only places without a website, category words, skip closed places.
- Direct input. Paste Google Maps place URLs, search URLs or place IDs to refresh places you already know.
- Safe on big jobs. Runs resume automatically after a platform restart, with no double charge, and stop cleanly before the run's time limit. Error items are free, and the run stops cleanly at your maximum cost per run.
- Familiar output. Common field names (
title,categoryName,totalScore,reviewsCount,placeId,emails…), exported as JSON, CSV or Excel.
⭐ If this actor saves you time, please bookmark it and leave a review: it helps other users find it.
How to scrape Google Maps with emails (step by step)
- Enter one or more search terms (
restaurant,plumber,dentist,real estate agency…). - Enter a location in plain text: a city (
Lyon), a ZIP/postal code (75011,10001), a county or region (Haute-Savoie,Bavaria,Texas) or a whole country (Belgium). Add more locations in More locations, draw a custom area (GeoJSON), or use GPS coordinates + radius. - Set max places per search term, keep Emails & social profiles on, and click Start.
- Download the results as CSV, Excel or JSON, or send them to Google Sheets, your CRM, Make, n8n or Zapier.
You can also paste Google Maps place URLs, search URLs or place IDs to get specific places.
What data can you extract from Google Maps?
| Data | Fields | Filled in our benchmark* |
|---|---|---|
| Name, categories, Google Maps link, place ID | title, categoryName, categories, url, placeId, cid, kgmid | 100% |
| Full address | address, street, neighborhood, city, postalCode, county, state, country, countryCode, plusCode | 99.9% |
| GPS coordinates | location.lat, location.lng | 100% |
| Phone numbers | phone (local), phoneUnformatted (international) | 95% |
| Website | website | 84% |
| Emails | emails (up to 10, own-domain first) | 42% to 61% of websites |
| Social profiles | facebooks, instagrams, linkedIns, twitters, youtubes, tiktoks, pinterests | Instagram 46%, Facebook 41% |
| Rating & reviews | totalScore, reviewsCount, reviewsUrl | 99% |
| Opening hours | openingHours (7 days), additionalOpeningHours (kitchen, delivery…) | 96% |
| Photo & attributes | imageUrl, imagesCount, additionalInfo (accessibility, payments, services…) | photo 99.7% |
| Booking & status | bookingLinks, reserveTableUrl, businessStatus, permanentlyClosed, temporarilyClosed | — |
* Median of 3 runs on 1,000 restaurants in Lyon, France (October 2026). The email rate is the share of websites where at least one email of the business was found, after removing generic platform emails; it depends on the trade: 42% for restaurants in Lyon, 61% for dentists in Manchester and plumbers in Austin.
Why this Google Maps Scraper?
| This actor | |
|---|---|
| Price for 1,000 places with emails and social profiles | $0.50, all included (no start fee, no add-ons) |
| Emails + social profiles from the business website | ✅ Included |
| More than 120 results per search | ✅ Adaptive grid over the real area boundary |
| Search by ZIP/postal code, county, region or whole country | ✅ OpenStreetMap boundaries, several locations per run, GeoJSON polygons, radius |
| Speed | ~80 s for 1,000 places with emails, ~12 s for 20 places (measured) |
| Lead filters (rating, with/without website, category, closed) | ✅ Included |
| Reliability | Automatic resume without double charge, clean stop before the time limit |
Google Maps scraper input
| Field | Type | Description |
|---|---|---|
searchStringsArray | array | Search terms, e.g. ["restaurant", "bakery"] |
locationQuery | string | City, ZIP/postal code, county, region or country, e.g. "Lyon", "75011", "Haute-Savoie", "Belgium" |
locations | array | More locations, e.g. ["Grenoble", "Annecy"]. Each term runs in each location |
customGeolocation | object | GeoJSON Polygon / MultiPolygon, or Point with radiusKm |
maxPlaces | integer | Required. Max places per search term and location (default 100) |
scrapeContacts | boolean | Emails + social profiles from each place's website (default on, included in the price) |
language | string | Results language: en, fr, de, es… (default en) |
countryCode | string | Optional country bias (fr, us…). Auto-detected from the location |
lat, lng, radiusKm | number | Search around coordinates instead of a text location |
startUrls | array | Google Maps place or search URLs |
placeIds | array | Google place IDs (ChIJ…) |
minRating | number | Only places rated at least this value (e.g. 4.5) |
website | string | allPlaces, withWebsite, or withoutWebsite (find businesses that need a website) |
categoryFilterWords | array | Keep only places whose category contains one of these words, e.g. ["pizza"] |
skipClosedPlaces | boolean | Skip temporarily / permanently closed places |
completeDetails | boolean | Complete missing reviews count / weekly hours from the place page (default on, included in the price) |
Example inputs
All restaurants of a county, with emails:
{"searchStringsArray": ["restaurant"],"locationQuery": "Haute-Savoie, France","maxPlaces": 5000,"language": "fr"}
Plumbers in three cities in one run:
{"searchStringsArray": ["plumber"],"locationQuery": "Lyon","locations": ["Grenoble", "Annecy"],"maxPlaces": 200}
Cafés within 2 km of a point:
{"searchStringsArray": ["café"],"customGeolocation": { "type": "Point", "coordinates": [2.3522, 48.8566], "radiusKm": 2 },"maxPlaces": 100}
Businesses without a website, rated 4.5+ (prospects for a web agency):
{"searchStringsArray": ["restaurant"],"locationQuery": "Bordeaux, France","website": "withoutWebsite","minRating": 4.5,"maxPlaces": 300}
Google Maps data output example
Each place is one dataset item with "status": "found". If an input cannot be processed (invalid place ID, unknown location…), you get an item with "status": "error" and an error message. The run keeps going and you are not charged for it. Three table views are available in the Output tab: Overview, Contacts and Location.
{"status": "found","title": "Example Dental Studio","categoryName": "Dentist","categories": ["Dentist", "Cosmetic dentist"],"address": "1 Example Street, Manchester M1 1AA, United Kingdom","street": "1 Example Street","city": "Manchester","postalCode": "M1 1AA","state": "England","county": "Greater Manchester","country": "United Kingdom","countryCode": "GB","neighborhood": "Northern Quarter","location": { "lat": 53.4794, "lng": -2.2453 },"plusCode": "9C5VFQH3+Q4","phone": "0161 000 0000","phoneUnformatted": "+44 161 000 0000","website": "https://www.example-dental.co.uk/","emails": ["hello@example-dental.co.uk"],"facebooks": ["https://www.facebook.com/exampledental"],"instagrams": ["https://www.instagram.com/exampledental"],"linkedIns": [],"totalScore": 4.9,"reviewsCount": 312,"openingHours": [{ "day": "Monday", "hours": "8:30 AM–5:30 PM" },{ "day": "Tuesday", "hours": "8:30 AM–5:30 PM" }],"businessStatus": "OPERATIONAL","imageUrl": "https://lh3.googleusercontent.com/…=w800-h600-k-no","imagesCount": 87,"additionalInfo": {"Accessibility": [{ "Wheelchair accessible entrance": true }],"Payments": [{ "Credit cards": true }]},"bookingLinks": [{ "name": "example-booking.com", "url": "https://www.example-booking.com/example-dental" }],"placeId": "ChIJ…","url": "https://www.google.com/maps/search/?api=1&query=…&query_place_id=ChIJ…","reviewsUrl": "https://search.google.com/local/reviews?placeid=ChIJ…","searchString": "dentist","searchLocation": "Manchester","rank": 1,"scrapedAt": "2026-10-21T07:00:00.000Z"}
(Illustrative example: values are anonymized and some fields are omitted.)
How much does it cost to scrape Google Maps?
$0.50 per 1,000 places ($0.0005 per place returned), everything included: emails, social profiles, phone numbers, place details, proxies and Apify platform usage. No start fee, no add-ons.
| Places | Price |
|---|---|
| 100 | $0.05 |
| 1,000 | $0.50 |
| 10,000 | $5 |
| 100,000 | $50 |
Error and "not found" items are free. Set a maximum cost per run in Apify and the actor stops cleanly when it is reached. Apify's free plan ($5 of monthly credit) covers up to 10,000 places a month.
Use it via API, Make, n8n or AI agents
Python (pip install apify-client):
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("fit_melon/google-maps-scraper-cheap").call(run_input={"searchStringsArray": ["dentist"],"locationQuery": "Manchester, UK","maxPlaces": 200,})for place in client.dataset(run["defaultDatasetId"]).iterate_items():print(place["title"], place.get("phone"), place.get("emails"))
- Make / n8n / Zapier: use the Apify app or node, action "Run an Actor" with
fit_melon/google-maps-scraper-cheap, then "Get dataset items" and map the fields to Google Sheets or your CRM. - Schedules & webhooks: run it every week on your area and get notified when new leads arrive.
- AI agents: available through the Apify MCP server.
Google Maps Scraper FAQ
How much does it cost to scrape Google Maps?
$0.50 per 1,000 places ($0.0005 per place), all included: emails, social profiles, phone numbers, place details, proxies and platform usage. 1,000 places cost $0.50, 10,000 cost $5 and 100,000 cost $50. There is no start fee and there are no add-ons. Error and "not found" items are free. Apify's free plan ($5 of monthly credit) covers up to 10,000 places a month.
Does this Google Maps scraper extract emails?
Yes, at no extra cost. For each place with a website, it opens the home page. If there is no email there, it opens up to two contact or legal pages (Contact, Impressum, Mentions légales…). It returns the emails published on those pages, plus Facebook, Instagram, LinkedIn, X, YouTube, TikTok and Pinterest profiles. Emails are never guessed, and the generic emails of website builders, booking and delivery platforms are filtered out. In our benchmarks, real business emails were found on 42% (restaurants in Lyon) to 61% (dentists in Manchester, plumbers in Austin) of websites. Turn scrapeContacts off if you only need the Google Maps data.
How do I get more than 120 results from Google Maps?
Google Maps lists about 120 places per search. Enter a location (for example Lyon or Texas) and set maxPlaces above 120. The scraper takes the area's real boundary and covers it with a grid. It splits only the dense cells into 4 smaller ones and searches them again, skips cells outside the boundary, and removes duplicates by place ID. You can ask for up to 50,000 places per search term and per location. The run stops when that number is reached or when the whole area has been covered.
How do I scrape all businesses in a city, county, region or country?
Type the area in Location: a city (Paris), a county (Haute-Savoie), a region or state (Bavaria, Texas) or a country (Belgium). To cover several areas, add them under More locations: each search term runs in each location. For a custom zone, paste a GeoJSON Polygon or MultiPolygon in customGeolocation, or a point with radiusKm. When OpenStreetMap has no boundary for a location, a radius around it is used instead. Big jobs: the default run timeout is 1 hour; for tens of thousands of places, raise it in the run options or split the job by location (the run also stops cleanly before its time limit and can be resurrected to continue, with no double charge).
Can I search Google Maps by ZIP code or postal code?
Yes. Type the code with its country in Location, for example 75011, France or 90210, USA. The postal-code boundary from OpenStreetMap is used when it exists, otherwise a radius around the code. Add more codes under More locations to cover several ZIP codes in one run.
How do I find local businesses without a website?
Set website to withoutWebsite (and optionally minRating). Only places with no website on their Google Maps listing are returned: ideal prospects for web agencies and local marketing services.
How fast is this Google Maps scraper?
Measured in October 2026 (median of 3 runs at the default 2 GB memory): 1,000 restaurants in Lyon with emails in about 80 seconds, 300 restaurants across a whole county (Haute-Savoie) in about 26 seconds, and a 20-place search in about 12 seconds. Results are streamed into the dataset while the run is going. Speed mostly depends on how many business websites have to be visited for emails.
Is it legal to scrape Google Maps? What about GDPR?
The scraper collects public business listing data and the contact details businesses publish on their own websites. It does not collect reviewer names, review texts or reviewer photos. Rules differ by country. If your list contains personal data (for example a sole trader's name or a named person's email address), GDPR and similar laws require a lawful basis such as legitimate interest. You must also tell people where you got their data, let them opt out, and follow local direct-marketing rules. You are responsible for how you use the data and for following Google's terms. This is not legal advice.
Can I export Google Maps data to Excel, CSV or Google Sheets?
Yes. You can download each run's results as CSV, Excel, JSON, XML or HTML from the run page or through the API. The Overview table shows the photo, name, category, address, city, postal code, phone, website, emails, Instagram, Facebook, rating, reviews count, business status and Google Maps link. To fill a Google Sheet automatically, connect the actor to Make, n8n or Zapier, or import the CSV file.
Do I need a Google Maps API key or proxies?
No. The scraper sends plain HTTP requests to Google Maps. It uses no browser and no Google Places API, so you need no API key and no Google Cloud billing. Apify Proxy is used by default, with a residential fallback if Google blocks a request. Its cost is included in the $0.50 per 1,000 places.
Does it scrape Google reviews and photos?
It returns the rating, the reviews count, a direct link to the reviews (reviewsUrl), the main photo (imageUrl) and the number of photos (imagesCount). It does not download review texts, reviewer data or the full photo gallery.
Can I switch from another Google Maps scraper without changing my workflow?
Usually, yes. The output uses the field names most Google Maps scrapers use (title, categoryName, address, phone, website, totalScore, reviewsCount, placeId, url, emails, instagrams, facebooks…). On input, maxCrawledPlacesPerSearch is accepted in place of maxPlaces, placeMinimumStars in place of minRating, and city, county, state, country and postalCode are combined into one location. In Make, n8n or Zapier you usually only need to change the actor ID.
Use cases
- Lead generation & cold outreach: lists of local businesses (B2B leads) with emails, phone numbers, websites and social profiles, by city, ZIP code, county, region or country.
- Local SEO & competitor analysis: ratings, reviews count and categories by area.
- Market research: count and map businesses of a given type in a city or region.
- Web agencies:
"website": "withoutWebsite"lists local businesses that still have no website. - Data enrichment: refresh opening hours and business status from place IDs.
Limitations & fair use
- Data comes from public Google Maps listings, and availability varies by place (not every business has a website or phone number).
- Area boundaries come from OpenStreetMap (© OpenStreetMap contributors, ODbL). If a location has no boundary, a radius around it is used.
priceLevelis only filled when Google shows it in the listing.- Emails are collected only from the business's own public website (home page and contact or legal pages).
- Personal data is excluded: no review authors, no reviewer photos.
- You are responsible for using the data in line with applicable laws (GDPR, etc.) and Google's terms.
Changelog
See the Changelog tab. Latest: 1.8: about 40% faster on large runs, cleaner emails (generic platform emails filtered), half the Google requests on small searches, clean stop before the run time limit.
Coming next, at the same price: more photos, menu links, even faster small runs.
More actors by this developer
See all actors: apify.com/fit_melon