Google Maps Scraper for Leads, CRM, and Reviews avatar

Google Maps Scraper for Leads, CRM, and Reviews

Pricing

from $1.80 / 1,000 results

Go to Apify Store
Google Maps Scraper for Leads, CRM, and Reviews

Google Maps Scraper for Leads, CRM, and Reviews

Build local prospect lists, enrich CRM contact data, and monitor ratings and reviews from Google Maps. Export business names, phones, websites, ratings, and addresses.

Pricing

from $1.80 / 1,000 results

Rating

0.0

(0)

Developer

kane liu

kane liu

Maintained by Community

Actor stats

1

Bookmarked

18

Total users

3

Monthly active users

21 hours ago

Last modified

Share

Google Maps Scraper

Turn any Google Maps search into a local prospect list, CRM enrichment batch, or review-monitoring snapshot — in under a minute.

  • ✅ Search US businesses by category and location
  • ✅ Build three concrete workflows from one run: local prospecting, CRM enrichment, and review monitoring
  • ✅ Get names, phones, websites/socials, unit/suite, hours, ratings, reviews, plus task-ready flags like has_website, needs_enrichment, and has_recent_reviews
  • ✅ Download as Excel, CSV, or JSON — no coding required
  • ✅ Pay only for what you use: $0.0018 per Dataset row
  • ✅ Free $5 Apify credit on signup = roughly 2,700+ businesses in practice, depending on how many runs you split it across

If you're still copying dentists, yoga studios, plumbers, clinics, or restaurants off Google Maps one business at a time, this Actor turns that manual lookup into a task-ready dataset you can actually use.

Current production market: United States only. The Actor normalizes omitted country to US and rejects other country codes before calling the worker. The Console Test prefill requests three Chicago rows with reviews disabled.


Task-specific local examples

If you want smaller GitHub-style wrappers around the same public actor, start here:

  • ./examples/local-prospecting/README.md
  • ./examples/crm-enrichment/README.md
  • ./examples/review-monitoring/README.md

These examples reuse the same actor and same public input contract. They exist to show concrete workflows, not to create new SKUs.


What you can do with it

Type a category and city — get a complete list of every matching business with contact details ready to import into a spreadsheet or CRM.

To run this, all you fill in are three simple fields in the Apify input form at the top of this page:

What you enter:

WhatExample
Searchdentists in Chicago or yoga studios in Austin
How many results50
Include reviews?No (not needed for prospecting)

Click Start. A few seconds later, the Actor has run the search on Google Maps for you and dropped every matching business into a clean table:

What you get back:

NamePhoneWebsiteContactableNeeds enrichmentAddress
Smile Chicago Dental+1 312-555-0182smilecds.comYesNo123 N Wacker Dr
Lincoln Park Smiles+1 773-555-0349lpsmiles.comYesNo2047 N Clark St
………………

Every row has everything you need to reach that business, plus quick yes/no flags that tell you whether the record is already contactable and whether it still needs enrichment. Download the table as Excel, CSV, or JSON straight from the Apify dashboard, or connect it to Zapier or Make to have fresh results drop automatically into your CRM, Google Sheet, or Slack channel.


2. Cheaper alternative to Apollo or ZoomInfo for local businesses

Apollo is great for B2B executive emails at tech companies, but it doesn't have local businesses — dentists, plumbers, hotels, salons, restaurants. Google Maps does. Apollo costs $99/mo. This costs pennies per run.

Same simple input form as the first use case — you fill in a search, how many results, and whether you want reviews:

What you enter:

WhatExample
Searchplumbers in Denver CO or urgent care clinics in Seattle
How many results100
Include reviews?Yes
Reviews per business3

This time you turn reviews on. For outreach it's useful to see a recent review snippet you can reference in your first message — a warmer opening than a cold call. Each place and each review is a separate Dataset row.

What you get back:

NamePhoneWebsiteRatingSample review
Denver Pro Plumbing+1 720-555-0271denverpro.com4.8"Fast response, fixed same day"
Mile High Plumbers+1 303-555-0449milehighplumb.com4.3"Good price, professional crew"
……………

