Free Google Maps Scraper — Places + Contact Details + Photos avatar

Free Google Maps Scraper — Places + Contact Details + Photos

Pricing

Pay per usage

Go to Apify Store
Free Google Maps Scraper — Places + Contact Details + Photos

Free Google Maps Scraper — Places + Contact Details + Photos

Pricing

Pay per usage

Rating

0.0

(0)

Developer

SR

SR

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 hours ago

Last modified

Share

Free Google Maps Scraper — Places, Contact Details, Hours, Lat/Lng

A Google Maps scraper that returns every business detail Google's /maps/search page renders — name, rating, review count, category, full address, phone number, website, opening hours, latitude / longitude — as clean structured JSON. No browser automation, no Google Places API key, no $17-per-1k Places-API bill at the end of the month. One AJAX call per query returns up to 20 places at $0.0025 each.

What you get

  • Business name, primary category (e.g. Italian restaurant), and rounded star rating (1-5)
  • Total review count as an integer (reviews_count: 1248)
  • Full street address — street + house number + city + zip in the local format Google renders for the gl country
  • Phone number in international format when Google has it on file
  • Website URL — the outbound link Google Maps points to (typically the merchant's own domain, not a redirector)
  • Opening hours string ("Open · Closes 10 PM" or "Permanently closed") — the live status as Google renders it
  • Latitude and longitude as decimal floats, accurate to ~1 meter
  • Canonical Google Maps URL (https://www.google.com/maps/place/...) you can pass to the Reviews and Images scrapers below
  • Search query echoed on every row so you can join multi-keyword runs into one dataset

Why scrape Google Maps for places data

Google Places API costs are punishing for any volume use case. The new Places API (New) bills $17/1000 for Place Details (Basic), $32/1000 for Place Details (Advanced) with phone + website + opening hours, and $32/1000 for Text Search (Basic) before you even fetch a single detail. A lead-gen agency pulling 50,000 dentists across the US pays Google $1,600 minimum for that one job — and Places API is rate-limited to a few hundred QPS unless you negotiate a custom quota. Worse, Google deprecated the legacy Places API in March 2025 and is forcing migration to the New API which has stricter field masks and higher per-call billing.

This actor solves that by hitting Google's internal /search?tbm=map AJAX endpoint with curl_cffi (Chrome TLS impersonation) plus a fresh anonymous Google session cookie from a managed minter pool. One call returns up to 20 places with the full structured payload — name, rating, address, phone, website, hours, lat/lng — for $0.0025 per place, or $2.50 per 1000. That's 13× cheaper than Google Places (Basic) and 6× cheaper than competing Google Maps scrapers on the Apify Store such as compass/crawler-google-places (which charges per-result on a sliding scale that lands around $4-7 per 1000 places). No browser, no Selenium, no headful Playwright — just one HTTP call per query.

Concrete buyer math: a B2B lead-gen agency building a list of 25,000 plumbers across 100 US cities pays $0.0025 × 25,000 = $62.50 for the whole job, finishing in ~30 minutes. The same job through Google Places API (Advanced fields) costs $32 × 25 = $800, takes a week to clear quota approval, and still doesn't include the lat/lng on the cheap tier.

Input

FieldDefaultDescription
queriesrequiredArray of Google Maps search queries ("restaurants Amsterdam", "plumbers in NYC", "dentists London")
max_results_per_query20Cap places per query (1-20). Each AJAX call returns up to 20
hlenLanguage code (en, nl, de, es, fr, it, ja)
glusTwo-letter country code controlling locale + currency
use_cookiestrueUse a fresh anonymous Google session — bypasses the EU consent banner and reduces CAPTCHA at scale
use_proxyfalseOptional. Adds extra IP rotation for very high volume

Output

{
"name": "De Kas",
"rating": 4.5,
"reviews_count": 1842,
"category": "Modern European restaurant",
"address": "Kamerlingh Onneslaan 3, 1097 DE Amsterdam, Netherlands",
"phone": "+31 20 462 4562",
"website": "https://restaurantdekas.com/",
"hours": "Open · Closes 10 PM",
"url": "https://www.google.com/maps/place/De+Kas/data=!4m7!3m6!1s0x47c609e91734d71b...",
"search_query": "restaurants Amsterdam",
"latitude": 52.3471242,
"longitude": 4.9264883
}

The url field is the canonical place URL — pass it directly to the Reviews scraper or Images scraper (linked at the bottom of this README) to fetch the same place's reviews or photos without re-running the search.

Use cases

B2B lead-gen agency building niche prospect lists. You sell SEO services to dentists. You queue 100 queries ("dentist <city>" for the top 100 US metros) and run the actor — 100 × 20 = 2,000 dentists with name, phone, website, and rating, for $5 total. Filter for rating < 4.0 (low-rated practices that need reputation work) and you have a 400-row outbound list segmented by exact pain point.

Local SEO consultant auditing a market. Your client is a Brooklyn pizzeria. You pull "pizza Brooklyn" (20 results), "pizzeria Brooklyn" (20 more), "italian restaurant Brooklyn" (20 more) — 60 competitor records for $0.15. Sort by reviews_count descending and you instantly see who the real local competitors are, their ratings, and their websites for backlink prospecting.

Real-estate analyst mapping commercial supply. You need every coffee shop in a 5-city catchment to model retail density. 5 × 20 = 100 places for $0.25, with latitude/longitude fields ready to load into PostGIS or Mapbox. Compare to Google Places API at $32/1000 with rate limits; you're done in two minutes for a quarter.

Travel-app developer seeding a points-of-interest database. Your itinerary app needs 50 POI categories per city × 50 cities = 2,500 queries × 20 results = 50,000 places. Total: $125. Through Places API (Text Search + Place Details Advanced): $1,600 + 2-week quota request. Same data, ship two weeks earlier.

How it compares

ActorPrice per 1000 placesPhoneWebsiteHoursLat/Lng
This actor (s-r/free-google-maps-scraper)$2.50yesyesyesyes
compass/crawler-google-places (#2 on google maps scraper SERP)~$4-7 sliding scaleyesyesyesyes
gosom/google-maps-scraper (#3 SERP, open-source CLI)self-hosted (your infra)yesyespartialyes
Outscraper Google Maps (#1 SERP)~$3-5yesyesyesyes
Google Places API (Advanced)$32 + quota approvalyesyesyesyes

The headline competitor on Apify is compass/crawler-google-places, which is the top-ranking Maps scraper on Apify Store with thousands of monthly users — but its sliding-scale pricing lands around $4-7 per 1000 results for typical workloads, and its run-times are slower because it uses headless Chrome under the hood. This actor is pure HTTP (curl_cffi + cookies) which is why it can sustain 13 places/sec at $2.50/1000.

Pricing

This actor uses Apify's pay-per-event monetization at $0.0025 per place returned — that's $2.50 per 1000 places, or roughly 60-90% cheaper than the closest Apify alternatives. All pricing is pay-per-event — you only pay for results you receive. No actor-start fee, no per-compute-unit charges, no charge for empty queries or rate-limit retries.

Limits and gotchas

  • Google's /search?tbm=map endpoint returns at most 20 results per AJAX call — for >20 places per area, run multiple narrower queries (e.g. "sushi Amsterdam Centrum", "sushi Amsterdam Zuid") instead of one broad query
  • Phone, website, and hours are populated only when Google has them on file; expect ~80% website, ~85% phone, ~70% hours coverage in mature markets, lower in emerging ones
  • The hours field is the live status string Google renders ("Open · Closes 10 PM") — if you need the full 7-day schedule, you'll need to follow up with the place URL on a more detail-heavy actor
  • Apify residential proxy is not required — the cookie pool plus curl_cffi's Chrome TLS fingerprint is enough for sustained throughput; leaving use_proxy=false saves you ~$8/GB
  • gl controls the result locale — gl=us searching "hairdresser Amsterdam" will still return Amsterdam results but with US English UI strings; for native locale results set gl=nl and hl=nl
  • Cold-start time is ~2-4 seconds for the first request; subsequent queries in the same run reuse the session pool and complete in ~0.8s each
  • Email addresses are not included — Google Maps doesn't expose emails on place panels. To get emails, pass the website URL to a website-scraper actor and parse mailto: links

FAQ

How do I scrape Google Maps without the Places API? This actor calls Google's internal /search?tbm=map AJAX endpoint directly with curl_cffi (Chrome TLS impersonation) and a fresh anonymous Google session cookie. No Google Cloud account, no API key, no quota approval. You only pay Apify's per-result rate.

Is Google Maps scraping legal? Scraping publicly visible business listings from Google Maps is generally treated as fair use under hiQ Labs v. LinkedIn (US 9th Circuit) and similar EU case law — the data is public-by-design (Google publishes it for searchers to find). What's not legal is downloading copyrighted Maps tiles or reverse-engineering Google's auth flow. This actor only reads public place panels.

What's the cost to scrape 10,000 Google Maps places? 10,000 × $0.0025 = $25. For comparison: Google Places API (Advanced) costs $320 for the same 10,000 places, before you factor in quota approval and rate limits.

Can I get business emails from Google Maps? No — Google Maps doesn't expose email addresses on place panels. Most lead-gen workflows use this actor to get the website URL, then run a website-scraper actor to crawl the contact page and parse mailto: links.

Will Google rate-limit my scraping? At default settings (fresh session cookies, default IP) the actor sustains ~12-15 places/second without throttling. For sustained >50/sec throughput, enable use_proxy=true and supply a residential proxy URL via the PROXY_URL env var.