MCPcopy Index your code
hub / github.com/gosom/google-maps-scraper

github.com/gosom/google-maps-scraper @v1.16.1 sqlite

repository ↗ · DeepWiki ↗ · release v1.16.1 ↗
1,729 symbols 4,916 edges 117 files 323 documented · 19%
README

Google Maps Scraper

GitHub Stars GitHub Forks Tweet

Build Status Go Report Card GoDoc License: MIT Discord

Extract Google Maps business leads, emails, reviews, phone numbers, websites, ratings, coordinates, and more with a free open-source CLI, Web UI, REST API, and optional self-hosted platform.

Use it for lead generation, local business research, sales prospecting, data enrichment, or developer automation.

Goal Start here
Get leads into CSV/JSON Command Line
Ask an AI coding agent to run a scrape AI Agent Skill
Run a browser UI locally Web UI
Automate scraping from your app REST API
Run a multi-user scraping platform SaaS Edition
Follow common workflows Recipes

Example GIF

If this project is useful to you, a GitHub star helps others discover it. Sponsorships help fund maintenance and new work.


Sponsored By

This project is made possible by our amazing sponsors

NetNut – Limitless Web Data Collection

NetNut – Limitless Web Data Collection

Built on a fully owned premium residential proxies network infrastructure powering enterprise-grade Website Unblocker, SERP APIs, LLM scraper, ecommerce data collection, and ready-to-use datasets.

Visit NetNut → | Learn more


Coreclaw - Full-stack web scraping and data extraction platform

Coreclaw - Full-stack web scraping and data extraction platform

Find ready-made workers for public websites, run them instantly, and get structured data you can export or connect anywhere. Get free test for $3 →


G Maps Extractor - No-code Google Maps scraper

G Maps Extractor

Chrome extension that extracts emails, social profiles, phone numbers, reviews & more. Get 1,000 free leads →


Scrap.io - Extract ALL Google Maps listings at country-scale

Scrap.io - Extract ALL Google Maps Listings

No keywords needed. No limits. Export millions of businesses in 2 clicks. Try it free →


SerpApi - Google Maps API and 30+ search engine APIs

SerpApi

Fast, reliable, and scalable. Used by Fortune 500 companies. View all APIs →


SearchApi - Google Maps API for SERP scraping

SearchApi

Real-time Google Maps data with a simple integration. Explore the API →


Evomi - Swiss quality proxies for scraping

Evomi

Swiss quality proxies from $0.49/GB across 150+ countries, with 24/7 support and 99.9% uptime. Visit Evomi →


HasData - No-code Google Maps Scraper & Email Extraction

HasData Google Maps Scraper

Extract business leads, emails, addresses, phones, reviews and more. Get 1,000 free credits →


RapidProxy - High-Performance Proxy Solution

RapidProxy

Unlock global access with consistent, high-speed connections from $0.65/GB, 90M+ real residential IPs worldwide, and traffic that never expires. Try it free →


TalorData - Fast SERP API for Google Maps and Search Data

TalorData

Real-time SERP data APIs for Google Maps and search results, with structured JSON / HTML responses and 1,000 free API responses to start. Start using TalorData → | Learn more


Webshare - Premium proxies for scraping at scale

Webshare

The most affordable premium proxies across 195 countries & 80+ million IPs, plus a FREE plan for new users. Learn more


BirdProxies - Residential and ISP proxies

BirdProxies

Hey, we built BirdProxies because proxies shouldn't be complicated or overpriced. Fast residential and ISP proxies in 195+ locations, fair pricing, and real support. Try our FlappyBird game on the landing page for free data!

Visit BirdProxies → | Join Discord


Proxidize - Proxies for Google Maps Scraping

Proxidize | Proxies for Google Maps Scraping

Mobile and residential proxies for Google Maps scraping, local SEO, lead generation, and data collection. Use code gmaps20 for 20% off. Visit Proxidize →


View all sponsors | Become a sponsor


Why Use This Scraper?

Completely Free & Open Source MIT licensed, no hidden costs or usage limits
Multiple Interfaces CLI, Web UI, REST API - use what fits your workflow
High Performance ~120 places/minute with optimized concurrency
33+ Data Points Business details, reviews, emails, coordinates, and more
Production Ready Scale from a single machine to Kubernetes clusters
Flexible Output CSV, JSON, PostgreSQL, S3, LeadsDB, or custom plugins
Proxy Support Built-in SOCKS5/HTTP/HTTPS proxy rotation

What's Next After Scraping?

Once you've collected your data, you'll need to manage, deduplicate, and work with your leads. LeadsDB is a companion tool designed exactly for this:

  • Automatic Deduplication - Import from multiple scrapes without worrying about duplicates
  • AI Agent Ready - Query and manage leads with natural language via MCP
  • Advanced Filtering - Combine filters with AND/OR logic on any field
  • Export Anywhere - CSV, JSON, or use the REST API

The scraper has built-in LeadsDB integration - just add your API key and leads flow directly into your database.

Start free with 500 leads


Table of Contents


Quick Start

Command Line

mkdir -p gmaps-output

docker run \
  -v gmaps-playwright-cache:/opt \
  -v "$PWD/example-queries.txt:/queries.txt:ro" \
  -v "$PWD/gmaps-output:/out" \
  gosom/google-maps-scraper \
  -input /queries.txt \
  -results /out/results.csv \
  -depth 1 \
  -exit-on-inactivity 3m

