# Google Maps Review Sentiment Analyzer (`skunkattack/google-maps-review-sentiment-analyzer`) Actor

Turn Google Maps reviews into insights. Sentiment analysis, keyword extraction, positive/negative themes & recommendations.  Accepts JSON, CSV or dataset ID. Visual HTML reports included.  Perfect for reputation management.

- **URL**: https://apify.com/skunkattack/google-maps-review-sentiment-analyzer.md
- **Developed by:** [Matthew Skunks](https://apify.com/skunkattack) (community)
- **Categories:** AI, Lead generation, Automation
- **Stats:** 7 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.01 / 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/platform/actors/running/actors-in-store#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 Maps Review Sentiment Analyzer

Turn thousands of Google Maps reviews into actionable insights in seconds. This sentiment analysis tool processes reviews from any Google Maps scraper and generates comprehensive reports with sentiment scores, keyword extraction, trend analysis, and actionable recommendations.

### What does this Actor do?

This Actor analyzes customer reviews from Google Maps and provides:

- **Sentiment Classification** - Categorizes each review as positive, negative, or neutral
- **Sentiment Scoring** - Assigns a score from -1 (most negative) to +1 (most positive)
- **Keyword Extraction** - Identifies the most frequently mentioned topics
- **Theme Analysis** - Separates positive themes from negative themes
- **Trend Analysis** - Shows if sentiment is improving or declining over time
- **Actionable Recommendations** - Generates specific suggestions based on negative feedback
- **Visual HTML Report** - Beautiful, shareable report with charts and insights

Perfect for **reputation management**, **customer feedback analysis**, and understanding what customers love (or hate) about any business on Google Maps.

### Input

The Actor accepts data in multiple formats:

#### Option 1: Paste JSON from Google Maps Scraper

Copy the output from any Google Maps scraper (like [Google Maps Scraper](https://apify.com/compass/crawler-google-places)) and paste it directly:

```json
{
  "inputData": "[{\"text\": \"Amazing food!\", \"stars\": 5, ...}]"
}
```

#### Option 2: Use Apify Dataset ID

If you have reviews stored in an Apify dataset, just provide the dataset ID:

```json
{
  "datasetId": "your-dataset-id-here"
}
```

#### Option 3: CSV Data

Paste CSV data with columns: `text`, `rating` (or `stars`), `date` (optional)

#### Input Parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `inputData` | string | JSON or CSV review data |
| `datasetId` | string | Apify dataset ID containing reviews |
| `analysisDepth` | string | `basic`, `standard`, or `detailed` |
| `generateHtmlReport` | boolean | Generate visual HTML report (default: true) |
| `languages` | array | Languages to analyze (auto-detect if empty) |

#### Analysis Depth Options

- **Basic** - Sentiment scores only (fastest)
- **Standard** - Sentiment + keyword extraction + themes
- **Detailed** - Full analysis including trends and rating correlation

### Output

#### Dataset (Table View)

Each analyzed review as a separate row:

```json
{
  "text": "Amazing food! The service was excellent...",
  "rating": 5,
  "sentiment_score": 0.891,
  "sentiment_label": "positive",
  "date": "2 weeks ago",
  "language": "en"
}
```

#### Key-Value Store

**summary.json** - Complete analysis summary:

```json
{
  "summary": {
    "total_reviews": 847,
    "positive_reviews": 520,
    "negative_reviews": 180,
    "neutral_reviews": 147,
    "positive_percentage": 61.4,
    "negative_percentage": 21.3,
    "average_sentiment_score": 0.342
  },
  "insights": {
    "common_keywords": ["food", "service", "great", "delicious"],
    "positive_themes": ["food", "atmosphere", "staff"],
    "negative_themes": ["wait", "slow", "cold", "expensive"],
    "actionable_recommendations": [
      "Reduce wait times - mentioned in 45 negative reviews",
      "Ensure food temperature consistency - mentioned in 23 negative reviews"
    ]
  }
}
```

**report.html** - Visual HTML report you can share or embed

### Use Cases

#### Restaurant Owners

Understand what customers love about your restaurant and what needs improvement. Get specific, actionable recommendations like "Reduce wait times" or "Improve food temperature consistency."

#### Marketing Agencies

Generate professional sentiment analysis reports for clients. The HTML report is ready to share or present.

#### Reputation Management

Monitor sentiment trends over time. Identify if reviews are improving or declining.

#### Competitive Analysis

Analyze competitor reviews to understand their strengths and weaknesses.

#### Real Estate Research

Analyze reviews of neighborhoods, apartment complexes, or local businesses.

### How to Use with Google Maps Scrapers

1. Run a Google Maps scraper to collect reviews
2. Copy the output JSON or note the dataset ID
3. Run this Actor with the data
4. View results in the Output tab or download the HTML report

#### Compatible Scrapers

Works with output from:

- [Google Maps Scraper](https://apify.com/compass/crawler-google-places)
- [Google Maps Reviews Scraper](https://apify.com/compass/google-maps-reviews-scraper)
- Any scraper that outputs review text and ratings

### Example

**Input:**

```json
{
  "inputData": "[{\"text\": \"Best pizza in town! Fast delivery and friendly staff.\", \"stars\": 5}, {\"text\": \"Cold food, slow service. Very disappointed.\", \"stars\": 2}]",
  "analysisDepth": "standard",
  "generateHtmlReport": true
}
```

**Output Summary:**

- Total Reviews: 2
- Positive: 50% (1 review)
- Negative: 50% (1 review)
- Average Sentiment: 0.15
- Positive Themes: pizza, delivery, staff
- Negative Themes: cold, slow, disappointed

### Features

- Processes 1,000+ reviews in under 60 seconds
- Supports multiple languages (auto-detection)
- Works with various Google Maps scraper formats
- Generates shareable HTML reports
- Extracts actionable business recommendations
- Analyzes sentiment trends over time
- Correlates star ratings with sentiment scores

### Limitations

- VADER sentiment analysis is optimized for English text (other languages may have reduced accuracy)
- Relative dates (e.g., "2 weeks ago") are parsed approximately for trend analysis
- Very short reviews may have less accurate sentiment scores

### Updates

- **v1.0** - Initial release with sentiment analysis, keyword extraction, and HTML reports

# Actor input Schema

## `inputData` (type: `string`):

Paste JSON from Google Maps scraper, upload CSV file, or provide Apify dataset ID

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

If your reviews are in an Apify dataset, provide the dataset ID here

## `analysisDepth` (type: `string`):

Choose the level of analysis

## `generateHtmlReport` (type: `boolean`):

Generate a visual HTML report in addition to JSON output

## `languages` (type: `array`):

Languages to detect and analyze (leave empty for auto-detect)

## Actor input object example

```json
{
  "analysisDepth": "standard",
  "generateHtmlReport": true,
  "languages": [
    "en",
    "es",
    "fr",
    "de"
  ]
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

## `summary` (type: `string`):

No description

## `report` (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 = {
    "inputData": "",
    "languages": [
        "en",
        "es",
        "fr",
        "de"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("skunkattack/google-maps-review-sentiment-analyzer").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 = {
    "inputData": "",
    "languages": [
        "en",
        "es",
        "fr",
        "de",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("skunkattack/google-maps-review-sentiment-analyzer").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "inputData": "",
  "languages": [
    "en",
    "es",
    "fr",
    "de"
  ]
}' |
apify call skunkattack/google-maps-review-sentiment-analyzer --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=skunkattack/google-maps-review-sentiment-analyzer",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/8gZYzh2rlwXTXL8Ha/builds/BInhZ9NchQPdnE0wi/openapi.json
