# Google Maps Scraper - Places, Ratings, Phone, Website & GPS (`zaver.api/google-maps-scraper`) Actor

Just $2.49 per 1,000 places. Scrape Google Maps for any query - business name, address, rating, reviews, category, phone, website, opening hours, Place ID and GPS - and optionally emails and social profiles from each business website. No proxies. Export CSV, JSON, Excel.

- **URL**: https://apify.com/zaver.api/google-maps-scraper.md
- **Developed by:** [Zaver](https://apify.com/zaver.api) (community)
- **Categories:** Lead generation
- **Features:** Limited permissions
- **Stats:** 1 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.00005 / actor start

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?

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 - Places, Ratings, Phone, Website & GPS

**Scrape Google Maps at scale - businesses with ratings, phone, website, opening hours, Place ID and GPS.** Scrape Google Maps places for any list of queries and export them as **CSV, JSON or Excel** - with **country (`gl`)**, **language (`hl`)** and **date-range** filters and pagination. No proxies, no CAPTCHAs, no browser to babysit: every request goes through a hosted Google API, so results are fast and complete.

> ⭐ $2.49 / 1,000 places · bulk queries · country + language + date filters · pagination · pay only per row · CSV/JSON/Excel · API & MCP ready.

### What data does it extract?

One row per result with: **title, address, latitude, longitude, rating, ratingCount, priceLevel, type/types, phoneNumber, website, openingHours, placeId, cid, fid, thumbnailUrl, position** - plus the `query`, `page` and result `type` each row came from, so multi-query exports stay separable. Everything Google returns for the item is passed through, so new fields appear automatically.

### Get emails and social profiles for every business

Google shows a business's phone and website, but not its email. Turn on **Get emails and social profiles** and the Actor visits each business website and adds:

| Field | Description |
|---|---|
| `email`, `emails` | The best email address, and every address found, the business's own domain first |
| `facebook`, `instagram`, `linkedin`, `twitter`, `youtube`, `tiktok`, `pinterest`, `whatsapp`, `telegram` | Links to the business's social profiles |
| `websitePhones` | Extra phone numbers from the site's call links |
| `contactStatus` | `email_found`, `social_only`, `none`, `unreachable`, `no_website` or `website_is_social` |

It reads the home page and the contact, imprint or about page, including addresses hidden by Cloudflare email protection or written as `name [at] domain [dot] com`. This turns a list of places into a **Google Maps email extractor**: a lead list you can contact.

You pay for this only when it works. A business is charged the contact rate when the website scan finds an **email address**. Social profiles and phone numbers found without an email are free, and so are businesses with no website, an unreachable site, or nothing to find.

### Why choose this scraper

- 💸 **Cheap** - a flat **$2.49 / 1,000 places**, billed per row delivered. A query that returns nothing costs nothing.
- 🌍 **Localised** - `gl` (country) and `hl` (language) give you the results a real user in that market sees; `dateRange` restricts to the past hour, day, week, month or year.
- 📦 **Bulk & deep** - up to 1,000 queries per run, `maxPages` to go deeper.
- ⚡ **Reliable** - no proxies, no CAPTCHAs, no rate-limit roulette; results come from a hosted Google search API.
- 🔌 **Automate** - Apify API, MCP server, schedules, Make, Zapier, n8n.

### How to use it

1. Paste your queries into **`queries`** (one per line).
2. Optionally set **`gl`** (e.g. `in`, `us`, `th`), **`hl`** (e.g. `hi`, `en`), **`dateRange`** (`qdr:d` = past day, `qdr:w` = past week, `qdr:m`, `qdr:y`, `qdr:h`), plus **`ll`** / **`placeId`** / **`cid`**.
3. Set **`maxPages`** for depth.
4. Turn on **Get emails and social profiles** if you want contact details for each business.
5. Run and download as CSV, JSON or Excel - or pull via the API.

### Input example

```json
{
  "queries": ["influencer goa"],
  "ll": "@15.2993,74.1240,12z", "hl": "en", "maxPages": 3
}
```

| Field | Type | Description |
|---|---|---|
| `queries` | array | **Required.** Search queries, one per line. |
| `gl` | string | Country code (`us`, `in`, `th`, `gb`...). |
| `hl` | string | Language code (`en`, `hi`, `th`, `es`...). |
| `dateRange` | string | `qdr:h` / `qdr:d` / `qdr:w` / `qdr:m` / `qdr:y` for past hour/day/week/month/year. |
| `ll` | string | Map centre + zoom: `@lat,lng,zoom` (e.g. `@15.2993,74.1240,12z`). |
| `placeId` | string | Target one place by Google Place ID. |
| `cid` | string | Target one place by Google Maps CID. |
| `maxPages` | integer | Pages per query (default 1). |
| `includeContacts` | boolean | Scan each business website for emails and social profiles (default off). |

### Pricing

| Event | Charged for | Price |
|---|---|---|
| `place-result` | each place delivered | **$2.49 / 1,000 places** |
| `contacts-found` | optional: each place where the website scan found an email address | **$1.99 / 1,000 places** |

- 1,000 places, place data only → **$2.49**
- 1,000 places with contacts found for 400 of them → **$3.29**

Only delivered rows are billed; queries that error or return nothing cost nothing. The contact rate applies only with **Get emails and social profiles** on, and only to places where an email was found.

### Use cases

#### Lead lists of local businesses with phone, website and GPS

Lead lists of local businesses with phone, website and GPS

#### Competitor density and rating benchmarks by neighbourhood

Competitor density and rating benchmarks by neighbourhood

#### Store-locator and POI datasets for apps and analysis

Store-locator and POI datasets for apps and analysis

#### Franchise and expansion research by map area

Franchise and expansion research by map area

#### Monitoring ratings and review counts over time

Monitoring ratings and review counts over time

### FAQ

**Does it find email addresses?** Yes, when you turn on **Get emails and social profiles**. The Actor scans each business website for emails and social links. Expect an email for roughly a third to a half of businesses that have a website; many small businesses only offer a contact form.

**Why does a business have no email?** It has no website on Google, the site could not be reached, or the site does not publish an address. `contactStatus` tells you which. None of those cases is charged the contact rate, even when social profiles were found.

**Is scraping Google Maps legal?** This is general information, not legal advice. The Actor collects business listings that Google shows publicly, and contact details that businesses publish on their own websites. Business contact data can still be personal data under laws such as GDPR when it identifies a person, and email marketing is regulated in most countries. Collect only what you need, follow the rules for cold outreach where your recipients are, and ask a lawyer before building a commercial product on the data.

**Do I need proxies or a Google account?** No. Requests go through a hosted Google search API - nothing to configure.

**Can I get localised results?** Yes - set `gl` for the country and `hl` for the language, exactly as a user in that market would see them.

**How do I limit to recent results?** Set `dateRange` to `qdr:d` (past 24h), `qdr:w`, `qdr:m` or `qdr:y`.

**How many results per query?** Google's own limit applies; use `maxPages` to page deeper.

**Can I schedule it?** Yes - Apify schedules, the API, or the MCP server.

### 🔌 Use this Actor from Claude, ChatGPT or Cursor (MCP)

Add it as a tool in any MCP client - Claude Code, Claude Desktop, Cursor, VS Code or ChatGPT - through Apify's hosted MCP server. The client runs the Actor for you and reads the results back, so you never leave the chat.

**Actor-specific server URL**

```
https://mcp.apify.com/?tools=actors,docs,zaver.api/google-maps-scraper
```

**Claude Code** - one command:

```bash
claude mcp add --transport http googlemaps "https://mcp.apify.com/?tools=actors,docs,zaver.api/google-maps-scraper"
```

**Claude Desktop, Cursor or any client with a JSON config:**

```json
{
  "mcpServers": {
    "googlemaps": {
      "url": "https://mcp.apify.com/?tools=actors,docs,zaver.api/google-maps-scraper"
    }
  }
}
```

The first connection opens a browser to sign in to Apify, so no API token sits in your config. If your client cannot do OAuth, send `Authorization: Bearer <YOUR_APIFY_TOKEN>` instead.

Then simply ask:

> Find dentists in Manhattan with phone numbers and websites

### Related Google scrapers

- [Google Search Results Scraper](https://apify.com/zaver.api/google-search-scraper) - Google search results
- [Google Images Scraper](https://apify.com/zaver.api/google-images-scraper) - Google Images results
- [Google Videos Scraper](https://apify.com/zaver.api/google-videos-scraper) - Google Videos results
- [Google Places Scraper](https://apify.com/zaver.api/google-places-scraper) - Google local business results
- [Google Patents Scraper](https://apify.com/zaver.api/google-patents-scraper) - Google Patents results
- [Google Shopping Scraper](https://apify.com/zaver.api/google-shopping-scraper) - Google Shopping results

***

*Not affiliated with or endorsed by Google. Returns publicly available search results.*

# Actor input Schema

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

Search queries, one per line.

## `ll` (type: `string`):

GPS centre and zoom for the map search, format <code>@latitude,longitude,zoom</code>, e.g. <code>@15.2993,74.1240,12z</code>. Leave empty to let Google infer from the query.

## `placeId` (type: `string`):

Google Place ID to target one specific place.

## `cid` (type: `string`):

Google Maps CID to target one specific place.

## `gl` (type: `string`):

Two-letter country code for localised results, e.g. <code>us</code>, <code>in</code>, <code>th</code>, <code>gb</code>. Leave empty for default.

## `hl` (type: `string`):

Interface language code, e.g. <code>en</code>, <code>hi</code>, <code>th</code>. Leave empty for default.

## `dateRange` (type: `string`):

Restrict results to a recent period.

## `maxPages` (type: `integer`):

How many result pages to fetch per query. You are billed only per row delivered.

## `includeContacts` (type: `boolean`):

Visit each business website and add its email addresses, social profile links (Facebook, Instagram, LinkedIn, X, YouTube, TikTok, WhatsApp) and extra phone numbers. Charged per business only when an email address is found.

## Actor input object example

```json
{
  "queries": [
    "influencer goa"
  ],
  "ll": "",
  "placeId": "",
  "cid": "",
  "gl": "",
  "hl": "",
  "dateRange": "",
  "maxPages": 1,
  "includeContacts": false
}
```

# Actor output Schema

## `results` (type: `string`):

One dataset item per result.

## `resultsCsv` (type: `string`):

CSV download.

## `runSummary` (type: `string`):

Counts for the run.

# 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": [
        "influencer goa"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("zaver.api/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": ["influencer goa"] }

# Run the Actor and wait for it to finish
run = client.actor("zaver.api/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 '{
  "queries": [
    "influencer goa"
  ]
}' |
apify call zaver.api/google-maps-scraper --silent --output-dataset

```

## MCP server setup

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