Google Maps Scraper | Skips Leads You Already Have
Pricing
from $1.50 / 1,000 place scrapeds
Google Maps Scraper | Skips Leads You Already Have
Scrape Google Maps business listings by search query: name, category, address, phone, website, rating, review count, hours, coordinates. No login, no email guessing. Pay only per place delivered. Works in Claude, ChatGPT & any MCP agent.
Pricing
from $1.50 / 1,000 place scrapeds
Rating
0.0
(0)
Developer
The Mine Works
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
2 days ago
Last modified
Categories
Share
Google Maps Scraper: 12 Fields, Cross-Run Dedupe, No Login
Pay only for results delivered. Browse all Actors.
š° From $1.50 / 1,000 results.
Scrape Google Maps business listings by search query: 12 fields per place including name, category, address, phone, website, rating, opening hours, coordinates and the canonical Google Maps URL.
No login, no Places API key, no email guessing. Cross-run de-duplication is on by default, schedule the same query and pay only for businesses you have not already been charged for.
Why use this Google Maps scraper
deduplicateAcrossRunsturns a repeated query into a new-listings monitor. The actor remembers the places it has already delivered, so a weekly run bills for newly appearing businesses only.- Phone and website on the same row, the two fields that make a local-business list actionable.
- Bulk queries.
searchQueriesruns many searches in one run, and every row carriesquery_usedso merged output stays attributable. skipClosedBusinessesdrops permanently closed places before you pay for them.
Find local businesses by category and city
{"query": "dentist","location": "Austin, TX","maxResults": 50}
Run many searches in one go
Best for covering a category across a metro, or several categories in one city.
{"searchQueries": ["plumber in Austin, TX","plumber in Round Rock, TX","plumber in Cedar Park, TX"],"maxResults": 40}
Monitor a market for newly opened businesses
Schedule this input. With de-duplication on, later runs return and charge for places that were not in earlier runs.
{"query": "coffee shop","location": "Brooklyn, NY","maxResults": 60,"deduplicateAcrossRuns": true,"skipClosedBusinesses": true}
Scrape results in another language
{"query": "boulangerie","location": "Paris, France","language": "fr","maxResults": 50}
What data does the Google Maps scraper return
| Field | Description |
|---|---|
place_id | Google place identifier |
name | Business name |
category | Primary category |
address | Street address, with the business name stripped from the prefix |
phone | Phone number, where published |
website | Website URL, where published |
rating | Average star rating |
opening_hours | Parsed opening hours |
latitude, longitude | Coordinates |
google_maps_url | Canonical Maps URL |
query_used | The search that produced this row |
scraped_at | ISO capture timestamp |
Two keys, review_count and business_status, are present in the record shape but are not
populated from the compact map-search response this actor reads. They are stated here rather
than counted as delivered fields.
What people build with Google Maps business data
Local lead generation, a category plus a metro gives a call list with phone and website already attached, no enrichment step.
Agency prospecting, businesses with a phone but no website are a ready-made list for
web and marketing agencies.
New-business monitoring, de-duplicated scheduled runs surface businesses as they open, which is when they buy.
Market and territory mapping, coordinates and category density across a metro for franchise or field-sales planning.
Google Maps scraper FAQ
Do I need a Google Places API key? No. No key, no billing account, no quota.
Are email addresses included?
No. Google Maps does not publish them, and this actor does not guess or pattern-generate
them. You get website, which is the honest starting point.
How does cross-run de-duplication work?
The actor keeps a record of place IDs already delivered under your account and skips them on
later runs. Leave deduplicateAcrossRuns on for monitoring; turn it off for a full snapshot.
Why is review_count empty?
The compact search response Google returns for map searches does not carry it. Rather than
fabricate a number, the field is left unpopulated.
Can I search many cities at once?
Yes, with searchQueries. Each entry is a full search string.
What does it cost? Pay per place delivered, see the Pricing tab for the current rate.
Use in Claude, ChatGPT & any MCP agent
https://mcp.apify.com/?tools=themineworks/google-maps-search-scraper
Or call it programmatically with the Apify client:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });const run = await client.actor('themineworks/google-maps-search-scraper').call({query: 'coffee shops',location: 'Austin, TX',maxResults: 5,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items.filter((i) => !i._type));
š ļø Complete your Google Maps pipeline
This actor is the entry point to a full Google Maps and lead-gen suite:
- Google Maps Leads Scraper: the same search, plus MX-verified email addresses. Pay only for leads with a confirmed email.
- Google Maps Reviews Scraper: pull ratings, full review text, and owner replies for any business you found here.
Typical flow: google-maps-search-scraper finds the businesses, maps-leads adds verified emails for outbound, google-maps-reviews pulls reviews for reputation and market research on the same businesses.
Your feedback
Found a field that doesn't match what Google Maps shows, or want a field added? Reach out through the Apify profile. Bug reports with a query and location that reproduce the issue get fixed fastest.
Related guides
Last verified: 2026-08