Google Maps Extractor avatar

Google Maps Extractor

Pricing

$19.99/month + usage

Go to Apify Store
Google Maps Extractor

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

Scraper Engine

Maintained by Community

Actor stats

0

Bookmarked

22

Total users

0

Monthly active users

6 days ago

Last modified

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 categoryPublicly availableRestricted (behind a Google account or business login)
Business name, address, phone, websiteYes
Category tags and average star ratingYes
Coordinates and Google place IDYes (encoded in the map page)
Today's opening hoursYesHistorical hours archives — not exposed on the map-search surface at all
A handful of review snippetsYes, rendered on the place pageFull review pagination, photo uploads and writing a review — requires a signed-in Google account
Claiming, editing or replying to reviews on a listingRequires 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).

FieldDescription
nameThe place's display name, as shown on Google Maps
full_addressGoogle's own one-line formatted address string, matching what Google displays
street_addressStreet line, parsed from Google's address components
cityCity, parsed from Google's address components
stateState or administrative region — only present where Google publishes one for that country (see Limits below)
zipPostal code
country_codeTwo-letter country code
lat / longLatitude and longitude from Google's coordinate field, falling back to the place's entrance-point coordinate if the primary field is missing
place_idGoogle's unique place identifier (for example ChIJaXQRs6lZwokRY6EFpJnhNNE) — the key used to deduplicate
tagsArray of category strings Google assigns to the place (for example "Coffee shop", "Cafe")
phonePhone number, formatted the way Google displays it locally
websiteWebsite URL published on the place's Google Maps listing
avg_ratingAverage star rating, 0–5, rounded to two decimals
hoursToday's opening hours only — an array with day, the display string hours, and zero-padded 24-hour opens_at / closes_at
rowTypeConstant "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).

FeatureGoogle Places API (New)Google Maps Extractor
Access requirementGoogle Cloud project, billing enabled, API key via X-Goog-Api-KeyApify account only — no Google credentials
Pricing modelPer request, tiered by SKU (Essentials / Pro / Enterprise / Enterprise+Atmosphere) based on which fields you requestPer result row via Apify's pay-per-event pricing (row_result)
Opening hoursPlace Details can return full 7-day hours (regularOpeningHours), billed at the Enterprise SKUToday's hours only — this Actor's data source does not carry the full week
Area coverage per callNearby Search returns places around one point, bounded by that call's own field mask and result limitsOne run tiles an entire geocoded area (a city, county or state) and merges/deduplicates results, up to maxResults (max 10,000)
Rate limitsPer-method quota per Google Cloud project, managed in the consoleNo published external rate limit; the Actor paces its own requests and escalates proxy tiers on repeated failures
Setup timeCreate a GCP project, enable billing, generate and restrict an API keyFill 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.

  1. Open Google Maps Extractor on the Apify Store and click Try for free (or Start, if you already have it in your account).
  2. Provide keywords — the only required field. Add locations (defaults to ["New York"]) or paste one or more Google Maps links into urls.
  3. Set maxResults if the default of 20 places isn't enough for your area.
  4. Click Start.
  5. 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 phone and website to build a call list of businesses in a target area that don't yet have a site.
  • 📍 A retail site-selection analyst uses lat, long and tags to see how outlets of one category cluster across a city before picking a location.
  • 📊 A brand manager uses name, avg_rating and full_address to map every competing location in a market and compare ratings at a glance.
  • 🕒 A field-sales rep uses hours to check which prospects are open today before planning a driving route.
  • 🤖 An AI engineer indexes name, tags, full_address and avg_rating into 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

ParameterRequiredTypeDescriptionExample value
locationsNoarray of stringsCities, 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"]
keywordsYesarray of stringsSearch terms exactly as you'd type into Google Maps. Every keyword is searched in every location. Default: ["coffee shops"]["coffee shops", "coworking spaces"]
urlsNoarray of stringsGoogle 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"]
maxResultsNointeger, min 1, max 10000Total unique places for the whole run. Duplicates across areas and keywords are merged on Google place ID. Default: 20500
proxyConfigurationNoobjectYour 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 ApifyClient
client = 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.

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.

ScraperWhat it extracts
TripAdvisor Review ScraperReviews, ratings, reviewer profiles and owner responses for hotels and attractions
Facebook Events ScraperPublic 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.