Google Maps Extractor
Pricing
$19.99/month + usage
Google Maps Extractor
Extract business data from Google Maps fast—names, addresses, phone numbers, websites, and more. Perfect for building B2B lead lists, local SEO targeting, or sales outreach automation. Clean, structured results ready for CRM import.
Pricing
$19.99/month + usage
Rating
5.0
(2)
Developer
Scraper Engine
Maintained by CommunityActor stats
0
Bookmarked
22
Total users
0
Monthly active users
6 days ago
Last modified
Categories
Share
Google Maps Extractor — Business Name, Address, Phone and Rating
Google Maps Extractor turns a Google Maps search into a clean, deduplicated dataset of businesses and places. Give it a location and a keyword — or paste a Google Maps link — and get one row per place with the name, category tags, full address, phone, website, star rating, coordinates, Google place ID and today's opening hours, returned as structured JSON with no HTML parsing required. Start a run on the Apify Console below.
🧭 What is Google Maps Extractor?
Google Maps Extractor is an Apify Actor that queries Google Maps' own search surface for one or more location-and-keyword combinations (or Google Maps links) and returns deduplicated place records as structured JSON or CSV. It does not require a Google account, a Google Maps API key, or a browser — it talks directly to Google's search endpoint. It's built for local lead generation, market research, territory planning, and engineers feeding local-business data into an app or an AI agent.
What Google Maps place data is publicly available to scrape?
Google Maps shows business listings — name, address, category, rating and hours — to any visitor, with no sign-in required. The table below covers what this Actor returns and where Google actually puts up a login wall.
| Data category | Publicly available | Restricted (behind a Google account or business login) |
|---|---|---|
| Business name, address, phone, website | Yes | — |
| Category tags and average star rating | Yes | — |
| Coordinates and Google place ID | Yes (encoded in the map page) | — |
| Today's opening hours | Yes | Historical hours archives — not exposed on the map-search surface at all |
| A handful of review snippets | Yes, rendered on the place page | Full review pagination, photo uploads and writing a review — requires a signed-in Google account |
| Claiming, editing or replying to reviews on a listing | — | Requires a verified Google Business Profile login |
Google Maps Extractor only returns publicly visible data — what any visitor sees. Nothing behind a login wall.
What data can I extract with Google Maps Extractor?
Every dataset row carries 16 fields covering the place's identity, location, contact details, rating and today's hours — more than the 13 columns shown in the default dataset view (state, hours and rowType are in every row but sit in secondary views).
| Field | Description |
|---|---|
name | The place's display name, as shown on Google Maps |
full_address | Google's own one-line formatted address string, matching what Google displays |
street_address | Street line, parsed from Google's address components |
city | City, parsed from Google's address components |
state | State or administrative region — only present where Google publishes one for that country (see Limits below) |
zip | Postal code |
country_code | Two-letter country code |
lat / long | Latitude and longitude from Google's coordinate field, falling back to the place's entrance-point coordinate if the primary field is missing |
place_id | Google's unique place identifier (for example ChIJaXQRs6lZwokRY6EFpJnhNNE) — the key used to deduplicate |
tags | Array of category strings Google assigns to the place (for example "Coffee shop", "Cafe") |
phone | Phone number, formatted the way Google displays it locally |
website | Website URL published on the place's Google Maps listing |
avg_rating | Average star rating, 0–5, rounded to two decimals |
hours | Today's opening hours only — an array with day, the display string hours, and zero-padded 24-hour opens_at / closes_at |
rowType | Constant "place" — a stable row-type marker |
Identity and location fields
name, full_address, street_address, city, state, zip, country_code, lat, long, place_id, tags
Contact, rating and hours fields
phone, website, avg_rating, hours, rowType
🤖 Add-on: Need additional Google Maps data?
Pair this with TripAdvisor Review Scraper if you need reviews, ratings and reviewer detail for hotels and attractions in the same area, or with Facebook Events Scraper if you want events tied to a venue — names, dates, locations and organizers — for the same local-research project.
How does Google Maps Extractor differ from the official Google Places API?
Google's Places API (New) requires a Google Cloud project with billing enabled and an API key, and bills per request on a field-mask-driven SKU tier; Google Maps Extractor runs on Apify with no Google account or billing setup and bills per result row (checked on developers.google.com, 2026-08-04).
| Feature | Google Places API (New) | Google Maps Extractor |
|---|---|---|
| Access requirement | Google Cloud project, billing enabled, API key via X-Goog-Api-Key | Apify account only — no Google credentials |
| Pricing model | Per request, tiered by SKU (Essentials / Pro / Enterprise / Enterprise+Atmosphere) based on which fields you request | Per result row via Apify's pay-per-event pricing (row_result) |
| Opening hours | Place Details can return full 7-day hours (regularOpeningHours), billed at the Enterprise SKU | Today's hours only — this Actor's data source does not carry the full week |
| Area coverage per call | Nearby Search returns places around one point, bounded by that call's own field mask and result limits | One run tiles an entire geocoded area (a city, county or state) and merges/deduplicates results, up to maxResults (max 10,000) |
| Rate limits | Per-method quota per Google Cloud project, managed in the console | No published external rate limit; the Actor paces its own requests and escalates proxy tiers on repeated failures |
| Setup time | Create a GCP project, enable billing, generate and restrict an API key | Fill in the input fields and click Start |
Use the official API when you're already billed through Google Cloud and only need a handful of fields per place inside your own app. Use Google Maps Extractor when you want an entire area swept into one deduplicated dataset without managing a Google Cloud project or field-mask billing.
How to use Google Maps Extractor
No installation is required — the Actor runs on the Apify platform.
- Open Google Maps Extractor on the Apify Store and click Try for free (or Start, if you already have it in your account).
- Provide
keywords— the only required field. Addlocations(defaults to["New York"]) or paste one or more Google Maps links intourls. - Set
maxResultsif the default of 20 places isn't enough for your area. - Click Start.
- Download the results as JSON or CSV once the run finishes, or stream them from the dataset via the API.
How to scale to bulk place extraction
locations and keywords both accept arrays, and every keyword is searched in every location — so five cities times three keywords is fifteen searches in one run, with the maxResults budget split evenly across all of them. urls accepts a list of Google Maps links for the same run. There's no need to loop runs for multiple areas; add more entries to the arrays instead.
What can you do with Google Maps place data?
- 🏢 A local lead-generation agency uses
phoneandwebsiteto build a call list of businesses in a target area that don't yet have a site. - 📍 A retail site-selection analyst uses
lat,longandtagsto see how outlets of one category cluster across a city before picking a location. - 📊 A brand manager uses
name,avg_ratingandfull_addressto map every competing location in a market and compare ratings at a glance. - 🕒 A field-sales rep uses
hoursto check which prospects are open today before planning a driving route. - 🤖 An AI engineer indexes
name,tags,full_addressandavg_ratinginto a vector store to power a "best-rated coffee shop near X" retrieval-augmented agent.
How does Google Maps Extractor handle rate limits and blocking?
The Actor uses your Apify Proxy settings as given. If Google answers with HTTP 403, 429 or 503, or with a response that isn't a readable map payload, the Actor retries (up to 3 attempts per request) and, after repeated failures, escalates one connection tier — direct → datacenter → residential, or straight to residential if you already selected Apify Proxy groups. It does not solve CAPTCHAs. If every connection tier fails for the whole run, the run fails with an error message rather than reporting success on an empty dataset.
⬇️ Input
| Parameter | Required | Type | Description | Example value |
|---|---|---|---|---|
locations | No | array of strings | Cities, regions or neighborhoods to search — e.g. "New York", "Kyoto Japan", "Austin Texas". Larger areas are covered with a coarser grid. Default: ["New York"] | ["Austin, TX"] |
keywords | Yes | array of strings | Search terms exactly as you'd type into Google Maps. Every keyword is searched in every location. Default: ["coffee shops"] | ["coffee shops", "coworking spaces"] |
urls | No | array of strings | Google Maps links. The link's coordinates and zoom level define the search area; its search term or place name defines what is searched. Default: [] | ["https://www.google.com/maps/search/coffee+shops/@40.7128,-74.0060,13z"] |
maxResults | No | integer, min 1, max 10000 | Total unique places for the whole run. Duplicates across areas and keywords are merged on Google place ID. Default: 20 | 500 |
proxyConfiguration | No | object | Your proxy groups and country, passed through unchanged. Default: {"useApifyProxy": true} | {"useApifyProxy": true} |
Example input
{"locations": ["Austin, TX"],"keywords": ["coffee shops", "coworking spaces"],"urls": [],"maxResults": 500,"proxyConfiguration": { "useApifyProxy": true }}
⬆️ Output
Every run produces typed, normalized JSON with a consistent schema across runs — no HTML, no CSS selectors to maintain on your end. Download results as JSON, CSV, Excel, XML or RSS from the Apify Console, or pull them with the API/apify-client.
Example output
{"rowType": "place","street_address": "20 W 34th St.","city": "New York","zip": "10001","state": "New York","country_code": "US","full_address": "20 W 34th St., New York, NY 10001","website": "https://www.esbnyc.com/","avg_rating": 4.7,"name": "Empire State Building","tags": ["Observation deck", "Historical landmark", "Tourist attraction"],"place_id": "ChIJaXQRs6lZwokRY6EFpJnhNNE","phone": null,"lat": 40.7484405,"long": -73.9856644,"hours": [{ "day": "Sunday", "hours": "9 AM-12 AM", "opens_at": "09:00", "closes_at": "00:00" }]}
How does it work?
Each location is geocoded to a bounding box through OpenStreetMap's Nominatim service (a separate, identified request, never routed through the scraping proxy). That box is divided into tiles whose spacing and map "altitude" are derived from the box's own size, then visited from the middle outward. Each tile queries Google's map-search JSON endpoint directly — no browser rendering involved — and pages through it until Google stops returning new places. Every place is deduplicated by Google place ID and tested against the bounding box before being saved, so out-of-area results are discarded rather than shipped. Because the Actor reads Google's underlying data response instead of parsing the visual page, the output schema stays stable even when Google changes the Maps UI.
Integrations
Google Maps Extractor runs on Apify, so it works with anything that can call the Apify API.
Calling Google Maps Extractor programmatically
from apify_client import ApifyClientclient = ApifyClient("<APIFY_API_TOKEN>")run = client.actor("your-username/google-maps-extractor").call(run_input={"locations": ["Austin, TX"],"keywords": ["coffee shops"],"maxResults": 200,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["name"], item["full_address"])
Works in Go, Ruby, Node.js, cURL — any language that can make an HTTP request.
No-code tools (n8n, Make, LangChain)
In n8n, use the HTTP Request node (or the Apify community node) pointed at the Actor's run-sync endpoint to trigger a run and read results in the same workflow. In Make, the Apify module can start a run and pass the resulting dataset items into the next step. In LangChain, wrap the Actor as a tool with the Apify integration so an agent can call it and receive place records directly as tool output.
⚖️ Is it legal to scrape Google Maps places?
Scraping publicly available business listing data is generally legal — this is business and location data, not personal data about private individuals, so no personal-data regime like GDPR or CCPA applies to it. Google Maps Extractor only returns data any visitor to Google Maps can already see: name, address, phone, website, category, rating and today's hours. Your use is still governed by Google's own Terms of Service and, depending on your jurisdiction, database-rights law around bulk extraction and reuse of a compiled dataset. Consult legal counsel if your use case involves bulk storage of personal data (for example, if a listing's phone number identifies a sole proprietor rather than a business line).
❓ Frequently asked questions
What Google Maps place fields does Google Maps Extractor return?
The top fields are name, full_address, phone, website and avg_rating, plus category tags, coordinates and today's hours. See What data can I extract for the full list of 16 fields.
Does Google Maps Extractor require a Google account or login?
No. The Actor queries Google's public map-search endpoint directly with no Google sign-in, cookies, or API key. You only need an Apify account to start the run.
How many places can I extract in one run?
Up to 10,000 unique places per run — maxResults accepts 1–10,000, and the budget is split evenly across your location × keyword combinations and any links you add.
What happens if a search returns zero results?
If the run genuinely finds no places inside the requested area — a very narrow keyword in a small town, for instance — it finishes normally with a warning logged and an empty dataset; you are not charged for rows that were never produced. The run only fails outright if none of your locations or links could be resolved at all, or if every map request Google was sent failed to load.
Can I scrape multiple Google Maps areas or keywords at once?
Yes. locations and keywords are both arrays, and every keyword is searched in every location in the same run; urls accepts a separate list of Google Maps links alongside them.
Does Google Maps Extractor work with Claude, ChatGPT, and other AI agent tools?
Yes, as an HTTP endpoint — it's callable through the Apify API by any agent framework that can make a REST call, including LangChain's Apify tool wrapper.
How does Google Maps Extractor compare to other Google Maps scrapers?
This Actor's documented behavior is strict geofencing and deduplication: every place is tested against the geocoded bounding box before it is saved, and duplicates across keywords and areas are merged on Google place ID rather than returned twice. We did not verify feature claims from other Google Maps scrapers for this comparison (checked 2026-08-04) — review each listing's own documentation for its stated fields and limits.
Does Google Maps Extractor return data in a format LLMs can use directly?
Yes. Typed, normalized JSON with consistent field names across runs — no HTML parsing, no selectors. Pass it directly to an LLM, index it into a vector store, or feed it to an agent tool.
What happens when Google changes its layout or anti-bot system?
The Actor is maintained and its output schema is designed to stay stable across Google UI changes, since it reads Google's underlying map-search response rather than the rendered page. No specific fix turnaround time is promised.
Can I use Google Maps Extractor without managing proxies or browser infrastructure?
Yes. The Actor doesn't use a browser at all — it makes direct HTTP requests to Google's map-search endpoint — and it uses Apify Proxy (with automatic tier escalation on repeated blocks) so you don't have to manage proxy infrastructure yourself.
Which Google Maps place fields work best for AI training data and RAG indexing?
For RAG, index the high-information text fields: name, full_address and tags. For structured training data, place_id, lat, long and avg_rating return as consistent typed primitives (string, float, float, float) across every row.
🔗 Related scrapers
| Scraper | What it extracts |
|---|---|
| TripAdvisor Review Scraper | Reviews, ratings, reviewer profiles and owner responses for hotels and attractions |
| Facebook Events Scraper | Public Facebook events — names, dates, venues, locations and organizers |
💬 Your feedback
Found a bug or missing a field? Let us know through the Issues tab on the Actor's Apify Store page, or message the developer directly from the Console — reports like this drive the next update.