# Google Places Scraper - Local Businesses, Ratings & Phones (`zaver.api/google-places-scraper`) Actor

Just $1.99 per 1,000 places. Scrape Google local results for any query and location - business name, address, rating, reviews, category, phone, website and coordinates - and optionally emails and social profiles from each business website. No proxies. Export CSV, JSON, Excel.

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

## Pricing

from $1.99 / 1,000 place rows

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 Places Scraper - Local Businesses, Ratings & Phones

**Scrape Google's local business results for any query and location - names, ratings, phones and websites.** Scrape Google local business results 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.

> ⭐ $1.99 / 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, category, phoneNumber, website, cid, 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 **$1.99 / 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 **`location`**.
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"],
  "location": "Bangkok, Bangkok, Thailand", "gl": "th", "hl": "th"
}
```

| 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. |
| `location` | string | Search location as Google names it (`Bangkok, Bangkok, Thailand`). |
| `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 | **$1.99 / 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 → **$1.99**
- 1,000 places with contacts found for 400 of them → **$2.79**

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

#### Local lead generation

Local lead generation - businesses by category and city with phone and website

#### Market mapping

Market mapping - how many competitors exist in an area, and their ratings

#### Sales territory research and prospect lists

Sales territory research and prospect lists

#### Local SEO audits

Local SEO audits - who shows up for a query in a given location

#### Enriching CRM records with ratings, addresses and coordinates

Enriching CRM records with ratings, addresses and coordinates

### 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-places-scraper
```

**Claude Code** - one command:

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

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

```json
{
  "mcpServers": {
    "googleplaces": {
      "url": "https://mcp.apify.com/?tools=actors,docs,zaver.api/google-places-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:

> List coffee shops in New York with ratings and phone numbers

### 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 Maps Scraper](https://apify.com/zaver.api/google-maps-scraper) - Google Maps places
- [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.

## `location` (type: `string`):

Where to search from, as Google names it, e.g. <code>Bangkok, Bangkok, Thailand</code> or <code>Austin, Texas, United States</code>.

## `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"
  ],
  "location": "",
  "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"
    ]
};

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

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

```

## MCP server setup

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