Google Maps Scraper
Pricing
from $2.10 / 1,000 results
Google Maps Scraper
Extract business data from Google Maps at scale. Get names, addresses, phone numbers, websites, ratings, reviews, opening hours, popular times, photos, and 40+ data points per listing.
Pricing
from $2.10 / 1,000 results
Rating
0.0
(0)
Developer

AbotAPI
Actor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Google Maps Business Scraper

Extract business data from Google Maps at scale. Get names, addresses, phone numbers, websites, ratings, reviews, opening hours, popular times, photos, and 40+ data points per listing.
What Data Can You Extract?
Business Information
- Business name, category, subcategories
- Full address with street, city, state, postal code, country
- Phone number and website URL
- Google Place ID and Maps URL
Ratings & Reviews
- Average rating (1-5 stars)
- Total review count
- Individual reviews with text, rating, date, author
- Owner responses to reviews
Location Data
- Latitude and longitude coordinates
- Plus Code (Google's location code)
- "Located in" parent location (e.g., mall, airport)
Operational Details
- Opening hours (daily schedule)
- Popular times (hourly occupancy by day)
- Temporarily/permanently closed status
- Price level ($, $$, $$$, $$$$)
Rich Content
- Photo URLs (configurable limit)
- Menu URL
- Order/delivery links (DoorDash, UberEats, etc.)
- "People also search" related businesses
Search Context
- Search query that found the business
- Rank in search results
- Sponsored/advertisement indicator
Quick Start
Basic Search
{"searchStringsArray": ["restaurants"],"location": "New York, NY","maxResultsPerSearch": 100}
Search by Coordinates
{"searchStringsArray": ["coffee shops"],"lat": 40.7128,"lng": -74.0060,"zoom": 15,"maxResultsPerSearch": 50}
Large Area with Grid Search
{"searchStringsArray": ["hotels"],"customGeolocation": {"type": "Polygon","coordinates": [[[-122.5, 37.7], [-122.3, 37.7], [-122.3, 37.85], [-122.5, 37.85], [-122.5, 37.7]]]},"zoom": 16,"maxResultsPerSearch": 200}
With Reviews
{"searchStringsArray": ["dentists"],"location": "Chicago, IL","maxResultsPerSearch": 50,"maxReviews": 20,"reviewsSort": "newest"}
Direct Place ID Lookup
{"searchStringsArray": ["place_id:ChIJN1t_tDeuEmsRUsoyG83frY4"]}
Input Parameters
Search Options
| Parameter | Type | Default | Description |
|---|---|---|---|
searchStringsArray | string[] | ["restaurants"] | Search queries or Place IDs (place_id:ChIJ...) |
startUrls | object[] | [] | Direct Google Maps URLs to scrape |
location | string | "New York, NY" | Location text appended to search |
Geographic Targeting
| Parameter | Type | Default | Description |
|---|---|---|---|
lat | number | - | Latitude for coordinate search (-90 to 90) |
lng | number | - | Longitude for coordinate search (-180 to 180) |
customGeolocation | object | - | GeoJSON Polygon/MultiPolygon for grid search |
zoom | integer | 14 | Map zoom level (1-21). Higher = smaller grid cells |
country | string | - | Country filter |
state | string | - | State/region filter |
city | string | - | City filter |
postalCode | string | - | Postal/ZIP code filter |
Extraction Limits
| Parameter | Type | Default | Description |
|---|---|---|---|
maxResultsPerSearch | integer | 5 | Max results per search query (up to 10,000) |
maxReviews | integer | 0 | Max reviews per business (0 = skip reviews) |
maxImages | integer | 10 | Max photo URLs per business |
Output Options
| Parameter | Type | Default | Description |
|---|---|---|---|
reviewsSort | string | "relevant" | Sort reviews: relevant, newest, highest, lowest |
skipClosedPlaces | boolean | false | Skip closed businesses |
oneReviewPerRow | boolean | false | Output one row per review (for CSV) |
language | string | "en" | Language code for results |
Performance
| Parameter | Type | Default | Description |
|---|---|---|---|
maxConcurrency | integer | 5 | Parallel browser pages (1-20) |
proxyConfiguration | object | - | Apify proxy settings |
Resume Options
| Parameter | Type | Description |
|---|---|---|
resumeRunId | string | Run ID to resume from (loads previously scraped Place IDs) |
Output Schema
Each business is saved with the following structure:
{"placeId": "ChIJ49sQuK-AhYARM6U646SA12Y","title": "Blue Bottle Coffee","url": "https://www.google.com/maps/place/...","categoryName": "Coffee shop","address": "315 Linden St, San Francisco, CA 94102","street": "315 Linden St","city": "San Francisco","state": "CA","postalCode": "94102","countryCode": "US","phone": "+1 510-653-3394","website": "https://bluebottlecoffee.com","totalScore": 4.5,"reviewsCount": 1842,"priceLevel": "$$","location": {"lat": 37.7763,"lng": -122.4158},"plusCode": "QHFJ+8R Hayes Valley, San Francisco, CA","openingHours": [{ "day": "Monday", "hours": "7 AM - 6 PM" },{ "day": "Tuesday", "hours": "7 AM - 6 PM" }],"popularTimes": [{"day": "Monday","hours": [{ "hour": 7, "occupancyPercent": 20 },{ "hour": 8, "occupancyPercent": 45 },{ "hour": 9, "occupancyPercent": 65 }]}],"imageUrls": ["https://lh3.googleusercontent.com/..."],"peopleAlsoSearch": [{ "title": "Sightglass Coffee", "placeId": "ChIJ...", "url": "..." }],"menuUrl": "https://bluebottlecoffee.com/menu","orderLinks": [{ "platform": "DoorDash", "url": "https://..." }],"temporarilyClosed": false,"permanentlyClosed": false,"searchString": "coffee shops","rank": 3,"isAdvertisement": false,"scrapedAt": "2025-12-06T10:30:00.000Z","reviews": [{"name": "John D.","text": "Great coffee and atmosphere!","rating": 5,"date": "2 weeks ago","responseFromOwner": "Thanks for visiting!"}]}
Scaling to Millions of Records
Google Maps limits search results to ~120-400 per query. To scrape millions of businesses:
Strategy 1: Grid Search (Recommended)
Use customGeolocation to define a polygon. The scraper auto-generates grid points based on zoom level:
| Zoom | Grid Cell Size | Example: California |
|---|---|---|
| 14 | ~6 km | ~2,500 cells |
| 15 | ~3 km | ~10,000 cells |
| 16 | ~1.5 km | ~40,000 cells |
Each cell runs a separate search, so:
- 10,000 cells ร 200 results/cell = 2 million potential results
{"searchStringsArray": ["restaurants"],"customGeolocation": {"type": "Polygon","coordinates": [[[...california boundary...]]]},"zoom": 15,"maxResultsPerSearch": 200}
Strategy 2: Multiple Search Terms
Different queries return different businesses:
{"searchStringsArray": ["restaurants", "cafes", "bars", "hotels","gyms", "dentists", "plumbers", "lawyers"],"location": "Los Angeles, CA"}
Strategy 3: Neighborhood Batching
Run separate Actor calls per area:
# Run 1: Downtown{"searchStringsArray": ["restaurants"], "location": "Downtown, Los Angeles"}# Run 2: Hollywood{"searchStringsArray": ["restaurants"], "location": "Hollywood, Los Angeles"}
Resume & Recovery
Automatic Protection
- Deduplication: Place IDs saved to persistent storage
- Incremental saves: Results pushed immediately (never lost)
- Migration handling: State saved when Apify migrates servers
Manual Resume
If a run crashes, start a new run with resumeRunId:
{"searchStringsArray": ["restaurants"],"location": "San Francisco, CA","resumeRunId": "abc123xyz"}
The scraper loads Place IDs from the previous run and skips already-scraped businesses.
Anti-Detection Features
Built-in protections for reliable scraping:
- Browser fingerprint rotation
- Webdriver detection masking
- Human-like scrolling with random delays
- Rate limiting (30 requests/minute)
- CAPTCHA detection with exponential backoff
- Automatic retry with session rotation
Tip: For high-volume scraping, use residential proxies via proxyConfiguration.
Performance
| Metric | Typical Value |
|---|---|
| Speed | 800-1,200 listings/hour |
| Memory | < 1 GB |
| Concurrency | 1-20 parallel pages |
| Retry attempts | 3 per failed request |
Export Formats
Download from Apify Dataset:
- JSON - Full nested structure
- CSV - Flattened for spreadsheets
- Excel - .xlsx format
- XML - For integrations
Use Cases
- Lead Generation: Build prospect lists with contact info
- Market Research: Analyze competitors, pricing, ratings
- Local SEO: Track rankings and reviews
- Real Estate: Map amenities near properties
- Investment: Assess retail density and competition
- Data Enrichment: Add location data to existing records