# Google Maps Reviews Insights: Ratings & Review Topics (`fit_melon/google-maps-reviews-insights`) Actor

Rating, reviews count and the review topics Google Maps shows for each place, with how many reviews mention them ("friendly staff (174)"). From place URLs, place IDs or a search. No review texts, no reviewer data. $0.30 per 1,000 places, all-in. Not affiliated with Google.

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

## Pricing

$0.30 / 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?

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 Insights** gives you, for each Google Maps place, its **rating**, its **reviews count** and, when Google Maps shows them (usually once a place has enough reviews), the **review topics** shown above the reviews, each with the number of reviews that mention it: "friendly staff (174)", "root canal (14)", "clear explanations (153)". Start from Google Maps URLs, place IDs or a search ("dentist" in "Manchester, UK"). **$0.30 per 1,000 places, all included.** The output has no review texts and no reviewer names, photos or profiles. Independent tool, not affiliated with Google.

### What you get

- **What customers talk about**: about 10 topics per place, in Google's order, with the number of reviews mentioning each topic. Present on 99.8% of the places with 50+ reviews in our tests (1,500 places in Lyon and Manchester, October 2026).
- **Rating and reviews count** of every place, plus a direct link to its reviews on Google (`reviewsUrl`).
- **Place identity**: name, category, address, city, postal code, country, GPS, business status, place ID, CID and Google Maps link, so you can join the data with your own lists.
- **Spreadsheet-ready**: topics come both as a list (`reviewsTags: [{ title, count }]`) and as one text column (`reviewsTagsText`) for CSV, Excel and Google Sheets, plus the 3 most mentioned topics in one short column (`reviewsTagsTop`).
- **No reviewer data in the output**: no review texts, no reviewer names, photos or profiles, no owner information. The few review snippets and owner details included in Google's place page are discarded, never extracted or saved.

### Use cases

- **Reputation monitoring**: track rating, reviews count and recurring topics of your branches or clients every week.
- **Local SEO and content**: learn the words customers use for a business ("tablier de sapeur", "hygienist", "clear explanations") and reuse them on pages and Google Business Profile posts.
- **Competitor benchmarks**: compare the topics of competing places in one table.
- **Lead qualification**: rating, volume of reviews and what customers praise or complain about, before you contact a business.

### How to use it

1. Paste Google Maps place URLs, or place IDs, or enter search terms and a location.
2. Pick the language of the topics (`en`, `fr`, `de`, `es`…).
3. Run, then export as JSON, CSV, Excel or HTML, or connect the actor to Make, n8n or Zapier.

With a location, one search term returns up to 1,000 places: beyond Google's ~120 results for one map view, the area is split into smaller views, and places outside the area are left out. Need every place of a whole region, with phones, websites and emails? List them first with our [Google Maps Scraper](https://apify.com/fit_melon/google-maps-scraper-cheap) ($0.50 per 1,000 places), then pass their `placeId` values here.

#### Input example

```json
{
    "startUrls": [{ "url": "https://www.google.com/maps/place/?q=place_id:ChIJ1f0-4VXq9EcRH3AK5NN-icI" }],
    "placeIds": ["ChIJd3FnTrBSekgRtTPDFspkilg"],
    "searchStringsArray": ["dentist"],
    "locationQuery": "Manchester, UK",
    "maxPlaces": 10,
    "language": "en"
}
```

| Field | Type | Description |
|---|---|---|
| `startUrls` | array | Google Maps place URLs (`/maps/place/…`, `?cid=…`, `place_id:…`), or a text file / Google Sheet of URLs. A Google Maps search URL is run as a search around its map position. Share links (`maps.app.goo.gl/…`) are expanded automatically; a link to a dropped pin (coordinates only, not a place) comes back as an error item. |
| `placeIds` | array | Place IDs (`ChIJ…`), feature IDs (`0x…:0x…`) or CIDs. |
| `searchStringsArray` | array | Optional search terms, e.g. `dentist`, `hotel`. |
| `locationQuery` | string | Where to search: city, postal code or area. |
| `maxPlaces` | integer | Places per search term (default 20): up to 1,000 with a location, up to 120 without one. |
| `language` | string | Language of topics and categories (default `en`). |
| `countryCode` | string | Optional two-letter country (`gb`, `us`, `fr`); detected automatically when empty. |

