# Google Maps Scraper (`scraptivo/google-maps-scraper`) Actor

Google Maps business listings by search query, location, and language, with optional full place details including hours, website, phone, and coordinates.

- **URL**: https://apify.com/scraptivo/google-maps-scraper.md
- **Developed by:** [Scraptivo](https://apify.com/scraptivo) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.20 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

**Google Maps Scraper** collects business listings from [Google Maps](https://maps.google.com) and turns them into structured data for lead generation, prospecting, and CRM enrichment. Provide a search query with optional country, state, and city filters, then export names, ratings, phone numbers, addresses, websites, and categories — with optional extended details such as hours, images, and coordinates — to JSON, CSV, or Excel. Use it to build targeted lead lists, enrich contact records, and analyze local competitors. Pricing is **$2.50 per 1,000 results**.

### What can you automate with Google Maps Scraper?

- **Build targeted lead lists** — extract businesses by keyword and location to fill your sales pipeline with qualified prospects.
- **Enrich your CRM** — add phone numbers, websites, addresses, ratings, and categories to contact records automatically.
- **Analyze local competitors** — see who else operates in a market, what categories they serve, and how they are reviewed.
- **Monitor business landscapes** — track how many businesses operate in a niche and where they are located.
- **Collect full place details** — enable `fullDetails` for hours, images, owner, and coordinates when you need richer records.
- **Scale without manual work** — collect 50 or 50,000 profiles with the same effort and export structured data.

### Who is this scraper for?

| Team | Workflow |
|---|---|
| Sales and outbound teams | Generating verified lead lists with phone, website, and address data. |
| Marketing and growth teams | Enriching contact databases and segmenting by category and location. |
| Market researchers | Mapping business density, ratings, and categories within a region. |
| Franchise and location teams | Analyzing competitor locations and review signals. |

### What data can you collect from Google Maps?

| Data group | Example fields | How it helps |
|---|---|---|
| Business identity | `name`, `place_id`, `link` | Identify and deduplicate records with the stable `place_id`. |
| Contact and location | `phone`, `address`, `website` | Reach out directly and enrich CRM records. |
| Reputation signals | `rating`, `reviews` | Qualify businesses by star rating and review count. |
| Category | `main_category` | Segment businesses by what they offer. |
| Media | `featured_image` | Preview the business's primary image. |
| Extended details | hours, images, about, owner, coordinates | Available when `fullDetails` is enabled. |

Listing-level fields are always returned; hours, images, about, owner, and coordinates appear when **Extract full place details** is enabled.

### How to use Google Maps Scraper

1. Open the [Google Maps Scraper](https://apify.com/scraptivo/google-maps-scraper) on Apify.
2. Enter a `query` such as "Car Washes" or "Pizza in Chicago".
3. Optionally narrow results with `country`, `state`, and `city`, and choose a `lang`.
4. Set `max` to cap the number of results, and enable `fullDetails` for extended fields.
5. Run the Actor and export the dataset to JSON, CSV, or Excel, or connect it to your workflow.

```json
{
    "query": "Car Washes",
    "max": 50,
    "fullDetails": false,
    "lang": "en",
    "country": "United States",
    "state": "Texas",
    "city": "Houston",
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": ["RESIDENTIAL"]
    }
}
```

### Example workflow

#### Build a monthly list of local service businesses

1. Run one query per service and city (for example "plumbers" in Dallas and Austin).
2. Keep businesses that match your required `rating` and `reviews` thresholds.
3. Re-run top candidates with `fullDetails` enabled to capture hours, website, and owner data.
4. Deduplicate using the stable `place_id`, then push new contacts to your CRM.

### Automate and integrate your results

- **Schedules** — set a monthly or quarterly schedule per query and region to keep lead lists fresh.
- **Webhooks** — trigger a webhook on run completion to push new businesses into your CRM or Google Sheets.
- **Exports and API** — download JSON, CSV, or Excel from the Console, or call the Actor from the API. One cURL example:

```shell
curl "https://api.apify.com/v2/acts/scraptivo/google-maps-scraper/runs?token=YOUR-APIFY-TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "query": "Car Washes",
    "max": 50,
    "country": "United States",
    "city": "Houston",
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": ["RESIDENTIAL"]
    }
  }'
```

- **Deduplication** — use the stable `place_id` as the key when merging results across runs.

### Input reference

| Field | Type | Required | Default | What it controls |
|---|---:|---|---|---|
| `query` | String | Yes | — | Search query (e.g. "Car Washes", "Pizza in Chicago"). |
| `max` | Integer | No | `50` | Maximum number of results to scrape. |
| `fullDetails` | Boolean | No | `false` | Fetch each place page for extended fields (hours, images, about, owner). Slower but richer. |
| `lang` | String | No | `en` | Language for the search results. |
| `country` | String | No | `United States` | Country to search in. |
| `state` | String | No | — | State to narrow results. |
| `city` | String | No | — | City to narrow results. |
| `proxyConfiguration` | Proxy object | No | Residential Apify proxy | Proxy settings. Residential proxies are used by default. |

### Output example

Each dataset item is one business. A record looks like this:

```json
{
    "name": "Houston Car Wash & Detail",
    "featured_image": "https://lh5.googleusercontent.com/example.jpg",
    "website": "https://www.example-carwash.com",
    "link": "https://maps.google.com/?cid=123456789",
    "reviews": 284,
    "main_category": "Car wash",
    "rating": 4.7,
    "phone": "(713) 555-0199",
    "address": "2400 Main St, Houston, TX 77002",
    "place_id": "ChIJxxxxxxxxxxxxx"
}
```

### How much does it cost to scrape Google Maps?

The Actor uses per-unit pricing at **$2.50 per 1,000 results**. Each business record returned counts as one result. Platform usage is billed separately through your Apify plan's compute units.

### Reliability and responsible use

- **Proxy requirement** — the Actor defaults to the Apify residential proxy, which is recommended for consistent Google Maps results.
- **Conditional fields** — extended fields such as hours, images, about, owner, and coordinates appear only when `fullDetails` is enabled; some fields are nullable on the platform.
- **Public data** — the Actor collects publicly visible business information from Google Maps.
- **Responsible use** — only use the data in ways that comply with Google's terms of service and applicable law.

### Frequently asked questions

#### Can I scrape Google Maps by keyword and location?

Yes. Provide a `query` and optionally narrow with `country`, `state`, and `city`. Set `lang` to localize results.

#### Can I schedule the Google Maps Scraper to run automatically?

Yes. Use the **Scheduler** tab in Apify Console to run on a monthly or quarterly cadence per query and region.

#### What counts as one result?

Each business record returned counts as one result, billed at $2.50 per 1,000.

#### Why are some fields empty?

Extended fields such as hours, images, about, owner, and coordinates require `fullDetails` to be enabled. Google Maps also leaves some fields unset for certain businesses.

#### How do I avoid duplicate records?

Dedupe on the stable `place_id` when merging results across runs.

#### Do I need a proxy?

The Actor works out of the box with the default Apify residential proxy, which is recommended for consistent results.

### Related Scraptivo automations

- **[Walmart Scraper](https://apify.com/scraptivo/walmart-scraper)** — collect Walmart product listings with optional details and reviews.
- **[Alibaba Scraper](https://apify.com/scraptivo/alibaba-scraper)** — collect Alibaba.com product listings with supplier and review data.
- **[Nike Scraper](https://apify.com/scraptivo/nike-scraper)** — collect Nike.com product listings across marketplaces.

### Support and custom workflows

Need a different field, source, or delivery workflow? Contact Scraptivo at scraptivo@gmail.com. Include the Actor name, sample URL, required fields, and expected volume so we can assess the request.

# Actor input Schema

## `query` (type: `string`):

Search Query

## `max` (type: `integer`):

Maximum number of results to scrape

## `fullDetails` (type: `boolean`):

When enabled, fetches each place page for extended fields (hours, images, about, owner, etc.). Slower but richer.

## `proxyConfiguration` (type: `object`):

Select proxy groups or use your custom proxies

## `lang` (type: `string`):

Language for the search results

## `country` (type: `string`):

Country for the search results

## `state` (type: `string`):

State for the search results

## `city` (type: `string`):

City for the search results

## Actor input object example

```json
{
  "query": "Car Washes",
  "max": 50,
  "fullDetails": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  },
  "lang": "en",
  "country": "United States",
  "state": "Texas",
  "city": "Houston"
}
```

# Actor output Schema

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

No description

## `stats` (type: `string`):

No description

# 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 = {
    "query": "Car Washes",
    "max": 50,
    "lang": "en",
    "country": "United States",
    "state": "Texas",
    "city": "Houston"
};

// Run the Actor and wait for it to finish
const run = await client.actor("scraptivo/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 = {
    "query": "Car Washes",
    "max": 50,
    "lang": "en",
    "country": "United States",
    "state": "Texas",
    "city": "Houston",
}

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

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

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

```

## CLI example

```bash
echo '{
  "query": "Car Washes",
  "max": 50,
  "lang": "en",
  "country": "United States",
  "state": "Texas",
  "city": "Houston"
}' |
apify call scraptivo/google-maps-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scraptivo/google-maps-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/yqClHCezQX04uMcL5/builds/KiU1hfFOVOHCbFvVw/openapi.json
