Expand description
§google-maps-scraper
Apify-style Google Maps scraper for Rust. Drives a real headless Chrome via the Chrome DevTools Protocol, searches Google Maps for any query, scrolls the results feed until exhaustion, then clicks each place card and extracts the public details (name, address, phone, website).
§When to use this
- You want lots of Google Maps results (hundreds per query) without paying for the official Places API.
- You don’t have an Apify subscription, or want a self-hosted scraper.
- You’re comfortable with the brittleness of DOM-based scraping (Google occasionally changes selectors; this crate keeps them in one place so updates are localised).
§Requirements
- Chrome / Chromium installed locally. On macOS the auto-detect finds
/Applications/Google Chrome.app/Contents/MacOS/Google Chrome. On Linux:apt install chromium. Override via theCHROMEenv var.
§Quick start
use google_maps_scraper::{MapsScraper, ScraperConfig};
let scraper = MapsScraper::launch(ScraperConfig::default()).await?;
let places = scraper
.search_many(&["coffee shop Berlin", "bakery Munich"])
.await?;
for p in &places {
println!("{} — {:?} — {:?}", p.name, p.website, p.phone);
}§Anti-detection notes
Google’s bot-detection adapts. The --disable-blink-features=AutomationControlled
flag is set by default. For high-volume scraping use a residential proxy /
Browserless service, slow down delay between queries, and don’t reuse a
single browser session for hundreds of queries.
Structs§
- Maps
Scraper - The scraper. Holds an active Chrome browser process.
- Place
- One Google Maps place that the scraper extracted.
- Scraper
Config - Scraper configuration.
Enums§
- Error
- All errors this crate produces.
Type Aliases§
- Result
- Result type used throughout the crate.