Google Maps Scraper
Pricing
Pay per usage
Go to Apify Store
Google Maps Scraper
Scrape Google Maps businesses with reviews, ratings, phone numbers, websites, and opening hours. Uses hybrid architecture for speed and reliability.
Pricing
Pay per usage
Rating
0.0
(0)
Developer
kane liu
Maintained by Community
Actor stats
0
Bookmarked
1
Total users
0
Monthly active users
2 days ago
Last modified
Categories
Share
Extract business data from Google Maps at scale — names, addresses, phone numbers, websites, ratings, opening hours, photos, and full customer reviews.
Architecture
Two-phase hybrid approach:
- Playwright search — opens Google Maps, extracts all results from
APP_INITIALIZATION_STATE[3](embedded protobuf-over-JSON, ~270KB per search) - HTTP RPC — uses
curl_cffiwith TLS fingerprint impersonation to fetch details (/maps/preview/place) and reviews (/maps/rpc/listugcposts) via Google's internal endpoints. 10x faster than browser-based scraping.
Features
- Full business profiles (name, address, phone, website, coordinates, category, price, hours, photos)
- Customer reviews with metadata (text, rating, reviewer, photos, dining ratings, owner replies)
- Geographic grid mode — subdivide any area into cells for complete coverage beyond the 120-result limit
- Residential proxy support with geo-targeting
- Anti-detection: TLS fingerprint rotation, randomized delays, cookie reuse from browser sessions
Input
| Parameter | Type | Default | Description |
|---|---|---|---|
searchQuery | string | required | What to search (e.g. "restaurants in Tokyo") |
maxResults | integer | 100 | Max places to scrape (1-10000) |
includeReviews | boolean | true | Scrape customer reviews |
maxReviewsPerPlace | integer | 10 | Max reviews per place (0 = unlimited) |
language | string | "en" | Language code (en, ja, de, fr...) |
country | string | "" | Proxy country code (US, JP, DE). Empty = no proxy |
gridBbox | string | "" | Bounding box: "min_lat,min_lng,max_lat,max_lng" |
gridCellSizeKm | number | 1.0 | Grid cell size in km (0.1-10.0) |
Output
{"place_id": "0x60188b78f26a7357:0x15ec7c200a23c52a","name": "Matsue Sushi","category": "Sushi restaurant","address": "2-24-12 Shibuya, Tokyo","phone": "+81 3-6452-6338","website": "https://example.com","latitude": 35.6583,"longitude": 139.7021,"rating": 4.9,"review_count": 287,"price_level": "$$$$","opening_hours": ["Mon: 11AM-3PM, 5PM-11PM"],"photos": ["https://lh3.googleusercontent.com/..."],"reviews": [{"reviewer_name": "Albert Huang","rating": 5,"relative_date": "a month ago","text": "I enjoyed the Rin course for dinner...","language": "en","meal_type": "Dinner","price_per_person": "¥7,000-8,000","food_rating": 5,"service_rating": 5,"atmosphere_rating": 5}]}
Usage Examples
Basic search:
{"searchQuery": "Italian restaurants in Manhattan", "maxResults": 50, "includeReviews": false}
With reviews:
{"searchQuery": "coworking spaces in Berlin", "maxResults": 30, "includeReviews": true, "maxReviewsPerPlace": 20, "language": "de", "country": "DE"}
Grid mode for full coverage:
{"searchQuery": "coffee shops", "maxResults": 500, "gridBbox": "35.658,139.698,35.665,139.710", "gridCellSizeKm": 0.5}
Cost
| Scenario | Places | Reviews | Est. Cost |
|---|---|---|---|
| Basic, no reviews | 20 | 0 | ~$0.05 |
| With reviews | 50 | 10/place | ~$0.30 |
| Grid mode | 200 | 5/place | ~$1.00 |
Limitations
- Single search returns 20-60 results. Use grid mode for more.
- Google may rate-limit heavy usage. Built-in delays help, but very large runs may need proxies.
- Protobuf-over-JSON structure can change without notice.
Related
Need to verify these businesses? Try Global Company Search — check company registration across 40+ country registries.