gmapsscraper
# gmapsscraper MCP Server
[](https://www.npmjs.com/package/@gmapsscraper/mcp)
[](./LICENSE)
MCP (Model Context Protocol) server for [gmapsscraper.io](https://gmapsscraper.io) — lets Claude, Cursor, Windsurf and any MCP client **scrape Google Maps business data** in plain conversation: names, addresses, phones, **emails**, websites, ratings, review counts, categories and coordinates.
> "Find 50 dentists in Chicago with their emails" → done, right in your AI chat.
## Tools
| Tool | What it does |
|---|---|
| `scrape_google_maps` | Search Google Maps and return business leads (blocks until done, ~30–120s) |
| `start_scrape_job` | Fire-and-forget version — returns a job id immediately |
| `get_scrape_results` | Fetch results of a previously started job |
| `get_credits` | Check remaining credit balance |
Each scrape costs 2 credits; multiple keywords in one call cost the same. **Free tier: 10 credits** (5 searches, no credit card) — get an API key at [gmapsscraper.io/dashboard](https://gmapsscraper.io/dashboard).
## Setup
### Claude Code
```bash
claude mcp add gmapsscraper -e GMAPSSCRAPER_API_KEY=your_key -- npx -y @gmapsscraper/mcp
```
### Claude Desktop / Cursor / Windsurf
Add to your MCP config (`claude_desktop_config.json`, `.cursor/mcp.json`, etc.):
```json
{
"mcpServers": {
"gmapsscraper": {
"command": "npx",
"args": ["-y", "@gmapsscraper/mcp"],
"env": {
"GMAPSSCRAPER_API_KEY": "your_key"
}
}
}
}
```
### Cursor Directory / Open Plugins
Installing from a plugin directory uses the bundled [`mcp.json`](./mcp.json), which
deliberately ships **without** an `env` block — the Open Plugins spec only expands
`${PLUGIN_ROOT}` and `${PLUGIN_DATA}`, so a secret placeholder would be passed through
literally and the server would fail to authenticate.
Set the key in your own environment before starting the client:
```bash
# macOS / Linux — add to ~/.zshrc or ~/.bashrc
export GMAPSSCRAPER_API_KEY=your_key
```
```powershell
# Windows PowerShell
setx GMAPSSCRAPER_API_KEY "your_key"
```
Restart the client afterwards so it picks up the variable. If a scrape returns an
auth error, run `get_credits` first — it fails fast and confirms whether the key
is being seen.
Requires Node.js ≥ 18. The server runs locally over stdio and talks to the [gmapsscraper.io API](https://gmapsscraper.io/llms.txt) — no other infrastructure involved.
## Example prompts
- *"Scrape coffee shops in Austin TX with emails and give me a table"*
- *"Find plumbers in Miami, then draft a cold email for the top 5 by rating"*
- *"Start a scrape for 'wedding photographer in Denver CO', I'll check back later"*
- *"How many gmapsscraper credits do I have left?"*
## Data returned per business
`title, address, phone, email, website, rating, reviews_count, category, latitude, longitude, google_maps_url, opening_hours`
Results are capped at 100 businesses per response to keep your context tidy; the full CSV is always available from the [dashboard](https://gmapsscraper.io/dashboard).
## Related
- 📦 [Node.js SDK](https://github.com/gmapsscraper/gmapsscraper-js) — `npm install @gmapsscraper/sdk` (this server is built on it)
- 🐍 [Python SDK](https://github.com/gmapsscraper/gmapsscraper-python) — `pip install gmapsscraper-sdk`
- 🤖 [Claude agent skills](https://github.com/gmapsscraper/google-maps-agent-skills)
- 📘 [API docs / llms.txt](https://gmapsscraper.io/llms.txt)
## License
[MIT](./LICENSE) © [gmapsscraper.io](https://gmapsscraper.io)
TDQS
Scored across 4 tools
Each tool has a clearly distinct purpose: async job submission, result polling, credit checking, and synchronous scraping. The overlap between start_scrape_job and scrape_google_maps is explicitly addressed in the descriptions, making ambiguity minimal.
All tool names follow a consistent verb_noun pattern with snake_case (start_scrape_job, get_scrape_results, get_credits, scrape_google_maps), making the naming predictable and readable.
With 4 tools, the server is well-scoped for a focused Google Maps scraping service. Each tool serves an essential function without unnecessary redundancy.
The tool set covers the core lifecycle: asynchronous job creation and retrieval, synchronous scraping, and credit management. Minor gaps like job cancellation or listing are not critical for the primary use case.