maxResults is the row budget for the search query (default 70), shared by places and reviews. Larger values are collected in parts of 70. For example, maxResults: 100 returns at most 100 rows for that query, not 100 places plus reviews, and the run stops at your maximum total charge. For a place row, review_count_scraped is null; its collected reviews are the rowType: "review" rows with the same place_id.


3. Fill in missing contact details in your CRM

You have a column of business names and cities in your CRM or spreadsheet, but the phones, websites, and hours are missing. Run this Actor to fill them in automatically.

Type the business name (plus its city to narrow things down) and ask for just one result — the exact match:

What you enter:

WhatExample
Searchcoffee in Chicago (one business at a time, or in batches)
How many results1
Include reviews?No

The Actor finds that specific business on Google Maps and returns the current contact details, plus a quick signal about what is still missing:

What you get back:

DetailValue
Phone+81 3-3463-3667
Websiteen.ichiran.com/shop/tokyo/shibuya
Missing fields[]
Needs enrichmentfalse
Rating4.4
Review count12,847
HoursMon–Sun 10:00 AM – 4:00 AM
Coordinates35.6617, 139.6982

For batch enrichment, feed a list of names through a Make or Zapier automation that runs this Actor once per row and writes the result back into your CRM field. A list of 500 companies takes about 10 minutes to enrich this way and costs around $1.50 total.


4. Monitor competitors, franchises, and rating changes

Run the same search on a weekly schedule and compare results over time. Catch rating drops, new competitor openings, hours changes, and fresh negative reviews before they become a problem.

Set up the Actor once with your target category and city, and turn reviews on so you can see which reviews are new each week:

What you enter:

WhatExample
Searchcoffee shops in Chicago
How many results60
Include reviews?Yes
Reviews per business5

Then use Apify's built-in Scheduler (or a Zapier / Make trigger) to run it once a week automatically. Each weekly run gives you a fresh snapshot, so you can compare against the previous one:

What you get back (scheduled weekly):

NameRating bucketLow ratingRecent reviewsMonitoring flags
Chicago Coffee HousesolidNoYes["recent_review_activity"]
Lakefront RoasterstopNoYes["recent_review_activity"]
……………

A simple spreadsheet diff (or an automation in Make/Zapier) is enough to flag competitors whose ratings dropped, who changed hours, or who got new reviews worth reading. The task-ready fields make this easier because you can filter directly on is_low_rating, has_recent_reviews, or monitoring_flags instead of re-deriving those rules yourself.


5. Use it from ChatGPT, Claude, or no-code automation

Ask your AI assistant (ChatGPT, Claude, Cursor) a question like "find me all bubble tea shops in San Francisco with rating above 4.5" — it runs this Actor and returns real, current data. Also works as a standard "Run Actor" step in Make, n8n, and Zapier.

Connect the Apify MCP server once in your assistant's settings (see the developer section below), and from then on you just ask questions in plain English inside the chat. Your assistant translates the question into the right Actor input and runs it for you:

What you enter (a plain-English question, not a form):

WhatExample
Searchbubble tea shops in San Francisco
How many results50
Include reviews?No

The assistant runs the search and shows the results back in the conversation, in table form:

What your assistant gets back:

NameRatingPhoneAddress
Boba Guys Mission4.6+1 415-555-01873491 19th St, SF
Teaspoon SF4.7+1 415-555-0234530 Bush St, SF
…………

You can follow up naturally — "which ones are open past 10pm?" or "sort by rating" or "export this to Google Sheets" — and your assistant will filter, sort, or pipe the data without having to re-run the search.


More Actors like this

Need another vertical — real estate listings, travel reviews, or e-commerce — or just a general URL scrape? Use a dedicated Actor below for structured fields. Stay on Google Maps Scraper for local businesses, places, phones, websites, ratings, and reviews.

Local lead gen & enrichment (closest matches)

Prefer a dedicated site scraper?

If your target has a specialized Actor below, use that first — usually cheaper and more structured than a generic scrape.

Real Estate

Travel & Stays

Jobs & Freelance

E-commerce

Social & Content

Ads Intelligence

General tools

→ See the full catalog in Related Actors below, or browse apify.com/lentic_clockss.