Useful options:

Need Flag
Extract emails from business websites -email
Write JSON instead of CSV -json -results /out/results.json
Collect extra reviews -extra-reviews -json -results /out/results.json
Increase concurrency -c 4, -c 8, or -c 16
Run multiple pages per browser -pages-per-browser 4
Limit browser processes -browser-pool-size 2
Use proxies -proxies "http://user:pass@host:port,socks5://host:port"

-c controls how many scrape jobs run in parallel. Higher concurrency can finish large input files faster, but it also uses more CPU/RAM and can increase blocking or failures, especially without proxies. Start with the default for a first run. For larger jobs on a capable machine, try -c 4, -c 8, or -c 16 and measure the result.

Want to skip CSV files? Send leads directly to LeadsDB:

docker run \
  -v gmaps-playwright-cache:/opt \
  -v "$PWD/example-queries.txt:/queries.txt:ro" \
  gosom/google-maps-scraper \
  -input /queries.txt \
  -depth 1 \
  -leadsdb-api-key "your-api-key" \
  -exit-on-inactivity 3m

Web UI

Start the web interface with a single command:

mkdir -p gmapsdata

docker run \
  -v "$PWD/gmapsdata:/gmapsdata" \
  -p 8080:8080 \
  gosom/google-maps-scraper \
  -data-folder /gmapsdata

Then open http://localhost:8080 in your browser.

Or download the binary release for your platform.

Note: Results take at least 3 minutes to appear (minimum configured runtime).

macOS Users: Docker command may not work. See MacOS Instructions.

REST API

When running the web server, a full REST API is available:

Endpoint Method Description
/api/v1/jobs POST Create a new scraping job
/api/v1/jobs GET List all jobs
/api/v1/jobs/{id} GET Get job details
/api/v1/jobs/{id} DELETE Delete a job
/api/v1/jobs/{id}/download GET Download results as CSV

Full OpenAPI 3.0.3 document

Extension points exported contracts — how you extend this code

Runner (Interface)
(no doc) [6 implementers]
runner/runner.go
WorkerProvisioner (Interface)
WorkerProvisioner defines the interface for provisioning worker instances on a cloud provider. Separate from the Provisi [2 …
infra/worker.go
Deployer (Interface)
(no doc) [4 implementers]
cmd/gmapssaas/cmdupdate/cmd_update.go
ScrapeManager (Interface)
ScrapeManager is the interface that ScrapeWorker uses to interact with the scraper lifecycle and result collection. [1 …
rqueue/rqueue.go
Store (Interface)
Store defines the interface for rate limit storage backends. [1 implementers]
ratelimit/ratelimit.go
Telemetry (Interface)
(no doc) [2 implementers]
tlmt/tlmt.go
Provisioner (Interface)
(no doc) [2 implementers]
infra/infra.go
ProviderOption (FuncType)
ProviderOption allows configuring the provider
postgres/provider.go

Core symbols most depended-on inside this repo

Get
called by 73
web/job.go
Error
called by 55
log/log.go
Info
called by 48
log/log.go
Close
called by 41
tlmt/tlmt.go
cleanString
called by 40
internal/jsonbsanitize/entry.go
getNthElementAndCast
called by 30
gmaps/entry.go
Scan
called by 30
web/sqlite/sqlite.go
SessionFromContext
called by 23
admin/middleware.go

Shape

Method 1,073
Function 443
Struct 145
Class 32
Interface 18
FuncType 12
TypeAlias 6

Languages

Go53%
TypeScript47%
Python1%

Modules by API surface

admin/static/xterm.min.js788 symbols
rqueue/rqueue.go44 symbols
gmaps/entry.go44 symbols
admin/admin.go33 symbols
rqueue/worker_jobs.go32 symbols
admin/postgres/postgres.go29 symbols
web/web.go25 symbols
postgres/resultwriter_test.go18 symbols
scraper/centralwriter.go17 symbols
cryptoext/cryptoext.go16 symbols
infra/infra.go15 symbols
infra/digitalocean/appplatform.go15 symbols

Dependencies from manifests, versioned

4d63.com/gocheckcompilerdirectivesv1.3.0 · 1×
4d63.com/gochecknoglobalsv0.2.2 · 1×
github.com/4meepo/tagalignv1.4.2 · 1×
github.com/Abirdcfly/dupwordv0.1.3 · 1×
github.com/Antonboom/errnamev1.0.0 · 1×
github.com/Antonboom/nilnilv1.0.1 · 1×
github.com/Antonboom/testifylintv1.5.2 · 1×
github.com/BurntSushi/tomlv1.4.1-0.20240526193 · 1×
github.com/Crocmagnon/fatcontextv0.7.1 · 1×
github.com/Djarvur/go-err113v0.0.0-2021010821221 · 1×
github.com/GaijinEntertainment/go-exhaustruct/v3v3.3.1 · 1×
github.com/KyleBanks/depthv1.2.1 · 1×

Datastores touched

gmaps_proDatabase · 1 repos
postgresDatabase · 1 repos
(mysql)Database · 1 repos
dbDatabase · 1 repos
gmsDatabase · 1 repos

For agents

$ claude mcp add google-maps-scraper \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact