Google Maps Scraper - $1/1k, Fast & Detailed Data
Pricing
from $1.00 / 1,000 result scrapeds
Google Maps Scraper - $1/1k, Fast & Detailed Data
Export public Google Maps listings worldwide. Fast mode returns lower-cost names, categories, ratings, reviews, locations, coordinates, IDs, and Maps URLs. Detailed mode adds phone, website, hours, and fuller addresses when available.
Pricing
from $1.00 / 1,000 result scrapeds
Rating
0.0
(0)
Developer
Md Jakaria Mirza
Maintained by CommunityActor stats
0
Bookmarked
4
Total users
2
Monthly active users
10 days ago
Last modified
Categories
Share
Production-grade Apify Actor for scraping public Google Maps business listings worldwide. Choose lower-cost Fast mode for search-feed fields or Detailed mode for phone, website, hours, and fuller addresses, then export to JSON, CSV, Excel, XML, or RSS.
This Actor is built with Node.js 20, TypeScript, Apify SDK v3, Crawlee, and Playwright. It blocks images, media, fonts, and tracking requests in every mode, and also blocks stylesheets in Fast mode, while preserving the Google Maps data requests needed for extraction.
Apify Store Listing
Title: Google Maps Scraper - $1/1k, Fast & Detailed Data
Short description: Export worldwide Google Maps listings in fast or detailed mode. Get names, ratings, reviews, categories, locations, and Maps URLs, with optional phone, website, hours, and fuller addresses.
Store description:
Google Maps Scraper - $1/1k, Fast & Detailed Data helps teams collect structured local business data from Google Maps searches worldwide. Use Fast mode to save names, categories, ratings, review counts, location text, coordinates, IDs, and Maps URLs directly from the search feed without opening every listing. Choose Detailed mode when phone, website, opening hours, and fuller address data are worth the additional runtime. Plus Code is attempted only by the optional detailed-mode missing-field retry.
It supports batch scraping by combining multiple keywords with multiple locations in a single run. Locations can be cities, countries, postal codes, neighborhoods, addresses, latitude/longitude pairs, the built-in 169-city high_demand_markets preset, or the broader 171-city world_major_cities preset. Country targeting is optional: leave countryCode empty for worldwide location-text based searches, or set it to bias Google Maps and proxy country for a specific market.
The Actor uses Pay Per Event plus platform usage pricing. The live Console price is the source of truth: result-scraped is currently $0.004 per saved result and apify-actor-start is $0.001 per allocated GB. Fast mode is the recommended default. When Apify Proxy is enabled without an explicit proxy group, the Actor tries lower-cost datacenter proxy first and retries once with Residential only if the first attempt fails before saving any result. Failed searches, empty locations, retries, and blocked pages do not create result-scraped events.
For first tests, use Fast mode with one keyword, one location, maxResults 5 or less, and maxCrawledPlacesPerQuery 5 or less.
Built for market research, local SEO audits, and retail site selection, this scraper is designed for repeatable production use and Apify Store publishing.
What It Extracts
- Business name
- Address or location text (Fast), with fuller address when available (Detailed)
- Phone number when shown (Detailed)
- Website (Detailed)
- Category
- Rating
- Reviews count
- Opening hours (Detailed)
- Latitude and longitude
- Google Maps ID
- Plus code (attempted during optional Detailed-mode missing-field retry)
- Google Maps URL
- Keyword, location, query, and scrape timestamp
Worldwide Use
This Actor is not limited to Kolkata, India, the United States, or any single country. It works globally because:
- Search locations are free-form strings, e.g.
Paris, France,Sao Paulo, Brazil,Shibuya, Tokyo, Japan,Dubai Marina, UAE. - The built-in
high_demand_marketspreset covers 169 commercial cities where local business data, local SEO, and market research use cases are most common. - The built-in
world_major_citiespreset covers 171 big and famous cities across North America, Latin America, Europe, the Middle East, Africa, South Asia, East/Southeast Asia, and Oceania. countryCodeis optional and defaults to noglcountry bias.- The proxy country is not forced by default.
- If you set
countryCode, the Actor also uses that country for proxy targeting unless you explicitly overrideproxyConfig.apifyProxyCountry.
For best accuracy, include the country in each location. For example, use restaurants in Georgia, USA or restaurants Tbilisi, Georgia instead of only Georgia.
Preset Strategy
high_demand_markets: best default for broad coverage. Focuses on rich metro areas, business hubs, startup hubs, GCC markets, English-speaking countries, EU business centers, India metros, and fast-growing APAC/LATAM cities where customers commonly use local business data, local SEO, and market research data.world_major_cities: broader global coverage for users who want famous cities across more regions, including tourism, emerging markets, and general business hubs.none: use only custom locations when the customer already knows the exact target market.
Use Cases
- Local business data: build business listing datasets with names, phones, websites, addresses, and Maps URLs.
- Market research: compare competitor density, ratings, and categories by city or region.
- Local SEO audits: check business presence, category choices, and public NAP data.
- Territory planning: understand business distribution before entering a new market.
- Retail and real estate analysis: identify dense commercial clusters and underserved areas.
Pricing and cost control
This Actor uses Apify Pay Per Event plus platform usage pricing. Prices can be changed only through Apify's pricing window or Support process, so always treat the live Console pricing as the source of truth before running large jobs.
| Event name | Price per event | 1,000 results | 10,000 results |
|---|---|---|---|
result-scraped | $0.001 active live | $1.00 | $10.00 |
apify-actor-start | $0.00005 active live | n/a | n/a |
Users pay the event prices plus platform compute, storage, transfer, and proxy usage generated by the run under the Actor's current live billing model. Residential proxy improves Google Maps reliability but can dominate platform usage. In measured one-result Residential runs, settled total platform usage ranged from about $0.039 in Fast mode to $0.083 in Detailed mode; older $0.0019-$0.0022 figures represented mostly compute and were not comparable all-in costs. After the datacenter-first release, verified Fast run pgPTIgELeosLkKb8O saved one real result for $0.003706 total platform usage with zero Residential transfer, about 90.6% below the comparable $0.039455 Residential run. Explicit proxy groups and custom proxy URLs are always respected.
Pricing was reduced on August 13, 2026 after the datacenter-first release lowered a verified one-result Fast run's platform usage. The $1.00 per 1,000 result event is positioned between focused low-price alternatives and fuller enrichment-heavy competitors. Platform usage remains additional and can vary substantially by batch size, mode, proxy fallback, and target market; the one-result proof is not a 1,000-result cost forecast.
Each accepted record is saved and charged through the Apify SDK's PPE-aware Actor.pushData(record, eventName) operation. The SDK limits dataset writes to chargeable items, so the Actor does not separately pre-charge a row before storage. If the run budget is exhausted, extraction stops.
Cost-control tips:
- Start with one keyword and one location.
- Keep
extractionMode=fastunless phone, website, and hours are required. - Use
maxResults1-5 for a test run. - Keep
maxCrawledPlacesPerQueryclose tomaxResults. - Leave
locationPresetasnoneunless you intentionally want a large multi-city run. - Keep
scrapeDetails=false; it is a Detailed-mode missing-field retry.
Input
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
keywords | array | yes | none | Business types or search terms. |
locations | array | no | none | Custom cities, regions, postal codes, addresses, or lat,lon pairs anywhere in the world. Required only when no preset is selected. |
locationPreset | string | no | none | Use high_demand_markets for 169 commercial hotspots, world_major_cities for broad global coverage, or none for custom locations only. Custom locations are added on top. |
maxResults | integer | no | 5 | Maximum saved rows per keyword/location pair. Start with 1-5 for tests; allowed range is 1-1,000. |
maxCrawledPlacesPerQuery | integer | no | 5 | Maximum place pages to inspect per query. Keep close to maxResults; planned core inspections across all queries are capped at 1,000 per run. |
language | string | no | en | Result language code, e.g. en, de, es, fr, ja. |
countryCode | string | no | none | Optional 2-letter country bias, e.g. gb, de, jp, ae. |
skipClosedBusinesses | boolean | no | true | Skip listings marked permanently closed. |
extractionMode | string | no | fast | fast saves search-feed fields without per-place navigation; detailed visits each place for richer fields. |
scrapeDetails | boolean | no | false | Detailed mode only: revisit a place once when phone or address is still missing; also attempts Plus Code. |
proxyConfig | object | no | Apify Proxy, automatic tiering | Without an explicit group, tries datacenter first and falls back once to Residential only after a failed zero-result attempt. Explicit groups, custom proxy URLs, and direct connection are respected. |
The Actor removes duplicate keywords and locations. The keyword/location cartesian product is capped at 1,000 queries, and planned core place inspections (queries x maxCrawledPlacesPerQuery) are capped at 1,000 per run. Optional missing-field retries can add navigation beyond that core count. At the default inspection cap of 5, high_demand_markets plans 845 core inspections and world_major_cities plans 855, so only one keyword fits with either full preset. Split broader searches into separate runs.
Fast mode saves each captured feed card without opening its place page. Detailed mode opens each captured listing once. When scrapeDetails is enabled in Detailed mode, the Actor performs one additional navigation only when phone or address is still missing and also attempts Plus Code.
Example Inputs
Quick Low-Cost Test
{"keywords": ["coffee shop"],"locations": ["London, UK"],"locationPreset": "none","maxResults": 5,"maxCrawledPlacesPerQuery": 5,"language": "en","countryCode": "gb","skipClosedBusinesses": true,"extractionMode": "fast","scrapeDetails": false,"proxyConfig": {"useApifyProxy": true}}
High-Demand Markets Batch
{"keywords": ["coffee shop"],"locationPreset": "high_demand_markets","maxResults": 5,"maxCrawledPlacesPerQuery": 5,"language": "en","skipClosedBusinesses": true,"extractionMode": "fast","scrapeDetails": false,"proxyConfig": {"useApifyProxy": true}}
Broad World Cities Batch
{"keywords": ["restaurant"],"locationPreset": "world_major_cities","maxResults": 5,"maxCrawledPlacesPerQuery": 5,"language": "en","skipClosedBusinesses": true,"extractionMode": "fast","scrapeDetails": false}
Custom Global Batch
{"keywords": ["coffee shop", "coworking space"],"locations": ["London, UK", "Berlin, Germany", "Tokyo, Japan", "Dubai, UAE"],"maxResults": 50,"maxCrawledPlacesPerQuery": 100,"language": "en","skipClosedBusinesses": true,"extractionMode": "detailed","scrapeDetails": true,"proxyConfig": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
Country-Biased Run
{"keywords": ["dentist"],"locations": ["Manchester", "Birmingham", "Leeds"],"maxResults": 200,"maxCrawledPlacesPerQuery": 300,"language": "en","countryCode": "gb","skipClosedBusinesses": true,"extractionMode": "detailed","scrapeDetails": true}
Coordinate Search
{"keywords": ["hotel"],"locations": ["25.2048,55.2708", "48.8566,2.3522"],"maxResults": 100,"extractionMode": "detailed","scrapeDetails": true}
Fast Core-Field Run
{"keywords": ["pizza"],"locations": ["New York, USA"],"maxResults": 200,"extractionMode": "fast","scrapeDetails": false}
Output dataset
The default Google Maps Business Listings dataset view is built for business research, local SEO, and market analysis exports. It shows business name, category, rating, review count, address, phone, website, opening hours, Google Maps URL, keyword, location, and scraped timestamp. The full JSON output also includes coordinates, Maps ID, Plus Code, and the combined query when available.
Verified small-run sample from an existing successful run:
{"title": "Hideaway Coffee House","address": "7 Farrier's Psge, London W1D 7DP","phone": null,"website": "https://www.instagram.com/hideawaycoffee/","category": "Coffee shop","rating": 4.7,"reviewsCount": 1241,"hours": ["Sunday: 9 am-5 pm","Monday: 7:30 am-5 pm","Tuesday: 7:30 am-5 pm"],"latitude": 51.5113375,"longitude": -0.1352386,"mapsId": "0x4876057cc8805b41:0x60c897012e57e344","plusCode": null,"url": "https://www.google.com/maps/place/Hideaway+Coffee+House/data=!4m7!3m6!1s0x4876057cc8805b41:0x60c897012e57e344!8m2!3d51.5113375!4d-0.1352386!16s%2Fg%2F11g4lm05yc!19sChIJQVuAyHwFdkgRRONXLgGXyGA","keyword": "coffee shops","location": "London","query": "coffee shops London","extractionMode": "detailed","scrapedAt": "2026-06-21T08:02:48.057Z"}
API Example
curl -X POST "https://api.apify.com/v2/acts/fascinating_lentil~google-maps-scraper/runs?token=YOUR_API_TOKEN" \-H "Content-Type: application/json" \-d '{"keywords": ["coffee shop"],"locations": ["London, UK"],"maxResults": 5,"maxCrawledPlacesPerQuery": 5,"language": "en","extractionMode": "fast","scrapeDetails": false}'
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });const run = await client.actor('fascinating_lentil/google-maps-scraper').start({keywords: ['coffee shop'],locations: ['London, UK'],maxResults: 5,maxCrawledPlacesPerQuery: 5,language: 'en',extractionMode: 'fast',scrapeDetails: false,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(`Got ${items.length} businesses`);
How It Works
- Validates input with clear errors.
- Builds one Google Maps search URL per keyword/location pair.
- Adds
hllanguage and optionalglcountry bias only when provided. - Runs Playwright through Crawlee sessions, trying Apify datacenter proxy first by default and using one Residential fallback only after a failed zero-result attempt.
- Scrolls Google Maps results until enough places are loaded or the feed ends.
- In Fast mode, parses and saves the search-feed card without per-place navigation.
- In Detailed mode, opens each place page; an optional missing-field retry can attempt phone, address, and Plus Code once more.
- Deduplicates records by Maps ID and title.
- Saves each record and charges
result-scrapedthrough one PPE-aware SDK operation.
Anti-Bot Handling
- Apify residential proxy support.
- Optional country-matched proxy targeting.
- Session pool with limited usage per session.
- Randomized scroll, click, and extraction delays.
- Retry support for transient blocks and navigation failures.
- Explicit CAPTCHA/unusual-traffic detection with session retirement.
- Graceful field-level fallback to
nullwhen optional data is unavailable.
Known Limits
- Fast mode does not provide phone, website, opening hours, or guaranteed full street addresses because it does not open place pages.
- The current default run timeout is 1 hour (
timeoutSecs: 3600in.actor/actor.json), the per-query handler timeout is 10 minutes, concurrency is capped at 2 in Fast mode and 1 in Detailed mode, and planned place candidates are capped at 1,000. Split larger multi-city jobs into separate runs. - Detailed-mode missing-field retry only fires when phone or full address remains missing after the first place-page pass.
- Duplicate detection is based on
mapsId(or title whenmapsIdis unavailable). Two chain stores with the same business name but differentmapsIdare kept as separate records.
Legal And Ethical Use
Use this Actor for legitimate business intelligence, local business data collection, local SEO, and market research. You are responsible for complying with Google Maps terms, privacy laws, anti-spam rules, GDPR, CAN-SPAM, and local outreach regulations in every country where you use the data.
This Actor is independent and is not affiliated with or endorsed by Google.
Responsible Use
This Actor is intended for lawful collection of publicly available information only. Users are responsible for ensuring their use complies with the source website's terms, robots.txt, applicable privacy laws, including India's DPDP Act, and all local regulations.
Do not use this Actor to collect, store, sell, or misuse personal data without a lawful basis. The Actor author is not responsible for misuse by end users.
License
Apache-2.0. See LICENSE.