Google Maps Scraper avatar

Google Maps Scraper

Pricing

from $0.99 / 1,000 results

Go to Apify Store
Google Maps Scraper

Google Maps Scraper

Google Maps Scraper — Extract business data from Google Maps, including names, categories, ratings, reviews, addresses, phone numbers, websites, opening hours, and locations. Useful for lead generation, local SEO, market research, and competitor analysis.

Pricing

from $0.99 / 1,000 results

Rating

0.0

(0)

Developer

Social Data API

Social Data API

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

21 hours ago

Last modified

Categories

Share

Google Maps Scraper — Name, Address, Phone, Website, Rating and Hours

Google Maps Scraper is a Google Maps business scraper that pulls local businesses by keyword and city, or from Maps links. Each place has its name, full address, phone number, website, star rating, categories, coordinates and opening hours, plus a review count on some rows. Every response is structured JSON — ready to pass directly to an LLM, index into a vector store, or feed a lead generation pipeline. No Google account or cookies needed. Start with one city, then scale to every market you sell in.

Google Maps Scraper: scrape data as JSON


What data can I extract with Google Maps Scraper?

Using this Google Maps Business API, you will be able to extract the following Google Maps place data:

📛 Business name🏠 Full address📞 Phone number🌐 Website
⭐ Average star rating💬 Review count (when Google includes it)🏷️ Categories🆔 Google place ID
📍 Latitude🧭 Longitude🕒 Opening hours per day🛣️ Street address
🏙️ City🗺️ State or region📮 Postal code🌍 Country code
📝 Notes (usually empty)✅ Row status

How to use Google Maps Scraper

Sales teams, agencies and researchers use it to collect Google Maps listings by keyword and location, one clean table of local businesses per run.

Copy to your AI assistant:

Google Maps Scraper (Apify Actor ID: socialdataapi/google-maps-scraper, https://apify.com/socialdataapi/google-maps-scraper) is an Apify Actor that returns businesses and places from Google Maps as structured JSON: name, full address, phone number, website, average star rating, review count, categories, coordinates and opening hours. Use it whenever someone needs local businesses without cookies, a login, or a browser - Google Maps lead generation lists, competitor maps for a city, or counts of one business type per area. Inputs: keywords (string[], required, what to search for, e.g. ["coffee shops"]; every keyword is searched in every location; the first keyword is also used for a map link with no search text), locations (string[], city, region or neighborhood names), urls (string[], Google Maps search links; the search text and map position are read from the link), maxResults (integer 1-10000, default 20, total unique places for the whole run), proxyConfiguration (object, optional Apify Proxy settings or custom proxy URLs used from the first request; default starts direct and switches to Apify Proxy on its own when Google blocks). At least one location or one URL is needed. Every row has the same 18 keys: name, street_address, city, state, zip, country_code, full_address, website, avg_rating, total_reviews, tags, notes, place_id, phone, lat, long, hours (list of {day, hours, open24Hour, close24Hour}) and success (always true). Rows are deduplicated by place_id, and each saved row is one row_result charge (pay per event). total_reviews is filled and hours covers the whole week on only part of the rows (on the others total_reviews is null and hours holds only today); notes is usually null. A merged copy of all rows is saved in the run's Key-Value Store under the key maps.json.

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

Point your AI assistant at the hosted Apify MCP server with this Actor preloaded as a tool, and it can run it on its own with the server's call-actor tool. No glue code, no scraping logic in your prompts.

$claude mcp add --transport http apify "https://mcp.apify.com?tools=socialdataapi/google-maps-scraper"

Step by step

  1. Create a free Apify account.
  2. Open Google Maps Scraper in the Apify Store.
  3. Enter your Google Maps keywords plus city or region names, or paste Google Maps search links.
  4. Click Start.
  5. Download or stream your results in JSON, CSV or Excel, so going from Google Maps to CSV is one click.

How to scale Google Maps Scraper to bulk

Put all your cities in the locations list and all your business types in the keywords list: the run searches every location and keyword pair, then your map links, and merges places found twice into one row. The place cap covers the whole run, up to 10,000 places, and each saved place is one row_result event. For more, schedule runs with different city lists in Apify Schedules or start runs in a loop from the Apify API. That is all a bulk Google Maps scraper job needs.


✨ Features

Google Maps Scraper fetches clean, structured places from Google Maps ⚡. It's ideal for building call lists, checking a client's local competitors, sizing a business category across cities and mapping where a type of business clusters.

It extracts, per place:

  • Business name and categories – the name and Google's category list
  • Phone number and website – the contact details on the listing, with a clean website link, so it doubles as a Google Maps phone number scraper
  • Average star rating and review count – the rating on every row, the review count on part of the rows
  • Full address – street, city, state, postal code and country code, plus one joined address line
  • Coordinates – latitude and longitude of the place
  • Opening hours – one entry per day with the hours text and opening and closing hour numbers

⚡ Each city is searched from end to end, and places outside the searched area are dropped before they are saved.


Use cases 💡

  • Sales rep — pull dentists' phone numbers across ten cities into one call list.
  • Local SEO agency — find competitors missing opening hours or a website, pitch the client.
  • Market researcher — compare place counts and star ratings for one category, city by city.
  • Franchise analyst — map business coordinates and categories to spot gaps for a new site.
  • AI engineer — feed names, addresses and ratings into a RAG index of local businesses.

Building an AI agent? Connect this actor over MCP and let it call the actor on its own.


Why choose this actor?

  • Hundreds of places per run. A recorded run returned 600 unique places for 3 cities × 3 keywords in 15.2 seconds, each with coordinates, categories and opening hours.
  • The numbers behind each place. A recorded coffee shop in Buda, Texas came back with a 4.8 star rating, 405 reviews, 3 categories and opening hours for all 7 days.
  • 18 fields, one row shape. Every place carries the same 18 fields, and duplicates across cities, keywords and links are merged by Google's place ID.

⬇️ Input

Google Maps Scraper input fields

Give it one or more keywords plus city names, Google Maps search links, or both. The keywords list is required, and the run also needs at least one location or one link.

ParameterRequiredTypeDescriptionExample value
locationsNo*array of stringsCity, region or neighborhood names. Each is searched with every keyword. No default.["Austin, Texas", "Denver, Colorado"]
keywordsYesarray of stringsWhat to look for. Every keyword is searched in every location; the first keyword is also used for a map link with no search text.["coffee shops", "dentists"]
urlsNo*array of stringsGoogle Maps search links. They run after all location and keyword searches, while the place cap is not reached yet. No default.["https://www.google.com/maps/search/coworking/@30.2672,-97.7431,13z"]
maxResultsNointegerTotal unique places for the whole run, across all locations, keywords and links. Default 20, allowed 1 to 10,000.200
proxyConfigurationNoobjectOptional Apify Proxy settings or your own proxy URLs, used from the first request. Without it the run starts direct and switches to Apify Proxy on a block.{"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"]}

* At least one location or one link is needed.

Free plan limits

Users on the Apify free plan can fetch up to 20 places per run (all locations, keywords and links together) and 200 places per month. When the limit is reached, the run finishes successfully with a status message explaining the limit. Upgrade to any paid Apify plan to remove these limits.

Accepted Google Maps link formats:

  • https://www.google.com/maps/search/coffee+shops/@30.2672,-97.7431,13z (search text and map center)
  • https://www.google.com/maps?q=dentists+austin (search text only; the area is looked up)
  • https://www.google.com/maps/@39.74,-104.99,12z (map center only; the first keyword is searched)

Example input

