SkillAtlasSkill 详情

google-maps-scraper

Extract Google Maps business leads, emails, reviews, phone numbers, websites, ratings, coordinat...

审核状态:已审核Quality 72Security 70

复制安装命令

用 Codex 或 Claude 安装复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它先审查 Skill 页面再帮你安装。

复制前请先查看来源、License 和安全提示。

项目 README

来源文件:README.md

抓取于 2026年8月3日

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.

Ask an AI Agent to Get Leads

The easiest way to use Google Maps Scraper is with an AI coding agent such as Claude Code, Codex, Cursor, GitHub Copilot, or any Agent Skills-compatible tool. You describe the leads you want; the agent plans the searches, runs a small validation, starts the full local scrape, monitors it, and helps you work with the results.

Install the skill:

npx skills add gosom/google-maps-scraper

Then ask your agent in plain language:

Find dentists in Berlin and include their websites and email addresses.

The agent automatically checks for the latest skill and Docker image, then asks only for details it still needs. For larger crawls, you can provide your own proxy, continue without one, or review three randomly selected proxy sponsors. Proxy credentials are entered through a masked local terminal prompt and are never pasted into the agent chat.

Requires Docker and Node.js on macOS, Linux, or Windows through WSL. See how the agent workflow works.

GoalStart here
Get leads into CSV/JSONCommand Line
Ask an AI coding agent to run a scrapeAI Agent Skill
Run a browser UI locallyWeb UI
Automate scraping from your appREST API
Run a multi-user scraping platformSaaS Edition
Follow common workflowsRecipes

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 →


NodeMaven - Reliable proxies with high-quality IPs

NodeMaven - Reliable proxy provider with high-quality IPs

NodeMaven provides high-quality proxies for automation, web scraping, SEO research, and social media management.

Why NodeMaven:

  • 99.9% uptime
  • Sticky sessions up to 7 days
  • Low-fraud IPs with score under 97
  • No KYC required
  • Up to 10% traffic cashback

Special codes for Google Maps Scraper users:

  • MAPS35 - 35% off Mobile and Residential Proxies
  • MAPS40 - 40% off ISP Static Proxies

Visit NodeMaven →


View all sponsors | Become a sponsor


Why Use This Scraper?

Completely Free & Open SourceMIT licensed, no hidden costs or usage limits
Multiple InterfacesCLI, Web UI, REST API - use what fits your workflow
High Performance~120 places/minute with optimized concurrency
33+ Data PointsBusiness details, reviews, emails, coordinates, and more
Production ReadyScale from a single machine to Kubernetes clusters
Flexible OutputCSV, JSON, PostgreSQL, S3, LeadsDB, or custom plugins
Proxy SupportBuilt-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:

NeedFlag
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"
Read proxies from a credentials file-proxies-file /path/to/proxies.txt

-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:

EndpointMethodDescription
/api/v1/jobsPOSTCreate a new scraping job
/api/v1/jobsGETList all jobs
/api/v1/jobs/{id}GETGet job details
/api/v1/jobs/{id}DELETEDelete a job
/api/v1/jobs/{id}/downloadGETDownload results as CSV

Full OpenAPI 3.0.3 documentation available at http://localhost:8080/api/docs

SaaS Edition

Need a multi-user platform with API keys, admin UI, job queue, workers, and cloud provisioning? Use the optional self-hosted SaaS edition:

curl -fsSL https://raw.githubusercontent.com/gosom/google-maps-scraper/main/PROVISION | sh

See SaaS documentation for deployment and operations details. There is also a 5-minute deployment walkthrough and a YouTube video walkthrough.

More examples are available in Recipes. If you need proxies for larger jobs, see Proxy Sponsors.


AI Agent Skill

The AI Agent Skill turns a natural-language lead request into a guided local scraping workflow. It is designed for nontechnical users as well as developers and keeps you in control of the search scope, proxy choice, and output.

If you have not installed it yet:

npx skills add gosom/google-maps-scraper

Then just ask your agent:

Find me all dentists in Berlin with their emails

The agent will:

  1. Noninteractively check for the latest skill and Docker image.
  2. Infer sensible search defaults and ask only for missing essentials.
  3. Let you use your own proxy, continue without one, or choose from three randomly selected proxy sponsors.
  4. Collect proxy credentials through a masked local terminal prompt instead of chat.
  5. Run a small validation scrape before the full job.
  6. Start and monitor the Docker crawl in the background.
  7. Present the results with options to save, filter, analyze, or export.

