πΊοΈ Google Maps Scraper β Emails, Reviews & Photos
Pricing
from $1.90 / 1,000 place scrapeds
πΊοΈ Google Maps Scraper β Emails, Reviews & Photos
Extract Google Maps places with phones, websites, hours, ratings β and verified business emails automatically pulled from each place's website. Full review history, photo URLs, 7 social networks. Pay only per result, from $0.003/place. No browser, no API key.
Pricing
from $1.90 / 1,000 place scrapeds
Rating
5.0
(1)
Developer
Raven
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
πΊοΈ Google Maps Scraper β Emails, Reviews, Photos & Lead Data
Build a lead list of any local business in any city β in minutes. Pull names, phones, websites, addresses, opening hours, ratings, business emails from each place's website, social profiles, and full review history from Google Maps. Pay only for what you pull. No browser, no API key, no daily quotas.
π What you get: A clean Excel/CSV/JSON-ready dataset of every barbershop in Berlin, every dentist in Texas, every coffee shop in Tokyo β with the owner's email already extracted from their website.
π― Built for
- π§² B2B sales teams β generate verified lead lists with email + phone for cold outreach
- π Local SEO agencies β competitive analysis, GMB audits, NAP citation building
- π½οΈ Restaurant / hotel analysts β pricing, reviews, popularity, hours intelligence
- π Franchise / market research β map every competitor in a region with full contact details
- π€ AI / LLM pipelines β clean structured business data for downstream models
- π Real-estate & retail scouts β find the right neighborhood by category density
β‘ Why this Actor
- β Emails included for free in the base price β every place that has a website is enriched with verified business emails. Most competing actors charge this as a separate add-on
- β
Bypass Google's 120-place limit β enable
deepSearchand the actor recursively splits any city into sub-neighborhoods, returning thousands of places per search term - β Real reviews, not just samples β paginate through the same internal review API the Google Maps website uses. Get all 1,500+ reviews of a popular place in ~12 seconds
- β Browser-free β direct HTTPS calls with Chrome TLS fingerprinting. 10Γ faster than headless-browser actors, no memory hogs
- β 7 social networks auto-extracted β Facebook, Instagram, X (Twitter), LinkedIn, YouTube, TikTok, Telegram links pulled from each place's website
- β International-ready β correct address parsing for US, EU, UK, CIS, Asia. ISO-2 country code, city, state, postal code, neighborhood β all separated cleanly
- β Pay only for results β $0.003 per place + optional add-ons for reviews ($0.0005) and image URLs ($0.0002). No subscription, no minimum spend
- β Streamed output β the dataset fills in real-time, you can pipe results out via the API while the run is still going
π¦ What you get per place
| Group | Fields |
|---|---|
| Identification | name, place_id, google_maps_url, category, categories[], description |
| Address | address (full), city, state, zip_code, country_code (ISO-2), area (neighborhood), plus_code |
| Coordinates | latitude, longitude |
| Contact | phone, website, email (primary), emails[] (all found) |
| Social profiles | facebook, instagram, twitter, linkedin, youtube, tiktok, telegram |
| Reputation | rating (0β5), reviews_count, price_level ($β$$$$) |
| Status | permanently_closed, temporarily_closed |
| Hours | opening_hours (full 7-day schedule, e.g. Monday: 9 AMβ7 PM | Tuesday: ...) |
| Reviews (add-on) | reviews[] β text, rating, author, publishedAt, authorAvatar, authorId, photos[] |
| Images (add-on) | images[] β direct CDN URLs (no binaries, just links) |
| Provenance | search_query, search_location, scraped_at (ISO-8601 UTC) |
π οΈ Input
| Field | Type | Default | What it does |
|---|---|---|---|
π searchStringsArray | array | required | What to search β barber shop, dental clinic, etc. One per line |
π locationQuery | string | "" | Free-text location: New York, NY, Berlin, Germany, Minsk |
ποΈ city / πΊοΈ state / π country | string | "" | Structured location (joined into "City, State, Country" if locationQuery is empty) |
π― maxCrawledPlacesPerSearch | integer | 100 | Hard cap per (term, location) pair |
π deepSearch | boolean | false | Recursive geo-drilling β splits the area when β₯20 results are returned. Slower, but bypasses Google's ~120-place cap |
π·οΈ categoryFilter | string | "" | Keep only places whose category contains this substring (case-insensitive) |
π£οΈ language | enum | en | Google interface language (hl) β 14 options |
π© countryCode | string | us | Google geolocation hint (gl) β 2-letter ISO code |
π§ scrapeContactsFromWebsite | boolean | true | Extract emails + socials from each place's website |
π skipPlacesWithoutEmail | boolean | false | Lead-list mode β only output places where an email was found |
π¬ includeReviews | boolean | false | Paid add-on. Attach reviews per place (~20 per request, full pagination) |
π’ maxReviewsPerPlace | integer | 20 | Cap per place (1β5000). For 1500 reviews β 12 seconds |
πΌοΈ includeImages | boolean | false | Paid add-on. Attach photo URLs (extracted from review attachments) |
π’ maxImagesPerPlace | integer | 20 | Cap per place (1β200) |
π maxRetries | integer | 5 | Retries on transient network failures |
β‘ concurrency | integer | 3 | Parallel workers during deepSearch |
π Proxy is locked to Apify residential in the country you choose β included in the price, you don't pick a proxy group.
π’ Quick example β every barbershop in Berlin with emails
{"searchStringsArray": ["barber shop"],"locationQuery": "Berlin, Germany","maxCrawledPlacesPerSearch": 500,"deepSearch": true,"scrapeContactsFromWebsite": true,"skipPlacesWithoutEmail": true,"language": "de","countryCode": "de"}
π‘ Example β restaurants in NYC with full review history
{"searchStringsArray": ["italian restaurant", "ramen", "steakhouse"],"locationQuery": "New York, NY","maxCrawledPlacesPerSearch": 100,"includeReviews": true,"maxReviewsPerPlace": 200,"includeImages": true,"maxImagesPerPlace": 30}
π΅ Pricing β pay only per result
| Event | When you pay | Price (USD) |
|---|---|---|
place | One place pushed to dataset | $0.003 |
contact | A unique email enriched from a website | $0.002 |
review | One review attached to a place (when includeReviews: true) | $0.0005 |
image | One image URL attached (when includeImages: true) | $0.0002 |
Real-world cost examples:
- πͺ 1,000 barbershops with emails β 1,000 Γ $0.003 + ~400 unique emails Γ $0.002 β $3.80
- π½οΈ 100 restaurants + 50 reviews each + 20 photos each β $0.30 + $2.50 + $0.40 β $3.20
- π Full coverage of a mid-size city (3,000 places) β ~$10
You can cap any run via Default run options β Max total charge in run settings β never blow your budget on accident.
Smart billing notes:
- Duplicate emails are charged once. If the same email shows up on multiple places (template leak / franchise HQ), you pay for it only once per run.
- Junk emails are filtered out before billing.
noreply@,example.com,info@hair.com-style placeholder emails are excluded automatically.
π Output sample
{"place_id": "ChIJZW3FhdK3t4kRLXEtK4yueuE","name": "Scissors & Scotch","category": "Barber shop","categories": ["Barber shop"],"address": "331 N St NE, Washington, DC 20002, USA","city": "Washington","state": "DC","zip_code": "20002","country_code": "US","area": "Near Northeast","plus_code": "WX4X+PH","latitude": 38.9068,"longitude": -77.001,"phone": "(202) 481-2850","website": "https://scissorsscotch.com/","email": "info@scissorsscotch.com","emails": ["info@scissorsscotch.com", "dc@scissorsscotch.com"],"facebook": "https://www.facebook.com/scissorsscotch","instagram": "https://www.instagram.com/scissorsscotch/","twitter": "https://twitter.com/scissorsscotch","rating": 4.7,"reviews_count": 1422,"price_level": "$$","permanently_closed": false,"temporarily_closed": false,"opening_hours": "Monday: 9 AMβ8 PM | Tuesday: 9 AMβ8 PM | Wednesday: 9 AMβ8 PM | Thursday: 9 AMβ8 PM | Friday: 9 AMβ7 PM | Saturday: 9 AMβ7 PM | Sunday: 10 AMβ5 PM","google_maps_url": "https://www.google.com/maps/search/?api=1&query=Scissors+%26+Scotch&query_place_id=ChIJZW3FhdK3t4kRLXEtK4yueuE","reviews": [{"rating": 5,"text": "Best haircut I've had in DC. Stylist took time to understand what I wanted...","publishedAt": "2 months ago","author": "Mike Visalli","authorAvatar": "https://lh3.googleusercontent.com/a/...","authorProfileUrl": "https://www.google.com/maps/contrib/...","authorId": "111279794912534073117","reviewId": "ChdDSUhNMG9...","photos": ["https://lh3.googleusercontent.com/grass-cs/..."]}],"images": ["https://lh3.googleusercontent.com/grass-cs/...","https://lh3.googleusercontent.com/grass-cs/..."],"search_query": "barber shop","search_location": "Washington, DC","scraped_at": "2026-05-12T10:15:30+00:00"}
π Languages supported (for language)
English, Spanish, French, German, Italian, Portuguese, Russian, Ukrainian, Polish, Turkish, Dutch, Japanese, Korean, Chinese (Simplified).
Address parsing handles 60+ countries (ISO-2 country codes auto-extracted from address tail). Tested on US, EU (DE/FR/IT/ES/NL/PL), UK, CIS (RU/UA/BY/KZ), Turkey, Japan, Brazil, Mexico.
π§ How it works under the hood
- Search β direct GET to
google.com/search?tbm=mapwith the same internalpbprotobuf parameter the Maps frontend uses. Pagination 20 results per page until empty - Deep search β when a page returns β₯20 results, the actor reads the addresses, extracts neighborhood names, and re-queries each one in a worker pool. This bypasses Google's ~120-place soft cap per search term
- Address parser β country detected from the last segment (60+ countries β ISO-2). Then state/zip/city from the remaining parts, with locale-specific heuristics (US "ST 12345" format, EU "12047 Berlin", CIS "Minsk Region 220040")
- Contact enrichment β for each place with a website: GET the homepage, regex-extract emails + social links. If no email there, try
/contact,/contact-us,/about,/kontakt,/ΠΊΠΎΠ½ΡΠ°ΠΊΡΡ. Junk filter removesnoreply@,example.com, generic placeholder domains - Review extraction β reverse-engineered
/maps/rpc/listugcpostsendpoint with pagination tokens. Yields all reviews per place (capped at yourmaxReviewsPerPlace). User-submitted photos from reviews are also harvested for the place's image gallery - TLS fingerprinting via
curl_cffiwith Chrome impersonation β Google sees real-Chrome handshakes, no bot blocks
π Support & feedback
Found a bug or need a feature? Email africanec@gmail.com β usually fix-and-redeploy within 24 hours.
To make debugging faster you can let the actor share run data with the developer: Apify Security Settings β "Share run data with developers" β check this actor (or all).
π·οΈ Tags
Google Maps Scraper, Google Maps API alternative, Google Places Scraper, Google Maps Email Extractor, Google Maps Phone Number Extractor, Local Business Scraper, Lead Generation Tool, B2B Lead Scraper, Sales Prospecting Tool, GMB Scraper, Google My Business Scraper, Business Email Finder, Google Reviews Scraper, Google Maps Photos Scraper, Google Maps Reviews Extractor, Restaurant Scraper, Hotel Scraper, Dentist Scraper, Barbershop Lead Finder, Place ID Extractor, Plus Code Extractor, Postal Code Extractor, Geographic Business Database, City Business Scraper, Country-wide Business Scraper, Local SEO Tool, NAP Citation Scraper, Cold Email Lead List, Email Lead List Builder, Web Scraping without Browser, TLS Fingerprinting Scraper, curl_cffi Scraper, Google Maps Data Mining, Local Market Research Tool, Competitor Analysis Tool, Real Estate Business Scraper, Franchise Scout Tool, Restaurant Database, Hotel Database