Google Maps Scraper
Google Maps Extractor · Google Maps Lead Scraper · Google Maps Lead Extractor
Python SDK to scrape Google Maps places (leads), reviews, and photos through a hosted Agent HTTP API. Powered by GMaps Lead Finder. This is not a local browser crawler — jobs run in the cloud scrape-and-enrich pipeline.
- PyPI:
google-maps-scraper-sdk - Import:
gmaps_scraper - CLI:
gmaps-scraper(orpython -m gmaps_scraper)
Get an API key
- Sign in at gmapsleadfinder.com.
- Use a plan with Agent API (Growth or higher) — see Pricing.
- Open Account → API key and copy your
gmf_…key.
export GMF_API_KEY=gmf_your_key_here
Never commit API keys or embed them in public frontends.
Install
pip install google-maps-scraper-sdk
Requires Python 3.10+. Uses the standard library only (no third-party HTTP dependencies).
Configuration
| Variable | Required | Description |
|---|---|---|
GMF_API_KEY |
Yes | Bearer key (gmf_…) |
GMF_BASE_URL |
No | Default https://gmapsleadfinder.com |
You can also pass credentials in code:
from gmaps_scraper import Client
client = Client(api_key="gmf_…", base_url="https://gmapsleadfinder.com")
Quickstart
from gmaps_scraper import Client
client = Client() # reads GMF_API_KEY
me = client.me()
print(me["plan"], me["creditsRemaining"])
# Google Maps scraper helper: create job → poll → fetch all rows
rows = client.scrape("dentists in Austin TX")
for row in rows[:5]:
print(row.get("Name"), row.get("Phone"), row.get("Website"), row.get("Emails"))
# Single-place reviews / photos (run sequentially — one in-flight job per user)
reviews = client.scrape_reviews("https://maps.google.com/?cid=…")
photos = client.scrape_photos("ChIJ…") # Place ID, URL, or business_id
CLI:
gmaps-scraper me
gmaps-scraper scrape "dentists in Austin TX" --out leads.json
gmaps-scraper scrape "dentists in Austin TX" --out leads.csv
Client API
me()
Returns plan and credits: plan, creditsLimit, creditsUsed, creditsRemaining.
create_job(keyword)
Queues a single-keyword Google Maps lead scrape. Body is exactly one search query (city + category works best).
Returns: jobId, keywordCount, creditsRemaining.
get_job(job_id)
Poll job status until completed, partial, or failed (also queued / running while in progress).
get_results(job_id, *, limit=100, cursor=None)
Paginated place rows as { column_header: string } objects. Follow nextCursor until null. limit is 1–500.
scrape(keyword, *, poll_interval_ms=2000, timeout_ms=600_000, result_limit=100)
High-level Google Maps extractor: creates a job, polls to a terminal status, then returns all result rows.
create_reviews_job(place) / get_reviews_job(job_id) / get_reviews_results(job_id, *, limit=100, cursor=None)
Single-place reviews job. place is a Maps URL or business_id.
scrape_reviews(place, *, poll_interval_ms=2000, timeout_ms=600_000, result_limit=100)
Create reviews job → poll → all review rows.
create_photos_job(place) / get_photos_job(job_id) / get_photos_results(job_id, *, limit=100, cursor=None)
Single-place photos job. place is a Maps URL, business_id, or Place ID.
scrape_photos(place, *, poll_interval_ms=2000, timeout_ms=600_000, result_limit=100)
Create photos job → poll → all photo rows.
CLI reference
gmaps-scraper me
gmaps-scraper scrape "<keyword>" [--out path.json|path.csv]
gmaps-scraper scrape "<keyword>" [--poll-interval-ms 2000] [--timeout-ms 600000]
# Prefer module form if the npm CLI is also installed (same binary name):
python -m gmaps_scraper me
python -m gmaps_scraper.cli scrape "coffee shops in Austin TX" --out leads.csv
Errors
| HTTP | Exception | Meaning |
|---|---|---|
| 400 | BadRequestError |
Invalid request (e.g. not exactly one keyword) |
| 401 | AuthenticationError |
Missing or invalid API key |
| 402 | InsufficientCreditsError |
No credits remaining |
| 403 | PlanNotAllowedError |
Plan cannot use Agent API (need Growth+) |
| 404 | NotFoundError |
Job not found |
| 409 | JobConflictError |
Another job is already running for this user |
| — | TimeoutError |
Local poll timeout in scrape() |
| other | ApiError |
Base / unexpected API failure |
Limits
- Exactly one keyword per leads job; exactly one place per reviews or photos job.
- Only one running job per user at a time (web UI, HTTP API, and MCP share the lock) →
409if busy. For multiple keywords or places, scrape sequentially. - 1 credit = 1 place row; enrich is included.
- Agent API requires Growth or higher.
- Empty email/social cells mean nothing public was found — contacts are never invented.
Links
| Resource | URL |
|---|---|
| Website | https://gmapsleadfinder.com |
| Pricing | https://gmapsleadfinder.com/pricing |
| HTTP API docs | https://gmapsleadfinder.com/docs/api |
| Agent & MCP | https://gmapsleadfinder.com/docs/agent |
| OpenAPI | https://gmapsleadfinder.com/openapi-agent.yaml |
| Get API key | https://gmapsleadfinder.com/account#api-key |
| PyPI | https://pypi.org/project/google-maps-scraper-sdk/ |
| Source / examples | https://github.com/google-maps-lead-scraper/google-maps-scraper |
| Python guide | https://github.com/google-maps-lead-scraper/google-maps-scraper/blob/main/docs/python.md |
Prefer Remote MCP for Claude / Cursor / Codex? See the Agent docs.
License
MIT
Metadata
Release files for google-maps-scraper-sdk 0.1.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| google_maps_scraper_sdk-0.1.2.tar.gz | 10.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| google_maps_scraper_sdk-0.1.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 21.0 kB
Release files / google_maps_scraper_sdk-0.1.2.tar.gz
| Download URL | google_maps_scraper_sdk-0.1.2.tar.gz |
|---|---|
| Size | 10.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
0ebc6209a9c4237b506a8cb8677d25555f94ca739607913fb07c22cee34c8419
|
|
BLAKE2b-256 checksum How to use checksums |
e81f164288bb91ef11a118eb96a63f532b769e6ae9cad45c431a11c8c0c17e0a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.13
|
Release files / google_maps_scraper_sdk-0.1.2-py3-none-any.whl
| Download URL | google_maps_scraper_sdk-0.1.2-py3-none-any.whl |
|---|---|
| Size | 10.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
15da3662c15546f934a9d39baa750a7db81dce95c2af57cd1952ec3296c20ea2
|
|
BLAKE2b-256 checksum How to use checksums |
e6fe975fcb2ad735779bcff24897501b39aa8e457339cc865937d3ef551205ad
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.13
|