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

Scrape places from Google Maps search: name, full address, latitude and longitude, star rating, categories, website and phone number. Search any query around any coordinates, at any zoom, in any language. Returns a Google Maps place ID for every result so you can join it to other data.

- **URL**: https://apify.com/superslowsloth/google-maps-scraper.md
- **Developed by:** [Superslow Sloth](https://apify.com/superslowsloth) (community)
- **Categories:** Lead generation, Automation, SEO tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.05 / 1,000 places

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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

Scrape places from Google Maps search without an API key or a billing account. Search any query around any point on earth and get back the business name, full address, coordinates, star rating, categories, website and phone number, plus a Google place ID you can use to join the data to anything else.

### What you can do with it

- Build a local lead list for a trade, a city or a postcode
- Enrich an existing customer list with addresses, phone numbers and websites
- Map competitor density across neighbourhoods before choosing a location
- Track which businesses in a category have no website
- Feed a place ID list into a reviews scraper for sentiment work

### Input

| Field | Type | Notes |
|---|---|---|
| `searchQueries` | array | What to look for, e.g. `dentist`, `coffee`, `plumber in Camden`. |
| `latitude` / `longitude` | string | The centre of the search area. |
| `zoom` | string | Lower values cover more ground with coarser results. `13.1` is roughly a city district. |
| `maxItems` | integer | Per query. Google serves 20 per page and repeats results once a set is exhausted. |
| `language` / `country` | string | Two-letter codes that change the language of results and the regional bias. |
| `proxyConfiguration` | object | Recommended for repeated searching. |

```json
{
  "searchQueries": ["coffee in Shibuya"],
  "latitude": "35.66",
  "longitude": "139.70",
  "zoom": "13.1",
  "maxItems": 60,
  "proxyConfiguration": { "useApifyProxy": true }
}
```

### Output

One dataset item per place:

```json
{
  "place_id": "0x60188db56f1c7a89:0x842e161c85415579",
  "name": "Blue Bottle Coffee - Shibuya Cafe",
  "address": "1 Chome-7-3 Jinnan, Shibuya, Tokyo 150-0041, Japan",
  "latitude": 35.6640944,
  "longitude": 139.6995175,
  "rating": 4.6,
  "categories": ["Coffee shop", "Cafe", "Dessert restaurant"],
  "website": "https://store.bluebottlecoffee.jp/pages/shibuya",
  "phone": "+81 3-6427-1277",
  "maps_url": "https://www.google.com/maps/place/?q=place_id:0x60188db56f1c7a89:0x842e161c85415579"
}
```

Export as JSON, CSV, Excel or XML, or read the dataset straight from the Apify API.

### Coverage and how the search area works

Google Maps returns results relative to a viewport, not a radius. The latitude, longitude and zoom you pass define that viewport: a low zoom sweeps a wide area and returns the most prominent places in it, while a high zoom returns denser results from a smaller area. To cover a whole city thoroughly, run several searches at a higher zoom across a grid of coordinates rather than one search at a low zoom.

### Fields that are sometimes missing

Not every business publishes everything. A place with no website returns `null` for `website`, and the same applies to `phone` and `rating`. These are never filled in with a placeholder or a zero, because a zero rating would read as a real score of nought.

### Pricing

Pay per result. You are charged for each place delivered, plus a small per-run start fee. Duplicate places that Google repeats across pages are removed before you are charged for them.

### FAQ

**Do I need a Google Maps API key?** No. There is no key, no Google Cloud project and no billing account.

**Can I scrape reviews with this?** Not with this actor. It returns places, including the place ID you need to look their reviews up separately.

**How many results can one query return?** Google exhausts a result set and then starts repeating. The actor detects the repeat and stops rather than charging you twice for the same place, so a very narrow query may return fewer than `maxItems`.

**Does it work outside the United States?** Yes, anywhere Google Maps has coverage. Set `language` and `country` to match the region you are searching.

# Actor input Schema

## `searchQueries` (type: `array`):

What to search for, e.g. "coffee" or "dentist". Each query is searched around the coordinates below.

## `latitude` (type: `string`):

Centre of the search area.

## `longitude` (type: `string`):

Centre of the search area.

## `zoom` (type: `string`):

Lower zoom covers a wider area with coarser results. 13.1 is a city district.

## `maxItems` (type: `integer`):

Google serves 20 per page and repeats results once a result set is exhausted.

## `language` (type: `string`):

Two-letter interface language for the results, e.g. en or ja.

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

Two-letter country code that biases the search, e.g. us or jp.

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

Recommended. Google rate-limits repeated searches from one address.

## Actor input object example

```json
{
  "searchQueries": [
    "coffee in Shibuya"
  ],
  "latitude": "35.6812",
  "longitude": "139.7671",
  "zoom": "13.1",
  "maxItems": 60,
  "language": "en",
  "country": "us",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `places` (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 = {
    "searchQueries": [
        "coffee in Shibuya"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("superslowsloth/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 = {
    "searchQueries": ["coffee in Shibuya"],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("superslowsloth/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 '{
  "searchQueries": [
    "coffee in Shibuya"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call superslowsloth/google-maps-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,superslowsloth/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/DJm5P2Uv4ERieJRtH/builds/W9L5aCgqWLzBnrNI6/openapi.json
