Google Maps Scraper — Places, Reviews & Contact Data avatar

Google Maps Scraper — Places, Reviews & Contact Data

Pricing

from $0.003 / place scraped

Go to Apify Store
Google Maps Scraper — Places, Reviews & Contact Data

Google Maps Scraper — Places, Reviews & Contact Data

Scrape business listings from Google Maps. Extract name, address, phone, website, rating, reviews, coordinates, timezone and more. Fast parallel scraping with residential proxy support.

Pricing

from $0.003 / place scraped

Rating

5.0

(1)

Developer

Pika Choo

Pika Choo

Maintained by Community

Actor stats

2

Bookmarked

36

Total users

6

Monthly active users

4 days ago

Last modified

Share

Scrape Google Maps business listings for a flat $3 per 1,000 places with no API key. Type a search like dentists in London, get back names, addresses, phone numbers, websites, ratings, review counts, top reviews, GPS coordinates and open status as clean JSON, CSV or Excel.

Built for lead generation, local SEO and AI agents: pay per place, run it from the Apify API, the Python and JavaScript clients, or directly from Claude, Cursor and other agents through MCP.


Who uses this Google Maps scraper?

  • Lead generation and sales teams building lists of local businesses with phone numbers and websites
  • Local SEO and marketing agencies auditing client listings, ratings and competitor density
  • Market researchers mapping how many restaurants, gyms or clinics exist in a city or district
  • Real estate and travel platforms enriching listings with nearby amenities and attractions
  • Data and AI teams feeding Google Maps data into CRMs, dashboards, RAG pipelines and agents
  • Reputation teams tracking what customers say in reviews across locations

What data do you get from Google Maps?

Each result is one place. Fields follow the dataset schema exactly, so you can rely on them in code.

FieldDescription
titleBusiness name
categoryPrimary business category (e.g. "Coffee shop")
place_idURL-encoded place name from Google Maps
cidGoogle's internal numeric place identifier
linkDirect Google Maps URL for the place
addressFull street address
latitude / longitudeGPS coordinates
plus_codeGoogle Plus Code (open location code)
timezoneIANA timezone (e.g. America/New_York)
phoneBusiness phone number
websiteBusiness website URL
review_ratingAverage Google rating (1.0 to 5.0)
review_countTotal number of Google reviews
statusCurrent open/closed status with hours (e.g. "Open · Closes 9 PM")
descriptionBusiness description or editorial summary
price_rangePrice indicator ($, $$, $$$)
thumbnailURL of the main place photo
reviewsTop 10 reviews with reviewer name, rating, date and text (only when scrapeReviews is on)
search_queryThe query that found this place
scraped_atISO timestamp of the scrape

Fields that Google does not publish for a given place (for example phone or price_range) are returned empty or omitted rather than guessed.


How do I run it? Input options explained

Only query is required. Everything else has a sensible default.

InputDefaultWhat it does
queryrequiredThe Google Maps search, e.g. plumbers in Austin Texas
maxResults20Maximum places to return (1 to 500). Google Maps shows roughly 120 results per search, so split large areas into several queries
concurrency5Places scraped in parallel (1 to 10). Above 10 Google starts rate limiting
scrapeReviewsfalseAlso collect the top 10 reviews per place. Adds about 3 seconds per place
proxyConfigurationApify residentialProxy settings. Residential proxies give the best success rate against Google's bot detection

Find restaurants in a city

{
"query": "restaurants in New York",
"maxResults": 50
}

Lead generation for local businesses

{
"query": "plumbers in Austin Texas",
"maxResults": 100,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"]
}
}

Scrape reviews too

{
"query": "coffee shops in London",
"maxResults": 20,
"scrapeReviews": true
}

Tip: to cover a whole city, run one query per neighbourhood or postcode (cafes in Brooklyn, cafes in Queens) instead of one giant query. Google caps each search at around 120 places.


How much does it cost to scrape 1,000 Google Maps places?

Pricing is pay per event. You are only charged for places that were actually scraped.

EventPrice
Place scraped$0.003 per place
Actor start$0.00005 per GB of memory (one-time per run)

Worked example: a run with maxResults: 1000 that returns 1,000 places costs 1,000 × $0.003 = $3.00, plus a one-time start fee of about $0.0002 at the default 4 GB memory. Scraping 10,000 places across ten queries costs about $30. A quick 20-place test costs $0.06.

