Google Maps Scraper
Pricing
from $15.00 / 1,000 results
Go to Apify Store

Google Maps Scraper
Scrapes Google Maps for places matching search queries. Extracts full details: name, address, phone, website, rating, hours, reviews, photos, Q&A, and popular times.
Pricing
from $15.00 / 1,000 results
Rating
0.0
(0)
Developer
Pramod Konde
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
Google Maps Scraper — Apify Actor
Scrapes Google Maps for places matching your search queries. Extracts full details:
- Basic info — name, address, phone, website, category, rating, price level, hours, coordinates
- Reviews — author, rating, text, date, owner response, likes
- Photos — high-resolution photo URLs
- Q&A — community questions and answers
- Popular times — hourly occupancy breakdown by day
Built with Crawlee + Playwright and Apify SDK v3.
Input
| Field | Type | Default | Description |
|---|---|---|---|
searchQueries | string[] | required | Search terms, e.g. "restaurants in New York" |
maxResultsPerQuery | number | 20 | Max places per query |
maxReviewsPerPlace | number | 10 | Max reviews per place (0 = skip) |
maxPhotosPerPlace | number | 10 | Max photo URLs per place (0 = skip) |
language | string | "en" | Google Maps language code |
scrapeReviews | boolean | true | Enable review scraping |
scrapePhotos | boolean | true | Enable photo URL collection |
scrapeQA | boolean | true | Enable Q&A scraping |
scrapePopularTimes | boolean | true | Enable popular times scraping |
proxyConfig | object | — | Apify proxy config (residential recommended) |
Example input
{"searchQueries": ["pizza in Manhattan", "coffee shops Brooklyn"],"maxResultsPerQuery": 30,"maxReviewsPerPlace": 20,"language": "en","proxyConfig": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
Running locally
# Install dependenciesnpm install# Run with Apify CLI (reads input from storage/key_value_stores/default/INPUT.json)apify run# Or run directly with tsx (for quick testing)npx tsx src/main.ts
Local input file
Create storage/key_value_stores/default/INPUT.json:
{"searchQueries": ["restaurants in London"],"maxResultsPerQuery": 5,"maxReviewsPerPlace": 3,"scrapePhotos": false,"scrapeQA": false,"scrapePopularTimes": false}
Deploying to Apify
Via Apify CLI
# Loginapify login# Push to Apify (creates or updates the actor)apify push
Via GitHub integration
- Push this directory to a GitHub repo (the actor root should be the repo root).
- In Apify Console → Actors → Create new → Link GitHub repo.
- Apify will auto-build on every push.
Output schema
Each place is saved as a dataset item:
{"placeId": "ChIJ...","name": "Joe's Pizza","url": "https://www.google.com/maps/place/...","searchQuery": "pizza in Manhattan","address": "7 Carmine St, New York, NY 10014","street": "7 Carmine St","city": "New York","state": "NY","postalCode": "10014","countryCode": "US","latitude": 40.7305,"longitude": -74.0022,"phone": "+1 212-366-1182","website": "https://joespizzanyc.com","category": "Pizza restaurant","rating": 4.6,"reviewCount": 8234,"priceLevel": "$","openingHours": [{ "day": "Monday", "hours": "10 AM–4 AM" }],"reviews": [{"reviewId": "...","author": "Jane D.","rating": 5,"text": "Best slice in NYC.","publishedAt": "2 weeks ago"}],"imageUrls": ["https://lh5.googleusercontent.com/..."],"qa": [{"question": "Is there outdoor seating?","answer": "No, it's takeout only."}],"popularTimes": [{"day": "Friday","hours": [{ "hour": 12, "occupancyPercent": 80, "timeLabel": "12 PM: Usually as busy as it gets" }]}],"scrapedAt": "2025-06-14T10:00:00.000Z"}
Notes
- Proxies — Google Maps aggressively blocks datacenter IPs. Residential proxies (Apify Residential group) are strongly recommended for production runs.
- Selectors — Google Maps frequently changes its DOM. If scraping breaks, selectors in
src/place-scraper.tsandsrc/search-handler.tsmay need updating. - Rate limiting —
maxConcurrencyis set to 3 by default. Increase at your own risk. - Comparable actor — Similar to
compass/crawler-google-placeson the Apify store.