Google Maps Scraper avatar

Google Maps Scraper

Pricing

from $2.00 / 1,000 business scrapeds

Go to Apify Store
Google Maps Scraper

Google Maps Scraper

Turn any Google Maps search into clean business leads: names, addresses, phones, websites, ratings, and hours. You only pay for the businesses returned. Add decision-maker contacts, verified work emails, and full Google reviews as paid add-ons. No proxies, no login.

Pricing

from $2.00 / 1,000 business scrapeds

Rating

5.0

(1)

Developer

Atomus APIs

Atomus APIs

Maintained by Community

Actor stats

1

Bookmarked

16

Total users

6

Monthly active users

12 hours ago

Last modified

Share

GOOGLE MAPS SCRAPER  •  GOOGLE MAPS API

A lead list for any
city, in one search.


Any keyword and any place, into one structured record per business: name, address, phone, website, category, hours, rating and the full per-star review breakdown, with GPS and Google's place IDs. Then, optionally, the decision-maker at each one and their verified work email. Every search filter is free.

PAY PER BUSINESS RETURNED  UP TO 700 BUSINESSES PER SEARCH 

Copy to your AI assistant

Paste this into ChatGPT, Claude, Cursor, or any LLM to start using this Actor right away.

atomus/google-maps-scraper is an Apify Actor that turns a Google Maps keyword search into structured JSON, one row per business: name, address plus a structured address_info, phone, website, domain, rating, reviews_count, rating_distribution (count per star), category and additional_categories, price_level, latitude/longitude, place_id/cid/feature_id, opening hours, open/closed status, is_claimed, total_photos, main_image and rank. Use it whenever someone needs local business data without an API key or a browser - local lead generation, market research, competitor mapping, or reputation prospecting. Run it with curl: curl -X POST "https://api.apify.com/v2/acts/atomus~google-maps-scraper/run-sync-get-dataset-items?token=APIFY_TOKEN" -H "Content-Type: application/json" -d '{"query":"dentist","location":"Austin,Texas,United States","maxResults":100,"requireWebsite":true}'. Or in Python: ApifyClient("APIFY_TOKEN").actor("atomus/google-maps-scraper").call(run_input={"query":"coffee shops","location":"Paris,Ile-de-France,France","maxResults":50}) then client.dataset(run["defaultDatasetId"]).list_items().items. Inputs: query (string, required), location ("City,State,Country" with no space after the commas; a bare country works too; defaults to United States), locationCoordinate ("lat,lng,zoom" e.g. "40.7128,-74.0060,14z", overrides location), languageCode (en, es, pt, fr, de, it, nl, pl, ru, tr, ar, id, ja, ko, zh-CN, zh-TW, hi, th, vi, sv), maxResults (int 1-700, default 20), and the free filters minRating, requireWebsite, skipClosed, exactMatch, category. Paid add-ons: maxReviews with reviewsSort ("newest"|"highest_rating"|"lowest_rating"|"relevant"), the recentBadReviewMaxRating ("1".."4") plus recentBadReviewPeriod ("3m"|"6m"|"12m"|"24m"|"all", where "all" is free) reputation filter, and maxLeadsPerPlace with leadSeniority, leadDepartment and findLeadEmails which add a leads array to each business. Billing is per business returned, with a floor of one business per 100 results scanned; reviews, leads and emails are billed only when you enable them and only when found. Full input schema, every enum and default, and the complete output field list: GET https://api.apify.com/v2/acts/atomus~google-maps-scraper/build/default

Google Maps MCP Server: use these Actors from ChatGPT, Claude or Cursor

Point your AI assistant at Atomus and it can build a local prospect list on its own: businesses from Maps, the people behind them, and their company data. No glue code, no scraping logic in your prompts.

{
"mcpServers": {
"atomus": {
"url": "https://mcp.apify.com?tools=atomus/google-maps-scraper,atomus/leads-finder,atomus/linkedin-company-scraper,atomus/linkedin-company-employees,atomus/linkedin-profile-scraper",
"headers": { "Authorization": "Bearer YOUR_APIFY_TOKEN" }
}
}
}