Input names follow the most common Google Maps actors: in Make, n8n or Zapier you can usually switch by changing only the actor ID. `maxCrawledPlacesPerSearch` is accepted for `maxPlaces`. Review-text options such as `maxReviews` or `reviewsSort` are ignored, because this actor does not return review texts.

#### Output example

```json
{
    "status": "found",
    "title": "City Centre Dental & Implant Clinic - Manchester",
    "categoryName": "Dentist",
    "address": "31 Booth St, Manchester M2 4AF, United Kingdom",
    "city": "Manchester",
    "postalCode": "M2 4AF",
    "countryCode": "GB",
    "location": { "lat": 53.4796628, "lng": -2.2423228 },
    "totalScore": 4.7,
    "reviewsCount": 520,
    "reviewsTags": [
        { "title": "root canal", "count": 14 },
        { "title": "hygienist", "count": 42 },
        { "title": "welcoming staff", "count": 46 },
        { "title": "implant", "count": 7 },
        { "title": "friendly staff", "count": 174 },
        { "title": "confident smile", "count": 4 },
        { "title": "reassuring staff", "count": 15 },
        { "title": "comfortable atmosphere", "count": 34 },
        { "title": "reception staff", "count": 23 },
        { "title": "composite bonding", "count": 2 }
    ],
    "reviewsTagsText": "root canal (14), hygienist (42), welcoming staff (46), implant (7), friendly staff (174), confident smile (4), reassuring staff (15), comfortable atmosphere (34), reception staff (23), composite bonding (2)",
    "reviewsTagsCount": 10,
    "reviewsTagsTop": "friendly staff (174), welcoming staff (46), hygienist (42)",
    "businessStatus": "OPERATIONAL",
    "placeId": "ChIJd3FnTrBSekgRtTPDFspkilg",
    "cid": "6380022641251791797",
    "fid": "0x487a52b04e677177:0x588a64ca16c333b5",
    "url": "https://www.google.com/maps/search/?api=1&query=City%20Centre%20Dental%20%26%20Implant%20Clinic%20-%20Manchester&query_place_id=ChIJd3FnTrBSekgRtTPDFspkilg",
    "reviewsUrl": "https://search.google.com/local/reviews?placeid=ChIJd3FnTrBSekgRtTPDFspkilg",
    "language": "en",
    "scrapedAt": "2026-10-27T11:57:59.715Z",
    "input": "ChIJd3FnTrBSekgRtTPDFspkilg"
}
```

