# Google Maps Review Health Check — free, no login (`leoworks/google-maps-review-health-check`) Actor

Google Maps reviews toolkit by LeoWorks — free review health check, one business: average stars, owner reply rate, 1-3 star reviews with no reply, last 90 days vs before. No AI, no login. Collection by compass billed to you (~$0.02/30 reviews). Deeper: leoworks/google-maps-review-classifier.

- **URL**: https://apify.com/leoworks/google-maps-review-health-check.md
- **Developed by:** [Leoworks](https://apify.com/leoworks) (community)
- **Categories:** Lead generation, Agents
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-usage

## 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

**Part of LeoWorks Google Maps tools:** reviews → health ([Google Maps Review Health Check](https://apify.com/leoworks/google-maps-review-health-check)) · reviews → replies ([Google Maps Review Classifier](https://apify.com/leoworks/google-maps-review-classifier)) · places → leads ([Google Maps Lead Qualifier](https://apify.com/leoworks/google-maps-lead-qualifier)).

**Free Google Maps review health check: paste one business, get a one-row card — average stars, how often the owner replies, how many 1–3 star reviews still have no reply, and last 90 days versus before.** It reads the newest reviews of the place and only counts them: no AI, no prompts, no login. This Actor is free; the reviews are collected by a separate Actor that Apify bills to you (about **$0.02 for 30 reviews**).

### Why use it

- **Business owner or branch manager** — find out in a minute how many unhappy reviews you left unanswered, and how old the oldest one is.
- **Agency or freelancer** — a quick, honest first look at a prospect's Google Maps reputation before a call.
- **Multi-branch operator** — run it per branch and compare owner reply rate and average stars.
- **Competitor research** — see how a rival handles its reviews: do they reply at all?
- **Developer or AI agent** — a small structured JSON card through the API or MCP.

### What you get

One row per place:

| Field | What it is |
|---|---|
| `averageStars`, `starDistribution` | Average and 1–5 star counts of the reviews checked (`googleRating` and `googleReviewCount` are Google's own figures for all reviews) |
| `ownerReplyRate`, `ownerReplied` | Share of the checked reviews that have a public owner reply |
| `unansweredLowStar`, `unansweredOneOrTwoStar` | 1–3 star (1–2 star) reviews with no owner reply |
| `oldestUnansweredLowStarDays` | Age in days of the oldest unanswered 1–3 star review |
| `last90Days`, `before90Days` | Reviews, average stars and reply rate in each period |
| `averageStarsChange`, `replyRateChange` | Last 90 days minus before — only when both periods have at least 10 reviews, otherwise `trendNote` says so |
| `nextStep` | A line pointing to the next tool, with the dataset ID of the collected reviews so nothing is collected twice |

Real example (Katz's Delicatessen, New York, the newest 100 reviews, 2026-10-15 — they cover only four days, so no trend is shown):

```json
{
  "placeName": "Katz's Delicatessen",
  "googleRating": 4.5,
  "reviewsAnalyzed": 100,
  "averageStars": 4.25,
  "starDistribution": { "1": 10, "2": 4, "3": 6, "4": 11, "5": 69 },
  "ownerReplyRate": 0.01,
  "unansweredLowStar": 20,
  "oldestUnansweredLowStarDays": 6,
  "trendNote": "Each period needs at least 10 reviews to be compared; collect more reviews for a trend."
}
```

### How to check a business's Google Maps reviews

1. Open the Actor (**Try for free**) and paste the business's **Google Maps URL** (the full address-bar URL) or its **place ID** (starts with `ChIJ`) in **Place**. Or write the business name and fill **Location** with its city and country (`Chicago, USA`).
2. Set **Newest reviews to check** (default 30, up to 200). More reviews give steadier figures and a longer trend.
3. Click **Start** and open **Review health card**. The run log shows the estimated collection cost before anything is collected.

Already ran a Google Maps scraper? Pick its dataset in **Scraper dataset** instead (compass/crawler-google-places with **Max reviews** above 0) — nothing is collected and there is no collection cost.

### Pricing

This Actor is **free**. You pay Apify only for the platform usage of the run (a few thousandths of a dollar) and for the collection step:

- **Collection** is done by [Google Maps Scraper by compass](https://apify.com/compass/crawler-google-places), a separate Actor that Apify bills to your account at its own price — about $0.006 per place + $0.0005 per review (it can change). 30 reviews of one place cost about **$0.02** (50 reviews about $0.03).
- With **Scraper dataset** there is no collection cost.
- Starting the scraper may need roughly $0.50 of remaining Apify credit in your billing cycle even when the run costs a few cents (observed, not documented by Apify).

### Go deeper

The health card counts; it does not read the reviews. To see **what** customers complain about, flag serious issues and get the unanswered reviews as a reply queue, run [Google Maps Review Classifier](https://apify.com/leoworks/google-maps-review-classifier) — set its **Reviews dataset** to the `reviewsDatasetId` in this run's summary and the reviews are not collected twice. To rate places as leads, see [Google Maps Lead Qualifier](https://apify.com/leoworks/google-maps-lead-qualifier).

### Accuracy and limits

There is no AI in this Actor, so there is no accuracy figure: every number is a count or an average of the reviews collected.

| Item | Limit |
|---|---|
| Places | One per run from **Place**; up to 20 from a **Scraper dataset** |
| Reviews | The newest 1–200 per place; statistics describe this sample, not all of Google's reviews |
| Owner reply | A review counts as replied when it has a public owner reply text |
| Trend | Needs 10+ reviews in each of the last 90 days and before; a busy place can fill 30 reviews within days |
| Reviewer data | Reviewer names and profiles are never collected |
| Speed | One place with 30 reviews takes about 45 seconds in total, 50 reviews about 60 seconds (measured 2026-10-18, mostly the collection step); counting takes a fraction of a second |

### Compliance and privacy

- **Public data, no login.** The reviews are the publicly visible Google Maps reviews of the place; no Google account or cookies are needed.
- **No personal profiles.** Reviewer names and profiles are not collected or output; only stars, dates and whether the owner replied are used.
- **You stay responsible for the use.** Google's terms apply to collecting the data. This is not legal advice.

### Call it from code

```bash
curl -X POST "https://api.apify.com/v2/acts/leoworks~google-maps-review-health-check/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "place": "Joe'"'"'s Pizza Broadway", "location": "New York, USA", "maxReviews": 30 }'
```

It also works as a tool for Claude, Cursor or Claude Code through the Apify MCP server — ask "How many unanswered 1–3 star reviews does this restaurant have on Google Maps?".

### FAQ and support

#### Is it really free?

Yes. The Actor has no price. The only costs are Apify's small platform usage and the collection step billed by the scraper (or nothing with a **Scraper dataset**).

#### Why is the trend empty?

Each period needs at least 10 reviews. A busy business can produce 100 reviews in a few days, so the last 90 days then fill the whole sample. Use a quieter place, or collect more reviews (up to 200).

#### Does it write the owner replies or read the reviews?

No. It counts. Use Google Maps Review Classifier to find what the unhappy reviews say.

#### Why did it check the wrong place?

A business name is matched by taking the first Google Maps result inside the **Location**. Chains need the branch name, or use the place's own URL or place ID.

If this Actor saved you time, a short review on Apify Store helps others find it. Questions or a feature wish? Open an issue in the **Issues** tab — we answer within a day.

# Changelog

This Actor's version history is a separate document: https://apify.com/leoworks/google-maps-review-health-check/changelog.md

# Actor input Schema

## `place` (type: `string`):

One business. PREFERRED: its Google Maps URL (the full address-bar URL of the place) or its place ID (starts with ChIJ) — it names the exact branch and “Location” can stay empty. ALTERNATIVE: a business name such as “Joe's Pizza Broadway” — then “Location” (city, country) is REQUIRED; the first Google Maps result inside that location is taken. Search-result pages and coordinates-only URLs do not work. The reviews are collected by compass' Google Maps scraper (compass/crawler-google-places), a separate Actor that Apify bills to your account (about $0.006 per place + $0.0005 per review, its price may change — about $0.02 for 30 reviews); this Actor itself is free. Reviewer names and profiles are never collected. The pre-filled URL is an example (Joe's Pizza Broadway) — replace it with your own place.

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

Where to search for the business name in “Place”, for example “Chicago, USA”. Required when “Place” is a name; leave empty for a URL or place ID.

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

How many of the newest reviews to collect and count (1 to 200). Statistics are computed on this sample, so a higher number gives steadier figures and a longer trend; the collection cost grows with it ($0.0005 per review, billed by the scraper).

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

Optional: the dataset of a Google Maps scraper run that already has reviews (compass/crawler-google-places with “Max reviews” above 0). Use this OR “Place”. One card is made per place in the dataset (up to 20). Nothing is collected, so there is no collection cost.

## Actor input object example

```json
{
  "place": "https://www.google.com/maps/search/?api=1&query=Joe's%20Pizza%20Broadway&query_place_id=ChIJifIePKtZwokRVZ-UdRGkZzs",
  "location": "New York, USA",
  "maxReviews": 30
}
```

# Actor output Schema

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

No description

## `summary` (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 = {
    "place": "https://www.google.com/maps/search/?api=1&query=Joe's%20Pizza%20Broadway&query_place_id=ChIJifIePKtZwokRVZ-UdRGkZzs"
};

// Run the Actor and wait for it to finish
const run = await client.actor("leoworks/google-maps-review-health-check").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 = { "place": "https://www.google.com/maps/search/?api=1&query=Joe's%20Pizza%20Broadway&query_place_id=ChIJifIePKtZwokRVZ-UdRGkZzs" }

# Run the Actor and wait for it to finish
run = client.actor("leoworks/google-maps-review-health-check").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 '{
  "place": "https://www.google.com/maps/search/?api=1&query=Joe'\''s%20Pizza%20Broadway&query_place_id=ChIJifIePKtZwokRVZ-UdRGkZzs"
}' |
apify call leoworks/google-maps-review-health-check --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,leoworks/google-maps-review-health-check"
        }
    }
}
```

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/dodOib1dtH1UJvlZU/builds/GyPqeTvu7fuS6zmof/openapi.json
