# Google Maps Reviews Scraper (`hichemdev/google-reviews-scraper`) Actor

Scrape all reviews for any business on Google Maps - reviewer name, star rating, review text, date, and the owner's reply. Provide place URLs (e.g. from the Google Maps Leads Extractor) or a search term. Sort by newest for reputation monitoring.

- **URL**: https://apify.com/hichemdev/google-reviews-scraper.md
- **Developed by:** [Hichem Ben Moussa](https://apify.com/hichemdev) (community)
- **Categories:** AI, SEO tools, Social media
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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 Reviews Scraper

**Export every Google review for any business — reviewer name, star rating, full text, date, and the owner's reply — as clean CSV, Excel, JSON, or Google Sheets.**

Give it a Google Maps place URL (or just a business name + city) and get back a structured list of reviews you can analyze, monitor, or feed into a dashboard. Sort by **newest** to catch fresh feedback the moment it lands.

***

### ✨ What you get for every review

| Field | Example |
|---|---|
| **Business** | Jo's Coffee |
| **Reviewer** | Laura Elash |
| **Rating** ⭐ | 5 |
| **Date** | Edited 4 hours ago |
| **Review text** | "Great place to grab coffee and take a photo out front…" |
| **Owner reply** | "Thanks Laura — see you again soon!" |
| **Place URL** | direct link to the listing |

***

### 🎯 Who it's for

- **Reputation monitoring** — track new reviews for your business (or a client's) and get alerted to anything below 4★.
- **Agencies & consultants** — pull review history for audits, pitches, and monthly reports.
- **Market & competitor research** — read what customers love and complain about across a whole niche.
- **Sentiment analysis / AI** — feed clean review text into an LLM or dashboard.
- **Local SEO** — see which locations respond to reviews and how fast.

***

### 🚀 How to use it

**Option A — you already have the listing:** paste one or more Google Maps place URLs into `placeUrls`.

**Option B — you don't:** enter `searchTerms` (e.g. `coffee shop`) + a `location` (e.g. `Austin, TX`), and it finds the businesses first, then scrapes their reviews.

Set `maxReviews`, keep `sortBy` on **newest** for monitoring, hit **Start**, and export.

No Google account, no API key, no cookies to paste.

***

### 📥 Example input

```json
{
  "placeUrls": ["https://www.google.com/maps/place/Jo's+Coffee/..."],
  "maxReviews": 100,
  "sortBy": "newest",
  "language": "en",
  "proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
}
```

Or search instead of pasting a URL:

```json
{
  "searchTerms": ["coffee shop"],
  "location": "Austin, TX",
  "maxPlaces": 5,
  "maxReviews": 50,
  "sortBy": "newest"
}
```

***

### 📤 Example output

Each result is one review:

```json
{
  "placeName": "Jo's Coffee",
  "placeUrl": "https://www.google.com/maps/place/Jo's+Coffee",
  "reviewId": "ChZDSUhNMG9nS...",
  "author": "Laura Elash",
  "rating": 5,
  "date": "Edited 4 hours ago",
  "text": "Great place to grab coffee and take a photo out front. Friendly staff and quick service.",
  "ownerReply": null
}
```

Export in one click to **CSV, Excel, JSON, XML, or Google Sheets**, or pull results via the **Apify API**.

***

### 🔌 Scheduling & monitoring

- **Schedule** the Actor (daily / weekly) to keep a live feed of new reviews.
- Combine with the **[Google Maps Leads Extractor](https://apify.com/hichemdev/google-maps-leads-extractor)** — scrape a whole niche, then pull everyone's reviews.
- Push results into a **spreadsheet, BI dashboard, or Slack alert** via the Apify API and integrations.

***

### ❓ FAQ

**Do I need a Google account or API key?**
No. Just a place URL, or a business name and city.

**Ratings and dates — what language?**
Reviews are read in the language set by `language` (default `en`), so dates come back like "4 days ago" and ratings as numbers 1–5. The rating parser is language-independent.

**Are duplicates removed?**
Yes — reviews are de-duplicated by Google's internal review ID.

**How many reviews can I get?**
Set `maxReviews` as high as you like. Google loads reviews in pages; very large businesses (10k+ reviews) are scraped in order from your chosen sort.

**Is this legal?**
It collects publicly visible reviews. You're responsible for using the data in line with applicable laws and Google's terms — reputation monitoring, research, and analytics are legitimate uses.

***

### 🗺️ Roadmap

- Reviewer profile URL & total-reviews count
- Filter by minimum/maximum star rating
- "Only new since last run" mode for monitoring
- Review photo URLs

***

*Built and maintained by [hichemdev](https://apify.com/hichemdev). Found a bug or want a feature? Open an issue on the Actor's **Issues** tab.*

# Actor input Schema

## `placeUrls` (type: `array`):

Google Maps place URLs to scrape reviews from. You can get these from the Google Maps Leads Extractor or by copying a place link.

## `searchTerms` (type: `array`):

Alternatively, search Google Maps for businesses instead of providing URLs, e.g. "coffee shop".

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

City / area used together with the search terms, e.g. "Austin, TX".

## `maxPlaces` (type: `integer`):

How many businesses to collect from each search term before scraping their reviews.

## `maxReviews` (type: `integer`):

Maximum number of reviews to scrape per business.

## `sortBy` (type: `string`):

Order reviews before scraping. Newest is best for monitoring.

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

Google Maps interface language code, e.g. en.

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

Google Maps needs a proxy to run reliably. Residential recommended and included in your plan.

## Actor input object example

```json
{
  "placeUrls": [],
  "searchTerms": [
    "coffee shop"
  ],
  "location": "Austin, TX",
  "maxPlaces": 1,
  "maxReviews": 10,
  "sortBy": "newest",
  "language": "en",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# 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 = {
    "placeUrls": [],
    "searchTerms": [
        "coffee shop"
    ],
    "location": "Austin, TX",
    "maxPlaces": 1,
    "maxReviews": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("hichemdev/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 = {
    "placeUrls": [],
    "searchTerms": ["coffee shop"],
    "location": "Austin, TX",
    "maxPlaces": 1,
    "maxReviews": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("hichemdev/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 '{
  "placeUrls": [],
  "searchTerms": [
    "coffee shop"
  ],
  "location": "Austin, TX",
  "maxPlaces": 1,
  "maxReviews": 10
}' |
apify call hichemdev/google-reviews-scraper --silent --output-dataset

```

## MCP server setup

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