{
"locations": ["Austin, Texas", "Denver, Colorado"],
"keywords": ["coffee shops", "dentists"],
"urls": ["https://www.google.com/maps/search/coworking/@30.2672,-97.7431,13z"],
"maxResults": 200,
"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
}

⬆️ Output

Google Maps Scraper output: example JSON fields

Every place is one typed, normalized JSON item with the same 18 keys on every run, exported as JSON (default), CSV or Excel. The review count and the full week of opening hours are present on only part of the rows (on the others the review count is empty and the hours cover only today); the run also saves a merged copy of all rows as maps.json in its Key-Value Store.

Example output

[
{
"street_address": "200 Main St",
"city": "Buda",
"zip": "78610",
"state": "Texas",
"country_code": "US",
"full_address": "200 Main St Buda Texas 78610 US",
"website": "http://www.meridianbuda.com/",
"avg_rating": 4.8,
"total_reviews": 405,
"name": "Meridian",
"tags": ["Coffee shop", "Cocktail bar", "Live music venue"],
"notes": null,
"place_id": "ChIJB3_V_NBTW4YRYwo_O6SlGdE",
"phone": "(512) 312-4599",
"lat": 30.081949,
"long": -97.843013,
"hours": [
{ "day": "Wednesday", "hours": "7 AM-10 PM", "open24Hour": 7, "close24Hour": 22 },
{ "day": "Thursday", "hours": "7 AM-10 PM", "open24Hour": 7, "close24Hour": 22 },
{ "day": "Friday", "hours": "7 AM-12 AM", "open24Hour": 7, "close24Hour": null },
{ "day": "Saturday", "hours": "8 AM-12 AM", "open24Hour": 8, "close24Hour": null },
{ "day": "Sunday", "hours": "8 AM-6 PM", "open24Hour": 8, "close24Hour": 18 },
{ "day": "Monday", "hours": "7 AM-10 PM", "open24Hour": 7, "close24Hour": 22 },
{ "day": "Tuesday", "hours": "7 AM-10 PM", "open24Hour": 7, "close24Hour": 22 }
],
"success": true
},
{
"street_address": "2307 1/2 Manor Rd",
"city": "Austin",
"zip": "78722",
"state": "Texas",
"country_code": "US",
"full_address": "2307 1/2 Manor Rd Austin Texas 78722 US",
"website": "http://ufo-coffee.com/",
"avg_rating": 4.9,
"total_reviews": null,
"name": "UFO Coffee & Tea",
"tags": ["Coffee shop"],
"notes": null,
"place_id": "ChIJ0S8AJAC1RIYRLIa71SkPRXc",
"phone": "(512) 850-5150",
"lat": 30.2844193,
"long": -97.7173475,
"hours": [
{ "day": "Wednesday", "hours": "7 AM-4 PM", "open24Hour": 7, "close24Hour": 16 }
],
"success": true
}
]

How does it work?

To scrape Google Maps without a Google account, the actor reads the same public business listings any visitor sees on Google Maps, using plain HTTP requests and no browser. Each city name is turned into a map area that is searched from end to end. Requests start on a direct connection; when Google blocks one, the actor retries and switches to Apify Proxy on its own, stepping up to a stronger proxy if needed. Before the first search it checks that results land in the area you asked for. It returns only publicly visible data, what any visitor sees without logging in. Every row keeps the same 18 keys; if Google moves a value in its response, that value comes back empty instead of breaking the row shape.


How do you integrate Google Maps Scraper into your stack?

It works with what you already use: the Apify REST API from any language, MCP for AI agents, and no-code tools. As a Google Maps Places API alternative, it needs no Google Cloud project and no Google API key.

MCP integration for AI agents

Add the hosted Apify MCP server to your agent with one command:

$claude mcp add --transport http apify "https://mcp.apify.com?tools=socialdataapi/google-maps-scraper"

This registers the Apify MCP server with this actor already added as a tool, so your agent can call it directly with call-actor. Compatible clients include Claude Code, Cursor and Windsurf.