How to use (no code required)

  1. Click "Try for Free" at the top of this page
  2. Type a search — anything you'd type into Google Maps (e.g. yoga studios in Austin or hotels near Times Square)
  3. Set how many results you want (Console prefill 3; schema default 70)
  4. Choose whether to include reviews — each review is a billed Dataset row
  5. Click Start — your results appear in the Dataset tab within minutes, ready to download as Excel, CSV, or JSON

That's the whole workflow — type, wait, download. If you've ever typed a search into Google Maps on your phone, you already know how to use this Actor. The only difference is that instead of reading results one by one on a map, you get them back as a spreadsheet you can sort, filter, email, or pipe into any other tool.

The $5 free Apify credit you get on signup usually covers around 2,700+ businesses — enough to build your first real prospect list before spending anything, with the exact number depending on how many separate runs you use.


What you get back

Each business that matches your search comes back as one row in a table. Here's everything you'll see in that row:

  • Business name and category (e.g. "Ichiran Ramen" / "Ramen restaurant")
  • Contact details: phone number, website, and full address
  • Lead completeness keys (additive): phones[], emails[], addressParts (street / unit / locality / region / postal code / country), google_place_id, geo, person, org, web.website + web.socials[], leadSource, leadReveal, leadAbsences
  • Prospecting flags: has_phone, has_website, and is_contactable tell you whether the record is ready for outreach
  • Enrichment flags: missing_fields and needs_enrichment tell you what is still missing before you push the record into a CRM
  • Location: map coordinates and a direct Google Maps link
  • Reputation: star rating, total number of reviews, price level when Google shows one, and a simplified rating_bucket
  • Opening hours: the schedule for each day of the week
  • Photos: URLs to the photos shown on the business's Google Maps page
  • Reviews (when enabled, newest first): reviewer name, star rating, review text, date, photos, and sub-ratings for food / service / atmosphere where the reviewer gave them
  • Monitoring flags: has_recent_reviews, is_low_rating, and monitoring_flags[] help you spot records worth tracking every week

Each result set comes back as a table you can download as Excel, CSV, or JSON, or send directly to your CRM through Zapier or Make.

This format works directly in Excel, Google Sheets, Airtable, Notion, or any tool that accepts CSV imports. You don't need to do any data cleanup — the Actor returns everything already structured and ready to use, and the task-ready flags remove a lot of the manual filtering work that usually happens after export.

Lead / contact fields

Legacy columns phone, address (string), and website stay as they were. New keys are additive.

FieldTypeWhat it means on Google Maps
phones[{value, type, e164}]The phone Google shows for the place, e.g. +1 312-955-0288 with e164 +13129550288. type is unknown: US numbers do not say whether they are mobile or landline.
emails[]Not on Maps. Always empty. Reason in leadAbsences.emails. Use the business website (or Stealth Web Scraper) if you need inboxes.
addressstringStreet address without the business name, e.g. 346 N Clark St Unit 4709, Chicago, IL 60654
addressParts{street, unit, locality, region, postalCode, country, full}From Google's own address components (city, two-letter state, ZIP, US). unit is the suite or unit on the street line (Suite 208, #140, Unit 4709); empty when there is none.
google_place_idstringGoogle place ID (ChIJ…), usable with the Google Places API and for matching records in a CRM
categories[string]Every category Google lists for the place; category is the first
geo{lat, lng}Coordinates in addition to street, not instead of it
person{name, role}Not on Maps. No owner/agent name on the public place page. Reviewer names are not outreach contacts.
org{name, id}Place name + Google feature id (0x…:0x…, same as place_id)
web{website, socials[]}authority URL. Independent sites stay in website; Facebook/Instagram hosts go to socials
plusCodestringPlus Code of the place's coordinates, e.g. 85FPQW5X+8F
leadSourcesearchEvery contact field comes from the place's own Google Maps result
leadRevealvisibleSampled markets show phone/address without a “Show phone” click
leadAbsencesmapWhy a lead field is empty, in plain English (emails, person, phone, website, unit)

How it collects

  • Plain HTTP requests to the same endpoints the Google Maps app uses; no browser. One result page holds 20 places and takes about a second.
  • Phone, website, address, coordinates, rating, categories and the weekly opening hours come from the search result itself. Restaurants and some other places only list today's hours there; for those the Actor reads the place's own page once to get the full week.
  • Reviews are read 10–20 per request, newest first. maxReviewsPerPlace=0 means as many as Google gives, up to 500 per place.
  • Each run has a time limit of about 14 minutes. If the limit or a Google block stops a run early, you keep every place already collected and the run's status message says why.

