πŸ—ΊοΈ Google Maps Scraper β€” Emails, Reviews & Photos avatar

πŸ—ΊοΈ Google Maps Scraper β€” Emails, Reviews & Photos

Pricing

from $1.90 / 1,000 place scrapeds

Go to Apify Store
πŸ—ΊοΈ Google Maps Scraper β€” Emails, Reviews & Photos

πŸ—ΊοΈ 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

Raven

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

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 deepSearch and 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

GroupFields
Identificationname, place_id, google_maps_url, category, categories[], description
Addressaddress (full), city, state, zip_code, country_code (ISO-2), area (neighborhood), plus_code
Coordinateslatitude, longitude
Contactphone, website, email (primary), emails[] (all found)
Social profilesfacebook, instagram, twitter, linkedin, youtube, tiktok, telegram
Reputationrating (0–5), reviews_count, price_level ($–$$$$)
Statuspermanently_closed, temporarily_closed
Hoursopening_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)
Provenancesearch_query, search_location, scraped_at (ISO-8601 UTC)

πŸ› οΈ Input

FieldTypeDefaultWhat it does
πŸ” searchStringsArrayarrayrequiredWhat to search β€” barber shop, dental clinic, etc. One per line
πŸ“ locationQuerystring""Free-text location: New York, NY, Berlin, Germany, Minsk
πŸ™οΈ city / πŸ—ΊοΈ state / 🌍 countrystring""Structured location (joined into "City, State, Country" if locationQuery is empty)
🎯 maxCrawledPlacesPerSearchinteger100Hard cap per (term, location) pair
🌐 deepSearchbooleanfalseRecursive geo-drilling β€” splits the area when β‰₯20 results are returned. Slower, but bypasses Google's ~120-place cap
🏷️ categoryFilterstring""Keep only places whose category contains this substring (case-insensitive)
πŸ—£οΈ languageenumenGoogle interface language (hl) β€” 14 options
🚩 countryCodestringusGoogle geolocation hint (gl) β€” 2-letter ISO code
πŸ“§ scrapeContactsFromWebsitebooleantrueExtract emails + socials from each place's website
πŸ“­ skipPlacesWithoutEmailbooleanfalseLead-list mode β€” only output places where an email was found
πŸ’¬ includeReviewsbooleanfalsePaid add-on. Attach reviews per place (~20 per request, full pagination)
πŸ”’ maxReviewsPerPlaceinteger20Cap per place (1–5000). For 1500 reviews β‰ˆ 12 seconds
πŸ–ΌοΈ includeImagesbooleanfalsePaid add-on. Attach photo URLs (extracted from review attachments)
πŸ”’ maxImagesPerPlaceinteger20Cap per place (1–200)
πŸ” maxRetriesinteger5Retries on transient network failures
⚑ concurrencyinteger3Parallel 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

EventWhen you payPrice (USD)
placeOne place pushed to dataset$0.003
contactA unique email enriched from a website$0.002
reviewOne review attached to a place (when includeReviews: true)$0.0005
imageOne 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

  1. Search β€” direct GET to google.com/search?tbm=map with the same internal pb protobuf parameter the Maps frontend uses. Pagination 20 results per page until empty
  2. 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
  3. 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")
  4. 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 removes noreply@, example.com, generic placeholder domains
  5. Review extraction β€” reverse-engineered /maps/rpc/listugcposts endpoint with pagination tokens. Yields all reviews per place (capped at your maxReviewsPerPlace). User-submitted photos from reviews are also harvested for the place's image gallery
  6. TLS fingerprinting via curl_cffi with 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