# Google Reviews Data Extractor (`cloud9_ai/google-reviews-scraper`) Actor

Scrape Google Maps reviews at scale: reviewer name, rating (1-5 stars), text, date, photos, reply from owner. Export thousands of reviews to CSV/JSON. Ideal for sentiment analysis, reputation monitoring, competitive research.

- **URL**: https://apify.com/cloud9\_ai/google-reviews-scraper.md
- **Developed by:** [cloud9](https://apify.com/cloud9_ai) (community)
- **Categories:** SEO tools, Lead generation
- **Stats:** 28 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $20.00 / 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.

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

## Google Reviews Scraper

Extract Google Maps reviews through the official **Google Places API**. Find places by search query or place ID, and get each review's author, star rating, text, and date as structured data.

> **Read this first — the 5-review limit.**
> This Actor uses the official Google Places API, which returns **at most 5 reviews per place**. That is a hard limit imposed by Google, not by this Actor. If you need thousands of reviews for a single business, this Actor cannot provide them.
>
> It is built for **breadth, not depth**: run it across many places (hundreds of competitors, branches, or search results) and get the 5 most relevant reviews for each.

### What you need

You bring your own **Google Maps Platform API key** (`googleApiKey`). Google grants $200 of free credit each month, which covers a large volume of Place Details requests at no cost to you. Get a key at [console.cloud.google.com](https://console.cloud.google.com/) and enable the **Places API (New)**.

### Features

- ✅ Find places by search query (e.g. `Starbucks New York`) or by Google place ID
- ✅ Up to 5 reviews per place — author name, star rating, review text, dates
- ✅ Place context on every row: name, address, overall rating, total review count
- ✅ Filter results to a specific star rating
- ✅ Multi-language support
- ✅ Official API — no bot detection, no proxies, no breakage from layout changes

### Use Cases

- **Competitor sweeps**: pull reviews across many competing businesses at once
- **Multi-location monitoring**: track sentiment across every branch you operate
- **Sentiment analysis**: feed recent review text into an AI pipeline
- **Market research**: sample what customers say across a whole category

### Input

```json
{
  "googleApiKey": "YOUR_GOOGLE_MAPS_API_KEY",
  "searchQueries": [
    "Starbucks Times Square New York",
    "best sushi restaurant Tokyo"
  ],
  "placeIds": [
    "ChIJN1t_tDeuEmsRUsoyG83frY4"
  ],
  "filterRating": 5,
  "language": "en"
}
```

#### Input Parameters

| Parameter | Type | Required | Description |
|-----------|------|----------|-------------|
| `googleApiKey` | string | **Yes** | Your Google Maps Platform API key (stored encrypted) |
| `searchQueries` | array | No\* | Business name + location, e.g. `"Starbucks New York"` |
| `placeIds` | array | No\* | Google Maps place IDs, e.g. `ChIJN1t_tDeuEmsRUsoyG83frY4` |
| `filterRating` | integer | No | Keep only reviews with this exact star rating (1–5) |
| `language` | string | No | Language code for results (e.g. `en`, `ja`, `es`) |

\*Provide `searchQueries`, `placeIds`, or both.

Without a `googleApiKey` the Actor exits successfully with zero results instead of failing.

### Output

One dataset row per review:

```json
{
  "placeName": "Starbucks",
  "placeUrl": "https://maps.google.com/?cid=...",
  "placeAddress": "123 Main St, New York, NY",
  "placeRating": 4.2,
  "placeTotalReviews": 1523,
  "reviewAuthor": "John Smith",
  "reviewAuthorUrl": "https://www.google.com/maps/contrib/...",
  "reviewRating": 5,
  "reviewText": "Great coffee and friendly staff!",
  "reviewDate": "2024-11-15T10:30:00Z",
  "reviewRelativeDate": "2 months ago",
  "scrapedAt": "2024-01-15T10:30:00.000Z"
}
```

`placeTotalReviews` is the place's true total on Google (e.g. 1,523) — but only up to 5 of those reviews are returned, per Google's API limit.

### Pricing

- **$0.02 per review** returned (each dataset row)
- **$0.00005 per Actor start**

Because each place yields at most 5 reviews, one place costs at most **$0.10**. Example: 100 places ≈ 500 reviews ≈ **$10.00**.

The Google Places API calls themselves are billed by Google to your own API key, and typically fall inside Google's $200/month free credit.

### Tips

1. **Start small**: run one search query first and inspect the output.
2. **Use place IDs for precision**: a search query returns Google's best match, which may not be the exact branch you meant.
3. **`filterRating` reduces cost**: filtered-out reviews are never pushed to the dataset, so you are not charged for them.
4. **Language**: set `language: "ja"` for Japanese, `"es"` for Spanish, and so on.

### Limitations

- **Maximum 5 reviews per place** — a hard Google Places API limit.
- No sort control. Google decides which reviews it considers most relevant and returns those.
- Owner responses, review photos, and review "likes" are **not** available through this API and are not returned.
- Deleted reviews are not captured.

### Support

For issues or questions, contact support or open an issue on GitHub.

### License

MIT License - Use commercially without restrictions.

# Actor input Schema

## `googleApiKey` (type: `string`):

Your Google Maps Platform API key. Get one free at console.cloud.google.com (enable Places API). $200 free credit/month included.

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

Business name + location (e.g., 'Starbucks New York', 'Sushi Zanmai Tokyo')

## `placeIds` (type: `array`):

Google Maps place IDs (e.g., ChIJN1t\_tDeuEmsRUsoyG83frY4)

## `filterRating` (type: `integer`):

Only extract reviews with this specific star rating (1-5). Leave empty for all.

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

Language code for results (e.g., 'en', 'ja', 'es')

## Actor input object example

```json
{
  "searchQueries": [
    "Starbucks New York"
  ],
  "language": "en"
}
```

# 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": [
        "Starbucks New York"
    ],
    "language": "en"
};

// Run the Actor and wait for it to finish
const run = await client.actor("cloud9_ai/google-reviews-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": ["Starbucks New York"],
    "language": "en",
}

# Run the Actor and wait for it to finish
run = client.actor("cloud9_ai/google-reviews-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": [
    "Starbucks New York"
  ],
  "language": "en"
}' |
apify call cloud9_ai/google-reviews-scraper --silent --output-dataset

```

## MCP server setup

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