Proxy sponsor recommendations are clearly disclosed and shown with equal placement. Any discount or offer is displayed only when it is configured in the skill's active sponsor registry. You can always use another provider or no proxy.

Requires Docker and Node.js on macOS, Linux, or Windows through WSL. See the skill definition for details.


Installation

Using Docker (Recommended)

The published Docker image uses Playwright:

docker pull gosom/google-maps-scraper

Build from Source

Requirements: Go 1.26.5+

git clone https://github.com/gosom/google-maps-scraper.git
cd google-maps-scraper
go mod download

go build
./google-maps-scraper -input example-queries.txt -results results.csv -exit-on-inactivity 3m

First run downloads required browser libraries for Playwright.


Features

FeatureDescription
33+ Data PointsBusiness name, address, phone, website, reviews, coordinates, and more
Email ExtractionOptional crawling of business websites for email addresses
Multiple Output FormatsCSV, JSON, PostgreSQL, S3, LeadsDB, or custom plugins
Proxy SupportSOCKS5, HTTP, HTTPS with authentication
Scalable ArchitectureSingle machine to Kubernetes cluster
REST APIProgrammatic control for automation
Web UIUser-friendly browser interface
Fast Mode (Beta)Quick extraction of up to 21 results per query
AWS LambdaServerless execution support (experimental)

Extracted Data Points

Click to expand all 36 data points
#FieldDescription
1input_idInternal identifier for the input query
2linkDirect URL to the Google Maps listing
3titleBusiness name
4categoryBusiness type (e.g., Restaurant, Hotel)
5addressStreet address
6open_hoursOperating hours
7popular_timesVisitor traffic patterns
8websiteOfficial business website
9phoneContact phone number
10plus_codeLocation shortcode
11review_countTotal number of reviews
12review_ratingAverage star rating
13reviews_per_ratingBreakdown by star rating
14latitudeGPS latitude
15longitudeGPS longitude
16cidGoogle's unique Customer ID
17statusBusiness status (open/closed/temporary)
18descriptionsBusiness description
19reviews_linkDirect link to reviews
20thumbnailThumbnail image URL
21timezoneBusiness timezone
22price_rangePrice level ($, $$, $$$)
23data_idInternal Google Maps identifier
24street_view_urlStreet View URL
25place_idGoogle's unique place id
26imagesAssociated image URLs
27reservationsReservation booking link
28order_onlineOnline ordering link
29menuMenu link
30ownerOwner-claimed status
31complete_addressFull formatted address
32credit_cards_acceptedAccepted credit card networks
33aboutAdditional business info
34user_reviewsCustomer reviews (text, rating, timestamp)
35user_reviews_extendedExtended reviews up to ~300 (requires -extra-reviews)
36emailsExtracted email addresses (requires -email flag)

Custom Input IDs: Define your own IDs in the input file:

Matsuhisa Athens #!#MyCustomID

Direct Google Maps URLs: Input lines can be regular search queries or direct Google Maps URLs. Supported URL formats include:

https://www.google.com/maps/search/pizza
https://www.google.com/maps/place/Empire+State+Building/@40.7484405,-73.9856632
https://maps.google.com/maps?z=16&q=Empire+State+Building
maps.app.goo.gl/abc123

