Google Maps Business & Contact Scraper
Pricing
from $5.00 / 1,000 results
Google Maps Business & Contact Scraper
Scrape Google Maps businesses with emails, reviews, images & social links. 33% cheaper than alternatives — emails included in base price. Compass-compatible input.
Pricing
from $5.00 / 1,000 results
Rating
0.0
(0)
Developer
bootforge
Actor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Google Maps Scraper — Extract Business Emails, Reviews & Contacts
Extract business data, emails, phone numbers, reviews, images, and social links from Google Maps. Get 24 data fields per business at $5 per 1,000 results — emails included free, no add-on charges. Drop-in replacement for compass/crawler-google-places.
How to Scrape Google Maps for Business Leads
- $5 per 1,000 results — emails, social links, reviews, images all included (compass charges $6+ with emails)
- Fast — HTTP-first pipeline, no browser needed for basic scrapes (~1s per query)
- Deep email extraction — homepage + /contact + /about pages, with personal vs generic classification
- 24 data fields — more than any other scraper, including neighborhood, timezone, price level, and popular times
- Compass-compatible — same input field names, easy to switch
- Zero duplicates — deduplication by Google Maps place ID
- Open source — inspect the code, no black box
Use Cases
- Lead generation — Build prospect lists with verified emails and phone numbers for any industry or location
- Local SEO monitoring — Track ratings, review counts, and ranking positions for your clients or competitors
- Market research — Analyze business density, pricing, and categories across geographic areas
- Sales prospecting — Find businesses without websites or with low ratings that need your services
- Real estate analysis — Map businesses around properties to assess neighborhood commercial activity
- Franchise expansion — Identify underserved markets by analyzing competitor locations and density
What Data Can You Extract? (24 fields)
Always included (from HTTP — instant, no browser): name, address, phone, website, rating, categories, coordinates, place_id, google_maps_url, neighborhood, timezone, country_code, business_photo, open_status, scraped_at
With scrapeContacts: true (website crawl):
emails, email_type (personal/generic), social_links (Facebook, Instagram, LinkedIn, X, YouTube, TikTok)
With maxReviews > 0 or maxImages > 0 (detail page):
review_count, hours (full weekly schedule), reviews (author, rating, text, time, owner response), images (Google Maps photo URLs), price_level ($-$$$$), popular_times (current busy status)
Quick Start
{"searchStringsArray": ["dentist"],"locationQuery": "Austin, TX","maxCrawledPlacesPerSearch": 20,"scrapeContacts": true}
Switching from Compass / crawler-google-places?
Same field names — copy your config:
searchStringsArray, locationQuery, maxCrawledPlacesPerSearch, language, scrapeContacts, scrapePlaceDetailPage, placeMinimumStars, skipClosedPlaces, maxReviews, maxImages, scrapeSocialMediaProfiles
Input Parameters
| Parameter | Default | Description |
|---|---|---|
searchStringsArray | required | Search terms |
locationQuery | null | Location (e.g., Austin, TX) |
maxCrawledPlacesPerSearch | 100 | Max results per query |
scrapeContacts | true | Extract emails & social links from business websites |
scrapeSocialMediaProfiles | all true | Toggle per platform |
maxReviews | 0 | Reviews per business (0 = skip, saves time) |
reviewsSort | newest | Sort: newest, mostRelevant, highestRating, lowestRating |
maxImages | 0 | Images per business (0 = skip, saves time) |
placeMinimumStars | "" | Min rating filter (e.g., 4, 4.5) |
skipClosedPlaces | true | Skip permanently closed businesses |
website | allPlaces | Filter: allPlaces, withWebsite, withoutWebsite |
language | en | 19 languages supported |
geo_split | false | Auto-split large areas into grid |
geo_split_max_cells | 100 | Max grid cells (auto-adjusts) |
max_concurrency | 1 | Parallel detail pages |
proxy | null | Optional proxy config |
Sample Output — Google Maps Business Data
{"place_id": "ChIJb5gBC-u0RIYRHkntaUcdJGs","name": "ATX Family Dental","address": "1700 S 1st St, Austin, TX 78704, United States","phone": "+1 512-717-3147","website": "https://www.atxfamilydental.com/","emails": ["info@atxfamilydental.com"],"email_type": "generic","rating": 4.9,"review_count": 802,"categories": ["Dentist", "Cosmetic dentist", "Pediatric dentist"],"hours": {"Monday": "8 AM–4 PM", "Tuesday": "8 AM–4 PM"},"latitude": 30.2482229,"longitude": -97.7559705,"google_maps_url": "https://www.google.com/maps/place/...","social_links": {"facebook": "https://facebook.com/...","instagram": "https://instagram.com/..."},"reviews": [{"author": "John Smith","rating": 5,"text": "Great dentist!","time": "2 months ago","response": "Thank you!"}],"images": ["https://lh3.googleusercontent.com/..."],"neighborhood": "Bouldin Creek","timezone": "America/Chicago","country_code": "US","business_photo": "https://lh5.googleusercontent.com/...","open_status": "Open · Closes 4 PM","price_level": "$$","popular_times": "Not busy","scraped_at": "2026-03-27T01:00:00+00:00"}
How Much Does It Cost to Scrape Google Maps?
$0.005 per result + $0.001 per run. Emails, social links, reviews, images — all included.
| Results | Cost | vs Compass (with emails) |
|---|---|---|
| 100 | $0.50 | $0.61 (18% more) |
| 1,000 | $5.00 | $6.01 (17% more) |
| 10,000 | $50.00 | $60.01 (17% more) |
Low start price — run as often as you want.
Proxy Configuration
Works without proxy for small runs. For 100+ results, configure a proxy:
// Apify managed proxy{"provider": "apify", "group": "RESIDENTIAL"}// Bright Data{"provider": "brightdata", "username": "YOUR_USER", "password": "YOUR_PASS", "zone": "residential", "country": "US"}// Oxylabs{"provider": "oxylabs", "username": "YOUR_USER", "password": "YOUR_PASS", "proxy_type": "residential", "country": "US"}// SmartProxy{"provider": "smartproxy", "username": "YOUR_USER", "password": "YOUR_PASS", "proxy_type": "residential", "country": "US"}// Any proxy URL{"provider": "raw_urls", "urls": ["http://user:pass@proxy.example.com:8080"]}
Cost Estimator
| Use case | Config | Est. cost |
|---|---|---|
| 100 businesses, basic data | default | ~$0.50 |
| 1,000 businesses with emails | scrapeContacts: true | ~$5.00 |
| 1,000 businesses + 5 reviews each | maxReviews: 5 | ~$5.00 |
| 10,000 businesses with emails | + geo_split: true | ~$50.00 |
All costs include emails, social links, reviews, and images. No add-ons.
Error Handling
| Situation | What happens |
|---|---|
| Proxy fails | Auto-retries without proxy, logs warning |
| Google blocks request | Falls back from HTTP to Playwright browser |
| Place detail page timeout | Skips place, continues with next (60s timeout) |
| Website unreachable (email extraction) | Skips emails for that business, returns other data |
| 0 search results | Returns empty dataset, no charge |
| Google consent screen | Auto-dismissed, scraping continues |
Failed places are logged but don't stop the run. You always get partial results.
Frequently Asked Questions
Do I need a proxy to scrape Google Maps? No for small runs (under 100 results). For larger scrapes, configure a residential proxy to avoid rate limits. See proxy config above.
How many Google Maps results can I scrape?
~120 per search query. Enable geo_split: true to automatically split large areas into a grid and scrape thousands of results.
Why are some emails missing? Not all businesses list emails on their website. Service businesses (law firms, dentists, plumbers) typically have better email coverage than restaurants or retail shops.
How do I extract Google Maps reviews?
Set maxReviews to any number greater than 0. Each review includes author name, star rating, review text, date, and owner response.
How fast is the Google Maps scraper? Basic data: ~1s per query. With email extraction: ~5s per business. With reviews and images: slower (requires browser rendering).
Can I cache Google Maps data between runs?
Yes. Set cache_provider: "apify" to reuse detail page data across runs. Only places that changed get re-scraped.