Google Maps POI & Review Scraping
Complete guide to scraping Google Maps POI data and reviews — 70+ tools across 20 categories. Compiled June 2026.
- Official Google APIs
- Reverse-Engineered Internal Endpoints
- Browser Automation & DIY Techniques
- Headless Browser Automation (Playwright, Puppeteer, Selenium)
- DIY Scraping Techniques (Reddit & Community)
- Commercial Platforms & Search API Proxies
- Open-Source Scrapers & Python Libraries
- No-Code, Extensions & Automation Workflows
- AI-Powered Scrapers & Alternative POI Sources
- Anti-Bot Countermeasures & Legal Landscape
Official Google APIs
Places API (New), Business Profile API, pricing, field masks
Places API (New) — Overview & Pricing
Places API (New)
The current-generation API replacing the legacy Places API. Uses a mandatory field mask in every request — omitting it returns an error. Billing is determined by the highest-tier field requested.
Three-Tier SKU Billing
| Tier | What's Included | Cost |
|---|---|---|
| Essentials | Place ID, name, address, location, types, business status | Lowest |
| Pro | Phone, website, opening hours, price level, photos | Medium |
| Enterprise | Reviews, ratings, userRatingCount, editorial summary, atmosphere data | Highest (~$17-35/1K requests) |
Subscription Plans
| Plan | Cost | Calls | Savings |
|---|---|---|---|
| Pay-as-you-go | Variable | Unlimited | Baseline |
| Starter | $100/mo | 50K | Moderate |
| Pro | $1,200/mo | 250K | Up to $5,000 vs PAYG |
| Enterprise | Custom | Custom | Negotiated |
Key API Operations
- Place Details — full data for a known place_id
- Text Search — search by query string (e.g., "restaurants in Berlin")
- Nearby Search — search within a radius of coordinates
- Autocomplete — predictive place suggestions
- Place Photos — retrieve photos by reference
Rate Limits
Enforced per API method per project (unlike legacy API which aggregated all methods). Default ~600 requests/minute; increases require contacting Google support.
Free Tier Status (2026)
Warning: The previously documented "$200 monthly credit" and "10,000 free calls" claims were both refuted during adversarial verification. Verify directly at mapsplatform.google.com/pricing.
Data Fields (50+)
Name, formatted address, address components, phone, international phone, website, opening hours (regular + secondary), business status, price level, rating, user rating count, reviews (text/author/rating/time/language — max 5 per place), photos, types, coordinates, viewport, place ID, URL, UTC offset, plus 20+ boolean amenities (delivery, dineIn, takeout, outdoorSeating, liveMusic, allowsDogs, etc.).
New-Only Fields (Not in Legacy API)
regularSecondaryOpeningHours, paymentOptions, parkingOptions, subDestinations, fuelOptions, evChargeOptions, shortFormattedAddress, primaryType, primaryTypeDisplayName
Sources
Google Business Profile API
Google Business Profile API
Access all reviews (not limited to 5) — but only for locations you own or manage. Requires OAuth2 authentication.
Key Endpoints
| Endpoint | Purpose |
|---|---|
accounts.locations.reviews.list | All reviews for one location |
accounts.locations.batchGetReviews | Batch review extraction across locations |
Returns: reviewId, starRating, comment text, creation/update timestamps. Free for business owners.
Google Takeout Alternative
Business owners can download all reviews from their GBP as JSON via Google Takeout (free, official).
Source: Business Profile API — Review Data
Reverse-Engineered Internal Endpoints
Protobuf APIs, tbm=map, APP_INITIALIZATION_STATE, pagination
Protobuf Endpoints & Internal APIs
Google Maps Internal Protobuf API
Google Maps communicates with its backend using Protocol Buffer (protobuf) encoding over HTTP. Several internal endpoints have been documented.
tbm=map Search Endpoint
Adding tbm=map to a Google search returns protobuf-over-JSON instead of HTML. Single HTTP request, no browser rendering needed.
https://www.google.com/search?tbm=map&hl=en&q=restaurants+in+berlin&tch=1&ech=1
Returns: nested arrays parseable with JSON indexing — business names, ratings, review counts, categories, addresses, coordinates, thumbnails.
/maps/preview/place — Place Details
Returns protobuf-over-JSON place details via a pb parameter with feature ID embedded. More stable than HTML scraping — follows internal schema, not frontend layout.
/maps/vt/pb — Tile Endpoint
Map tile requests containing ~730 fields across ~125 protobuf messages. Uses !-separated text-based protobuf with type characters (s, i, d, f, j, u, v, x, y, g, h, n, o, e, z, B, b, m).
window.APP_INITIALIZATION_STATE
Google Maps embeds data in window.APP_INITIALIZATION_STATE in the HTML response. No headless browser needed:
JSON.parse(window.APP_INITIALIZATION_STATE[3][2].split("'\n")[1])
Source: r/webscraping
Protobuf Pagination Details
- PSI parameter: stored in
window.APP_OPTIONS[11], changes after each page reload — no static URL construction possible - Altitude formula:
altitude = (27.3611 * 6371010 * 768 * cos(lat)) / (2^zoom * 256) - Pagination:
!7i20= 20 results/page,!8i[offset]= offset (increments of 20) - Responses: served through
f.txtendpoint with "XHR1" signature
Data Available
Potentially everything visible in the Maps UI: full review text with timestamps, all photos, Q&A, popular times histograms, wait times, related places, owner responses — far exceeding the official API's 5-review limit.
Fragility Warning
Google's cryptographic constants rotate continuously. SearchGuard makes "reverse-engineered bypasses obsolete within minutes." One Reddit user reported successfully building a pure HTTP/protobuf scraper that reduced costs from $50K/mo to $1K/mo — but maintenance is constant.
Protobuf Tools & Decoders
Protobuf Tools
| Tool | Language | Purpose | Link |
|---|---|---|---|
| pbtk | Python | Extract and fuzz protobuf structures from Chrome | GitHub |
| google-maps-pb-decoder | Ruby | Decode pb URL params to JSON | GitHub |
| deproto | Python | Decode, manipulate, re-encode protobuf strings (round-trip conversion) | GitHub |
XHR/Network Interception
Intercept browser XHR requests during Google Maps navigation; responses contain protobuf-encoded data with "XHR1" signature. Use CDP Network.requestWillBeSent event + history.replaceState() hooks. Supported by Puppeteer request interception and Playwright route handlers.
Sources
- SerpAPI — Reverse Engineering Maps Pagination
- $5K Google Maps XSS via Protobuf
- Scrape.do — Maps Scraping Guide
Browser Automation & DIY Techniques
Playwright, Puppeteer, Selenium, community tricks from Reddit
Headless Browser Automation (Playwright, Puppeteer, Selenium)
Browser Automation Frameworks
The foundation technique used by most scrapers. A browser renders Maps, executes JS, and extracts from the DOM.
Playwright (Most Popular)
Microsoft's library. Used by gosom/google-maps-scraper, HasData, many commercial tools. Supports Chromium, Firefox, WebKit.
- Languages: Python, Node.js, Java, .NET
- Anti-detect: stealth plugins available
- Parallel tabs: 10+ tabs in one browser, ~1.7s/URL
- Codegen: record browser interactions, auto-generate scraper code
Puppeteer (Node.js)
Google's Node.js browser automation. puppeteer-extra-plugin-stealth provides 17 evasion modules.
- Best stealth ecosystem (17 modules)
- XHR interception via
Network.requestWillBeSent - Caveat: anti-bot companies study the stealth package
Selenium (Legacy)
Original framework. undetected-chromedriver patches for detection evasion.
- Languages: Python, Java, C#, Ruby, JS
- Larger fingerprint, easier to detect
- Still used by HasData and Zubdata scrapers
Extraction Strategies
| Strategy | Token Cost | When to Use |
|---|---|---|
CSS selectors (querySelectorAll) | ~52/item | Known structure — default choice |
aria-label attributes | ~52/item | More resilient — accessibility attrs are stabler than CSS classes |
body.innerText | ~5K/page | Discovery — learn structure once, then switch |
| Network/XHR interception | Minimal | Capture protobuf responses directly — best approach |
| Accessibility tree (filtered) | ~28K/page | Find buttons, forms, interactive elements |
| Screenshot | ~132K | CAPTCHA solving, visual debugging only |
DIY Scraping Techniques (Reddit & Community)
Community-Sourced Techniques
Practical techniques from Reddit, HN, and forums — the stuff not in vendor blog posts.
Grid-Scanning / Map Splitting (Essential)
Overcome the 120-result limit per search by dividing areas into smaller grid cells. Auto-adjust zoom to ~16 per cell. Can use QGIS + Python to generate coordinate grids. Tune tightness to urban density.
https://www.google.com/maps/search/{query}/@{lat},{long},16z
Used by every serious scraper (gosom, Apify actors, Octoparse). Hexagonal grid sampling is the academic version.
"Search in This Area" Automation
Moving the map and clicking "search in this area" reveals different/more results than initial search. Automate by systematically panning across coordinates.
HTTP-Only / No Browser Approach (50x Cheaper)
Replicate Google Maps' internal protobuf HTTP calls directly — no headless browser. One HN user reduced costs from $50K/mo to $1K/mo. "Built entirely with cURL, avoiding headless browsers since they're really slow." Google rarely updates their map API structure.
Dual-Architecture Engine
Use high-performance HTTP extraction for bulk data, only spin up headless browsers for dynamic elements. Extracts Booking URL, FID, CID from metadata. Faster than pure Playwright/Puppeteer.
Place ID Pre-Extraction
Get Place IDs first (cheap/fast), then pipe them for direct detail extraction without browser search overhead — data comes back "almost instantly."
CID-Based Direct Access
CID (Customer ID) is a 64-bit decimal that never changes, even through rebrand/relocation. More permanent than Place ID (which expires after 12 months).
https://www.google.com/maps/place/?cid=<CID_NUMBER>
Find CID: URL ?cid= parameter, or inspect Knowledge Panel for "ludocid".
Reference: Scrap.io CID Guide, CID Converter
LLM-Powered Query Expansion
Use LLMs to generate search term synonyms to overcome per-query result limits. "dentist" becomes "dental clinic", "oral surgeon", "dental practice", "orthodontist" etc. Multiplies coverage without geographic splitting.
Other Community Tricks
- Ctrl+S page saving: Bot performs search, saves entire page, parses offline later
- Google Search local pack mining: Harvest Maps data from regular Google SERPs (lower detection risk)
udm=1parameter: Returns Google Places tab results — but needs browser context for location- Geocoding API grid trick: Grid area, geocode lat/lng to addresses, dedupe. 80%+ coverage
- "No website" filter: Gold mine for web dev agencies — scrape businesses without websites
Sources
- r/webscraping — Scraping GMaps at Scale
- r/SaaS — Dual-Architecture GMaps Scraper
- r/webscraping — Google Maps Data Extraction
Commercial Platforms & Search API Proxies
Outscraper, Apify, Bright Data, SerpAPI, Serper.dev, etc.
Commercial Scraping Platforms
Commercial Scraping Platforms
Outscraper (Best Value)
| Pricing | $1-3/1K records (basic); ~$14/1K full enrichment |
| Free Tier | 500 records (first 500 reviews free) |
| Fields | 74 fields incl. name, address, phone, hours, rating, reviews, photos, emails |
| Reviews | Full text, not limited to 5 |
| Real-world | Reddit user: $50 for 20K listings, ~6,500 usable after dedup |
Apify (Marketplace)
| Pricing | $1.50-4/1K places (varies by actor) |
| Free | $5 monthly platform credit |
| Fields | 25+ core + enrichment actors for emails/social |
| Tips | Set maxCrawledPlaces to 9999999 for all results. Niche searches have 75-80% junk rate |
| Actors | compass/crawler-google-places, beatanalytics/google-maps-reviews-scraper |
Bright Data (Enterprise)
| Dataset | 200.7M+ pre-scraped records at $0.0025/record ($250/100K) |
| Scraper API | From $500/mo + proxy costs |
| Proxy Network | 72M+ residential IPs — industry's largest |
Other Commercial Services
| Service | Pricing | Key Feature |
|---|---|---|
| Scrap.io | From EUR 35/mo (10K leads) | Simplest UX, radius/polygon search, count preview, 200M+ places |
| ScrapFly | ~$3.37/1K requests | General-purpose, credit-based, 99% success rate |
| LocalAPI | Free tier: 50 searches | Only API exposing Popular Times histograms |
| HasData | API plans | Cloud-powered, built-in email finder |
| Leads-Extractor.com | Various | Dedicated Maps scraper |
| MapSHunt.com | Various | Prioritizes businesses with websites, crawls for emails/social |
| LocalProspects | Various | Auto-crawls for owner name, emails, mobile phones |
| GeoScraper | Unlimited/mo | Reviews scraper + email/social extraction |
| Minelead | Various | Email finder for Maps businesses |
| Estrattore Dati | Various | Email and phone extraction |
Cost Comparison (per 1,000 POI records)
| Platform | Basic POI | With Reviews | With Enrichment |
|---|---|---|---|
| Outscraper | $1-3 | $5-8 | ~$14 |
| Apify | $1.50-4 | $3-6 | $5-10 |
| Bright Data (dataset) | $2.50 | Included | Included |
| Scrap.io | ~$3.50 | Extra | Extra |
| ScrapFly | $3.37+ | Same | Same |
| PhantomBuster | $50-80 | N/A | N/A |
| Google Places API | $17-35 | Enterprise tier | Enterprise tier |
Search API Proxies (SerpAPI, Serper, etc.)
Search API Proxies
Services that handle scraping/anti-bot, returning clean JSON from Google Maps queries.
| Service | Pricing | Speed | Notes |
|---|---|---|---|
| SerpAPI | $50/5K queries | Standard | Market leader. Active DMCA lawsuit from Google (Dec 2025) |
| Serper.dev | ~$1/1K queries; $0.30/1K at volume | ~2.87s | 2,500 free queries. SERP-based Maps results |
| Scrapingdog | $0.33/1K | 3.05s | 100% success rate (benchmarked), fastest |
| Scrape.do | $1.16/1K | 1.73s | AI Overview detection |
| ScraperAPI | $50/4K searches | Standard | Maps in all plans |
| ScrapeBadger | Competitive | Standard | Review support |
| DataForSEO | Pay-per-task | Standard | Maps SERP + reviews endpoints |
| Oxylabs SERP | From $49/mo | Standard | Enterprise SERP API |
| ValueSERP | Various | ~40s (slow) | Some user complaints |
| Zenserp | From $30/mo | Standard | Multi-engine support |
SerpAPI Details
Accepts standard Google Maps query syntax (q=restaurants+in+Berlin), returns structured JSON with: title, address, phone, rating, reviews, hours, service_options, GPS coordinates, place_id, data_cid, price, type, photos, thumbnails.
Separate endpoint for individual place reviews.
Legal warning: Google v. SerpAPI (Dec 2025) — active DMCA lawsuit with ruling pending.
Open-Source Scrapers & Python Libraries
GitHub repos, populartimes, gomaps, review scrapers
Open-Source GitHub Scrapers
Open-Source Scrapers
| Repository | Language | Stars | Fields | Key Feature |
|---|---|---|---|---|
| gosom/google-maps-scraper | Go | 4,200 | 33+ | 120 places/min, CLI/Web/REST, K8s-ready, email extraction, SOCKS5/HTTP/HTTPS proxy rotation |
| omkarcloud/google-maps-scraper | Python | 2,700+ | 50+ | Social profiles (LinkedIn/Twitter/FB/IG), ad spend detection, $28 Pro |
| HasData/google-maps-scraper | Python | - | 7 | 3 backends: Selenium, Playwright stealth, HasData API |
| google-reviews-scraper-pro | Python | - | Reviews | Multi-language reviews + images, MongoDB, bypassed Feb 2026 "limited view" |
| conor-is-my-name | Docker | - | Various | Designed for n8n + Postgres. Multi-container, 1 req/min/IP = ~144K/day |
| webAutomationLover | Userscript | - | Various | Tampermonkey, auto-scrolls, exports .xlsx. No server needed |
| alltheplaces | Python/Scrapy | - | POI | 20M+ POIs from 4,100+ spiders. CC-0 license, weekly updates |
| tripadvisor-scraper | Python | - | Reviews | Alternative review source via TripAdvisor GraphQL |
Feb 2026 "Limited View" Lockdown
Google introduced a "limited view" restriction on review pages. google-reviews-scraper-pro bypassed it via search-based navigation (no login needed). Review pagination uses offset increments of 10, supports 4 sort modes (relevant/newest/highest/lowest).
Python Libraries & Popular Times Tools
Python Libraries
| Library | Status | API Key? | Fields | Notes |
|---|---|---|---|---|
googlemaps (official) | Active | Yes | 50+ (API) | Official wrapper. Same pricing/limits as API |
gomaps | Dormant (Sep 2023) | No | 9 | Name, URL, address, coords, website, phone, rating, hours, Popular Times. Likely broken |
Popular Times & Foot Traffic Tools
Popular Times is NOT available via any official Google API. Must be scraped or obtained from third-party services. Historical data is also inaccessible.
populartimes (m-wrzr) — 900 Stars
pip install --upgrade git+https://github.com/m-wrzr/populartimes
Returns: weekly hourly popularity (0-100 scale), wait times, time spent, current popularity. Requires API key with billing. MIT license. Unstable as Maps updates.
LivePopularTimes (GrocerCheck)
Extension adding live busyness data to populartimes. Functions: get_populartimes_by_address (no API call), get_populartimes_by_PlaceID (API + scrape), get_places_by_search.
BestTime.app (Commercial)
| Endpoints | Forecasts (hourly 0-100%), Live Busyness, Venue Filter (by traffic/day/hour/ratings/type), Venue Search |
| Coverage | 150+ countries |
| Unique | Dwell time analysis, surge detection, filter by foot traffic intensity |
| Free Tier | Test account with limited credits |
Website: besttime.app
LocalAPI
REST API returning 20+ fields per business in 2-3 seconds including Popular Times histograms (peak hours by day of week). Claims to be the only API exposing Popular Times via endpoint. Free tier: 50 searches. local-api.com
Workarounds for the 5-Review API Limit
| Method | Reviews Available | Cost |
|---|---|---|
| Official Places API | 5 max | Enterprise tier |
| Google Business Profile API (own locations) | All | Free |
| Google Takeout (own GBP) | All | Free |
| Outscraper | All | First 500 free |
| Apify reviews actors | All | $0.25-0.40/1K |
| google-reviews-scraper-pro | All | Free (+ proxies) |
| Tampermonkey userscript | All (manual) | Free |
| DIY Playwright/Puppeteer scroll | All | Free (+ proxies) |
| SerpAPI reviews endpoint | All | $50+/mo |
No-Code, Extensions & Automation Workflows
Octoparse, browser extensions, userscripts, n8n, Make.com
No-Code Platforms
No-Code / Low-Code Platforms
| Platform | Pricing | Maps Feature | Notes |
|---|---|---|---|
| Octoparse | Free + $69/mo | Auto search splitting to overcome 120-result limit | 20K results/hour. Best no-code option |
| ParseHub | Free (5 projects) / $189/mo / $599/mo | JS rendering handles Maps SPA well | Steep price jump from free |
| WebAutomation.io | $99-999/mo or $1/1K PAYG | Pre-built Google Maps extractor | 14-day unlimited trial |
| PhantomBuster | $69-439/mo | Maps phantoms available | $50-80/1K leads — 15-50x more expensive. NOT recommended for Maps |
Browser Extensions & Userscripts
Browser Extensions & Userscripts
| Tool | Type | Price | Notes |
|---|---|---|---|
| DataMiner | Chrome ext. | Free (500 pages/mo) to $200/mo | Custom recipes, pagination, scheduled runs. No email extraction |
| Instant Data Scraper | Chrome ext. | Free | One-click, ~120 results cap. Unmaintained |
| Web Scraper (webscraper.io) | Chrome ext. | Free + cloud $50/mo | No pre-built Maps template |
| GMaps Extractor | Chrome ext. | Free/Freemium | gmapsextractor.com. No coding needed |
| G Maps Extractor | Chrome ext. | Freemium | "Probably the cheapest" per Reddit |
| AI Web Scraper | Chrome ext. | Various | Multi-purpose: Reddit, Maps, LinkedIn, Amazon |
| Tampermonkey Reviews Exporter | Userscript | Free | Greasyfork. Adds "Scrape Reviews" button, auto-expands, exports JSON |
| webAutomationLover | Userscript | Free | Tampermonkey. Accumulates results as you browse, exports .xlsx |
| Firefox GPX Exporter | Firefox addon | Free | Export saved Maps lists as GPX with lat/lon |
120-Result UI Limit: All browser extensions are capped by Google Maps' sidebar pagination (~120 results per search). Must split searches into smaller areas for more.
Automation Workflows (n8n, Make, Zapier)
Automation Workflows
n8n (Most Flexible)
- Official Outscraper node available
- Templates: Google Maps scraper, lead gen with Google Sheets export, email scraping
- conor-is-my-name/google-maps-scraper: Docker-based, designed for n8n + Postgres. Multi-container, IP rotation, 1 req/min/IP = ~144K/day
- Gemini AI + n8n pipeline: Use Google AI Studio to vibe-code scraping, pipe via webhook to Sheets
- Example pipeline: Apify scrape + Anymail Finder emails + Airtable storage
- Also works with official Google Maps API via HTTP Request node
Make.com
Scrap.io integration (200M businesses). Visual workflow builder, 3,000+ connectors. Automated lead gen tutorials available.
Zapier
Outscraper integration available. Simpler but less flexible than Make.com.
Clay
Data enrichment platform. Pull basic Maps data then enrich with Clearbit/Dropcontact. Filter by review count/recency for active businesses.
Google Sheets & Apps Script
- Apps Script Maps Service: built-in geocoding/reverse-geocoding without API keys. Cannot do Places search
- IMPORTFROMWEB add-on: handles dynamic JS pages in Sheets (IMPORTXML fails on Maps)
- Full cold outreach pipeline (Apps Script v3.0): AI email writing, website discovery, CEO identification, Firecrawl scraping, email enrichment, dedup — all in one sheet
AI-Powered Scrapers & Alternative POI Sources
ScrapeGraphAI, Crawl4AI, Overture Maps, AllThePlaces, OSM
AI/LLM-Powered Scrapers
AI/LLM-Powered Scrapers
ScrapeGraphAI (MIT / Free)
Describe what you want in plain English, it extracts structured JSON without CSS/XPath selectors. Auto-adapts to layout changes. Supports GPT, Gemini, Groq, Azure, Hugging Face, local Ollama models.
Crawl4AI (58K Stars, Apache 2.0)
Open-source LLM-friendly web crawler. Outputs clean Markdown for RAG/agents. Heuristic noise filtering, CSS/XPath/LLM extraction. Local-first (no API costs).
Firecrawl
Developer API that outputs clean Markdown from any URL, optimized for LLM ingestion. Used in enrichment pipelines alongside Maps scrapers.
LLM Query Expansion
Not a scraper per se, but a technique: use LLMs to generate category synonyms and related search terms to multiply coverage per geographic area. "dentist" becomes "dental clinic", "oral surgeon", "dental practice", etc. Combined with any scraper for 3-5x more results.
Alternative POI Data Sources (No Scraping)
Alternative POI Data Sources
Free or commercial POI databases that don't require scraping Google Maps.
Overture Maps Foundation (64.8M POIs Free)
Backed by Meta, Microsoft, Amazon, TomTom, Foursquare. The strongest free alternative to Google Maps data.
| Size | 64.8M places — Meta (~59.2M), Foursquare (~6.7M), Microsoft (~7.4M), AllThePlaces (~1.7M) |
| Fields | Names, categories (64+), phones, emails, websites, socials, addresses, brand, operating_status, confidence score, coordinates |
| Format | GeoParquet on S3 and Azure Blob. Python CLI, DuckDB SQL, browser Explorer |
| License | CDLA-Permissive-2.0 / ODbL (commercial use OK) |
| Limits | Monthly updates (not real-time). No reviews/photos. Thinner outside Western countries |
Warning: Reddit reports Places layer stopped updating as of Sept 2024 release. Verify current state.
Overture Places Guide | Downloads
Overture-Based API (Community-Built, 200x Cheaper)
A developer built a Places API using Overture data + Rust/Axum + PostGIS. Free 5K/mo, $10/100K, $30/500K, $80/2M — vs Google's ~$1,700 for 100K.
Other Alternative Sources
| Source | POIs | Free Tier | Key Strength | Reviews? |
|---|---|---|---|---|
| OpenStreetMap (Overpass API) | Varies | Unlimited, no key | Free, query any tag combo. Overpass Turbo | No |
| Foursquare Places | 100M+ | Commercial | Richest venue data, behavioral insights, check-ins | Tips only |
| HERE Technologies | Global, 400+ cats | 250K tx/mo | TripAdvisor ratings, EV/fuel data, chain ID | Via TripAdvisor |
| TomTom | ~100M, 180+ countries | 50K daily tx | Navigation-optimized, relevance scoring | No |
| Mapbox | Global | 100K req/mo | Polished SDKs | No |
| Geoapify | OSM-based, 400+ cats | 3K credits/day | Transparent pricing, can cache/store | No |
| Yelp Fusion API | Millions | 5K calls/day | 3 reviews max via API. Open Dataset: 8.6M reviews (academic) | 3 (API), 8.6M (dataset) |
| AllThePlaces | 20M+ | Unlimited (CC-0) | 4,100+ Scrapy spiders, weekly updates | No |
| MapQuest | Various | Limited | Search API v5: radius/rect/polygon/corridor | No |
| Nominatim | OSM geocoding | Free | Forward/reverse geocoding | No |
| Photon (Komoot) | OSM geocoding | Free | Typo-tolerant, multilingual | No |
OSM Reality Check (from Reddit): OpenStreetMap is poor for business/POI data. Business coverage is ~75% at best, biased toward bigger/popular locations.
Data Providers & Marketplaces
| Provider | Dataset | Pricing | Google Maps? |
|---|---|---|---|
| Bright Data | 200.7M+ records | $0.0025/record | Yes |
| Datarade | 60M+ US (varies) | By provider | Yes |
| Veridion | 134M+ businesses | ~$99/user/mo | Partial |
| SafeGraph | 52M+ POIs | Commercial | Partial (foot traffic) |
| Dataplor | Various | Commercial | Partial (LatAm strong) |
| Xtract.io | 6M+ locations | Commercial | Partial |
| Coresignal | N/A | N/A | No (employee data only) |
| Data.world | N/A | N/A | No (data governance) |
Export & Data Liberation Tools
- Google Takeout: Export saved/starred places (CSV/JSON, no coordinates — needs geocoding)
- Takeout Tools: Adds coordinates, converts to GeoJSON/KML/GPX
- json2kml: Python converter for saved places to KML
- Export-Google-Maps-Saved-Places
- Firefox GPX Exporter: Export saved lists as GPX with lat/lon
Anti-Bot Countermeasures & Legal Landscape
BotGuard/SearchGuard, proxy strategies, Google v. SerpAPI, GDPR
Google's Anti-Bot Countermeasures (2025-2026)
Anti-Bot Countermeasures
Google Maps difficulty score: 90/100 — one of the toughest platforms to scrape.
BotGuard / SearchGuard Architecture
Built on BotGuard (internally "Web Application Attestation"), deployed across YouTube, reCAPTCHA v3, and Maps. SearchGuard (January 2025) is the Search-specific evolution — "tens of thousands of person hours and millions of dollars."
Detection: Behavioral Analysis (4 Signal Categories)
| Signal | Bot Threshold | Human Range |
|---|---|---|
| Mouse movement (trajectory, velocity, acceleration, micro-tremors) | Velocity variance <10 | 50-500 |
| Keyboard rhythm (inter-key intervals, duration, errors) | Variance <5ms | 20-50ms |
| Scroll behavior (amplitude, direction, timing) | Delta variance <5px | 20-100px |
| Timing jitter (Welford's algorithm) | >200 events/sec | 10-50 |
Detection: Browser Fingerprinting (100+ Signals)
reCAPTCHA v3 (Invisible)
No visible challenge — assigns 0.0-1.0 score based on session behavior. On Maps, appears inconsistently. Only bypass: never trigger it.
Cryptographic Protection
ARX cipher (similar to NSA's Speck). Magic constants rotate per script update. Scripts served with integrity hashes. Bypasses become obsolete within minutes.
Blocking Behavior
| Trigger | Risk |
|---|---|
| Datacenter IPs | Blocked immediately — non-viable |
| Uniform request timing | High — humans pause, bots don't |
| Direct navigation to data pages | Medium — humans wander first |
| Default/missing headers | Medium |
Stealth detection: Google returns poisoned/incomplete data to detected scrapers rather than blocking outright. Soft bans aren't clean HTTP codes — "some weird JSON response or just incomplete page loads." DOM class names change every few months.
Proxy Effectiveness
| Type | Effectiveness | Cost | Notes |
|---|---|---|---|
| Datacenter | Very Low | $ | Non-viable for Maps |
| Residential | Good | $$ | ~30-50 searches/hour/IP before CAPTCHAs |
| Mobile (4G/5G) | Best | $$$ | Most reliable for large-scale |
| ISP | OK (low volume) | $$ | Burns fast. Once flagged, stays flagged for days |
| Hybrid | Cost-optimized | $$ | Datacenter for non-Maps, mobile for Maps. Saves 40-60% |
Practical rate limit: max 1 req/min/IP = ~144K results/day per IP.
Anti-Detection Toolkit
playwright-stealth/puppeteer-extra-plugin-stealth(17 evasion modules) — near-essentialundetected-chromedriverfor Selenium- CapMonster Cloud for automated CAPTCHA solving
- FlareProx — Cloudflare Workers proxy for IP masking (100K free daily requests)
- Cookie banner handling:
document.querySelector('#sp-cc-accept')?.click() - CAPTCHA detection:
document.querySelector('form[action*="validateCaptcha"]') - Image/font blocking via
Network.setBlockedURLs - Search-based navigation to bypass Feb 2026 "limited view" lockdown
Legal & TOS Landscape
Legal & TOS Landscape
Google Maps TOS
"Customer will not export, extract, or otherwise scrape Google Maps Content for use outside the Services."
This is a contractual prohibition, not criminal statute. Breach of contract, not a crime.
Google v. SerpAPI (Dec 2025 — Ruling Pending)
Filed: December 19, 2025, N.D. California (Case No. 4:25-cv-10826)
Google's DMCA Claims
- Access circumvention (17 U.S.C. 1201(a)(1)(A)): SerpAPI circumvented SearchGuard "on billions of separate occasions." $200-$2,500 per violation.
- Trafficking in circumvention tools (17 U.S.C. 1201(a)(2)): Marketing services to bypass SearchGuard.
SerpAPI's requests increased "25,000%" over two years — hundreds of millions daily.
SerpAPI's Defense (Motion to Dismiss, Feb 2026)
- Google doesn't own copyright to third-party search content
- SearchGuard protects business model, not copyrighted works
- "Google's entire business began with a web crawler that copied the content"
Hearing: May 19, 2026 before Judge Yvonne Gonzalez Rogers — ruling not yet published.
Industry impact: If Google prevails, rank tracking, competitive intelligence, and SEO analytics could become legally untenable.
Key Legal Precedents
| Case | Year | Impact |
|---|---|---|
| Van Buren v. US | 2021 | CFAA limited to insiders. ToS violations are not computer crime |
| hiQ v. LinkedIn | 2022 | Public data scraping doesn't violate CFAA (Ninth Circuit, reaffirmed) |
| X Corp v. Bright Data | 2023 | Platforms can't claim copyright on user-generated content |
| Meta v. Bright Data | 2024 | Logged-out users haven't accepted ToS — no contract breach |
Key shift: Google abandoned CFAA arguments (neutered for public data) for DMCA anti-circumvention claims — targeting SearchGuard bypass specifically.
US vs. EU
United States
- Public data scraping generally legal (CFAA precedent)
- ToS violations = contract, not criminal
- CAN-SPAM for outreach from scraped data
European Union
- GDPR: public availability does NOT equal lawful basis (Article 6)
- Names, phones, reviewer profiles = personal data
- Need legitimate interest (Art. 6(1)(f)) for B2B
- Must provide opt-out, honor right to be forgotten
- Penalties: up to 20M EUR or 4% global turnover
- EU AI Act enforcement: August 2026
Risk by Method
| Method | Legal Risk | TOS Violation | DMCA Exposure |
|---|---|---|---|
| Official Places API | None | No | No |
| Data marketplace purchase | Low | No (you didn't scrape) | No |
| Commercial platforms | Medium | Yes | Indirect |
| Open-source scrapers | Medium | Yes | Low |
| SERP API proxies | High | Yes | Active lawsuit |
| Reverse-engineered APIs | Highest | Yes | Circumvention |
Enforcement Reality
Survey of 40-50 agencies scraping Maps at scale: zero cease-and-desist letters. Google relies on technical countermeasures for most scrapers, reserving legal action for large commercial operations (SerpAPI).