Honest limitations

  • No public emails on Google Maps. Empty emails with a reason in leadAbsences.emails is expected, not a scrape miss.
  • No named contact person (owner/manager) on the place page.
  • Some places are mall/landmark only (no street number). That is addressParts.unit empty, not a gate.
  • US search feeds can include Sponsored cards (e.g. a Walmart ad on a coffee search). Filter category / name after export if you need organic-only.
  • google_maps_url is Google's official Maps link (api=1 with the Google place ID). Opening ?q=place_id:0x… with the hex id often fails.
  • Price level: Google only lists a spend-per-person range on a subset of places (it is reviewer-contributed). When present the Actor emits price_range (E:USD_* enum + $10–20 display + votes) and derives price_level $–$$$$ from it; when absent both stay empty — that is the place's data, not a miss.
  • Fewer results than requested: a regular search ends when Google has no more results, usually after a few hundred places. The run returns what exists and its status message says how many and why.

Data sources

All data comes directly from Google Maps — the same information you see when you search maps.google.com. Every run is a live search, not a cached snapshot. Results reflect the current state of Google Maps at the moment the Actor runs.

The current production contract is US-only. Other country codes are rejected until the worker and egress-control capability are deliberately widened together.


Pricing

Pay per Dataset row. Each place and each review is one billed row.

Billing is simple: you pay a tiny fee each time you kick off a run, plus the same per-row fee for each place or review the Actor returns.

What triggers a chargeCost
Actor start (each run)$0.005
Each Dataset row (place or review)$0.0018

To give you a feel for what this looks like in actual dollars for real-world work:

Real-world cost examples:

ScenarioBusinessesTotal cost
Quick test: dentists in one city20$0.041
Local prospect list: plumbers in a metro100$0.185
CRM enrichment batch: 500 named businesses500$0.905
Weekly competitor snapshot: 60 restaurants60$0.113
Full-area search: all restaurants in a neighborhood1,000$1.805

The cost scales linearly — double the businesses, double the cost. No tier thresholds, no surprise jumps.

$5 free Apify credit = roughly 2,700+ businesses in practice — enough to run a real campaign before you pay anything.


How this compares to the alternatives:

Here's what you'd pay with other common tools for similar local business data — or, in most cases, to discover they don't even offer it:

ToolPriceWhat you getWhat you don't get
Dun & Bradstreet Hoovers$5,388/yr (Essentials) — Enterprise $25K–$50K+/yrFirmographic data, credit riskLocal business data, real-time hours, reviews
ZoomInfo SalesOS$14,995/yr base, $30K–$60K+ in practiceB2B contacts, intent dataNo local business data at all
Apollo.io$49–$149/moB2B emails, job titlesNo local business phones, hours, or place data
Outscraper Google Maps API$3/1,000 records; 500 freeGoogle Maps data, pay-as-you-goNo direct integration with Make / n8n / ChatGPT
BrightLocal$39–$59/moLocal SEO rank trackingNot a data export tool — no downloadable result dataset
This Actor$0.005/run + $0.0018/businessGoogle Maps data + reviews, pay-per-use, no subscription—

No annual contract. No subscription. No seat minimum. $5 free credit covers roughly 2,700+ businesses in practice — start there.

If you run zero searches in a month, you owe zero dollars. None of the alternatives above work that way.


Connect to your tools

Use this Actor from any of the major no-code and automation tools. You don't need to write or edit any code — each tool has a built-in Apify connector that handles the wiring for you:

PlatformHow to connect
Make.comSearch "Apify" → "Run Actor" → use Actor ID lentic_clockss/google-maps-scraper
n8nAdd Apify node → "Run Actor" → same Actor ID
ZapierApify integration → "Run Actor" trigger
ChatGPT / Claude / CursorConnect via Apify's MCP endpoint — your AI assistant calls this Actor directly inside a chat
LangChain, Python, custom codeVia Apify SDK or direct API call

