Google Maps Scraper
Pricing
from $2.90 / 1,000 results
Google Maps Scraper
Extract data from thousands of Google Maps locations and businesses, including reviews, reviewer details, images, contact info, including full name, email, opening hours, prices & more. Export data, run via API, schedule and monitor runs, or integrate with other tools.
Pricing
from $2.90 / 1,000 results
Rating
5.0
(1)
Developer
Boztek LTD
Actor stats
5
Bookmarked
1.2K
Total users
518
Monthly active users
0.29 hours
Issues response
2 days ago
Last modified
Categories
Share
A fast, reliable Google Maps scraping actor built for clean, consistent place data. Give it search terms and a location — get a structured dataset with the fields you actually need.
What it does
- Searches Google Maps by keywords, URLs, or Place IDs
- Divides the target area into a geographic grid for maximum coverage
- Scrolls through Google Maps search results and extracts place data
- Fast Mode (default): captures data directly from search result cards — no individual page visits
- Detail Mode: visits each place's detail page for complete data including phone, opening hours, and website
Scraping Modes
Fast Mode (detailGeneration: false, default)
Captures data directly from Google Maps search result lists without opening individual place pages.
Fields captured: Title, Rating, Review Count, Category, Partial Address, Google Maps URL.
Best for: large-scale searches where speed matters and basic info is sufficient.
Detail Mode (detailGeneration: true)
Visits each place's individual page to extract the full dataset.
Fields captured: Everything in Fast Mode, plus — Full Address (street, city, postal code, state), Phone, Website, Coordinates (precise), Plus Code, Opening Hours, Additional Info (amenities, accessibility, etc.), Place ID.
Best for: complete business profiles where phone numbers, hours, and websites are needed.
Pricing
| Mode | Dataset item fee | Usage-based fee | Total (est.) |
|---|---|---|---|
| Fast Mode | $2.90 / 1,000 places | — | ~$2.90 / 1,000 |
| Detail Mode | $2.90 / 1,000 places | $100 / 1,000 detail pages | ~$102.90 / 1,000 |
An initial actor fee of $0.008 is charged per run.
Free Tier
Free tier users receive a pre-built sample dataset of 100 New York City restaurants (Detail Mode format) instead of live scraping. No proxy or browser resources are used — results are returned instantly.
- If you request fewer than 100 results, only that many sample results are returned.
- The sample dataset includes: title, address, phone, website, coordinates, opening hours, ratings, and more.
- To scrape custom locations and search terms with live data, upgrade to a paid plan.
How billing events work
- Fast Mode — No usage-based fee. Only the standard Apify dataset item fee applies ($0.0029 per result).
- Detail Mode — 1
detail-generationevent ($0.10) per individual detail page visited → $100 per 1,000.
Proxy Auto-Selection
The actor automatically selects the right proxy type — you do not need to configure this manually.
| Condition | Proxy type | Reason |
|---|---|---|
Country unknown (no locationQuery or geocoding failed) | Datacenter | Cannot route without a country code |
| United States + Fast Mode | Datacenter | US datacenter IPs are reliable and cheap for list-level scraping |
| United States + Detail Mode | Residential (US) | Detail pages require local IPs to avoid geo-filtering |
| Any non-US country, any mode | Residential (target country) | Non-US datacenter IPs are routinely blocked or return wrong regional content, even for list searches |
The target country is detected automatically from locationQuery via geocoding. For example:
- Searching in Istanbul → Turkish residential IPs in both modes
- Searching in São Paulo → Brazilian residential IPs in both modes
- Searching in New York → US datacenter (Fast Mode) or US residential (Detail Mode)
If the target country cannot be determined, the actor falls back to datacenter proxy automatically.
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
searchStringsArray | Array | — | One or more search terms (e.g. ["restaurant", "cafe"]) |
locationQuery | String | — | Free-text location (e.g. "Istanbul", "Kadıköy, Istanbul") |
maxCrawledPlacesPerSearch | Integer | 50 | Global maximum number of places to scrape across all grid cells |
language | String | en | Language for Google Maps results |
detailGeneration | Boolean | false | Enable Detail Mode (visits each place page) |
startUrls | Array | — | Direct Google Maps search or place URLs |
placeIds | Array | — | List of Google Maps Place IDs |
maxRequestRetries | Integer | 3 | Retries per failed request |
maxConcurrency | Integer | 5 | Parallel browser pages |
navigationTimeoutSecs | Integer | 20 | Page load timeout in seconds |
verboseLog | Boolean | false | Enable debug-level logging |
How Geographic Search Works
When locationQuery is provided alongside searchStringsArray:
- Geocode the area — Nominatim (OpenStreetMap) converts the location text into geographic boundaries (polygon/bounding box).
- Generate a search grid — The polygon is divided into a grid of coordinate points. Denser grids for small areas, wider spacing for large ones.
- Search Google Maps at each grid point — For each point, a Google Maps search URL is opened (
/maps/search/{query}/@{lat},{lon},{zoom}z). - Scroll and collect — The search result feed is scrolled until no new results appear (stagnation) or the global limit is reached.
- Detail page visits (Detail Mode only) — Each collected place URL is visited individually for full data extraction.
This approach uses Google Maps' own index, which is far more complete than any third-party database.
Example Output
Fast Mode
{"title": "Karadeniz Pide Fırını","totalScore": 4.6,"reviewsCount": 892,"categories": ["Pide restaurant"],"address": "Moda Cd. No:12, Kadıköy","url": "https://www.google.com/maps/place/Karadeniz+Pide+Fırını/...","scrapedAt": "2025-03-06T14:22:10.000Z"}
Detail Mode
{"title": "Karadeniz Pide Fırını","totalScore": 4.6,"reviewsCount": 892,"categories": ["Pide restaurant"],"address": "Moda Cd. No:12, 34710 Kadıköy/İstanbul","phone": "+90 216 345 67 89","website": "https://karadenizpide.com","coordinates": { "lat": 40.9897, "lng": 29.0275 },"plusCode": "3GXJ+R2 Istanbul","openingHours": [{ "day": "Monday", "hours": "08:00 to 22:00" },{ "day": "Tuesday", "hours": "08:00 to 22:00" }],"additionalInfo": {"Service options": [{ "Dine-in": true }, { "Takeaway": true }]},"placeId": "ChIJ...","url": "https://www.google.com/maps/place/Karadeniz+Pide+Fırını/...","scrapedAt": "2025-03-06T14:22:10.000Z"}
Tips
- Use a specific
locationQuery(e.g."Kadıköy, Istanbul"rather than"Istanbul") for faster, more targeted results. maxCrawledPlacesPerSearchis a global ceiling — the actor stops as soon as this many places are collected, regardless of how many grid cells remain.- Fast Mode is recommended for discovery and lead generation at scale. Switch to Detail Mode only when phone numbers or opening hours are required.
- For direct place lookups, use
placeIdsorstartUrls— these skip the search step entirely.