Because this Actor uses pay-per-event pricing, compute time and proxy traffic are covered by the per-place price. You do not pay separate platform usage for it. Set a spending limit on the run if you want a hard cap.


Sample output

One dataset item per place. Reviews appear only when scrapeReviews is enabled.

{
"title": "Joe's Coffee",
"category": "Coffee shop",
"place_id": "Joe's+Coffee",
"cid": "12345678901234567",
"link": "https://www.google.com/maps/place/...",
"address": "123 Main St, New York, NY 10001, United States",
"latitude": 40.7128,
"longitude": -74.006,
"plus_code": "Q257+V3 New York, USA",
"timezone": "America/New_York",
"phone": "+1 212-555-0100",
"website": "https://www.joescoffee.com",
"review_count": 843,
"review_rating": 4.5,
"status": "Open · Closes 9 PM",
"description": "Cozy neighborhood cafe serving specialty espresso drinks.",
"price_range": "$$",
"thumbnail": "https://lh3.googleusercontent.com/...",
"reviews": [
{
"name": "Maria K.",
"rating": 5,
"description": "Best flat white in the neighbourhood.",
"date": "2 weeks ago"
}
],
"search_query": "coffee shops in New York",
"scraped_at": "2026-04-08T12:00:00Z"
}

Download the dataset as JSON, CSV, Excel, XML or RSS from the run page or the API.


Use with AI agents and MCP

This Actor is exposed as an MCP tool, so Claude, Cursor, Windsurf, ChatGPT and any MCP-capable agent can search Google Maps and receive structured places without writing scraper code.

Typical agent prompts: "find 50 dental clinics in Manchester with phone numbers", "compare ratings of gyms near Union Square", "list hotels in Lisbon with more than 500 reviews".


Integrations: API, Python, JavaScript and automation

  • REST API: start a run with POST https://api.apify.com/v2/acts/openclawai~google-maps-scraper/runs?token=YOUR_TOKEN and read results from the run's default dataset.
  • Python: pip install apify-client, then call client.actor("openclawai/google-maps-scraper").call(run_input={...}).
  • JavaScript / Node.js: npm install apify-client, then client.actor("openclawai/google-maps-scraper").call({...}).
  • No-code: connect through Apify's Zapier, Make, n8n, Google Sheets and webhook integrations.
  • Scheduling: run it daily or weekly from the Apify Console to monitor ratings and new competitors.

Full code samples for every language are generated in the API tab of this page.


FAQ

Does Google Maps have an official API, and why not use it?

Yes, the Google Places API exists, but it requires a Google Cloud project, an API key, billing setup, and it returns at most 20 results per request with limited review data. This scraper needs no API key, returns up to 500 places per query, and costs a flat $3 per 1,000 places.

Can I use the Google Maps scraper API to get phone numbers and emails?

Phone numbers and websites are returned for every place that publishes them. Email addresses are not shown on Google Maps, so they are not included. Pair the website field with an email-finder tool if you need emails.

How many results can I scrape per query?

Google Maps returns roughly 120 places for a single search. maxResults accepts up to 500, but to reach that you should run several narrower queries (by neighbourhood, postcode or category) and combine the datasets.

How fast is it?

With the default concurrency of 5 and residential proxies, a 100-place run typically finishes in a few minutes. Enabling scrapeReviews adds about 3 seconds per place. Raising concurrency speeds things up, but values above 10 trigger Google's rate limiting.

Do I need proxies?

Google Maps has aggressive bot detection, so the Actor defaults to Apify residential proxies. Keep that default for anything beyond a small test. Use a country-specific proxy session to get localized results for that country.

What output formats are supported?

JSON, CSV, Excel, XML, HTML table and RSS, all from the same dataset. Three ready-made views are available: Overview, Contacts, and Full Data.

The scraper only collects publicly visible business information. Business names, addresses and phone numbers are generally not personal data, but reviews contain reviewer names, so store and process them in line with GDPR, CCPA and your local laws, and respect Google's terms for your use case. This Actor does not log into any account and does not bypass access controls.

What happens when Google blocks a request?

Blocked or failed places are skipped and not charged. If a run returns fewer places than expected, retry with residential proxies, a lower concurrency, or a more specific query.


Use this data responsibly. Do not use it for spam, harassment, or any purpose that violates applicable law or Google's terms of service. You are responsible for how you use the collected data.