Google Maps Scraper - Places, Leads & Contacts
Pricing
from $4.00 / 1,000 place scrapeds
Google Maps Scraper - Places, Leads & Contacts
Scrape Google Maps businesses & places by keyword + location: name, address, phone, website, rating, category, opening hours, coordinates, photos & attributes. Optional website email/social enrichment, lead scoring & monitor mode. No API key. Export to CSV/JSON/Excel.
Pricing
from $4.00 / 1,000 place scrapeds
Rating
0.0
(0)
Developer
Scrape Sage
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Google Maps Scraper — Places, Business Leads, Emails & Contacts
Extract complete Google Maps business & place data at scale — name, category, full address, phone, website, rating, opening status, coordinates, photos and attributes — for any search term and location. Then optionally turn every place into a ready-to-contact B2B lead by crawling its own website for emails, phone numbers and social profiles, with a 0–100 lead score on every record.
No API key, no login, no browser — fast JSON extraction straight from Google Maps' own data feed, so you get the richest dataset in the category at a fair flat price (all fields included — no add-on fees for "details", "filters" or "contacts").
Why this Google Maps scraper?
Most Google Maps scrapers either nickel-and-dime you with per-field add-ons or return thin records. This actor ships every field Google Maps exposes in one record, plus optional contact enrichment that other tools charge extra for:
| Data | Typical scrapers | This actor |
|---|---|---|
| Name, category, full address, city/state/ZIP, country | ✅ | ✅ |
| Phone (formatted + E.164), website, domain | partial | ✅ |
| Rating, open/closed status, today's hours | partial | ✅ |
| Latitude / longitude, plus code, neighborhood | partial | ✅ |
| Place ID, CID, FID, Knowledge-Graph ID | ❌ | ✅ |
| Business attributes (accessibility, service options…) | ❌ | ✅ |
| Photos / image URLs | ❌ | ✅ |
| Total review count + full Mon–Sun opening hours | ❌ paid add-on | ✅ opt-in |
| Contact emails (from the business website) | ❌ paid add-on | ✅ opt-in |
| Facebook / Instagram / LinkedIn / X / YouTube / TikTok | ❌ paid add-on | ✅ opt-in |
| Lead score (0–100) per place | ❌ | ✅ |
| Monitor mode — only new / changed places | ❌ | ✅ |
| Pricing | base + 5–8 add-ons | flat place fee + 2 clear opt-ins |
Use cases
- Local lead generation — pull every plumber, dentist, law firm, gym or restaurant in a city, enrich their website for emails and socials, and score them by contactability. Perfect for agencies, SaaS and B2B sales.
- Find businesses without a website — set the website filter to "without a website" to build a targeted list for web-design and marketing offers.
- Market & competitor research — map saturation, ratings and categories across neighbourhoods or whole metros.
- Data enrichment — resolve names/addresses to phone, website, coordinates and place IDs for your CRM.
- Recurring monitoring — schedule the actor with monitor mode to capture only newly listed or changed businesses in a city or category.
How to use
- Sign up for Apify — the free plan is enough to try this actor.
- Open the Google Maps Scraper, enter one or more search terms and a location, and click Start.
- Watch results stream into the dataset table.
- Export as JSON, CSV, Excel, XML, or RSS — or pull results programmatically via the Apify API.
Input
{"searchQueries": ["coffee shops", "dentist"],"locationQuery": "Austin, TX","maxPlacesPerSearch": 120,"maxResults": 1000,"enrichContacts": true,"scrapePlaceDetails": true,"minRating": "4","websiteFilter": "all","sortBy": "leadScore"}
- searchQueries — what to look for (categories, business types, or names). Each is combined with the location.
- locationQuery — city / area, e.g.
Austin, TX,New York, NY,London, UK,Berlin, Germany. Geocoded automatically. Leave empty if you use coordinates or start URLs. - latitude / longitude / zoom (optional) — explicit search center instead of a location string.
- startUrls (optional) — paste Google Maps search URLs (
…/maps/search/<term>/@lat,lng,zoomz). - maxPlacesPerSearch (default 120) — Google returns up to ~120 places per search area; split big metros into multiple cities/terms for more coverage.
- maxResults (default 1000) — global cap after filtering & sorting.
- enrichContacts (default false) — crawl each place's website (home + contact/about) for emails, social profiles and phones. Google Maps never exposes emails — this is the only way to get them.
- scrapePlaceDetails (default false) — add the total review count, the full Monday–Sunday opening hours, a refined rating and a popular-times flag. Google only serves these on its rendered place page, so this opens each place in a real browser — slower and billed per place — but gives you the review-volume and full-hours data the fast pass can't.
- detailConcurrency (default 4) — parallel place pages when
scrapePlaceDetailsis on (run with ≥4 GB memory). - minRating / categoryFilterWords / websiteFilter / skipClosedPlaces / withPhoneOnly / withEmailOnly / nameQuery — filters.
- language (hl) / countryCode (gl) — localisation.
- sortBy —
leadScore(default),rating, ordistance. - monitorMode / monitorKey — emit only new / changed places across runs.
Output
One record per place (type: "place"). reviewsCount, openingHours (full week) and hasPopularTimes are present when scrapePlaceDetails is on; emails / socialProfiles / contactPhones when enrichContacts is on. Empty fields are omitted, so exports never carry blank columns:
{"type": "place","placeId": "ChIJm3f11RnLRIYRvuJG0P8_6bw","cid": "13612481716647551678","fid": "0x8644cb19d5f5779b:0xbce93fffd046e2be","kgmid": "/g/11wqplhln0","title": "BRB Coffee","categoryName": "Coffee shop","categories": ["Coffee shop", "Espresso bar"],"description": "Cozy neighbourhood coffee bar","address": "3501 Guadalupe St, Austin, TX 78705","street": "3501 Guadalupe St","neighborhood": "North University","city": "Austin","state": "TX","postalCode": "78705","countryCode": "US","latitude": 30.3012578,"longitude": -97.7386692,"plusCode": "8R29+QV Austin, Texas","phone": "(614) 772-8409","phoneUnformatted": "+16147728409","website": "https://brbcoffee.com/","domain": "brbcoffee.com","totalScore": 4.8,"reviewsCount": 1284,"status": "Open · Closes 7 PM","openNow": true,"hoursToday": "7 AM–7 PM","openingHours": [{ "day": "Monday", "hours": "7 AM–7 PM" },{ "day": "Tuesday", "hours": "7 AM–7 PM" }],"hasPopularTimes": true,"additionalInfo": { "Accessibility": ["Wheelchair accessible entrance"] },"imageUrl": "https://lh3.googleusercontent.com/…","emails": ["hello@brbcoffee.com"],"socialProfiles": { "instagram": "https://instagram.com/brbcoffee" },"contactPhones": ["+16147728409"],"leadScore": 86,"url": "https://www.google.com/maps/place/?q=place_id:ChIJm3f11RnLRIYRvuJG0P8_6bw","searchString": "coffee shops in Austin, TX","scrapedAt": "2026-06-23T12:00:00.000Z"}
Automate & schedule
Run this actor on autopilot and pull results into your own stack:
- Apify API — start runs, fetch datasets, and manage schedules over REST.
- apify-client for JavaScript and apify-client for Python — official SDKs.
- Schedules — run it hourly/daily/weekly to watch a city or category for new businesses; perfect for lead pipelines.
- Webhooks — trigger downstream actions (CRM import, Slack alert, email sequence) the moment a run finishes.
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'MY_APIFY_TOKEN' });const run = await client.actor('scrapesage/google-maps-scraper').call({searchQueries: ['plumbers'],locationQuery: 'Phoenix, AZ',maxResults: 500,enrichContacts: true,websiteFilter: 'with_website',});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(`Got ${items.length} places & leads`);
Integrate with any app
Connect the dataset to 5,000+ apps — no code required:
- Make — multi-step automation scenarios.
- Zapier — push new leads straight into your CRM.
- Slack — get notified when a monitored search finds new places.
- Google Drive / Sheets — auto-export every run to a spreadsheet.
- Airbyte — pipe results into your data warehouse.
- GitHub — trigger runs from commits or releases.
Use with AI assistants (MCP)
The output is clean, LLM-ready JSON. Call this actor from Claude, ChatGPT, or any agent framework through the Apify MCP server — ask your assistant to "find the top-rated dentists in Austin with their phone and email" and let it run this scraper for you.
More scrapers from scrapesage
Build a complete local-business lead-gen stack:
- Website Contact Scraper — emails, phones & socials from any list of domains (pairs perfectly with this actor).
- Google Ads Transparency Scraper — see who's advertising what on Google.
- Facebook Ad Library Scraper — competitor ad intelligence.
- Bark Listing Scraper — service-provider leads from Bark.
- Thumbtack Scraper — home-service pro leads, reviews & hire data.
- BBB Scraper — Better Business Bureau profiles, ratings & accreditation.
- Eventbrite Scraper — events plus organizer leads with emails.
- LinkedIn Jobs Scraper — job postings as hiring-intent signals.
Tips
- Coverage: Google Maps caps a single search area at ~120 results. To exhaust a big metro, split into multiple
searchQueriesand/or cities, or pass tighter coordinates per neighbourhood. - Find prospects who need a website: set
websiteFilterto Only without a website. - Cleaner leads: combine
enrichContactswithwithEmailOnlyto keep only places that have a reachable email. - Recurring monitoring: turn on
monitorMode, give each saved search its ownmonitorKey, and pair it with a Schedule — you'll only pay for new / changed places. - Proxies: keep the default Apify Proxy; Google Maps responds cleanly through it.
- Cost control: the base search + contact enrichment is fast and cheap. Only turn on
scrapePlaceDetailswhen you actually need review counts / full weekly hours — it renders each place in a browser, so it's slower and billed per place. Combine it withmaxResultsto cap how many places get the (paid) detail pass.
FAQ
How do I scrape Google Maps for a specific city? Put the city in locationQuery (e.g. Austin, TX) and your category in searchQueries (e.g. dentist). The actor centres the search on that location automatically.
Does it need a Google Maps / Places API key? No. It reads Google Maps' own public data feed — no API key, no quota, no billing account, and far more fields than the official Places API returns.
Where do the emails come from? Never from Google Maps (it doesn't publish them). With enrichContacts on, the actor visits each business's own public website and extracts publicly listed contact emails and social links — the same thing a human visitor would see.
How do I get the review count and full weekly opening hours? Turn on scrapePlaceDetails. Google serves the total review count and the complete Monday–Sunday hours only on its rendered place page (not in the fast search feed), so this mode opens each place in a real browser — it's slower and billed per place (the placeDetails event), but it adds reviewsCount, openingHours for all seven days, a refined rating and a popular-times flag. Leave it off for the fastest, cheapest run; the base pass still returns the rating, today's hours and open/closed status.
Can I export to Google Sheets, CSV, or Excel? Yes — one click in the dataset view, or automatically on every run via the Google Drive integration.
How do I get only new businesses over time? Turn on monitorMode and run on a Schedule; the actor remembers what it has seen and emits only new or changed places.
Is scraping Google Maps legal? This actor collects publicly available data only. You are responsible for using the data in compliance with applicable laws (GDPR/CCPA for personal data) and Google's terms.
A field is missing on some records — why? Some places genuinely don't publish a website, phone or email. To keep exports clean, a field is simply omitted when it has no value (so CSV/Excel files never contain blank filler columns) — it's missing because the data doesn't exist, not because the scraper skipped it.
Need help?
Open an issue on the actor's Issues tab, or visit the Apify help center. Feature requests are welcome — this actor is actively maintained.