# Google Maps Reviews Analyzer – AI Insights & Replies (`nebulosa/google-maps-review-insights`) Actor

Paste Google Maps place URLs (or a reviews dataset) and get AI insights per place: top complaints, top praises, sentiment trend by month, ready-to-post owner reply drafts and a prioritised action list. Works in English, Spanish, Russian and more.

- **URL**: https://apify.com/nebulosa/google-maps-review-insights.md
- **Developed by:** [Nebulosa Data](https://apify.com/nebulosa) (community)
- **Categories:** AI, Business, Marketing
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $250.00 / 1,000 place analyseds

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 Analyzer – AI Insights & Replies

Paste Google Maps place URLs (or an existing reviews dataset) and this actor returns AI insights per place: top complaints, top praises, sentiment trend by month and a prioritised action list. It also drafts owner replies in each review’s language, ready to edit and post.

Give it a Google Maps place link. For each place you get a report that names the **top complaints**, the **top praises**, the **sentiment trend by month**, an **action list for the owner** and **reply drafts** for the worst recent reviews. Each reply is written in the same language as the review it answers (English, Spanish, Russian, German, French and more).

It suits restaurants, hotels, clinics, shops, agencies that handle local SEO and reputation, and anyone comparing competitors on Google Maps.

### How it works

1. **Reviews in.** Use one of these:
   - **Google Maps place URLs.** The actor calls the public Apify Store actor [compass/google-maps-reviews-scraper](https://apify.com/compass/google-maps-reviews-scraper) on your account, which bills its own small usage fee. Reviewer personal data is switched off.
   - **A dataset ID** from a reviews-scraper run you already have, which means no new scraping.
   - **Review JSON** or **pasted review texts**.
2. **AI analysis.** One AI call per place reads up to 120 of the newest reviews. The prompt only allows statements backed by those reviews, and every quote is taken word for word.
3. **One dataset item per place** comes out. You can export it as JSON, CSV or Excel, or send it through the API, webhooks, Make or Zapier.

Run it with empty input `{}` to see a demo on built-in sample reviews.

### Example input

```json
{
  "startUrls": [{ "url": "https://www.google.com/maps/place/?q=place_id:ChIJk_s9Z_aipBIRhLyH9BPgsXA" }],
  "maxReviewsPerPlace": 50,
  "reviewsLanguage": "es",
  "outputLanguage": "auto",
  "replyDrafts": 5
}
```

### Example output (shortened)

```json
{
  "placeName": "Demo Café",
  "reviewsAnalysed": 50,
  "averageStars": 3.9,
  "starDistribution": { "1": 6, "2": 4, "3": 5, "4": 12, "5": 23 },
  "ownerReplyRatePct": 12,
  "sentimentTrend": [{ "month": "2026-09", "reviews": 18, "averageStars": 3.6 }, { "month": "2026-10", "reviews": 32, "averageStars": 4.1 }],
  "summary": "Guests love the croissants and the terrace, but slow service at peak times drives most of the low ratings.",
  "topComplaints": [{ "theme": "Slow service and long waits", "mentions": 9, "severity": "high", "exampleQuote": "We waited 40 minutes for two coffees" }],
  "topPraises": [{ "theme": "Excellent croissants", "mentions": 14, "exampleQuote": "Best croissants in town" }],
  "sentimentDirection": "improving: October reviews are clearly more positive",
  "actionList": [{ "priority": 1, "action": "Add a second barista on weekend mornings", "why": "Slow service and long waits" }],
  "replyDrafts": [{ "language": "es", "stars": 1, "reviewText": "Pedí leche sin lactosa y me la sirvieron normal...", "reply": "Hola, sentimos mucho lo ocurrido con su pedido sin lactosa..." }]
}
```

### Input fields

| Field | What it does |
|---|---|
| `startUrls` | Google Maps place URLs |
| `maxReviewsPerPlace` | Number of newest reviews per place, 5–300 (default 50) |
| `reviewsLanguage` | Language code passed to the scraper |
| `datasetId` / `reviews` / `reviewTexts` | Reviews you supply yourself |
| `outputLanguage` | `auto` (the majority language) or a fixed language for the analysis. Reply drafts always follow the language of each review. |
| `replyDrafts` | Number of reply drafts per place, 0–15 |
| `llmApiKey` | Optional. Your own DeepSeek key; when you use it, the AI-analysis fee is not charged. |

### Notes and limits

- The AI insights can contain mistakes. Check every reply draft before you post it. This actor never posts anything to Google.
- The actor only reads reviews that are publicly shown on Google Maps, and leaves out reviewer names.
- Not affiliated with Google.

### Use cases

- **Local SEO agencies**: a review audit per client or prospect location in one run.
- **Multi-location restaurants and hotels**: compare branches by top complaints and monthly trend.
- **Competitor analysis**: what customers dislike about the 5 competitors next door.
- **Reputation management**: ready reply drafts for the worst recent reviews, in the reviewer's language.

### Pricing

**$0.25 per place analysed** + **$0.05 per place** when our built-in AI key is used (free with your own DeepSeek key). Reviews are fetched with compass/google-maps-reviews-scraper on your account, which has its own small fee. Our 2-place test (15 reviews each) cost about $0.02 in scraper/platform usage. Prices apply from 4 Nov 2026.

### FAQ

**Can I analyse competitors?** Yes. Add several place URLs and you get one report per place.
**Weekly tracking?** Schedule the actor in Apify Console and connect a webhook or an email integration.

### More questions

**Do I need a Google API key?**
No. Reviews come from the public Apify scraper; AI uses our key unless you add yours.

**Can I analyse reviews I already scraped?**
Yes: pass a datasetId, JSON review items or pasted texts; then no scraper fee.

**Which languages?**
Insights in EN/ES/RU/DE/FR/IT/PT/PL; reply drafts always follow each review's language.

### Pairs with

- [restaurant-review-insights](https://apify.com/nebulosa/restaurant-review-insights)
- [osm-business-leads](https://apify.com/nebulosa/osm-business-leads)
- [menu-allergen-translator](https://apify.com/nebulosa/menu-allergen-translator)

### Reports from Revunda

Prefer a finished document for a client or owner? [Revunda Google profile audit](https://revunda.xyz/local/) turns a Maps profile into a PDF with 10 fixes ranked by impact (free sample report on the page). Profile suspended? See [ProfileRescue](https://revunda.xyz/local/rescue/). Free: [Do AI assistants recommend this business?](https://revunda.xyz/ai/)

### More questions (FAQ)

#### How do I do sentiment analysis of Google Maps reviews?

Paste the place URL, run, and open the per-place summary with sentiment by month and grouped complaints.

#### Can it write replies to Google reviews?

It drafts replies for the owner to review and post manually; it never posts anything.

#### Can I use reviews I already scraped?

Yes. Pass the dataset ID from compass/google-maps-reviews-scraper or similar.

#### Which languages?

English, Spanish, Russian and other common languages; replies follow the review language.

# Actor input Schema

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

Google Maps place links. Reviews are fetched by calling the public Apify Store actor compass/google-maps-reviews-scraper on your account (its own small usage fee applies).

## `maxReviewsPerPlace` (type: `integer`):

Newest reviews fetched and analysed per place.

## `reviewsLanguage` (type: `string`):

Language code passed to the reviews scraper (en, es, ru, de...).

## `datasetId` (type: `string`):

Dataset from a Google Maps reviews scraper run. Grouped by place (title/placeId).

## `reviews` (type: `array`):

e.g. \[{"title":"Bar X","stars":2,"text":"...","publishedAtDate":"2026-09-01"}]

## `reviewTexts` (type: `array`):

One review per line (treated as one place).

## `outputLanguage` (type: `string`):

Reply drafts always follow each review's own language.

## `replyDrafts` (type: `integer`):

Number of owner reply drafts (worst recent reviews first).

## `llmApiKey` (type: `string`):

Optional. Uses your key instead of the built-in one (OpenAI-compatible, api.deepseek.com).

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.google.com/maps/search/?api=1&query=Bar%20Pinotxo%20Barcelona"
    }
  ],
  "maxReviewsPerPlace": 20,
  "reviewsLanguage": "es",
  "outputLanguage": "auto",
  "replyDrafts": 5
}
```

# Actor output Schema

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

No description

# 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/search/?api=1&query=Bar%20Pinotxo%20Barcelona"
        }
    ],
    "maxReviewsPerPlace": 20,
    "reviewsLanguage": "es"
};

// Run the Actor and wait for it to finish
const run = await client.actor("nebulosa/google-maps-review-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/search/?api=1&query=Bar%20Pinotxo%20Barcelona" }],
    "maxReviewsPerPlace": 20,
    "reviewsLanguage": "es",
}

# Run the Actor and wait for it to finish
run = client.actor("nebulosa/google-maps-review-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/search/?api=1&query=Bar%20Pinotxo%20Barcelona"
    }
  ],
  "maxReviewsPerPlace": 20,
  "reviewsLanguage": "es"
}' |
apify call nebulosa/google-maps-review-insights --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,nebulosa/google-maps-review-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/9DFKEwdZPYulyeem8/builds/mIV8QmalApyt3A2j0/openapi.json
