# Google Maps Reviews Monitor Scraper API - No Login (`vonsensey/google-maps-reviews-monitor-scraper-api`) Actor

Monitor Google Maps places on a schedule: only new reviews, plus rating, phone, website and hours changes. Nothing new costs almost nothing. No login.

- **URL**: https://apify.com/vonsensey/google-maps-reviews-monitor-scraper-api.md
- **Developed by:** [Blackcube](https://apify.com/vonsensey) (community)
- **Categories:** Lead generation, Business, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.30 / 1,000 new review delivereds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#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 Reviews Monitor Scraper API - No Login

<table style="border-collapse:collapse;width:100%;margin:0 0 4px">
<tr><td colspan="3" style="padding:9px 12px;background:#0B6E75;border:1px solid #0B6E75"><span style="color:#FFFFFF;font-weight:700;font-size:13px;letter-spacing:.3px">Google Maps Suite</span><span style="color:#CFF0F2;font-size:12px"> &nbsp;&bull;&nbsp; 3 Actors, one codebase, one record billed once</span></td></tr>
<tr><td style="padding:9px 12px;border:1px solid #E5E7EB;background:#FFFFFF;vertical-align:top;width:33%"><a href="https://apify.com/vonsensey/google-maps-reviews-scraper-api" style="color:#111827;font-weight:700;font-size:13px;text-decoration:none">Google Maps Reviews Scraper API</a><br><span style="color:#6B7280;font-size:11px">By Place ID, No Login</span></td><td style="padding:9px 12px;border:1px solid #E5E7EB;background:#FFFFFF;vertical-align:top;width:33%"><a href="https://apify.com/vonsensey/google-maps-place-details-scraper-api" style="color:#111827;font-weight:700;font-size:13px;text-decoration:none">Google Maps Place Details Scraper API</a><br><span style="color:#6B7280;font-size:11px">By ID, No Login</span></td><td style="padding:9px 12px;border:1px solid #E5E7EB;background:#ECFDF5;vertical-align:top;width:33%"><span style="color:#0B6E75;font-weight:700;font-size:13px">Google Maps Reviews Monitor Scraper API</span><br><span style="color:#0B6E75;font-size:11px;font-weight:600">&#10148; You are here</span></td></tr>
</table>

**More from this account:** [YouTube Transcript Suite](https://apify.com/vonsensey/youtube-transcript-scraper) · [Website Contact & Email Suite](https://apify.com/vonsensey/website-contact-email-extractor) · [Career Site & ATS Jobs Suite](https://apify.com/vonsensey/career-page-job-postings-scraper-api) · [Google News Suite](https://apify.com/vonsensey/google-news-scraper-api) · [Keyword Research Suite](https://apify.com/vonsensey/google-keyword-ideas-scraper) · [Shopify Store Intelligence Suite](https://apify.com/vonsensey/shopify-store-leads-scraper) · [eBay Data Suite](https://apify.com/vonsensey/ebay-scraper-api) · [Amazon Reviews Suite](https://apify.com/vonsensey/amazon-reviews-scraper-api) · [Reddit](https://apify.com/vonsensey/reddit-scraper-posts-comments-api) · [Meta Ad Library](https://apify.com/vonsensey/facebook-ads-library-scraper-meta-ad-api) · [Vinted](https://apify.com/vonsensey/vinted-scraper-api) · [Trustpilot Review Intelligence Suite](https://apify.com/vonsensey/trustpilot-reviews-scraper) · [App Store & Google Play Reviews Suite](https://apify.com/vonsensey/app-store-google-play-reviews-scraper) · [Etsy Research Suite](https://apify.com/vonsensey/etsy-scraper) · [YouTube Comments Intelligence Suite](https://apify.com/vonsensey/youtube-comments-scraper) · [Telegram Channel Intelligence Suite](https://apify.com/vonsensey/telegram-channel-scraper-api) · [Business Reviews Suite](https://apify.com/vonsensey/business-reviews-aggregator-scraper-api) · [Google Trends Suite](https://apify.com/vonsensey/google-trends-scraper) · [Amazon Product Data Suite](https://apify.com/vonsensey/amazon-product-scraper-api) · [Google Sheets Suite](https://apify.com/vonsensey/google-sheets-scraper-api) · [TikTok Suite](https://apify.com/vonsensey/tiktok-scraper-api) · [Snapchat Suite](https://apify.com/vonsensey/snapchat-scraper-api) · [LinkedIn Public Data Suite](https://apify.com/vonsensey/linkedin-scraper-api) · [Instagram Suite](https://apify.com/vonsensey/instagram-posts-scraper-api) · [Contact Validation Suite](https://apify.com/vonsensey/email-verifier-validator-api) · [X / Twitter](https://apify.com/vonsensey/tweet-scraper)

Put a list of Google Maps places on a schedule and get **only what changed** — the new reviews since your last run, and any move in rating, phone, website or hours. One small check per place per run; a morning with nothing new costs almost nothing.

**You pay one check per place per run, plus each new review; a place with nothing new costs only the check.** A place that could not be read costs nothing. No login, no cookies, no proxy to configure.

### Quick start

1. Press **Start** — the defaults are a working run.
2. Replace them with your own Place IDs, feature ids, Maps URLs or CIDs.
3. Take the dataset as JSON, CSV or Excel, or via the API. Every row has a `type`.

### What people use it for

- **Daily new-review alerts.** Watch a set of locations and receive only the reviews posted since the last run, with the owner reply when there is one.
- **Rating and NAP change tracking.** Get a row the day a place's rating, phone, website or hours change, and a free "unchanged" row when they do not.
- **Chain and competitor watch.** Monitor 25 locations on a cron and pay one small check per location per run.

### Input

| Field | What it does |
|---|---|
| `places` | Place IDs, feature ids, Maps URLs or CIDs to watch, one per line. |
| `maxNewReviewsPerPlace` | The most new reviews returned per place per run (default 20). A place with more new reviews than this skips the excess and its `changes` row says `truncated: true`; raise it for busy places. |
| `personalData` | Off by default. |
| `language` / `country` | Google `hl` / `gl` codes (default en / us). |
| `records` | Objects from n8n, Make or a CSV; the id is read from a `place`/`placeId`/`fid`/`cid`/`url` field and every other field rides along as `passthrough`. Send a CID as a **string**: a 19–20 digit JSON number is already rounded to a different place and is refused as a free `invalid` row. |
| `maxCostUsd` | Optional hard ceiling; the run stops before the charge that would cross it. |

### What the rows look like

```json
{ "type": "changes", "fid": "0x808580f112dc711d:0xbfb3fcde3487fb40", "name": "Tony's Pizza Napoletana",
  "firstSeen": false, "newReviews": 3, "truncated": false, "changes": { "rating": { "from": 4.4, "to": 4.5 } } }
{ "type": "unchanged", "fid": "0x8644…", "name": "Sforno Pizzeria Napoletana" }
```

Each new review is also delivered as its own `review` row. `truncated: true` means the run did not deliver every new review: cut by `maxNewReviewsPerPlace` (the excess is skipped — raise the cap for busy places), or by your cost ceiling or a failed page (the rest come next run, never billed twice).

Every row has a `type`. The free `coverage` row says what was asked for and what arrived; the free `summary` row reports what the run spent.

### What it costs

| You pay for | Price |
|---|---|
| Each place checked, per run | **$1.00 per 1,000 checks** |
| Each new review delivered | **$0.30 per 1,000 reviews** |

The built-in example (2 places, first run) costs at most **$0.0140** — 2 checks + up to 40 new reviews. A re-run with nothing new costs **$0.0020**. There is **no start fee** — every delivered record bills, and failures are free. **Free, always:** an id that does not resolve, a place Google will not serve, a filtered-out review, a duplicate, the coverage row and the run summary.

Set **Maximum cost (USD)** to stop any run before it crosses a number you choose; the free summary row reports what it actually spent.

### Limits, stated plainly

We return what Google Maps' public pages carry and say plainly what they do not: photo galleries beyond the first few (~4) images, popular times, questions & answers, menus, order-online links, "people also search", owner updates, and any emails, phone lists or social profiles. Those need endpoints Google does not serve without a session, or a website crawl — not this Actor.

*Unofficial — not affiliated with, endorsed by, or sponsored by Google. "Google Maps" is a trademark of Google LLC.*

### Use it from n8n, MCP, the API or a schedule

Built to be called by a workflow, not only from the Store form. The Actor is `vonsensey/google-maps-reviews-monitor-scraper-api`; every snippet below sends `{}`, which runs the defaults shown on the form — replace it with your own input.

#### n8n

Install the **Apify** community node (`@apify/n8n-nodes-apify` under *Settings → Community Nodes*, or search "Apify" on n8n Cloud). Add **Apify → Run Actor** with Actor `vonsensey/google-maps-reviews-monitor-scraper-api` and your input JSON, then **Apify → Get Dataset Items** on the run's `defaultDatasetId` and pipe the rows anywhere. For scheduled runs, the **On new Apify Event** trigger fires when a run of this Actor finishes.

#### MCP (Claude, Cursor, VS Code, any MCP client)

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=vonsensey/google-maps-reviews-monitor-scraper-api",
      "headers": {
        "Authorization": "Bearer <YOUR_APIFY_TOKEN>"
      }
    }
  }
}
```

Your agent then calls `vonsensey/google-maps-reviews-monitor-scraper-api` as a tool with the same input the form takes and reads the dataset back.

#### REST API (one call, rows in the response)

```bash
curl -X POST "https://api.apify.com/v2/acts/vonsensey~google-maps-reviews-monitor-scraper-api/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" -d '{}'
```

#### Python

```python
from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("vonsensey/google-maps-reviews-monitor-scraper-api").call(run_input={})
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(row)
```

#### JavaScript

```js
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('vonsensey/google-maps-reviews-monitor-scraper-api').call({});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
```

#### Make, Zapier, LangChain, CrewAI

The Apify app in **Make** and **Zapier** has a *Run an Actor* module: pick `vonsensey/google-maps-reviews-monitor-scraper-api`. In **LangChain** and **CrewAI** the Apify tool wrappers take the same Actor id. A daily **schedule** needs nothing but the Console: *Schedules → Create → this Actor → cron*, and the dataset fills on its own.

> **Run it without configuring anything** — [Daily new-review monitor for your Google Maps locations](https://apify.com/vonsensey/google-maps-reviews-monitor-scraper-api/examples/daily-new-review-monitor-for-your-google-maps-locations), a ready-made example you can start as-is or copy.

### Use cases

- **Reputation and CX analytics.** Every review of your locations or a competitor's, one row each, with stars, the exact posted date, the full text, review photos and the owner's reply — straight into a warehouse or an LLM.
- **Review monitoring pipelines.** Put your places on a schedule and receive only the reviews posted since the last run, billed only for those; the monitor adds a row the day a rating, phone, website or hours changes.
- **CRM and lead enrichment.** Feed the Place IDs or Maps URLs you already hold and get back phone, website, category, rating, hours and coordinates at the base price — no search step, no per-id surcharge.
- **Local SEO and listing audits.** Check a portfolio of locations for name, address, category, hours and rating drift, with an honest `partial: true` flag when Google serves the sparse variant of a place.
- **Star and topic breakdowns.** Filter to 1–2 star or text-only reviews to find what a place is criticised for; a review your filter removes is free.
- **Pipelines from n8n, Make or a CSV.** Send `records` and every extra field rides along as `passthrough`, or call the reviews and place-details listings as a warm HTTP endpoint (Standby) that answers from a 128 MB container.

### Run it on a schedule

A one-off pull answers a question; a schedule answers it every day without you. Open **Schedules** in the Apify Console, point a cron at this Actor, and the dataset keeps filling on its own — no server, no cron box, no babysitting. Everything here is built to be re-run: you are billed per record delivered, and a scheduled run that finds nothing new bills nothing on the reviews scraper with *since last run* on, one $0.001 check per place on the monitor (a quiet re-run over 2 places is $0.002, measured), and a normal lookup per place on place details, which has no change-only mode.

### FAQ

#### Do I need a Google API key, a login or a proxy?

No. Every listing reads the pages Google Maps shows to anyone without an account, from Apify's own exit — no API key, no login, no cookies, nothing to configure and nothing to buy on top. One exception, stated plainly: if Google blocks a **review page**, that one page is retried once through Apify residential proxy on your account (about $0.0004 of proxy transfer per retried page at list price; measured 0 blocks in 57 of 57 requests from that exit). Place lookups are never proxied, and a plan without residential proxy simply skips the retry — the place comes back as a free `unavailable` row.

#### Where do I find a Place ID?

In the Google Places API, in most CRM and map exports, or by pasting the place URL from the Google Maps address bar — every listing also takes a **feature id** (`0x…:0x…`), a full **Google Maps place URL** or a **CID**, and all four resolve to the same place. Share links (`maps.app.goo.gl`) are not followed; paste the full URL instead.

#### Can I get all reviews of a place?

Yes. Reviews are paged to exhaustion, one row each, up to the per-place limit you set — measured on a place claiming 10,645 reviews, which came back as 10,649 distinct rows. `sort: relevant` returns Google's own curated order and can stop short of the full set; use `newest` for completeness.

#### What do I pay for a run that finds nothing?

On the reviews scraper with **Only reviews new since the last run** on: nothing — no new reviews, no charge. On the monitor: one place check ($1.00 per 1,000) per place per run, and a place whose rating, phone, website, review count and hours have not moved comes back as a free `unchanged` row, so a quiet morning over 2 places bills $0.002 (measured on two consecutive runs). The place-details scraper has no change-only mode: every place it delivers is billed on every run. An id that does not resolve is always free, on every listing.

#### Does it work outside the US?

Yes — any place on Google Maps, anywhere. `language` and `country` set Google's `hl` / `gl` codes (default en / us), so review text, translations and the place record come back in the language and region you choose.

#### Is this an official Google product?

No. Unofficial — not affiliated with, endorsed by, or sponsored by Google; "Google Maps" is a trademark of Google LLC. It reads only public pages that Google's robots.txt allows, never signs in, and reviewer names, profile URLs and photos are dropped unless you switch **Include reviewer personal data** on.

***

Something wrong, or a field you need that is missing? Open an issue on the **Issues** tab — it is read and it gets fixed. If this saved you time, a rating on the Store page helps the next person find it.

# Actor input Schema

## `places` (type: `array`):

One Place ID, feature id, Maps URL or CID per line. The monitor checks each on every run and reports only what changed. Leave empty to run the built-in example.

## `maxNewReviewsPerPlace` (type: `integer`):

The most new reviews the monitor returns per place per run.

## `personalData` (type: `boolean`):

Off by default. When off, the reviewer's name, profile URL and photo are dropped from every review row.

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

Google language code for review dates and place text, e.g. en, sv, de.

## `country` (type: `string`):

Google country code, e.g. us, se, de.

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

Objects from n8n, Make or a CSV. The Place ID / feature id / URL / CID is found in whichever field is named place, placeId, fid, cid, url or link; every other field rides along and comes back on the row as passthrough.

## `maxCostUsd` (type: `number`):

Optional hard ceiling in USD, e.g. 0.05. The run stops before the charge that would cross it; 0 delivers nothing billable (a dry run).

## Actor input object example

```json
{
  "places": [
    "ChIJ7yR2WH2BhYAR38peOxAXETE",
    "ChIJ4zlZM8aAhYARRTqiavm0Xcs"
  ],
  "maxNewReviewsPerPlace": 20,
  "personalData": false,
  "language": "en",
  "country": "us"
}
```

# Actor output Schema

## `dataset` (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 = {
    "places": [
        "ChIJ7yR2WH2BhYAR38peOxAXETE",
        "ChIJ4zlZM8aAhYARRTqiavm0Xcs"
    ],
    "maxNewReviewsPerPlace": 20,
    "language": "en",
    "country": "us"
};

// Run the Actor and wait for it to finish
const run = await client.actor("vonsensey/google-maps-reviews-monitor-scraper-api").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 = {
    "places": [
        "ChIJ7yR2WH2BhYAR38peOxAXETE",
        "ChIJ4zlZM8aAhYARRTqiavm0Xcs",
    ],
    "maxNewReviewsPerPlace": 20,
    "language": "en",
    "country": "us",
}

# Run the Actor and wait for it to finish
run = client.actor("vonsensey/google-maps-reviews-monitor-scraper-api").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 '{
  "places": [
    "ChIJ7yR2WH2BhYAR38peOxAXETE",
    "ChIJ4zlZM8aAhYARRTqiavm0Xcs"
  ],
  "maxNewReviewsPerPlace": 20,
  "language": "en",
  "country": "us"
}' |
apify call vonsensey/google-maps-reviews-monitor-scraper-api --silent --output-dataset

```

## MCP server setup

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

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/7YttT9XdStRDXUt1G/builds/NFIh2psPgSotuulOX/openapi.json