No-code tools (n8n, Make, LangChain)

  • n8n: add the Apify node, choose "Run an Actor", pick this actor and paste your input JSON. Pass the returned places to the next node, such as Google Sheets or your CRM.
  • Make: use the Apify app's "Run an Actor" module with this actor, then its "Get Dataset Items" module to map each place into your scenario.
  • LangChain: install langchain-apify and wrap this actor with ApifyActorsTool, so your agent can run a search and read the places as tool output.

Collecting publicly visible business listings from Google Maps is generally lawful, as long as you respect how the data may be stored and used. This actor returns only publicly available data, what any user sees without logging in: business names, addresses, phone numbers, websites, star ratings and opening hours. It collects no review texts and no reviewer profiles. Under GDPR, scraping public data is generally permissible, but storing and using it must comply with local data-protection law, because a sole trader's name or phone number can still count as personal data. Consult legal counsel if your use case involves bulk storage of personal data.


Frequently asked questions

What fields does Google Maps Scraper return?

The top five are the business name, full address, phone number, website and average star rating. Every row also carries the review count, categories, place ID, coordinates and opening hours; see the data fields section.

Does Google Maps Scraper require a Google Maps account or login?

No. Only public place data is extracted, the same results a logged-out visitor sees. No credentials or Google API key are needed.

How fast does Google Maps Scraper run?

Recorded local runs took 4.8 seconds for 20 places, 5.4 seconds for 200 places, and 15.2 seconds for 600 places across 3 cities × 3 keywords. The data is live, fetched from Google during the run and never cached.

What happens if a place is private or doesn't exist?

Google Maps places are public, so there is no private case; what can fail is the area. If a city name can't be found, or a map link has no usable area, the log shows a warning, that search is skipped and the run goes on, and the end-of-run summary counts skipped entries. A search with no matching places adds no rows, so check for an empty dataset in your code rather than an error.

Can I scrape multiple Google Maps places at once?

Yes. Add several cities and keywords, and every pair is searched in one run before any map links. The run stops at your place cap, up to 10,000 places, and merges duplicates.

Does Google Maps Scraper work with Claude, ChatGPT, and other AI agent tools?

Yes — Google Maps Scraper is available as an MCP tool through the hosted Apify MCP server. Register the server in Claude Code, Cursor or Windsurf with claude mcp add --transport http apify "https://mcp.apify.com?tools=socialdataapi/google-maps-scraper", and the agent can call the actor right away. Any agent that can call an HTTP endpoint can use the Apify REST API directly.

Does Google Maps Scraper return data in a format LLMs can use directly?

Yes. Every place is typed, normalized JSON with the same field names on every row. There is no HTML parsing and no selectors, so you can pass rows straight to an LLM, index them into a vector store or feed them to an agent tool without a transformation step.

What happens when Google Maps changes its layout or updates its anti-bot system?

Blocks are handled on the actor's side by switching to a stronger Apify Proxy tier. If Google changes its response format, the row shape stays the same 18 keys and the affected value comes back empty until the actor is updated, so your code does not need to change.

Can I use Google Maps Scraper without managing proxies or browser infrastructure?

Yes. The actor uses plain HTTP requests, so there is no browser to run, and it retries and switches to Apify Proxy on its own when Google blocks. You send one request and get structured JSON back. No proxy accounts, no headless browser setup, no maintenance.

Which Google Maps place fields work best for AI training data and RAG indexing?

For RAG, use the text-rich fields: business name, full address, categories and website. For training data, use the numeric fields: average star rating, review count and coordinates. Ratings and coordinates are numbers, the review count is an integer, and categories and opening hours are lists, so flatten the hours if your pipeline needs plain text.


Your feedback

Found a bug or missing a field? Let us know through the Issues tab on this Actor's page in the Apify Store. Reports about empty fields help keep the Google Maps data extractor in line with Google's latest response format.