# Google Maps Review & Contributor Activity Scraper (`nimbryxo-studio/google-maps-review-and-contributor-activity`) Actor

Get reviews for any Google Maps business or place, or switch to author mode to pull everything one Google reviewer has written. Includes ratings, review text, dates, likes, and owner replies.

- **URL**: https://apify.com/nimbryxo-studio/google-maps-review-and-contributor-activity.md
- **Developed by:** [Nimbryxo-studio](https://apify.com/nimbryxo-studio) (community)
- **Categories:** Automation, Lead generation, SEO tools
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.99 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
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?

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 & Contributor Activity Scraper

Get **Google Maps reviews** for any business, restaurant, hotel, or location — no API key, login, or cookies required. Extract reviewer names, star ratings, full review text, dates, likes, owner replies, and business details, sorted by newest, highest-rated, lowest-rated, or most relevant. Also supports **author mode** to pull everything one Google reviewer has written across every place they've reviewed.

### What this actor does

- **Extracts full review data** — reviewer name, rating, review text, date, likes, owner replies, and photos from any public Google Maps business or location page.
- **Two input formats** — paste a Google Maps place URL directly, or use a canonical Google `ChIJ` Place ID.
- **Author mode** — give a reviewer's public profile and get everything that reviewer has written across Google Maps.
- **Sort control** — request reviews newest-first, highest/lowest rating, or most relevant, with each row flagging whether Google's requested order was actually confirmed.
- **Preserves Google's original relative dates** (e.g. "2 weeks ago") instead of guessing calendar dates.
- **Clean, null-free records** — one row per review; fields Google doesn't expose are omitted rather than left blank.

### Two modes

- **Place mode (default)** — give a business or location and get its reviews. This is the original behaviour and stays the default when `mode` is omitted.
- **Author mode** — give a Google reviewer’s public profile and get the reviews that reviewer has written. Author mode returns up to about ten of that reviewer’s most recent reviews; this is a limit of what Google publishes anonymously, not a setting.

### Input

| Field | Type | Required | Default | Description |
|-------|------|----------|---------|-------------|
| `mode` | enum | No | `place` | `place` for one business or location, `author` for everything one reviewer has reviewed |
| `placeUrl` | string | In `place` mode | — | Google Maps place URL; mobile/country-domain/short-link variants and copied tracking parameters are normalized |
| `placeId` | string | In `place` mode | — | Canonical Google Place ID beginning with `ChIJ`; use instead of `placeUrl` (setting both stops the run with an input error) |
| `contributorUrls` | array | In `author` mode | — | One or more reviewer profile URLs or bare numeric reviewer IDs; profile, reviews, photos and place links are all accepted |
| `contributorUrl` | string | In `author` mode | — | A single reviewer profile URL or bare numeric reviewer ID; same as one entry in `contributorUrls` |
| `maxReviews` | integer | No | 50 | Maximum number of reviews to extract. In author mode Google publishes only about ten of a reviewer’s most recent reviews, so a higher value does not yield more rows |
| `sortBy` | enum | No | `newest` | `relevant`, `newest`, `highest_rating`, or `lowest_rating` (used in `place` mode) |
| `language` | enum | No | `en` | Google Maps interface language |
| `proxyConfiguration` | object | No | — | The actor always uses Apify's Residential proxy group (US exit unless you choose another two-letter `apifyProxyCountry`); other proxy settings are ignored |

### Examples

#### Example: newest reviews from a place URL

```json
{
    "placeUrl": "https://www.google.com/maps/place/Joe's+Pizza/@40.7305137,-73.9968643,17z/data=!3m2!4b1!5s0x89c2599bcc4854cd:0xabc03f64af538b40!4m6!3m5!1s0x89c2599bca4854c5:0x48e61b36c6e9e68!8m2!3d40.7305137!4d-73.9942894!16s%2Fg%2F1tfrzlcv",
    "maxReviews": 30
}
```

#### Example: highest-rated reviews by Place ID

```json
{
  "placeId": "ChIJabtoT7hlwokRLECK0SW3_8I",
  "maxReviews": 100,
  "sortBy": "highest_rating",
  "language": "en"
}
```

#### Example: Japanese review collection

```json
{
  "placeUrl": "https://www.google.com/maps/place/Sushi+no+Midori/@35.6704396,139.7596577,17z/",
  "maxReviews": 50,
  "sortBy": "relevant",
  "language": "ja"
}
```

#### Example: everything one reviewer has reviewed

```json
{
  "mode": "author",
  "contributorUrls": ["https://www.google.com/maps/contrib/102461194647441801965/reviews"],
  "maxReviews": 10,
  "language": "en"
}
```

#### How to Get the Place URL

1. Go to [Google Maps](https://www.google.com/maps)
2. Search for the business or place
3. Click on the place to open its details
4. Copy the URL from your browser's address bar

The URL can be a desktop or mobile Google Maps URL, a supported country-domain URL, or a Google Maps short link. Wrapping quotes and tracking parameters are cleaned automatically.

You may provide a canonical Google Place ID beginning with `ChIJ` in `placeId` instead of `placeUrl`. Feature IDs and CIDs are not accepted as Place IDs.

#### How to Get a Contributor Profile URL

1. Open any review written by the reviewer on [Google Maps](https://www.google.com/maps)
2. Click the reviewer's name to open their contributor profile
3. Copy the URL from your browser's address bar

The profile URL looks like `https://www.google.com/maps/contrib/…`. You can paste the profile link, a `…/reviews`, `…/photos`, or `…/place/…` link, or just the reviewer's numeric ID — all are accepted and cleaned automatically.

### Output per review

Each row in the dataset represents one review. In place mode every row includes the review data and the business context; in author mode every row includes the review data and the reviewer's public profile context. The `recordType` field tells the two apart (`review` for place mode, `authorReview` for author mode).

#### Sample Output

```json
{
    "recordType": "review",
    "reviewId": "ChZDSUhNMG9nS0VJQ0...",
    "reviewerName": "John Smith",
    "reviewerAvatarUrl": "https://lh3.googleusercontent.com/a/...",
    "rating": 5,
    "reviewText": "Best pizza in NYC! The classic slice is perfection.",
    "reviewDateOriginal": "2 weeks ago",
    "likesCount": 3,
    "businessName": "Joe's Pizza",
    "businessRating": 4.5,
    "businessTotalReviews": 12847,
    "businessCategory": "Pizza restaurant",
    "businessAddress": "7 Carmine St, New York, NY 10014",
    "placeUrl": "https://www.google.com/maps/place/Joe's+Pizza/...",
    "sourceUrl": "https://www.google.com/maps/place/Joe's+Pizza/...",
    "sortBy": "newest",
    "sortConfirmed": true,
    "sortStatus": "confirmed",
    "order": 0,
    "scrapedAt": "2026-09-14T12:00:00+00:00"
}
```

#### Sample Author-Mode Output

```json
{
    "recordType": "authorReview",
    "contributorId": "102461194647441801965",
    "contributorName": "Hilarie Sant",
    "contributorAvatarUrl": "https://lh3.googleusercontent.com/a/...",
    "contributorProfileUrl": "https://www.google.com/maps/contrib/102461194647441801965/reviews",
    "contributorLocalGuideLevel": 3,
    "contributorPoints": 154,
    "contributorTotalReviews": 9,
    "placeName": "Especially For You Your Downtown Florist",
    "placeAddress": "221 W 400 S, Salt Lake City, UT 84101, United States",
    "rating": 5,
    "reviewText": "Thank you for the absolutely beautiful flowers and wonderful customer service!",
    "reviewDateOriginal": "2 weeks ago",
    "position": 1,
    "sourceUrl": "https://www.google.com/maps/contrib/102461194647441801965/reviews",
    "scrapedAt": "2026-09-14T12:00:00+00:00"
}
```

#### Output Fields

| Field | Type | Description |
|-------|------|-------------|
| `recordType` | string | `review` in place mode, `authorReview` in author mode |
| `reviewId` | string | Unique review identifier when exposed |
| `reviewerName` | string | Name of the reviewer (place mode) |
| `reviewerAvatarUrl` | string | URL of the reviewer's profile picture (place mode) |
| `reviewerProfileUrl` | string | URL of the reviewer's public profile (place mode) |
| `reviewerSubtitle` | string | Google's subtitle under the reviewer name, e.g. Local Guide level, review and photo counts (place mode) |
| `reviewerLocalGuideLevel` | integer | Reviewer's Local Guide level parsed from the subtitle (place mode) |
| `reviewerTotalReviews` | integer | Reviewer's published review total parsed from the subtitle (place mode) |
| `reviewerPhotoCount` | integer | Number of photos on the reviewer's profile parsed from the subtitle (place mode) |
| `reviewerEmoji` | string | Emoji Google shows next to the reviewer's name (place mode) |
| `rating` | integer | Star rating (1–5) |
| `reviewText` | string | Full review text |
| `reviewLanguage` | string | Language code Google reports for the review text |
| `originalReviewLanguage` | string | Original language code when Google shows a translated review (place mode) |
| `reviewDateOriginal` | string | Date text exactly as Google displayed it |
| `reviewDate` | string | Absolute date only when Google exposed one directly |
| `isEdited` | boolean | Set when Google marks the review as edited |
| `likesCount` | integer | Helpful/like count only when published |
| `businessName` | string | Name of the business (place mode) |
| `businessRating` | number | Overall business star rating (place mode) |
| `businessTotalReviews` | integer | Total number of reviews for the business (place mode) |
| `businessCategory` | string | Business category (place mode) |
| `businessAddress` | string | Business street address (place mode) |
| `contributorId` | string | Reviewer's public numeric ID (author mode) |
| `contributorName` | string | Reviewer's display name (author mode) |
| `contributorAvatarUrl` | string | Reviewer's profile picture (author mode) |
| `contributorProfileUrl` | string | Reviewer's public reviews page (author mode) |
| `contributorLocalGuideLevel` | integer | Reviewer's Local Guide level (author mode) |
| `contributorPoints` | integer | Reviewer's public contribution points (author mode) |
| `contributorTotalReviews` | integer | Reviewer's published review total (author mode) |
| `placeName` | string | Place the reviewer reviewed (author mode) |
| `placeAddress` | string | Address of the reviewed place (author mode) |
| `position` | integer | Position of the review in the reviewer's list (author mode) |
| `reviewPhotoUrls` | array | Photo URLs attached to the review (author mode) |
| `reviewPhotoCount` | integer | Number of photos attached to the review (author mode) |
| `videosInReview` | integer | Number of directly labelled video controls Google exposes on this review card |
| `photosInReview` | array | Photo URLs attached to the review (place mode) |
| `ownerResponseText` | string | Owner reply, when the place replied |
| `ownerResponseDate` | string | Owner reply date converted to an absolute date, when resolvable (place mode) |
| `ownerResponseDateOriginal` | string | Owner reply date text exactly as Google displayed it |
| `contextLabels` | array | Public context labels shown on the review (author mode) |
| `mentionedItems` | array | Public item or aspect chips Google highlights in the review |
| `isVerified` | boolean | Set when Google marks the review with a verified badge |
| `visitDate` | string | Visit date text Google shows on the review, e.g. "Visited in May" |
| `placeId` | string | Canonical Google Place ID beginning with `ChIJ`, when Google exposes one (place and author modes) |
| `featureId` | string | Legacy feature/CID token (`0x…:0x…`), when Google exposes one (place and author modes) |
| `placeUrl` | string | Google Maps place URL |
| `sourceUrl` | string | Source Google Maps URL for the row |
| `sortBy` | string | Requested review order for the row (`relevant`, `newest`, `highest_rating`, `lowest_rating`); place mode only |
| `sortConfirmed` | boolean | `true` only when the requested order was confirmed from Google's own panel; `false` when rows were emitted but the requested order could not be confirmed. Place mode only |
| `sortStatus` | string | Short form of `sortConfirmed`: `confirmed` or `unconfirmed`. Place mode only |
| `order` | integer | Position of the review in results (0-based, place mode) |
| `scrapedAt` | string | ISO 8601 timestamp of when the data was scraped |

### Sort confirmation

`sortedness` is reported on the rows, never assumed. `sortConfirmed` is `true` only
when the panel's own post-click order positively shows the requested order **and**
something distinguishes it from the pre-click default order — the sampled cards
reordered, or Google's relevance window was replaced at the head by its recency
window. For `newest`, an all-identical relative-age window (for example ten
reviews that all read "3 weeks ago") is *compatible* with newest-first and is
confirmed once the panel changed; a window whose ages get newer going down is not
newest-first. For `highest_rating`/`lowest_rating`, a window of equal ratings
cannot distinguish the two orders and is left unconfirmed rather than guessed. A
requested order that could not be confirmed is named in the run's status message
and on every row.

### Place identity

| Field | Type | Description |
|---|---|---|
| `placeId` | string | Canonical Google Place ID beginning with `ChIJ`, when Google exposes one. |
| `featureId` | string | Legacy feature/CID token (`0x…:0x…`), when Google exposes one. |

A canonical `ChIJ…` token is recorded in `placeId`; a legacy `0x…:0x…` token is
recorded in `featureId` and is never relabelled as a Place ID. When both are
observed, the canonical token takes `placeId` and the legacy token is still
recorded as `featureId`. An identity that was never observed is omitted rather
than invented.

### Use cases

- Monitor customer feedback for a business or location.
- Compare review themes and ratings across competitors.
- Follow prolific reviewers and see everything they have reviewed across places.
- Build analysis datasets while preserving Google’s original relative date text.
- Feed public review records into reporting or sentiment-analysis workflows.

### Tips

- **Set `maxReviews` wisely** — higher values take longer but give more data when the public review surface exposes it; place-mode collection is capped at about 30 minutes per run, so very large requests (tens of thousands of reviews) can stop short
- **Author mode is small by design** — Google publishes only about ten of a reviewer's most recent reviews anonymously, so expect about ten rows per profile
- Reviews follow the requested `sortBy` when Google's sort control can be applied; rows whose order couldn't be confirmed carry `sortConfirmed: false`, and the run's status message says how many
- Relative review dates are preserved as observed; the actor never converts them into guessed calendar dates

### Limitations

- Google Maps sometimes exposes a smaller public review window than a place's advertised total review count, especially for very high-volume places. The actor reports exactly how many reviews it actually retrieved rather than padding the dataset.
- Place-mode collection works within an overall budget of about 30 minutes per run; whatever was collected by then is kept.
- The scraper extracts reviews visible on Google Maps — private or filtered reviews are not accessible.
- **Author mode returns at most about ten reviews per profile.** Google's public reviewer pages expose only the most recent handful of reviews with no way to page further; this is a Google limit, not a bug, and the actor reports only the reviews it actually observes.
- **A reviewer's absolute review dates are not published.** Google shows only relative labels such as "2 weeks ago", so author-mode rows keep that label in `reviewDateOriginal` and never invent a calendar date.

You are responsible for using these public reviews lawfully and in line with Google's terms.

### FAQ

**Do I need to provide cookies or sign in?** No. The actor reads Google Maps the way a signed-out visitor does.

**Are relative dates converted to calendar dates?** No. They remain in `reviewDateOriginal` unless Google exposes an absolute date directly.

**Why are some review fields absent?** Google does not publish every field for every review; unavailable values are omitted.

**Can I sort the reviews?** Yes. Choose the supported `sortBy` value such as `newest`, `relevant`, `highest_rating`, or `lowest_rating`. When an explicit order cannot be applied through Google's sort control, the run reports the ignored sort instead of returning relevance-ordered rows as though they were sorted.

**What happens if a place has thousands of reviews but Google only exposes a smaller public window?** The actor goes as far into that public window as it can reach and emits only real reviews it actually observed — it never pads the dataset with invented rows, and it reports honestly if the requested count could not be fully reached.

**How many reviews does author mode return?** About ten of that reviewer's most recent reviews. Google's public reviewer pages only expose that first window and offer no way to page further, so the actor reports exactly what Google shows and never pads the list.

**Do author-mode rows have exact review dates like place mode?** No, and neither does Google. A reviewer's published dates are relative labels such as "3 months ago"; those are kept verbatim in `reviewDateOriginal`, and no calendar date is guessed.

**Is this an official Google product?** No. This is a third-party actor that extracts publicly available data from Google Maps; it is not affiliated with, endorsed by, or operated by Google.

**Can I scrape reviews for a specific Google reviewer instead of a business?** Yes — switch to `mode: "author"` and provide that reviewer's public Google Maps profile URL or numeric ID. You'll get everything they've reviewed, not just one place.

**Do I need a Google API key or billing account?** No. This actor reads Google Maps' public pages directly — no Google Cloud project, API key, or billing setup required.

# Actor input Schema

## `mode` (type: `string`):

What to scrape. "place" collects reviews for one business or location; "author" collects everything one Google reviewer has reviewed.

## `placeUrl` (type: `string`):

Full URL of the Google Maps business/place page to scrape reviews from (mode=place).

## `placeId` (type: `string`):

Canonical Google Place ID beginning with ChIJ (mode=place). Use this instead of placeUrl when available.

## `contributorUrls` (type: `array`):

One or more Google Maps contributor profile URLs or bare numeric contributor IDs (mode=author). Profile, reviews, photos and place links are all accepted and normalized to the reviewer's reviews page.

## `contributorUrl` (type: `string`):

A single Google Maps contributor profile URL or bare numeric contributor ID (mode=author). Equivalent to one entry in contributorUrls.

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

Maximum number of reviews to extract. Set higher for more complete coverage. In author mode Google publishes only about ten of a reviewer's most recent reviews, so higher values do not yield more rows.

## `sortBy` (type: `string`):

Order in which to retrieve reviews (mode=place).

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

Language for Google Maps interface and review text.

## `proxyConfiguration` (type: `object`):

This actor requires Apify's Residential proxy group for reliable access and it cannot be disabled. You may choose a specific two-letter proxy country; other proxy settings are fixed.

## Actor input object example

```json
{
  "mode": "place",
  "placeUrl": "https://www.google.com/maps/place/Masjid+al-Haram/@21.423663,39.8227848,17z/data=!4m14!1m7!3m6!1s0x15c204b74d3fb493:0x55d1f94f8e094785!2sMasjid+al-Haram!8m2!3d21.423658!4d39.8253597!16zL20vMDI0aGJm!3m5!1s0x15c204b74d3fb493:0x55d1f94f8e094785!8m2!3d21.423658!4d39.8253597!16zL20vMDI0aGJm?entry=ttu&g_ep=EgoyMDI2MDIyNS4wIKXMDSoASAFQAw%3D%3D",
  "placeId": "ChIJabtoT7hlwokRLECK0SW3_8I",
  "contributorUrls": [
    "https://www.google.com/maps/contrib/102461194647441801965/reviews"
  ],
  "contributorUrl": "https://www.google.com/maps/contrib/102461194647441801965/reviews",
  "maxReviews": 10,
  "sortBy": "newest",
  "language": "en",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

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

Dataset with scraped Google Maps reviews

# 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 = {
    "mode": "place",
    "placeUrl": "https://www.google.com/maps/place/Masjid+al-Haram/@21.423663,39.8227848,17z/data=!4m14!1m7!3m6!1s0x15c204b74d3fb493:0x55d1f94f8e094785!2sMasjid+al-Haram!8m2!3d21.423658!4d39.8253597!16zL20vMDI0aGJm!3m5!1s0x15c204b74d3fb493:0x55d1f94f8e094785!8m2!3d21.423658!4d39.8253597!16zL20vMDI0aGJm?entry=ttu&g_ep=EgoyMDI2MDIyNS4wIKXMDSoASAFQAw%3D%3D",
    "contributorUrls": [
        "https://www.google.com/maps/contrib/102461194647441801965/reviews"
    ],
    "contributorUrl": "https://www.google.com/maps/contrib/102461194647441801965/reviews",
    "maxReviews": 10,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("nimbryxo-studio/google-maps-review-and-contributor-activity").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 = {
    "mode": "place",
    "placeUrl": "https://www.google.com/maps/place/Masjid+al-Haram/@21.423663,39.8227848,17z/data=!4m14!1m7!3m6!1s0x15c204b74d3fb493:0x55d1f94f8e094785!2sMasjid+al-Haram!8m2!3d21.423658!4d39.8253597!16zL20vMDI0aGJm!3m5!1s0x15c204b74d3fb493:0x55d1f94f8e094785!8m2!3d21.423658!4d39.8253597!16zL20vMDI0aGJm?entry=ttu&g_ep=EgoyMDI2MDIyNS4wIKXMDSoASAFQAw%3D%3D",
    "contributorUrls": ["https://www.google.com/maps/contrib/102461194647441801965/reviews"],
    "contributorUrl": "https://www.google.com/maps/contrib/102461194647441801965/reviews",
    "maxReviews": 10,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("nimbryxo-studio/google-maps-review-and-contributor-activity").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 '{
  "mode": "place",
  "placeUrl": "https://www.google.com/maps/place/Masjid+al-Haram/@21.423663,39.8227848,17z/data=!4m14!1m7!3m6!1s0x15c204b74d3fb493:0x55d1f94f8e094785!2sMasjid+al-Haram!8m2!3d21.423658!4d39.8253597!16zL20vMDI0aGJm!3m5!1s0x15c204b74d3fb493:0x55d1f94f8e094785!8m2!3d21.423658!4d39.8253597!16zL20vMDI0aGJm?entry=ttu&g_ep=EgoyMDI2MDIyNS4wIKXMDSoASAFQAw%3D%3D",
  "contributorUrls": [
    "https://www.google.com/maps/contrib/102461194647441801965/reviews"
  ],
  "contributorUrl": "https://www.google.com/maps/contrib/102461194647441801965/reviews",
  "maxReviews": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}' |
apify call nimbryxo-studio/google-maps-review-and-contributor-activity --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,nimbryxo-studio/google-maps-review-and-contributor-activity"
        }
    }
}
```

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/SScmkjFpc4NuTczgt/builds/ym9EN6ySex5hEUl7Z/openapi.json