| Field | Description |
|---|---|
| `totalScore` | Average rating (1 to 5) |
| `reviewsCount` | Number of reviews (0 when the place has none) |
| `reviewsTags` | Review topics `{ title, count }`: `count` = reviews mentioning the topic |
| `reviewsTagsText` | The same topics as one text column |
| `reviewsTagsCount` | Number of topics |
| `reviewsTagsTop` | The 3 most mentioned topics, by number of reviews (Google's own order is not always by count) |
| `title`, `categoryName`, `address`, `city`, `postalCode`, `countryCode`, `location` | Place identity and position |
| `businessStatus` | `CLOSED_PERMANENTLY` or `CLOSED_TEMPORARILY` when Google shows a closure label (recognised in en, fr, de, es, it, nl, pt), otherwise `OPERATIONAL` |
| `placeId`, `cid`, `fid`, `url`, `reviewsUrl` | Identifiers and links |
| `searchString`, `searchLocation`, `rank`, `input` | Where the place came from |
| `language`, `scrapedAt` | Language of the run and date of the data |

Places that cannot be found come as `status: "not_found"` or `status: "error"` items with a message. They are not charged.

### Measured performance

Measured on the Apify platform with the default settings (1 GB of memory), October 2026:

| Run | Places returned | Duplicates | Reviews count (rated places) | Topics (places with 50+ reviews) | Duration |
|---|---|---|---|---|---|
| 10 searches × 100 places, Lyon, French | 1,000 / 1,000 | 0 | 100% | 99.6% | 3 min 20 s |
| 5 searches × 100 places, Manchester, English | 500 / 500 | 0 | 100% | 100% | 1 min 7 s |
| 1 search × 400 places ("restaurant", Lyon, French) | 400 / 400 | 0 | 100% | 100% | 2 min 20 s |
| 2 searches × 300 places ("cafe", "hairdresser", Manchester) | 600 / 600 | 0 | 100% | 100% | 2 min 40 s |
| 50 place IDs | 50 / 50 | 0 | 100% | 97.7% | 10 s |
| 5 place IDs (+ 1 duplicate) | 4 / 4 | 0 | 100% | 100% | 3 s |
| 1 place ID | 1 / 1 | 0 | 100% | 100% | 5 s |
| 4 share links `maps.app.goo.gl` (+ 1 duplicate, 1 dropped pin, 1 expired link) | 4 / 4 | 0 | 100% | 100% | 6 s |

A place listed several times (as a place ID, a feature ID and a `/maps/place/` URL in our test) is returned and charged once. A run stopped by a 30-second time limit and then resurrected delivered 151 / 151 places with no duplicate.

### Pricing

**$0.30 per 1,000 places**, all included: proxies and platform usage. No start fee and no add-ons. You pay only for places actually returned (`status: "found"`), and a run never charges more than your spending limit.

| Actor | Price for 1,000 places |
|---|---|
| **Google Maps Reviews Insights (this actor)** | **$0.30**, review topics included |
| compass/crawler-google-places (Google Maps Scraper) | $4.00, plus $2.00 for the "additional place details" add-on |

Prices of other actors: public Apify Store pricing for the free plan, checked on 2026-10-27. They can change.

### FAQ

#### Does it return the text of the reviews?

No. It returns the rating, the reviews count and the review topics with their counts. If you need every review text, use a dedicated reviews scraper.

#### Is there any personal data?

The output contains no review texts, reviewer names, profile photos, profile links or owner information: the actor keeps only the place fields listed above and discards the rest of Google's response. Review topics are words and phrases Google picks out from a place's reviews, and some can be people's names: in our 32-place sample (October 2026), 2 restaurants had first names among their topics. Treat topics as possibly containing personal data before you publish them.

#### Is this an official Google product?

No. This is an independent tool, not affiliated with, endorsed or sponsored by Google. Google and Google Maps are trademarks of Google LLC. It reads publicly available Google Maps place data, without a Google account.

#### Where do the topics come from?

They are the topics Google Maps shows above the reviews of a place ("mentioned in N reviews"). Google computes them; places with few reviews often have none. They follow the `language` you choose.

#### Why does a place have no topics?

Google shows topics only for places with enough reviews. In our tests, places with 50 or more reviews had topics 99.8% of the time.

#### How many places can I get?

As many as you list with `startUrls` or `placeIds`. A search returns up to 1,000 places per term with a location (up to 120 without one): set `maxPlaces` to 400, for example, to get 400 restaurants of a city. For a whole region, list places with [Google Maps Scraper](https://apify.com/fit_melon/google-maps-scraper-cheap), then pass the place IDs here.

#### Can I schedule it?

Yes. Use Apify schedules to run it every day or week on the same place IDs, and compare ratings, reviews counts and topics over time.

#### What if a run is interrupted?

If the platform restarts a run (or you resurrect it after its time limit), places already delivered are not charged again and are normally not returned again either. A crash at the exact moment results are being saved can repeat a few rows; they are still charged once.

### Changelog

- **1.0.15** (2026-10-31): new `reviewsTagsTop` column: the 3 most mentioned topics, sorted by number of reviews (Google lists topics in its own order, e.g. "friendly staff (174)" fifth for a dentist). Same price, same speed.
- **1.0.13** (2026-10-30): faster and steadier runs: a Google request with no answer after 4 seconds is sent again through another IP and the first answer is kept, instead of waiting up to 10 seconds. 50 place IDs now take about 10 s (was 28 to 46 s), 500 places about 1 min 26 s (was 1 min 48 s). Same price, same results.
- **1.0.12** (2026-10-29): up to 1,000 places per search term with a location (was 120): a full map view is split into smaller views, places outside the area are left out.
- **1.0.9** (2026-10-28): Google Maps share links (`maps.app.goo.gl/…`) are accepted in `startUrls`; dropped-pin and expired links get a clear error item (not charged).
- **1.0.6** (2026-10-27): first public release.

# Actor input Schema

## `startUrls` (type: `array`):

Links to Google Maps places, e.g. https://www.google.com/maps/place/..., https://maps.google.com/?cid=... or share links https://maps.app.goo.gl/... A Google Maps search URL is run as a search.

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

Google place IDs (ChIJ…), feature IDs (0x…:0x…) or CIDs. Tip: get them in bulk for a whole city or region with Google Maps Scraper (fit_melon/google-maps-scraper-cheap).

## `searchStringsArray` (type: `array`):

Optional: find places with a Google Maps search, then summarize their reviews, e.g. "dentist", "hotel". Combine with a location below, or put the place in the term itself ("bakery in Lyon").

## `locationQuery` (type: `string`):

City, postal code or area in plain text: "Manchester, UK", "75011 Paris".

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

Maximum number of places returned for each search term, up to 1,000 with a location (the map is split into smaller views beyond Google's ~120 results per search; up to 120 without a location). You pay only for places actually returned.

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

Language of the results (review topics, categories), e.g. en, fr, de, es, it, nl, pt.

## `countryCode` (type: `string`):

Two-letter country of the places (fr, gb, us…). Detected automatically from the location or the place itself when empty.

## `maxConcurrency` (type: `integer`):

Number of Google requests in parallel (default 20).

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

Proxies are included in the price. Apify datacenter proxies are used by default.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.google.com/maps/place/?q=place_id:ChIJ1f0-4VXq9EcRH3AK5NN-icI"
    }
  ],
  "searchStringsArray": [
    "dentist"
  ],
  "locationQuery": "Manchester, UK",
  "maxPlaces": 10,
  "language": "en",
  "maxConcurrency": 20,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `places` (type: `string`):

One item per place: rating, reviews count and review topics (Overview table).

## `topics` (type: `string`):

Review topics of each place with the number of reviews mentioning them.

## `runStats` (type: `string`):

Run statistics: requests, retries, timings, estimated platform cost.

# 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 = {
    "startUrls": [
        {
            "url": "https://www.google.com/maps/place/?q=place_id:ChIJ1f0-4VXq9EcRH3AK5NN-icI"
        }
    ],
    "searchStringsArray": [
        "dentist"
    ],
    "locationQuery": "Manchester, UK",
    "maxPlaces": 10,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("fit_melon/google-maps-reviews-insights").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 = {
    "startUrls": [{ "url": "https://www.google.com/maps/place/?q=place_id:ChIJ1f0-4VXq9EcRH3AK5NN-icI" }],
    "searchStringsArray": ["dentist"],
    "locationQuery": "Manchester, UK",
    "maxPlaces": 10,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("fit_melon/google-maps-reviews-insights").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 '{
  "startUrls": [
    {
      "url": "https://www.google.com/maps/place/?q=place_id:ChIJ1f0-4VXq9EcRH3AK5NN-icI"
    }
  ],
  "searchStringsArray": [
    "dentist"
  ],
  "locationQuery": "Manchester, UK",
  "maxPlaces": 10,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call fit_melon/google-maps-reviews-insights --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,fit_melon/google-maps-reviews-insights"
        }
    }
}
```

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/fmcZIycGFErx1zF6c/builds/sNAht2RdFNeMpW4ar/openapi.json