Then ask, in plain language:

"Find every dentist in Austin with a website and a rating under 4, get me the owner at each one with their email, and drop anyone at a practice with more than 50 staff."

That one sentence uses two Actors in a row. Pinning the tools= list is what keeps your assistant on these Actors instead of reaching for whatever scraper it finds first.


How to scrape Google Maps

A keyword in a place

{ "query": "coffee shops", "location": "San Francisco,California,United States", "maxResults": 50 }

location uses Google's own City,State,Country format, with no space after the commas. A bare country works too. Leave it empty and the search defaults to the United States.

Search around a point

{ "query": "plumber", "locationCoordinate": "40.7128,-74.0060,14z", "maxResults": 100 }

latitude,longitude,zoom (3z to 21z, higher is tighter, default 17z). It overrides location and costs the same.

Build an outreach list

{
"query": "dentist",
"location": "Austin,Texas,United States",
"maxResults": 200,
"requireWebsite": true,
"skipClosed": true,
"minRating": 3
}

requireWebsite, skipClosed, minRating, exactMatch and category are all free, and requireWebsite is worth setting before the leads add-on: a business with no website can never be enriched, so filtering first stops the search being spent on places you cannot use.

Find the businesses that recently took a bad review

{
"query": "hotel",
"location": "Miami,Florida,United States",
"maxResults": 200,
"recentBadReviewMaxRating": "1",
"recentBadReviewPeriod": "6m"
}

This returns only the businesses that received a review at or below that rating inside the window — the list a reputation agency prospects from. "all" (ever rated that low) is free, because Maps already returns each business's count of reviews per star and that count is complete. Dated windows cost money because only the reviews themselves carry a date, so those must be read.

Reach the owner, with a verified email

{
"query": "roofing contractor",
"location": "Denver,Colorado,United States",
"maxResults": 100,
"requireWebsite": true,
"maxLeadsPerPlace": 2,
"leadSeniority": ["owner", "founder"],
"findLeadEmails": true
}

Each business comes back with a leads array: full name, title, seniority, department, LinkedIn URL and company data, plus a verified email and email_status when findLeadEmails is on. You pay only for leads and emails actually found.


Input

ParameterTypeRequiredDefaultDescription
querystring✅ Yes(none)What to search: "coffee shops", "dentist", "plumber".
locationstringNoUnited StatesGoogle's City,State,Country format, no space after commas. A country alone works.
locationCoordinatestringNo(none)lat,lng,zoom (3z21z, default 17z). Overrides location. Free.
languageCodestringNoen20 languages, from es and pt to ja, ko, zh-CN and zh-TW. Free.
maxResultsintegerNo201 to 700 businesses. Billed per business returned.

Free filters: minRating (0–5, also drops unrated places), requireWebsite, skipClosed, exactMatch (the name must contain your search text), category (matches primary and secondary categories).

Paid add-ons: maxReviews with reviewsSort (newest, highest_rating, lowest_rating, relevant); recentBadReviewMaxRating (14) with recentBadReviewPeriod (3m, 6m, 12m, 24m, allall is free); maxLeadsPerPlace with leadSeniority, leadDepartment and findLeadEmails.

A category filter can exclude places you meant to keep. Google's categories vary and businesses classify themselves, so category is a sharper knife than it looks.


What data does the Google Maps Scraper return?

One row per business.