The three most common setups in practice:

  • With ChatGPT, Claude, or Cursor: connect once via MCP (configuration in the developer section below), then just ask questions in plain English inside the chat — "find me all coffee shops in downtown Austin with at least 4 stars" — and your assistant runs this Actor and returns the results right in the conversation.
  • With Make or Zapier: set up a scheduled automation (for example: "every Monday at 8am, run this Actor with these settings, then write the results to Google Sheets / email me a summary / post new competitors to Slack"). Configure once, it runs forever.
  • With n8n: same idea as Make and Zapier, with a self-hosted option if you need your data to stay on your own infrastructure.

When to use something else

This Actor is built specifically for local business data from Google Maps. For anything outside that scope, here are the tools that fit better:

If you need…Use this instead
B2B executive contacts, job titles, work emailsApollo.io or ZoomInfo — they're built for that
Local SEO rank tracking and citation monitoringBrightLocal — it's a monitoring dashboard, not a data feed
Company registry data (incorporation, officers, filings)Global Company Search
Scraping arbitrary websites behind anti-bot protectionStealth Web Scraper
Full coverage of a very large geographic areaUse the area-coverage mode (see developer parameters) — single searches cap at ~60 results
Officially licensed Google Maps data with an SLAGoogle Maps Platform API — more expensive, but has Google's support contract

FAQ

Q: How fresh is the data? A: Each run is a live search at run time. Results reflect what Google Maps shows at that moment — not a cached or pre-indexed snapshot. If a business updated its hours or got a new review an hour ago, you'll see it.

Q: Can I get 10,000+ businesses in one run? A: Use area-coverage mode (gridBbox, see developer parameters below): it splits a map region into up to 100 cells and searches each one, keeping only places inside the box. One run can collect thousands of places within its ~14-minute limit; split very large areas across several runs. Cost is about $18 per 10,000 businesses.

Q: Is this allowed under Google's Terms of Service? A: The data returned is publicly visible on Google Maps — no login required to see it. You're responsible for your own downstream use of the data and for evaluating Google's Terms of Service and any applicable local privacy laws. See the Legal section below.

Q: Do I have to pay extra for reviews? A: Reviews use the same unchanged per-row price as places. Each place and each review is one billed Dataset row, and maxResults caps the combined total.

Q: What countries and languages work? A: The current production market is the United States (country=US). English is the tested default. Unsupported country codes are rejected rather than silently falling back to the wrong proxy geography.

Q: Can I use this instead of Apollo or ZoomInfo? A: For local businesses, yes — dentists, restaurants, plumbers, hotels, salons, gyms. If you need phone numbers, addresses, hours, ratings, and reviews for physical businesses, this is the right tool. Apollo and ZoomInfo are strong on B2B contacts at tech and professional services companies (work email, job title, company revenue). They have no local business data. The two are complementary, not identical.

Q: What if one search does not return enough results? A: A single Google Maps search ends after a few hundred results. The Actor's area-coverage mode splits a map region into smaller cells and searches each one — see the developer parameter reference for how to configure it. Leave the city out of searchQuery in that mode (e.g. coffee), so each cell is searched on its own.



All 77 public Actors from [lentic_clockss]. Click a name to open the Store detail page.

Jobs & Freelance

Real Estate

E-commerce

Travel & Stays

Social & Content

Ads Intelligence

Local & Maps

General Tools

→ Browse the full profile: apify.com/lentic_clockss


Also Available

  • Direct API: https://opendata.best/api/v1/data — use with any HTTP client and your API key
  • Postman Collection: Fork and test — pre-built requests with example responses
  • GitHub: Collection source files — import JSON into any API client

Live-view web server OpenAPI schema

This Actor includes a real Actor Standby / Live-view web server schema at:

.actor/openapi.json

The schema is published and validated through .actor/actor.json:

{
"usesStandbyMode": true,
"webServerSchema": "./openapi.json"
}

Documented Standby endpoints:

  • GET / - service information and Apify readiness-probe response
  • GET /health - health check
  • GET /input-example - quick Google Maps scraping request examples
  • GET /openapi.json - returns the OpenAPI document packaged with the Actor
  • POST /search - runs a bounded Google Maps search from an HTTP request body
  • POST /run - runs the Actor with the full Google Maps Scraper input contract

For low-cost validation, use POST /search with maxResults: 1, includeReviews: false, and country: "US".