URLs on google.com subdomains must include a scheme (http:// or https://) and a /maps path. Short maps.app.goo.gl links are also supported without a scheme.


Configuration

Command Line Options

Usage: google-maps-scraper [options]

Core Options:
  -input string       Path to input file with queries (one per line)
  -results string     Output file path (default: stdout)
  -json              Output JSON instead of CSV
  -depth int         Max scroll depth in results (default: 10)
  -c int             Concurrency level (default: half of CPU cores)

Email & Reviews:
  -email             Extract emails from business websites
  -extra-reviews     Collect extended reviews (up to ~300)

Location Settings:
  -lang string       Language code, e.g., 'de' for German (default: "en")
  -geo string        Coordinates for search, e.g., '37.7749,-122.4194'
  -zoom int          Zoom level 0-21 (default: 15)
  -radius float      Search radius in meters (default: 10000)
  -grid-bbox string  Bounding box for grid scraping, format: "minLat,minLon,maxLat,maxLon"
  -grid-cell float   Grid cell size in km (default: 1.0, used with -grid-bbox)

Web Server:
  -web               Run web server mode
  -addr string       Server address (default: ":8080")
  -data-folder       Data folder for web runner (default: "webdata")

Database:
  -dsn string        PostgreSQL connection string
  -produce           Produce seed jobs only (requires -dsn)

Proxy:
  -proxies string    Comma-separated proxy list
                     Format: protocol://user:pass@host:port
  -proxies-file      Path to a file containing one proxy URL per line

Export:
  -leadsdb-api-key   Export directly to LeadsDB (get key at getleadsdb.com)

Advanced:
  -exit-on-inactivity duration    Exit after inactivity (e.g., '5m')
  -fast-mode                      Quick mode with reduced data
  -debug                          Show browser window
  -writer string                  Custom writer plugin (format: 'dir:pluginName')
  -browser-pool-size int          Number of browser processes to launch (default: 0, derived from -c and -pages-per-browser)
  -pages-per-browser int          Max concurrent pages per browser process (default: 1)

Notes:
  -grid-bbox requires a valid zoom level (1-21)
  -fast-mode cannot be used together with -grid-bbox

Run ./google-maps-scraper -h for the complete list.

Using Proxies

For larger scraping jobs, proxies help avoid rate limiting. Here's how to configure them:

./google-maps-scraper \
  -input queries.txt \
  -results results.csv \
  -proxies 'socks5://user:pass@host:port,http://host2:port2' \
  -depth 1 -c 2

Supported protocols: socks5, socks5h, http, https

Current proxy sponsors are listed in Proxy Sponsors. Using those links helps fund project maintenance.

Email Extraction

Email extraction is disabled by default. When enabled, the scraper visits each business website to find email addresses.

./google-maps-scraper -input queries.txt -results results.csv -email

Note: Email extraction increases processing time significantly.

Fast Mode

Fast mode returns up to 21 results per query, ordered by distance. Useful for quick data collection with basic fields.

./google-maps-scraper \
  -input queries.txt \
  -results results.csv \
  -fast-mode \
  -zoom 15 \
  -radius 5000 \
  -geo '37.7749,-122.4194'

Warning: Fast mode is in Beta. You may experience blocking.

Grid Scraping (BBox)

Grid mode splits a bounding box into cells and runs one search per cell. This is useful when a single search does not return enough places.

queries.txt example:

cafes in Peristeri, Greece

Command example:

./google-maps-scraper \
  -input queries.txt \
  -results peristeri-cafes.csv \
  -grid-bbox "38.0077,23.6719,38.0257,23.6947" \
  -grid-cell 0.5 \
  -zoom 16 \
  -depth 1 \
  -c 4

Notes:

  • -grid-bbox guides where searches are launched from, but results are not strictly clipped to the box.
  • For strict distance filtering, use -fast-mode with -geo + -radius (or post-filter by latitude/longitude).

Browser Page Concurrency

With the default -pages-per-browser 1, each concurrent job (-c) effectively uses its own browser process with a single page tab. This can be inefficient because browser pages can be CPU- and memory-heavy, and each browser process adds overhead.

The -pages-per-browser flag lets you run multiple page tabs inside the same browser process, reducing overhead. Leave -browser-pool-size at 0 to derive the browser count from concurrency and pages per browser, or set it explicitly to cap the number of browser processes independently of concurrency.

How the flags interact:

FlagWhat it controls
-cTotal number of concurrent scrape jobs
-browser-pool-sizeNumber of browser processes to launch (default: 0, derived from -c and -pages-per-browser)
-pages-per-browserNumber of page tabs per browser process (default: 1)

When -pages-per-browser is greater than 1, the scraper opens multiple tabs within each browser process and routes jobs through a shared page pool. This can significantly increase job throughput on the same hardware.

Example — 8 concurrent jobs across 2 browsers with 4 tabs each:

./google-maps-scraper \
  -c 8 \
  -browser-pool-size 2 \
  -pages-per-browser 4 \
  -input queries.txt \
  -results results.csv \
  -depth 1

Tuning guidance:

  • Start with -c 4 -browser-pool-size 1 -pages-per-browser 4 for a 4:1 page-to-browser ratio.
  • Monitor CPU and RAM usage with htop or docker stats; browser resource use varies significantly by workload, Chromium version, and page count.
  • If memory is the bottleneck, keep -browser-pool-size low and reduce -c or -pages-per-browser.
  • If CPU is the bottleneck, reduce the total number of active pages by lowering -c or -pages-per-browser.
  • The product -browser-pool-size × -pages-per-browser should roughly equal or exceed -c to keep all jobs busy.
  • Setting an explicit -browser-pool-size is most useful in containerized environments (Docker, Kubernetes) where you want predictable resource usage.

Export to LeadsDB

Skip the CSV files and send leads directly to a managed database. LeadsDB handles deduplication, filtering, and provides an API for your applications.

Using Docker:

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

Using binary:

./google-maps-scraper \
  -input queries.txt \
  -leadsdb-api-key "your-api-key" \
  -exit-on-inactivity 3m

Or via environment variable:

export LEADSDB_API_KEY="your-api-key"
./google-maps-scraper -input queries.txt -exit-on-inactivity 3m
Field Mapping
Google MapsLeadsDB
TitleName
CategoryCategory
CategoriesTags
PhonePhone
WebsiteWebsite
AddressAddress, City, State, Country, PostalCode
Latitude/LongitudeCoordinates
Review RatingRating
Review CountReviewCount
EmailsEmail
ThumbnailLogoURL
CIDSourceID

Additional fields (Google Maps link, plus code, price range, etc.) are stored as custom attributes.

Get your API key at getleadsdb.com/settings after signing up.


Advanced Usage

PostgreSQL Database Provider

For distributed scraping across multiple machines:

1. Start PostgreSQL:

docker-compose -f docker-compose.dev.yaml up -d

2. Seed the jobs:

./google-maps-scraper \
  -dsn "postgres://postgres:postgres@localhost:5432/postgres" \
  -produce \
  -input example-queries.txt \
  -lang en

3. Run scrapers (on multiple machines):

./google-maps-scraper \
  -c 2 \
  -depth 1 \
  -dsn "postgres://postgres:postgres@localhost:5432/postgres"

Kubernetes Deployment

apiVersion: apps/v1
kind: Deployment
metadata:
  name: google-maps-scraper
spec:
  replicas: 3  # Adjust based on needs
  selector:
    matchLabels:
      app: google-maps-scraper
  template:
    metadata:
      labels:
        app: google-maps-scraper
    spec:
      containers:
      - name: google-maps-scraper
        image: gosom/google-maps-scraper:latest
        args: ["-c", "1", "-depth", "10", "-dsn", "postgres://user:pass@host:5432/db"]
        resources:
          requests:
            memory: "512Mi"
            cpu: "500m"

Note: The headless browser requires significant CPU/memory resources.

Custom Writer Plugins

Create custom output handlers using Go plugins:

1. Write the plugin (see examples/plugins/example_writer.go)

2. Build:

go build -buildmode=plugin -tags=plugin -o myplugin.so myplugin.go

3. Run:

./google-maps-scraper -writer ~/plugins:MyWriter -input queries.txt

Performance

Expected throughput: ~120 places/minute (with -c 8 -depth 1)

KeywordsResults/KeywordTotal JobsEstimated Time
100161,600~13 minutes
1,0001616,000~2.5 hours
10,00016160,000~22 hours

For large-scale scraping, use the PostgreSQL provider with Kubernetes.

Telemetry

Anonymous usage statistics are collected for improvement purposes. Opt out:

export DISABLE_TELEMETRY=1

Support the Project

This project is free and open source. Stars, sponsorships, and sponsor referrals help fund maintenance.


Community

Discord

Join our Discord to:

  • Get help with setup and configuration
  • Share your use cases and success stories
  • Request features and report bugs
  • Connect with other users

Contributing

Contributions are welcome! Please:

  1. Open an issue to discuss your idea
  2. Fork the repository
  3. Create a pull request

See AGENTS.md for development guidelines.


References


License

This project is licensed under the MIT License.


Star History

Star History Chart

Legal Notice

Please use this scraper responsibly and in accordance with applicable laws and regulations. Unauthorized scraping may violate terms of service.


Banner generated using OpenAI's DALL-E

其他

中风险

  • 来源需自行核对维护者身份。
  • 包含脚本或命令调用,安装前请复核。
  • 可能需要外部 token、网络权限或第三方服务。
  • 未检测到高风险命令。
  • 扫描发现:3 条。

Codex — Git Clone 安装

  1. 安装前请先查看来源仓库和风险报告。
  2. 克隆仓库:git clone https://github.com/gosom/google-maps-scraper.git
  3. 将 "skills/google-maps-scraper" 文件夹复制到 Codex 的 skills 目录中。
  4. 重启 Codex 让新的 skill 生效。

Codex — 手动复制安装

  1. 安装前请先查看来源仓库和风险报告。
  2. 从源仓库下载 SKILL.md 及相关文件。
  3. 在 Codex 的 skills 目录中创建新文件夹。
  4. 将所有 skill 文件复制到新文件夹中。
  5. 重启 Codex 让新的 skill 生效。

Claude Code — Git Clone 安装

  1. 安装前请先查看来源仓库和风险报告。
  2. 克隆仓库:git clone https://github.com/gosom/google-maps-scraper.git
  3. 将 "skills/google-maps-scraper" 文件夹复制到 Claude Code 的 skills 目录中。
  4. 重启 Claude Code 让新的 skill 生效。

Claude Code — 手动复制安装

  1. 安装前请先查看来源仓库和风险报告。
  2. 从源仓库下载 SKILL.md 及相关文件。
  3. 在 Claude Code 的 skills 目录中创建新文件夹。
  4. 将所有 skill 文件复制到新文件夹中。
  5. 重启 Claude Code 让新的 skill 生效。

Cursor — Git Clone 安装

  1. 安装前请先查看来源仓库和风险报告。
  2. 克隆仓库:git clone https://github.com/gosom/google-maps-scraper.git
  3. 将 "skills/google-maps-scraper" 文件夹复制到 Cursor 的 skills 目录中。
  4. 重启 Cursor 让新的 skill 生效。

Cursor — 手动复制安装

  1. 安装前请先查看来源仓库和风险报告。
  2. 从源仓库下载 SKILL.md 及相关文件。
  3. 在 Cursor 的 skills 目录中创建新文件夹。
  4. 将所有 skill 文件复制到新文件夹中。
  5. 重启 Cursor 让新的 skill 生效。

GitHub Copilot — Git Clone 安装

  1. 安装前请先查看来源仓库和风险报告。
  2. 克隆仓库:git clone https://github.com/gosom/google-maps-scraper.git
  3. 将 "skills/google-maps-scraper" 文件夹复制到 GitHub Copilot 的 skills 目录中。
  4. 重启 GitHub Copilot 让新的 skill 生效。

GitHub Copilot — 手动复制安装

  1. 安装前请先查看来源仓库和风险报告。
  2. 从源仓库下载 SKILL.md 及相关文件。
  3. 在 GitHub Copilot 的 skills 目录中创建新文件夹。
  4. 将所有 skill 文件复制到新文件夹中。
  5. 重启 GitHub Copilot 让新的 skill 生效。

Windsurf — Git Clone 安装

  1. 安装前请先查看来源仓库和风险报告。
  2. 克隆仓库:git clone https://github.com/gosom/google-maps-scraper.git
  3. 将 "skills/google-maps-scraper" 文件夹复制到 Windsurf 的 skills 目录中。
  4. 重启 Windsurf 让新的 skill 生效。

Windsurf — 手动复制安装

  1. 安装前请先查看来源仓库和风险报告。
  2. 从源仓库下载 SKILL.md 及相关文件。
  3. 在 Windsurf 的 skills 目录中创建新文件夹。
  4. 将所有 skill 文件复制到新文件夹中。
  5. 重启 Windsurf 让新的 skill 生效。
查看 SKILL.md 原文
name: google-maps-scraper
description: >
  Find businesses, leads, emails, reviews, ratings, and contact details from Google Maps.
  Use for requests such as "find dentists in Berlin", "scrape Google Maps", "get local
  business leads", or "collect Google Maps reviews". Runs the open-source scraper locally
  with Docker and guides nontechnical users through setup, monitoring, and results.
license: MIT
compatibility: "Requires Docker and Node.js on macOS, Linux, or Windows through WSL."
metadata:
  author: gosom
  email: hi@gosom.dev
  version: "1.12.1"
  repository: "https://github.com/gosom/google-maps-scraper"
allowed-tools: Bash(node:*) Bash(bash:*) Bash(docker:*) Read Write

Google Maps Scraper

Turn a natural-language lead request into a validated local Google Maps crawl, monitor it, and help the user work with the results.

Resolve the directory containing this file as SKILL_DIR. Run bundled scripts from that directory; do not assume the current directory is the repository checkout.

Guardrails

  • Use plain language suitable for a nontechnical lead-generation or marketing user.
  • Never ask the user to paste proxy credentials into chat.
  • Never print, read back, summarize, or log proxy credentials.
  • Do not ask for conversational permission before routine in-scope actions such as version checks, query preparation, validation, Docker execution, monitoring, or result inspection. Run them directly. If the agent platform requires approval, batch operations and surface only unavoidable approval prompts.
  • Do not claim a proxy guarantees results or is required for every crawl.
  • Start with conservative depth and concurrency.
  • Preserve partial output when a crawl fails or is interrupted.
  • Do not expose raw logs unless a concise excerpt is necessary for diagnosis and contains no secrets.

Workflow

0. Refresh the workflow

At the beginning of every new skill workflow, run this exactly once without asking for confirmation:

bash "$SKILL_DIR/scripts/ensure-latest.sh"

The helper noninteractively updates only google-maps-scraper when a newer installed-skill version is available. Re-read SKILL.md from SKILL_DIR after it finishes so updated instructions apply immediately. If the check cannot reach the network, state briefly that the installed version will be used and continue.

1. Understand the request

Infer sensible defaults and ask only for missing essentials:

  1. Business type or search phrase
  2. Location
  3. Desired coverage: quick sample, normal search, or comprehensive area coverage

Default to English, CSV, no email extraction, no extra reviews, and shallow depth. Read query planning when translating the request into queries or choosing coverage.

Summarize the inferred configuration briefly before setup. Do not ask for confirmation when the intent and location are already clear.

2. Offer the proxy choice

Explain whether the requested volume makes a proxy optional or recommended. Ask the user to choose one path:

  1. Use an existing proxy
  2. See proxy sponsor recommendations
  3. Continue without a proxy

If the user requests recommendations, run the following selector exactly once for this setup:

node "$SKILL_DIR/scripts/select-proxy-sponsors.mjs"

Display all three returned providers with equal formatting and neutral language. State clearly: These providers sponsor the project, and the links are referral links. Show offer only when the selector returns it. Never invent or modify an offer. Let the user reject all three, use another provider, or continue without a proxy.

Read proxy setup for the display template, safe credential flow, and selection failures.

3. Configure credentials safely

When the user has a proxy URL, run the masked local prompt:

bash "$SKILL_DIR/scripts/configure-proxy.sh"

The user enters credentials directly in the terminal. Do not request the value through chat. The helper returns a file path; use that path with --proxy-file. The scraper receives it through -proxies-file, never through inline -proxies.

If the agent surface cannot relay interactive terminal input, show the same command for the user to run in their own terminal and wait for it to finish. Never fall back to collecting credentials in chat.

Skip this phase when the user chooses no proxy.

4. Prepare queries and validate locally

Write one query per line to a descriptive file under /tmp. For a normal first run, create a separate validation file containing one representative query.

Run the validation crawl with shallow depth and a dedicated output directory. Use the bundled execution helper described in local execution. Include --proxy-file only when configured.

The helper starts Docker in the background. Tell the user that the validation has started, then inspect it with the status helper until it completes. A validation succeeds only when the container exits successfully and produces at least one result.

If validation fails, follow failure recovery before starting the full crawl.

5. Run and monitor the full crawl

Use the same execution helper with the complete query file and selected options. When validation already checked the Docker image during this workflow, add --skip-image-pull to avoid a redundant network request. Without a preceding validation, keep the default image check. Report:

  • That the crawl has started
  • Whether the first image download may add startup time
  • Container state
  • Elapsed time
  • Current result count

Poll periodically without blocking the conversation for more than one minute and without streaming logs. Do not promise an exact completion time.

For grid search, extra reviews, email extraction, and other non-default flags, read advanced coverage.

6. Present and continue working with results

After a successful crawl, read result handling. Count the complete result set and show at most 20 preview rows with the most useful available fields:

  • Business name
  • Category
  • Rating and review count
  • Phone
  • Website
  • Address
  • Emails when requested

Offer to save, analyze, filter, convert, or expand the crawl. Suggest a deeper or grid search only when the user's coverage goal or unexpectedly low result count justifies it.

Show the GitHub star suggestion only after the first successful result presentation in a conversation:

If this workflow was useful, consider starring https://github.com/gosom/google-maps-scraper.

Reference routing

发现问题?提交给管理员复核

评分:

评论 (0)

暂无评论,成为第一个评论者吧!