GroupFields
Identityname · original_title (the untranslated name, when Google localised it) · category · additional_categories[] · category_ids[] (stable and language-independent)
Contactphone · website · domain · contact_url (contact, menu or appointment link) · book_online_url
Locationaddress · address_info{address,city,zip,region,country_code} · latitude · longitude
Reputationrating · reviews_count · rating_distribution{1..5} (the count at each star) · hotel_rating
Operationshours (by day) · status (open now) · is_claimed · price_level · total_photos · main_image
Google IDsplace_id · cid · feature_id · contributor_url
Result contextrank · rank_group · is_directory_item · local_justifications (Google's "why this result")
Leads (add-on)leads[{full_name,title,seniority,department,linkedin_url,company_name,company_industry,company_employee_count,email,email_status}]

Example row

{
"name": "Blue Bottle Coffee",
"address": "66 Mint St, San Francisco, CA 94103",
"address_info": { "address": "66 Mint St", "city": "San Francisco", "zip": "94103", "region": "California", "country_code": "US" },
"phone": "+14156535228",
"website": "https://bluebottlecoffee.com",
"domain": "bluebottlecoffee.com",
"rating": 4.5,
"reviews_count": 1243,
"rating_distribution": { "1": 20, "2": 15, "3": 60, "4": 300, "5": 848 },
"category": "Coffee shop",
"additional_categories": ["Cafe", "Espresso bar"],
"price_level": "moderate",
"latitude": 37.7825,
"longitude": -122.4072,
"place_id": "ChIJ...",
"cid": "987654321",
"hours": { "monday": [{ "open": { "hour": 7 } }] },
"status": "open",
"is_claimed": true,
"total_photos": 342,
"main_image": "https://lh3.googleusercontent.com/...",
"rank": 1
}

With the leads add-on on, the same row also carries:

{
"name": "Neon Ambition",
"domain": "neonambition.com",
"leads": [
{
"full_name": "Jordan Slover",
"title": "Founder",
"seniority": "founder",
"department": "c_suite",
"linkedin_url": "https://www.linkedin.com/in/jordanslover",
"company_industry": "advertising services",
"company_employee_count": 16,
"email": "jordan@neonambition.com",
"email_status": "VALID"
}
]
}

How the bad-review filter reads reviews

For a dated period the Actor reads only the bad reviews, and all of them — never a sample of the newest few. The free per-star count says how many reviews sit at or below your threshold, so a business with 8 reviews of 2 stars or fewer has all 8 read, and one whose only 2-star review is the 150th most recent is still found. Only businesses with more than 200 bad reviews are sampled. Periods are deliberately coarse because many Google reviews carry only a relative date ("a month ago"), which answers "the last 3 months" cleanly and "the last 47 days" not at all.

Two consequences, both also stated on the input page: businesses never rated that low are discarded first, for free, so only real candidates cost anything — and you are billed for the reviews read, not only for the businesses that end up matching, because reading is what identifies a match. A search of 100 businesses where 60 have ever taken a 1-star bills reviews for 60 and may return 9.


How much does it cost to scrape Google Maps?

$0.003 per business ($3.00 per 1,000), or $0.002 on Apify Gold and above.

BusinessesFree–SilverGold+
100$0.30$0.20
1,000$3.00$2.00

Add-ons, only when you turn them on:

Add-onFree–SilverGold+
Review$0.0008$0.0005
Business lead found$0.006$0.006
Lead email found$0.006$0.006

The floor: one business per 100 results scanned. Running the search costs money whether or not your filters keep anything, so ask for 700 and keep 3, and you are billed 7 businesses ($0.021) rather than 3. An unfiltered search always bills exactly what you receive, and a search that returns nothing charges for one business. Failed searches are free.

Reviews bill a minimum of about 3 per business with the add-on on, even where the business has fewer, because the reviews lookup runs and bills regardless. Leads and emails are charged only when found — a business with no website, or a lead with no verifiable email, costs nothing.

Free plan: 10 businesses per calendar month, plus 1 business with reviews, 1 lead and 1 email so you can see every add-on's shape before paying. The counters reset on the 1st.


What do people use the Google Maps Scraper for?

  • Local lead generation: a city, a category and a website filter is an outreach list by lunchtime.
  • Reputation prospecting: the bad-review filter finds the businesses with a problem worth selling into.
  • Owner outreach: leads plus verified emails turn a map pin into a named person to contact.
  • Market and territory research: how many of a category a city really has, where they cluster, and what they charge.
  • Competitor mapping: every rival within a radius, with ratings and review volume.
  • Franchise and site selection: density, ratings and price level around a coordinate.
  • Data enrichment: match your own records to place_id and pull phone, hours and category.
  • AI agent context: hand an agent a whole local market as structured rows.

This Google Maps ScraperBrowser/cookie toolsOfficial Places API
API key / billing accountNot neededNot neededGoogle Cloud project + billing
SetupType a query and a placeInstall and babysit an extensionEnable APIs, keys, quotas
Results per searchUp to 700Whatever you scroll toPaginated, quota-capped
Per-star review breakdownYes, free on every rowRarelyNot exposed
Decision-maker contactsOptional add-on, per lead foundNoNo
PricingPay per business ($0.003, $0.002 Gold+)Your timePer-request, per-field pricing

FAQ

How do I scrape Google Maps without an API key?

Type a query and a location and run the Actor. There is no Google Cloud project, no API key and no quota to manage — you pay per business returned.

Can I use this from ChatGPT or Claude?

Yes, two ways. Paste the "Copy to your AI assistant" block above into any LLM and it will write the call for you. Or connect the Google Maps MCP server config above, and every Atomus Actor becomes a native tool your assistant can call on its own, including chaining several in one request.

What format does the location field need?

Google's own: City,State,Country with no space after the commasNew York,New York,United States, Paris,Ile-de-France,France. A country on its own also works. Leave it empty and it defaults to the United States.

How many businesses can one search return?

Up to 700. Google itself runs out of relevant local results for most searches well before that, so asking for more than a city has simply returns fewer — and you are not charged for what does not exist. For a bigger market, vary the location or narrow the query.

How much does it cost?

$0.003 per business ($0.002 on Gold and above). Reviews are $0.0008 each, leads and emails $0.006 each, and only when you enable them. Free Apify plans include 10 businesses per month plus one sample of each add-on.

Why was I billed 7 businesses when only 3 matched?

The search runs whether or not your filters keep anything, so there is a floor of one business per 100 results scanned. It only shows up when a filter throws almost everything away; an unfiltered search bills exactly what you receive.

Can I get the owner's email?

Yes. Set maxLeadsPerPlace above 0 to find decision-makers at each business, then findLeadEmails to look up and verify their work email. Both need the business to have a website, so pair them with requireWebsite. You pay only for what is found.

Can I get Google reviews too?

Yes. Set maxReviews per business, and reviewsSort to choose which ones you get: newest for recent complaints, lowest_rating for the worst regardless of date.

This Actor reads publicly visible business listings. You are responsible for using the output in line with applicable laws (GDPR/CCPA), Google's terms, and your own compliance requirements. It is an independent tool, not affiliated with Google.

Can I run this on a schedule?

Yes. Apify Schedules run the Actor on a cron interval and webhooks push each finished run into your systems — which is how a bad-review search becomes a daily prospect feed.


All Atomus scrapers

2.4M+ RESULTS DELIVERED

LinkedInProfile · Posts · Post search · Reactions · Comments · Company · Employees
Lead genLeads Finder
Google MapsPlaces & local businesses
TikTokVideos · Comments
X (Twitter)Tweets & profiles
RedNote 小红书Notes, users & comments
Douyin 抖音Profiles, videos & comments
Weibo 微博Posts & profiles
Bilibili 哔哩哔哩Videos & creators
---

Support

Hey, I'm Chico, founder of Atomus. I built this Actor and I answer the messages about it. Something broke? A field you need isn't there? Not sure it fits what you're doing? Send me a message, most answers come the same day.

💬  DM me on LinkedIn    or hello@dendelabs.com
---

⚠️ Disclaimer

This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Google LLC. Google Maps™ is a trademark of Google LLC. All trademarks are property of their respective owners.

Use the data extracted by this Actor in compliance with applicable data protection laws (GDPR, CCPA) and Google's terms of service. Do not use it for spam, harassment, or unlawful purposes.