Skip to main content

Crate google_maps_scraper

Crate google_maps_scraper 

Source
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 the CHROME env 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§

MapsScraper
The scraper. Holds an active Chrome browser process.
Place
One Google Maps place that the scraper extracted.
ScraperConfig
Scraper configuration.

Enums§

Error
All errors this crate produces.

Type Aliases§

Result
Result type used throughout the crate.