# Google Maps Scraper - Business Leads, Phone, Reviews & GPS (`santhej/google-maps-scraper`) Actor

Scrape Google Maps businesses at scale: name, category, full address, phone, website, rating, review count, price level & GPS. Perfect for local SEO and B2B lead lists. Any city or niche, 190+ countries. Clean JSON/CSV. No API keys.

- **URL**: https://apify.com/santhej/google-maps-scraper.md
- **Developed by:** [Santhej Kallada](https://apify.com/santhej) (community)
- **Categories:** Lead generation, SEO tools, MCP servers
- **Stats:** 2 total users, 2 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

Pay per event

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Google Maps Scraper — Business Leads, Phone, Website, Reviews & GPS

**Turn any Google Maps search into a clean B2B lead list. Scrape business name, category, full address, phone, website, rating, review count, and GPS — for any city or niche, anywhere in the world.**

Search "dentist austin tx" or "plumbers near london" and get back every business as a structured row, ready for your CRM, cold-outreach tool, or map. No proxies, no captchas, no scraping to maintain.

---

### What you get per business

- 🏢 **Name, category & extra categories** — the business and everything it's tagged as.
- 📍 **Full address, parsed** — street, city, region/state, ZIP, country code, plus latitude/longitude.
- 📞 **Phone number** — direct dialing data for outreach.
- 🌐 **Website & booking link** — domain, full URL, and an online-booking URL when listed.
- ⭐ **Rating, review count & hotel rating** — social proof and popularity signals.
- 🕒 **Opening hours & current status** — full weekly timetable plus open/closed.
- 🖼️ **Main image & total photo count** — visual + popularity signal.
- 🆔 **Place ID, CID & feature ID** — stable Google identifiers for dedup and joins.
- 💲 **Price level & claimed status** — qualify leads at a glance.
- 💬 **Reviews (optional)** — flip on *Include reviews* to also pull each place's individual reviews: rating, text, author, date, and the owner's reply.

#### Filters
- **Minimum rating** — keep only places rated at or above N stars.
- **Category filter words** — keep only places whose category contains your keyword(s).
- **Skip closed places** — drop permanently/temporarily closed listings.

### Why this scraper

| | This actor | DIY / browser scraping |
|---|---|---|
| **Setup** | Type a search, hit run | Build + babysit a scraper |
| **Reliability** | Enterprise infra, retries | Breaks on Maps changes |
| **Coverage** | 190+ countries | Hard to localize |
| **Output** | JSON / CSV / Excel, API-ready | Raw HTML |
| **Cost** | Pay per business, no plan | "Free" but costs hours |

### Perfect for

- **B2B lead generation** — build targeted prospect lists by niche + city.
- **Local SEO** — audit the local pack, track competitors, find citation gaps.
- **Cold outreach** — phone + website data for calling and emailing.
- **Market research** — map density, ratings, and competition in any area.
- **Data enrichment & AI agents** — feed structured place data into pipelines and MCP tools.

### How to use it

1. Enter your **searches** (what + where).
2. Pick **country**, **language**, and results per query.
3. Run it — export JSON/CSV or pull via the API.

#### Example input

```json
{
  "queries": ["coffee shop chicago", "dentist austin tx"],
  "resultsDepth": 20,
  "locationCode": "2840"
}
````

#### Example output (one row per business)

```json
{
  "query": "coffee shop chicago",
  "title": "Caffe Umbria",
  "category": "Coffee shop",
  "additional_categories": ["Espresso bar"],
  "address": "346 N Clark St UNIT 4709, Chicago, IL 60654",
  "city": "Chicago",
  "region": "Illinois",
  "zip": "60654",
  "country_code": "US",
  "phone": "+1 312-955-0288",
  "domain": "www.caffeumbria.com",
  "url": "http://www.caffeumbria.com/",
  "rating": 4.6,
  "reviews_count": 1089,
  "price_level": "moderate",
  "current_status": "open",
  "total_photos": 946,
  "latitude": 41.8887579,
  "longitude": -87.6312297,
  "place_id": "ChIJsQ9HCbEsDogRQOVaQvA1-hs",
  "cid": "2015983089223394624",
  "is_claimed": true
}
```

When **Include reviews** is on, the dataset also gets one row per review:

```json
{
  "place_title": "Caffe Umbria",
  "place_id": "ChIJsQ9HCbEsDogRQOVaQvA1-hs",
  "rating": 4,
  "review_text": "Both drinks were really good and the baristas were lovely…",
  "author": "Karen Reyes",
  "time_ago": "7 months ago",
  "owner_answer": "Thank you for sharing your experience with us!"
}
```

### Pricing

Pay per business returned — no monthly fee, no minimum. Build a 20-lead list or a 20,000-lead database; you only pay for the places you pull. Reviews (when enabled) are billed separately per review.

### FAQ

**Do I need proxies or to handle captchas?** No — it's all handled. Just enter searches.

**Which countries are supported?** 190+ countries and all major languages.

**Can I get emails too?** This actor returns phone + website. For email enrichment, pair it with our Google Maps B2B Lead Finder.

**Great for AI agents?** Yes — clean structured JSON, ideal for MCP servers, n8n, Make, and LLM agents.

***

*Tags: google maps scraper, maps scraper, local business scraper, b2b leads, lead generation, business directory, place data, local seo, google places, gps coordinates, phone scraper.*

# Actor input Schema

## `queries` (type: `array`):

What to search on Google Maps, e.g. ‘coffee shop chicago’, ‘dentist in austin tx’, ‘plumbers near london’. One per line. Up to 100 per run.

## `resultsDepth` (type: `integer`):

How many places to return per query (10–100).

## `locationCode` (type: `string`):

Target country. Default United States (2840). UK 2826, Canada 2124, Australia 2036, India 2356, Germany 2276.

## `languageCode` (type: `string`):

Language code (e.g. en, es, de, fr).

## `minRating` (type: `integer`):

Only keep places with at least this star rating (1–5). Leave empty for no filter.

## `categoryFilterWords` (type: `array`):

Only keep places whose category (or additional categories) contains one of these words, e.g. ‘dentist’, ‘orthodontist’. Case-insensitive. Leave empty to keep all.

## `skipClosedPlaces` (type: `boolean`):

Skip places marked permanently/temporarily closed in Google's opening hours.

## `includeReviews` (type: `boolean`):

Also pull individual customer reviews for each place (rating, text, author, date, owner reply). Adds review rows to the dataset and is billed per review. Limited to the first 50 places per run.

## `reviewsDepth` (type: `integer`):

How many reviews to pull per place when ‘Include reviews’ is on (10–100).

## Actor input object example

```json
{
  "queries": [
    "coffee shop chicago",
    "dentist austin tx"
  ],
  "resultsDepth": 20,
  "locationCode": "2840",
  "languageCode": "en",
  "skipClosedPlaces": false,
  "includeReviews": false,
  "reviewsDepth": 20
}
```

# Actor output Schema

## `dataset` (type: `string`):

All scraped Google Maps business listings.

## `summary` (type: `string`):

Queries and place counts.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "queries": [
        "coffee shop chicago",
        "dentist austin tx"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("santhej/google-maps-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "queries": [
        "coffee shop chicago",
        "dentist austin tx",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("santhej/google-maps-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "queries": [
    "coffee shop chicago",
    "dentist austin tx"
  ]
}' |
apify call santhej/google-maps-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=santhej/google-maps-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Google Maps Scraper - Business Leads, Phone, Reviews & GPS",
        "description": "Scrape Google Maps businesses at scale: name, category, full address, phone, website, rating, review count, price level & GPS. Perfect for local SEO and B2B lead lists. Any city or niche, 190+ countries. Clean JSON/CSV. No API keys.",
        "version": "0.0",
        "x-build-id": "3wqN5l3Ya14bTVrkB"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/santhej~google-maps-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-santhej-google-maps-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/santhej~google-maps-scraper/runs": {
            "post": {
                "operationId": "runs-sync-santhej-google-maps-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/santhej~google-maps-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-santhej-google-maps-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "queries": {
                        "title": "Search queries",
                        "minItems": 1,
                        "maxItems": 100,
                        "type": "array",
                        "description": "What to search on Google Maps, e.g. ‘coffee shop chicago’, ‘dentist in austin tx’, ‘plumbers near london’. One per line. Up to 100 per run.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "resultsDepth": {
                        "title": "Results per query",
                        "minimum": 10,
                        "maximum": 100,
                        "type": "integer",
                        "description": "How many places to return per query (10–100).",
                        "default": 20
                    },
                    "locationCode": {
                        "title": "Country",
                        "enum": [
                            "2840",
                            "2826",
                            "2124",
                            "2036",
                            "2356",
                            "2276",
                            "2250",
                            "2724",
                            "2380",
                            "2392"
                        ],
                        "type": "string",
                        "description": "Target country. Default United States (2840). UK 2826, Canada 2124, Australia 2036, India 2356, Germany 2276.",
                        "default": "2840"
                    },
                    "languageCode": {
                        "title": "Language",
                        "type": "string",
                        "description": "Language code (e.g. en, es, de, fr).",
                        "default": "en"
                    },
                    "minRating": {
                        "title": "Minimum rating",
                        "minimum": 1,
                        "maximum": 5,
                        "type": "integer",
                        "description": "Only keep places with at least this star rating (1–5). Leave empty for no filter."
                    },
                    "categoryFilterWords": {
                        "title": "Category filter words",
                        "type": "array",
                        "description": "Only keep places whose category (or additional categories) contains one of these words, e.g. ‘dentist’, ‘orthodontist’. Case-insensitive. Leave empty to keep all.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "skipClosedPlaces": {
                        "title": "Skip closed places",
                        "type": "boolean",
                        "description": "Skip places marked permanently/temporarily closed in Google's opening hours.",
                        "default": false
                    },
                    "includeReviews": {
                        "title": "Include reviews",
                        "type": "boolean",
                        "description": "Also pull individual customer reviews for each place (rating, text, author, date, owner reply). Adds review rows to the dataset and is billed per review. Limited to the first 50 places per run.",
                        "default": false
                    },
                    "reviewsDepth": {
                        "title": "Reviews per place",
                        "minimum": 10,
                        "maximum": 100,
                        "type": "integer",
                        "description": "How many reviews to pull per place when ‘Include reviews’ is on (10–100).",
                        "default": 20
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
