Google Maps Business & Contact Scraper
Pricing
from $7.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 $7.00 / 1,000 results
Rating
0.0
(0)
Developer
bootforge
Maintained by CommunityActor stats
1
Bookmarked
51
Total users
19
Monthly active users
1.6 hours
Issues response
8 hours ago
Last modified
Categories
Share
Google Maps Scraper
The Google Maps Scraper is an Apify actor that extracts business data from Google Maps by search term and location — name, address, phone, website, emails, social links, ratings, reviews, images, hours, and coordinates across 24 data fields per business. Emails, social links, reviews, and images are all included at one flat rate, no add-on events.
Use it for lead generation, local SEO monitoring, market research, or sales prospecting — exported to JSON, CSV, or Excel. Input field names match compass/crawler-google-places, so switching over is a copy-paste.
Table of contents
- What the Google Maps scraper does
- How to scrape Google Maps
- Google Maps scraper input
- Google Maps data output
- How much it costs
- Recommended proxies for Google Maps
- Why this Google Maps scraper
- FAQ
- Rate this actor
- Related actors
What the Google Maps scraper does
- 🔎 Search by term + location — query any keyword (
dentist,plumber,restaurant) scoped to a city, state, or country. - 📧 Deep email extraction — crawls each business's homepage,
/contact, and/aboutpages and classifies emails as personal vs generic. - 🔗 Social links included — Facebook, Instagram, LinkedIn, X, YouTube, and TikTok profiles, at no extra charge.
- ⚡ HTTP-first pipeline — basic data pulls in ~1s per query with no browser; Google blocks trigger an automatic Playwright fallback.
- 🗺️ Geo-split for scale — auto-splits large areas into a grid to beat Google's ~120-result-per-viewport ceiling.
- 🧹 Zero duplicates — deduplicated by Google Maps place ID.
How to scrape Google Maps
- Click Try for free and open the actor.
- Enter one or more
searchStringsArrayterms and alocationQuery. - Set
maxCrawledPlacesPerSearch(default 100). - Optional: keep
scrapeContactson for emails/social links, or setmaxReviews/maxImagesabove 0 for review and image detail. - Click Start and watch results stream into the dataset.
- Export as JSON, CSV, or Excel, or pull from the Apify API.
{"searchStringsArray": ["dentist"],"locationQuery": "Austin, TX","maxCrawledPlacesPerSearch": 20,"scrapeContacts": true}
Scrape a large area with emails and 5 reviews per place:
{"searchStringsArray": ["coffee shop"],"locationQuery": "California, USA","maxCrawledPlacesPerSearch": 500,"scrapeContacts": true,"maxReviews": 5,"geo_split": true}
Google Maps scraper input
| Field | Default | Description |
|---|---|---|
searchStringsArray | required | Search terms to look up on Google Maps |
locationQuery | null | Location context, e.g. Austin, TX, London, UK |
maxCrawledPlacesPerSearch | 100 | Max businesses per query (1–500); Google shows ~120 per viewport |
language | en | Results language (19 supported) |
scrapeContacts | true | Crawl business websites for emails and social links (included) |
scrapePlaceDetailPage | true | Visit place detail page for phone, hours, reviews, images |
scrapeSocialMediaProfiles | all on | Toggle per platform (Facebook, Instagram, YouTube, TikTok, X, LinkedIn) |
maxReviews | 0 | Reviews per business (0 = skip) |
reviewsSort | newest | newest, mostRelevant, highestRating, lowestRating |
maxImages | 0 | Image URLs per business (0–50) |
placeMinimumStars | "" | Drop places rated below 1/2/3/4/4.5 |
skipClosedPlaces | true | Skip permanently closed businesses |
website | allPlaces | withWebsite / withoutWebsite (lead-gen) filter |
geo_split | false | Auto-split large areas into a grid |
cache_provider | memory | memory / file / apify (cross-run KVS) cache for detail data |
max_concurrency | 1 | Parallel detail pages (1–5) |
proxy | Apify residential | Proxy configuration (see below) |
Google Maps data output
Each business is one dataset row. Sample:
{"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"}
What each toggle adds:
| Fields | Source |
|---|---|
name, address, phone, website, rating, categories, latitude, longitude, place_id, google_maps_url, neighborhood, timezone, country_code, business_photo, open_status, scraped_at | Always (HTTP, no browser) |
emails, email_type, social_links | scrapeContacts: true |
review_count, hours, reviews, images, price_level, popular_times | maxReviews/maxImages > 0 (detail page) |
How much it costs
This actor uses pay-per-event pricing — a flat all-in rate, no add-on charges for emails, social links, reviews, or images.
| Event | USD |
|---|---|
| Actor start (per GB memory) | $0.01 |
| Business result (24-field record) | $0.007 |
At the default 3 GB memory the start fee is ~$0.03 per run.
| Typical run | Cost |
|---|---|
| 100 businesses, basic data | ~$0.73 |
| 1,000 businesses with emails | ~$7.03 |
| 1,000 businesses + 5 reviews each | ~$7.03 |
10,000 businesses with emails (geo_split: true) | ~$70.03 |
Every cost includes emails, social links, reviews, and images — one flat $7 per 1,000 results, no subscription needed.
Recommended proxies for Google Maps
Google Maps rate-limits datacenter IPs and forces a slower browser fallback, so residential proxies are recommended for any run over ~100 results. The proxy input is prefilled with Apify Proxy (RESIDENTIAL) — supported out of the box, billed separately by the platform. Small runs work with no proxy at all.
If you run your own scrapers (inside or outside Apify) and need reliable residential proxies for Google Maps, lead-gen, or e-commerce sites, we use DataImpulse — pay-as-you-go, per-country targeting, no monthly minimum:
👉 Get DataImpulse residential proxies (referral link)
You can also supply Bright Data, Oxylabs, SmartProxy, or any raw proxy URL via a provider object in the proxy field.
Why this Google Maps scraper
- Emails included, not an add-on — homepage +
/contact+/aboutcrawl with personal/generic classification, at the flat rate. - HTTP-first, browser-second — ~1s per query on the fast path; automatic Playwright fallback only when Google blocks.
- Compass-compatible input — same field names as compass/crawler-google-places; copy your existing config.
- 24 data fields — including neighborhood, timezone, price level, and popular times.
- Geo-split — beats Google's ~120-per-viewport ceiling for state- and country-level scrapes.
- Open source — the underlying
google-maps-scraperPython package ships a Typer CLI and a FastAPI server; the Apify wrapper is a thin layer.
FAQ
Do I need a proxy to scrape Google Maps? No for small runs (under ~100 results). For larger scrapes, use a residential proxy to avoid rate limits. The proxy field defaults to Apify Proxy residential; for your own scrapers we recommend DataImpulse (referral link).
How many results can I scrape per search? Google Maps returns ~120 businesses per viewport. Set geo_split: true to auto-split a large area into a grid and collect thousands of results across the region.
Why did I get fewer results than expected? A filter usually removed them. website: "withoutWebsite" keeps only places with no website, placeMinimumStars drops anything below the threshold, and skipClosedPlaces drops closed businesses. The run log names the active filters — relax them if needed.
How do I extract Google Maps reviews? Set maxReviews above 0. Each review includes author, star rating, text, date, and the owner's response. For high-volume review pulls, use the dedicated Google Maps Reviews Scraper.
Why are some emails missing? Not every business lists an email. Service businesses (law firms, dentists, plumbers) typically have far better email coverage than restaurants or retail.
Is scraping Google Maps legal? This actor collects only publicly available business data. You are responsible for complying with Google's terms and applicable laws. Do not collect personal data without a lawful basis.
Rate this actor ⭐
If the Google Maps scraper saved you time, please leave a review on its Apify Store page — ratings help other people find it and tell us what to build next. Hit a bug or missing field? Open an issue through the actor's Issues tab and we'll fix it fast — recency and reliability are what keep this actor ranking.
Related actors
Building a full data pipeline? Pair this actor with our other scrapers — same proxy config format, same Pydantic-validated output, all open source.
- Google Maps Reviews Scraper — pull every review for any place: text + English translation, star rating, photos, owner replies, and reviewer details.
- LinkedIn Profile Scraper — scrape LinkedIn profiles via your
li_atcookie: structured fields, full experience history, optional email/phone enrichment. - LinkedIn Jobs Scraper — scrape LinkedIn job listings with company enrichment, salary, and recruiter info. No login required.
- TikTok Shop Product Scraper — scrape TikTok Shop products across 10 regions: variants, prices, seller info, ratings, and sold counts.