# Google Maps Review Sentiment & Priority Analysis (`practical_ai_lab_jp/pal-maps-reviews-sentiment-trends`) Actor

Compare ratings and recurring service issues over time in authorized review data exports. For Multi-location service and reputation analysts. Check the live Pricing tab and input limits.

- **URL**: https://apify.com/practical_ai_lab_jp/pal-maps-reviews-sentiment-trends.md
- **Developed by:** [Practical AI Lab](https://apify.com/practical_ai_lab_jp) (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

from $20.00 / 1,000 maps review trends reports

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 Review Sentiment & Priority Analysis

Turns Google Maps review records you **already have** into aggregated, business-level insights. It uses **no AI/LLM** (everything is deterministic and rule-based), makes **no external requests**, and does **not scrape Google**. Reviewer names, IDs, profile URLs and photos are ignored, and review text is never exported.

Built by PAL (Practical AI Lab).

### What you get per business

- **Rating distribution**: counts and percentages for 1-5 stars, average, median, standard deviation, positive/neutral/negative share.
- **Rating trend**: linear slope of monthly average rating (`improving`, `stable`, `declining`, or `insufficient_data`).
- **Frequency trend**: reviews in the last 90 days versus the previous 90 days, measured from the newest review in the data (not from today).
- **Monthly series**: review count and average rating per month, with empty months filled in.
- **Recurring issue topics**: a keyword lexicon (service/staff, wait time, price/value, cleanliness, product quality, booking/billing, noise/atmosphere, parking/access). It reports how many reviews mention each topic and how many of the 1-3 star reviews do.
- **Outlier patterns** (aggregate counts only): rating/text mismatches, repeated identical texts, burst days, polarized distributions, empty-text share.
- **Owner response rate**.

Keyword matching is simple and English-oriented. Treat topics as a triage signal, not a verdict. Businesses with fewer than 10 reviews are flagged `lowSample`.

### Try the ready-to-run sample

The Input form is prefilled with 24 **fictional, synthetic** demonstration records. Click Start to see the report without scraping Google Maps, purchasing a dataset, or providing an Apify dataset ID. Change the input to your own legally obtained dataset for real analysis. Example data is not a real customer or source.

### Input

| Field | Description |
|---|---|
| `records` | JSON array of review objects. |
| `recordsJson` | The same, as pasted text. |
| `sourceDatasetId` | Optional dataset ID from your own Apify account (used only when no records are supplied). |
| `minTopicMentions` | Minimum mentions before a topic is reported (default 2). |
| `includeMonthlyTrend` | Include monthly rows (default true). |

Recognized fields: `placeId`/`cid`, `title`, `stars`/`rating`, `text`, `publishedAtDate`/`publishedAt`/`date` (ISO strings or epoch seconds/milliseconds), `responseFromOwnerText`. Up to 100,000 reviews per run.

### Output

Dataset rows by `recordType`: `summary`, `business_insight`, `monthly_trend`, `issue_topic`, and `error` (never charged). The `OUTPUT` record in the key-value store holds the run summary.

### Pricing event

Pricing is not configured yet. The planned event name is `maps-review-trends-report`, charged once per successful report. Failed runs are not charged.

### Local tests

```
python3 -m unittest discover -s tests
```

### Multi-location manager review priority (new)

The default demo contains **24 synthetic reviews across two fictional locations**: one store needs attention and the other performs well. The new manager queue shows the flagged store without sharing reviewer identity or text.

The Business insights Dataset view now shows a **reviewPriorityTier**, a reproducible **reviewPriorityScore**, and suggested manager follow-up actions. The summary includes an aggregated **managerPriorityQueue** sorted across locations, with the count of unanswered one- or two-star reviews. This helps an operations team decide which locations to examine and recheck in a later reporting cycle.

**Scoring method:** 50% weight on the share of 1-2 star reviews, 25% on the percentage of 1-2 star reviews without a recorded owner response, plus 20 points for a declining monthly rating trend and 5 points for recurring issues detected in low-rated review categories. Scores are capped at 100. Fewer than 10 reviews returns \`insufficient_data\` priority even if a numeric score is computed. Review response metadata can be absent from exports; interpret the queue as a candidate list rather than proof of actual non-response. Review text and reviewer identities are never exported.

**Monthly paid-use workflow:** Import a fresh dataset of authorized location reviews, open Business insights, triage high/medium priority locations, assign actions internally, then rerun after the next update to measure changes. Only one successful report event is charged; check the official Pricing tab. This Actor does not contact or respond to reviewers.

# Actor input Schema

## `records` (type: `array`):

Existing Google Maps review records you already hold. Each needs a business identifier (placeId or title) and a star rating (stars or rating). Optional: text, publishedAtDate, responseFromOwnerText. Reviewer names and IDs are ignored.

## `recordsJson` (type: `string`):

Alternative to `records`: a JSON array (or object with an `items` array) pasted as text.

## `sourceDatasetId` (type: `string`):

Optional ID of a dataset in your own Apify account. Used only when no records are supplied.

## `minTopicMentions` (type: `integer`):

A topic is reported for a business only if at least this many reviews mention it.

## `includeMonthlyTrend` (type: `boolean`):

Push one row per business and month with review count and average rating.

## Actor input object example

```json
{
  "records": [
    {
      "placeId": "sample-place-001",
      "title": "Example Cafe",
      "stars": 5,
      "publishedAtDate": "2026-01-11T11:00:00Z",
      "text": "Friendly staff and delicious food."
    },
    {
      "placeId": "sample-place-001",
      "title": "Example Cafe",
      "stars": 4,
      "publishedAtDate": "2026-01-17T11:00:00Z",
      "text": "Great service and clean tables."
    },
    {
      "placeId": "sample-place-001",
      "title": "Example Cafe",
      "stars": 4,
      "publishedAtDate": "2026-02-03T11:00:00Z",
      "text": "Good atmosphere and reasonable price."
    },
    {
      "placeId": "sample-place-001",
      "title": "Example Cafe",
      "stars": 3,
      "publishedAtDate": "2026-02-09T11:00:00Z",
      "text": "The wait time is slow."
    },
    {
      "placeId": "sample-place-001",
      "title": "Example Cafe",
      "stars": 2,
      "publishedAtDate": "2026-03-10T11:00:00Z",
      "text": "Long wait and noisy seating."
    },
    {
      "placeId": "sample-place-001",
      "title": "Example Cafe",
      "stars": 1,
      "publishedAtDate": "2026-03-19T11:00:00Z",
      "text": "Service was rude and the price is expensive."
    },
    {
      "placeId": "sample-place-002",
      "title": "Example Bakery",
      "stars": 4,
      "publishedAtDate": "2026-01-13T11:00:00Z",
      "text": "Fresh bread and friendly staff."
    },
    {
      "placeId": "sample-place-002",
      "title": "Example Bakery",
      "stars": 5,
      "publishedAtDate": "2026-01-23T11:00:00Z",
      "text": "Excellent value and delicious pastries."
    },
    {
      "placeId": "sample-place-002",
      "title": "Example Bakery",
      "stars": 4,
      "publishedAtDate": "2026-02-08T11:00:00Z",
      "text": "Clean shop, parking is easy."
    },
    {
      "placeId": "sample-place-002",
      "title": "Example Bakery",
      "stars": 5,
      "publishedAtDate": "2026-02-14T11:00:00Z",
      "text": "Great fresh quality."
    },
    {
      "placeId": "sample-place-002",
      "title": "Example Bakery",
      "stars": 5,
      "publishedAtDate": "2026-03-05T11:00:00Z",
      "text": "Fantastic service and fair price."
    },
    {
      "placeId": "sample-place-002",
      "title": "Example Bakery",
      "stars": 4,
      "publishedAtDate": "2026-03-20T11:00:00Z",
      "text": "Helpful staff and short wait."
    },
    {
      "placeId": "sample-place-001",
      "title": "Example Cafe",
      "stars": 2,
      "publishedAtDate": "2026-04-03T11:00:00Z",
      "text": "Long wait and slow service"
    },
    {
      "placeId": "sample-place-001",
      "title": "Example Cafe",
      "stars": 1,
      "publishedAtDate": "2026-04-09T11:00:00Z",
      "text": "Wait was long and staff were rude"
    },
    {
      "placeId": "sample-place-001",
      "title": "Example Cafe",
      "stars": 2,
      "publishedAtDate": "2026-04-15T11:00:00Z",
      "text": "Overpriced, delayed order"
    },
    {
      "placeId": "sample-place-001",
      "title": "Example Cafe",
      "stars": 1,
      "publishedAtDate": "2026-05-02T11:00:00Z",
      "text": "Dirty tables and poor service"
    },
    {
      "placeId": "sample-place-001",
      "title": "Example Cafe",
      "stars": 2,
      "publishedAtDate": "2026-05-11T11:00:00Z",
      "text": "Slow service and long wait"
    },
    {
      "placeId": "sample-place-001",
      "title": "Example Cafe",
      "stars": 1,
      "publishedAtDate": "2026-05-21T11:00:00Z",
      "text": "Staff were rude and the price was too expensive"
    },
    {
      "placeId": "sample-place-002",
      "title": "Example Bakery",
      "stars": 5,
      "publishedAtDate": "2026-04-01T11:00:00Z",
      "text": "Friendly service and fresh bread",
      "responseFromOwnerText": "Thank you for the feedback."
    },
    {
      "placeId": "sample-place-002",
      "title": "Example Bakery",
      "stars": 5,
      "publishedAtDate": "2026-04-07T11:00:00Z",
      "text": "Excellent pastries and good value",
      "responseFromOwnerText": "Thank you for the feedback."
    },
    {
      "placeId": "sample-place-002",
      "title": "Example Bakery",
      "stars": 5,
      "publishedAtDate": "2026-04-12T11:00:00Z",
      "text": "Helpful staff and short wait",
      "responseFromOwnerText": "Thank you for the feedback."
    },
    {
      "placeId": "sample-place-002",
      "title": "Example Bakery",
      "stars": 4,
      "publishedAtDate": "2026-05-03T11:00:00Z",
      "text": "Lovely quality and friendly service",
      "responseFromOwnerText": "Thank you for the feedback."
    },
    {
      "placeId": "sample-place-002",
      "title": "Example Bakery",
      "stars": 5,
      "publishedAtDate": "2026-05-13T11:00:00Z",
      "text": "Good parking and excellent bread",
      "responseFromOwnerText": "Thank you for the feedback."
    },
    {
      "placeId": "sample-place-002",
      "title": "Example Bakery",
      "stars": 5,
      "publishedAtDate": "2026-05-18T11:00:00Z",
      "text": "Nice atmosphere and fresh pastries",
      "responseFromOwnerText": "Thank you for the feedback."
    }
  ],
  "minTopicMentions": 2,
  "includeMonthlyTrend": true
}
```

# 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 = {
    "records": [
        {
            "placeId": "sample-place-001",
            "title": "Example Cafe",
            "stars": 5,
            "publishedAtDate": "2026-01-11T11:00:00Z",
            "text": "Friendly staff and delicious food."
        },
        {
            "placeId": "sample-place-001",
            "title": "Example Cafe",
            "stars": 4,
            "publishedAtDate": "2026-01-17T11:00:00Z",
            "text": "Great service and clean tables."
        },
        {
            "placeId": "sample-place-001",
            "title": "Example Cafe",
            "stars": 4,
            "publishedAtDate": "2026-02-03T11:00:00Z",
            "text": "Good atmosphere and reasonable price."
        },
        {
            "placeId": "sample-place-001",
            "title": "Example Cafe",
            "stars": 3,
            "publishedAtDate": "2026-02-09T11:00:00Z",
            "text": "The wait time is slow."
        },
        {
            "placeId": "sample-place-001",
            "title": "Example Cafe",
            "stars": 2,
            "publishedAtDate": "2026-03-10T11:00:00Z",
            "text": "Long wait and noisy seating."
        },
        {
            "placeId": "sample-place-001",
            "title": "Example Cafe",
            "stars": 1,
            "publishedAtDate": "2026-03-19T11:00:00Z",
            "text": "Service was rude and the price is expensive."
        },
        {
            "placeId": "sample-place-002",
            "title": "Example Bakery",
            "stars": 4,
            "publishedAtDate": "2026-01-13T11:00:00Z",
            "text": "Fresh bread and friendly staff."
        },
        {
            "placeId": "sample-place-002",
            "title": "Example Bakery",
            "stars": 5,
            "publishedAtDate": "2026-01-23T11:00:00Z",
            "text": "Excellent value and delicious pastries."
        },
        {
            "placeId": "sample-place-002",
            "title": "Example Bakery",
            "stars": 4,
            "publishedAtDate": "2026-02-08T11:00:00Z",
            "text": "Clean shop, parking is easy."
        },
        {
            "placeId": "sample-place-002",
            "title": "Example Bakery",
            "stars": 5,
            "publishedAtDate": "2026-02-14T11:00:00Z",
            "text": "Great fresh quality."
        },
        {
            "placeId": "sample-place-002",
            "title": "Example Bakery",
            "stars": 5,
            "publishedAtDate": "2026-03-05T11:00:00Z",
            "text": "Fantastic service and fair price."
        },
        {
            "placeId": "sample-place-002",
            "title": "Example Bakery",
            "stars": 4,
            "publishedAtDate": "2026-03-20T11:00:00Z",
            "text": "Helpful staff and short wait."
        },
        {
            "placeId": "sample-place-001",
            "title": "Example Cafe",
            "stars": 2,
            "publishedAtDate": "2026-04-03T11:00:00Z",
            "text": "Long wait and slow service"
        },
        {
            "placeId": "sample-place-001",
            "title": "Example Cafe",
            "stars": 1,
            "publishedAtDate": "2026-04-09T11:00:00Z",
            "text": "Wait was long and staff were rude"
        },
        {
            "placeId": "sample-place-001",
            "title": "Example Cafe",
            "stars": 2,
            "publishedAtDate": "2026-04-15T11:00:00Z",
            "text": "Overpriced, delayed order"
        },
        {
            "placeId": "sample-place-001",
            "title": "Example Cafe",
            "stars": 1,
            "publishedAtDate": "2026-05-02T11:00:00Z",
            "text": "Dirty tables and poor service"
        },
        {
            "placeId": "sample-place-001",
            "title": "Example Cafe",
            "stars": 2,
            "publishedAtDate": "2026-05-11T11:00:00Z",
            "text": "Slow service and long wait"
        },
        {
            "placeId": "sample-place-001",
            "title": "Example Cafe",
            "stars": 1,
            "publishedAtDate": "2026-05-21T11:00:00Z",
            "text": "Staff were rude and the price was too expensive"
        },
        {
            "placeId": "sample-place-002",
            "title": "Example Bakery",
            "stars": 5,
            "publishedAtDate": "2026-04-01T11:00:00Z",
            "text": "Friendly service and fresh bread",
            "responseFromOwnerText": "Thank you for the feedback."
        },
        {
            "placeId": "sample-place-002",
            "title": "Example Bakery",
            "stars": 5,
            "publishedAtDate": "2026-04-07T11:00:00Z",
            "text": "Excellent pastries and good value",
            "responseFromOwnerText": "Thank you for the feedback."
        },
        {
            "placeId": "sample-place-002",
            "title": "Example Bakery",
            "stars": 5,
            "publishedAtDate": "2026-04-12T11:00:00Z",
            "text": "Helpful staff and short wait",
            "responseFromOwnerText": "Thank you for the feedback."
        },
        {
            "placeId": "sample-place-002",
            "title": "Example Bakery",
            "stars": 4,
            "publishedAtDate": "2026-05-03T11:00:00Z",
            "text": "Lovely quality and friendly service",
            "responseFromOwnerText": "Thank you for the feedback."
        },
        {
            "placeId": "sample-place-002",
            "title": "Example Bakery",
            "stars": 5,
            "publishedAtDate": "2026-05-13T11:00:00Z",
            "text": "Good parking and excellent bread",
            "responseFromOwnerText": "Thank you for the feedback."
        },
        {
            "placeId": "sample-place-002",
            "title": "Example Bakery",
            "stars": 5,
            "publishedAtDate": "2026-05-18T11:00:00Z",
            "text": "Nice atmosphere and fresh pastries",
            "responseFromOwnerText": "Thank you for the feedback."
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("practical_ai_lab_jp/pal-maps-reviews-sentiment-trends").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 = { "records": [
        {
            "placeId": "sample-place-001",
            "title": "Example Cafe",
            "stars": 5,
            "publishedAtDate": "2026-01-11T11:00:00Z",
            "text": "Friendly staff and delicious food.",
        },
        {
            "placeId": "sample-place-001",
            "title": "Example Cafe",
            "stars": 4,
            "publishedAtDate": "2026-01-17T11:00:00Z",
            "text": "Great service and clean tables.",
        },
        {
            "placeId": "sample-place-001",
            "title": "Example Cafe",
            "stars": 4,
            "publishedAtDate": "2026-02-03T11:00:00Z",
            "text": "Good atmosphere and reasonable price.",
        },
        {
            "placeId": "sample-place-001",
            "title": "Example Cafe",
            "stars": 3,
            "publishedAtDate": "2026-02-09T11:00:00Z",
            "text": "The wait time is slow.",
        },
        {
            "placeId": "sample-place-001",
            "title": "Example Cafe",
            "stars": 2,
            "publishedAtDate": "2026-03-10T11:00:00Z",
            "text": "Long wait and noisy seating.",
        },
        {
            "placeId": "sample-place-001",
            "title": "Example Cafe",
            "stars": 1,
            "publishedAtDate": "2026-03-19T11:00:00Z",
            "text": "Service was rude and the price is expensive.",
        },
        {
            "placeId": "sample-place-002",
            "title": "Example Bakery",
            "stars": 4,
            "publishedAtDate": "2026-01-13T11:00:00Z",
            "text": "Fresh bread and friendly staff.",
        },
        {
            "placeId": "sample-place-002",
            "title": "Example Bakery",
            "stars": 5,
            "publishedAtDate": "2026-01-23T11:00:00Z",
            "text": "Excellent value and delicious pastries.",
        },
        {
            "placeId": "sample-place-002",
            "title": "Example Bakery",
            "stars": 4,
            "publishedAtDate": "2026-02-08T11:00:00Z",
            "text": "Clean shop, parking is easy.",
        },
        {
            "placeId": "sample-place-002",
            "title": "Example Bakery",
            "stars": 5,
            "publishedAtDate": "2026-02-14T11:00:00Z",
            "text": "Great fresh quality.",
        },
        {
            "placeId": "sample-place-002",
            "title": "Example Bakery",
            "stars": 5,
            "publishedAtDate": "2026-03-05T11:00:00Z",
            "text": "Fantastic service and fair price.",
        },
        {
            "placeId": "sample-place-002",
            "title": "Example Bakery",
            "stars": 4,
            "publishedAtDate": "2026-03-20T11:00:00Z",
            "text": "Helpful staff and short wait.",
        },
        {
            "placeId": "sample-place-001",
            "title": "Example Cafe",
            "stars": 2,
            "publishedAtDate": "2026-04-03T11:00:00Z",
            "text": "Long wait and slow service",
        },
        {
            "placeId": "sample-place-001",
            "title": "Example Cafe",
            "stars": 1,
            "publishedAtDate": "2026-04-09T11:00:00Z",
            "text": "Wait was long and staff were rude",
        },
        {
            "placeId": "sample-place-001",
            "title": "Example Cafe",
            "stars": 2,
            "publishedAtDate": "2026-04-15T11:00:00Z",
            "text": "Overpriced, delayed order",
        },
        {
            "placeId": "sample-place-001",
            "title": "Example Cafe",
            "stars": 1,
            "publishedAtDate": "2026-05-02T11:00:00Z",
            "text": "Dirty tables and poor service",
        },
        {
            "placeId": "sample-place-001",
            "title": "Example Cafe",
            "stars": 2,
            "publishedAtDate": "2026-05-11T11:00:00Z",
            "text": "Slow service and long wait",
        },
        {
            "placeId": "sample-place-001",
            "title": "Example Cafe",
            "stars": 1,
            "publishedAtDate": "2026-05-21T11:00:00Z",
            "text": "Staff were rude and the price was too expensive",
        },
        {
            "placeId": "sample-place-002",
            "title": "Example Bakery",
            "stars": 5,
            "publishedAtDate": "2026-04-01T11:00:00Z",
            "text": "Friendly service and fresh bread",
            "responseFromOwnerText": "Thank you for the feedback.",
        },
        {
            "placeId": "sample-place-002",
            "title": "Example Bakery",
            "stars": 5,
            "publishedAtDate": "2026-04-07T11:00:00Z",
            "text": "Excellent pastries and good value",
            "responseFromOwnerText": "Thank you for the feedback.",
        },
        {
            "placeId": "sample-place-002",
            "title": "Example Bakery",
            "stars": 5,
            "publishedAtDate": "2026-04-12T11:00:00Z",
            "text": "Helpful staff and short wait",
            "responseFromOwnerText": "Thank you for the feedback.",
        },
        {
            "placeId": "sample-place-002",
            "title": "Example Bakery",
            "stars": 4,
            "publishedAtDate": "2026-05-03T11:00:00Z",
            "text": "Lovely quality and friendly service",
            "responseFromOwnerText": "Thank you for the feedback.",
        },
        {
            "placeId": "sample-place-002",
            "title": "Example Bakery",
            "stars": 5,
            "publishedAtDate": "2026-05-13T11:00:00Z",
            "text": "Good parking and excellent bread",
            "responseFromOwnerText": "Thank you for the feedback.",
        },
        {
            "placeId": "sample-place-002",
            "title": "Example Bakery",
            "stars": 5,
            "publishedAtDate": "2026-05-18T11:00:00Z",
            "text": "Nice atmosphere and fresh pastries",
            "responseFromOwnerText": "Thank you for the feedback.",
        },
    ] }

# Run the Actor and wait for it to finish
run = client.actor("practical_ai_lab_jp/pal-maps-reviews-sentiment-trends").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 '{
  "records": [
    {
      "placeId": "sample-place-001",
      "title": "Example Cafe",
      "stars": 5,
      "publishedAtDate": "2026-01-11T11:00:00Z",
      "text": "Friendly staff and delicious food."
    },
    {
      "placeId": "sample-place-001",
      "title": "Example Cafe",
      "stars": 4,
      "publishedAtDate": "2026-01-17T11:00:00Z",
      "text": "Great service and clean tables."
    },
    {
      "placeId": "sample-place-001",
      "title": "Example Cafe",
      "stars": 4,
      "publishedAtDate": "2026-02-03T11:00:00Z",
      "text": "Good atmosphere and reasonable price."
    },
    {
      "placeId": "sample-place-001",
      "title": "Example Cafe",
      "stars": 3,
      "publishedAtDate": "2026-02-09T11:00:00Z",
      "text": "The wait time is slow."
    },
    {
      "placeId": "sample-place-001",
      "title": "Example Cafe",
      "stars": 2,
      "publishedAtDate": "2026-03-10T11:00:00Z",
      "text": "Long wait and noisy seating."
    },
    {
      "placeId": "sample-place-001",
      "title": "Example Cafe",
      "stars": 1,
      "publishedAtDate": "2026-03-19T11:00:00Z",
      "text": "Service was rude and the price is expensive."
    },
    {
      "placeId": "sample-place-002",
      "title": "Example Bakery",
      "stars": 4,
      "publishedAtDate": "2026-01-13T11:00:00Z",
      "text": "Fresh bread and friendly staff."
    },
    {
      "placeId": "sample-place-002",
      "title": "Example Bakery",
      "stars": 5,
      "publishedAtDate": "2026-01-23T11:00:00Z",
      "text": "Excellent value and delicious pastries."
    },
    {
      "placeId": "sample-place-002",
      "title": "Example Bakery",
      "stars": 4,
      "publishedAtDate": "2026-02-08T11:00:00Z",
      "text": "Clean shop, parking is easy."
    },
    {
      "placeId": "sample-place-002",
      "title": "Example Bakery",
      "stars": 5,
      "publishedAtDate": "2026-02-14T11:00:00Z",
      "text": "Great fresh quality."
    },
    {
      "placeId": "sample-place-002",
      "title": "Example Bakery",
      "stars": 5,
      "publishedAtDate": "2026-03-05T11:00:00Z",
      "text": "Fantastic service and fair price."
    },
    {
      "placeId": "sample-place-002",
      "title": "Example Bakery",
      "stars": 4,
      "publishedAtDate": "2026-03-20T11:00:00Z",
      "text": "Helpful staff and short wait."
    },
    {
      "placeId": "sample-place-001",
      "title": "Example Cafe",
      "stars": 2,
      "publishedAtDate": "2026-04-03T11:00:00Z",
      "text": "Long wait and slow service"
    },
    {
      "placeId": "sample-place-001",
      "title": "Example Cafe",
      "stars": 1,
      "publishedAtDate": "2026-04-09T11:00:00Z",
      "text": "Wait was long and staff were rude"
    },
    {
      "placeId": "sample-place-001",
      "title": "Example Cafe",
      "stars": 2,
      "publishedAtDate": "2026-04-15T11:00:00Z",
      "text": "Overpriced, delayed order"
    },
    {
      "placeId": "sample-place-001",
      "title": "Example Cafe",
      "stars": 1,
      "publishedAtDate": "2026-05-02T11:00:00Z",
      "text": "Dirty tables and poor service"
    },
    {
      "placeId": "sample-place-001",
      "title": "Example Cafe",
      "stars": 2,
      "publishedAtDate": "2026-05-11T11:00:00Z",
      "text": "Slow service and long wait"
    },
    {
      "placeId": "sample-place-001",
      "title": "Example Cafe",
      "stars": 1,
      "publishedAtDate": "2026-05-21T11:00:00Z",
      "text": "Staff were rude and the price was too expensive"
    },
    {
      "placeId": "sample-place-002",
      "title": "Example Bakery",
      "stars": 5,
      "publishedAtDate": "2026-04-01T11:00:00Z",
      "text": "Friendly service and fresh bread",
      "responseFromOwnerText": "Thank you for the feedback."
    },
    {
      "placeId": "sample-place-002",
      "title": "Example Bakery",
      "stars": 5,
      "publishedAtDate": "2026-04-07T11:00:00Z",
      "text": "Excellent pastries and good value",
      "responseFromOwnerText": "Thank you for the feedback."
    },
    {
      "placeId": "sample-place-002",
      "title": "Example Bakery",
      "stars": 5,
      "publishedAtDate": "2026-04-12T11:00:00Z",
      "text": "Helpful staff and short wait",
      "responseFromOwnerText": "Thank you for the feedback."
    },
    {
      "placeId": "sample-place-002",
      "title": "Example Bakery",
      "stars": 4,
      "publishedAtDate": "2026-05-03T11:00:00Z",
      "text": "Lovely quality and friendly service",
      "responseFromOwnerText": "Thank you for the feedback."
    },
    {
      "placeId": "sample-place-002",
      "title": "Example Bakery",
      "stars": 5,
      "publishedAtDate": "2026-05-13T11:00:00Z",
      "text": "Good parking and excellent bread",
      "responseFromOwnerText": "Thank you for the feedback."
    },
    {
      "placeId": "sample-place-002",
      "title": "Example Bakery",
      "stars": 5,
      "publishedAtDate": "2026-05-18T11:00:00Z",
      "text": "Nice atmosphere and fresh pastries",
      "responseFromOwnerText": "Thank you for the feedback."
    }
  ]
}' |
apify call practical_ai_lab_jp/pal-maps-reviews-sentiment-trends --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,practical_ai_lab_jp/pal-maps-reviews-sentiment-trends"
        }
    }
}
```

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/dTWN3cGwTBOhqNyGh/builds/klXoc4li8fxYguWnb/openapi.json
