# Google Maps Contributor Scraper (`aboo.script/google-maps-contributor-scraper`) Actor

\[💰$2 / 1K] ⚡ Fast Google Maps contributor scraper. No login, no API key. Paste any Local Guide profile URL and get name, level, points, contribution counts and up to 200 newest reviews with rating, text, dates, photos, owner replies, dining details and place data with GPS.

- **URL**: https://apify.com/aboo.script/google-maps-contributor-scraper.md
- **Developed by:** [Aboo Script](https://apify.com/aboo.script) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.40 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
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 Contributor Scraper

**Google Maps Contributor Scraper** extracts Google Maps contributor profiles and the reviews they wrote into clean, structured data you can download as JSON, CSV, Excel, or HTML. Paste a Google Maps contributor (Local Guide) profile URL, and get the contributor name, Local Guide level, points, contribution counts, and their full review history with ratings, text, dates, photos, owner replies, and place details. No account or login required.

### Introduction

[Google Maps](https://www.google.com/maps) is the world's most used map and local review platform. Every reviewer has a public contributor profile that lists their Local Guide level, points, and all the reviews, ratings, and photos they shared about restaurants, hotels, shops, and services.

This actor collects the same public information you see on a contributor profile and turns it into a ready-to-use dataset. It is a simple Google Maps contributor API alternative: run it once, schedule it to run daily, or connect it to your own tools.

### What data can you extract from Google Maps contributor profiles?

- 👤 Contributor name, ID, profile URL, and profile picture
- 🏅 Local Guide status, level, points, points needed for the next level
- 📊 Contribution counts: reviews, ratings, photos, videos, answers, edits, places added, and more
- ⭐ Review rating, full text, language, and likes
- 📅 Review publish and update dates (ISO format) plus the relative date shown on Google Maps
- 🍽️ Review details such as order type, meal type, price per person, and food, service, and atmosphere scores
- 🖼️ Photos attached to each review
- 💬 Owner response text and date
- 📍 Reviewed place: name, place ID, Google Maps URL, address, city, country, categories, rating, review count, and coordinates

### Use Cases

- 🛡️ **Fake review detection**: check the history of a reviewer before trusting a review, and spot suspicious patterns across places.
- 🏪 **Reputation management**: understand who reviews your business, how they review others, and how owners reply.
- 📈 **Market research**: see which places and categories active Local Guides visit and how they rate them.
- 🤝 **Influencer and Local Guide outreach**: find high-level Local Guides with many reviews and photos in your area.
- 🤖 **AI and automation**: feed clean, structured review data into spreadsheets, dashboards, or AI workflows.

### How to scrape Google Maps contributor reviews step by step

1. Paste one or more Google Maps contributor profile URLs into **Contributor URLs**.
2. Set **Maximum reviews per contributor** to how many reviews you want from each profile.
3. Click **Start** and wait for the run to finish.
4. Download your data in JSON, CSV, Excel, or HTML from the **Output** tab.

To find a contributor URL, click a reviewer's name or picture on any Google Maps review. The link looks like `https://www.google.com/maps/contrib/109736708296406538146`.

### Input

- **Contributor URLs**: Google Maps contributor profile URLs. Links to the profile, its **Reviews** tab, or its **Photos** tab all work, with or without map coordinates in the link.
- **Maximum reviews per contributor**: how many reviews to collect from each profile, newest first. Set `0` to get every review Google Maps shows (up to 200).

### Input Examples

Scrape the newest reviews of one contributor:

```json
{
  "startUrls": [
    { "url": "https://www.google.com/maps/contrib/109736708296406538146/reviews" }
  ],
  "maxResults": 5
}
```

### Output

Each review is saved as one item in the dataset, together with the contributor profile. Here is an example of a single item:

```json
{
  "url": "https://www.google.com/maps/reviews/data=!4m8!14m7!1m6!2m5!1sChdDSUhNMG9nS0VJQ0FnSUNMOU5fUS1BRRAB!2m1!1s0x0:0xc758b7dcd458a602!3m1!1s2@1:CIHM0ogKEICAgICL9N_Q-AE%7C%7C",
  "reviewId": "ChdDSUhNMG9nS0VJQ0FnSUNMOU5fUS1BRRAB",
  "contributorId": "109736708296406538146",
  "contributorName": "K.A",
  "contributorUrl": "https://www.google.com/maps/contrib/109736708296406538146/reviews",
  "contributorAvatar": "https://lh3.googleusercontent.com/a-/ALV-UjWgDSd-336OyI2fxq87o3SPcMEUtaqHSDNyK1ZZVa7SvSSVz3SG4Q",
  "isLocalGuide": true,
  "localGuideLevel": 8,
  "points": 23099,
  "nextLevelPoints": 50000,
  "pointsToNextLevel": 26901,
  "contributions": {
    "reviews": 607,
    "ratings": 3,
    "photos": 1844,
    "videos": 92,
    "captions": 0,
    "tips": 0,
    "answers": 2712,
    "edits": 3,
    "reportedIncorrect": 0,
    "placesAdded": 3,
    "roadsAdded": 0,
    "questionsAndAnswers": 0,
    "tripFeedback": 5,
    "incidentReports": 13
  },
  "rating": 3,
  "text": "For some odd reason, the server just gave off a very cold vibe during our whole encounter, no clue why. ...",
  "language": "en",
  "publishedAt": "2024-06-16T00:26:37.520Z",
  "updatedAt": "2024-06-16T00:26:37.520Z",
  "publishedAtText": "2 years ago",
  "likes": 1,
  "photos": [
    "https://lh3.googleusercontent.com/grass-cs/AABkmLdnTI7RQZT-I4QmAFlRt_6lLiGaHQT8xMtjftF0uWOJrmCyk_3m4yv9gscCHvd_Vj6bAYp11rMbYei3jE9Rs9fZ49oBV0PypEdKmHKZYOA9lIxP7lg9VLi4lByQ1EuOFYhS2AA"
  ],
  "details": [
    { "name": "Order type", "value": "Dine in" },
    { "name": "Meal type", "value": "Lunch" },
    { "name": "Price per person", "value": "$10–20" },
    { "name": "Food", "value": "3" },
    { "name": "Service", "value": "3" },
    { "name": "Atmosphere", "value": "4" },
    { "name": "Parking space", "value": "Plenty of parking" },
    { "name": "Parking options", "value": "Free parking lot" }
  ],
  "ownerResponse": "Thank you for sharing your experience with us. We sincerely apologize for the cold and unwelcoming service you received during your visit. ...",
  "ownerResponseAt": "2024-06-16T16:17:19.000Z",
  "placeName": "Fujiya Ramen",
  "placeId": "ChIJg4OcdhallVQRAqZY1Ny3WMc",
  "placeUrl": "https://www.google.com/maps/place/?q=place_id:ChIJg4OcdhallVQRAqZY1Ny3WMc",
  "placeAddress": "19215 SE 34th St #100, Camas, WA 98607",
  "placeCity": "Vancouver",
  "placeCountry": "United States",
  "placeCountryCode": "US",
  "placeCategories": ["Ramen", "Japanese"],
  "placeRating": 4.1,
  "placeReviewCount": 254,
  "latitude": 45.5964242,
  "longitude": -122.4766227
}
```

You can download the dataset in JSON, CSV, Excel, XML, or HTML, or access it through the Apify API.

### Notes

- Google Maps shows at most the 200 newest reviews of a contributor without signing in, so each profile returns up to 200 reviews.
- The number of reviews returned can be lower than the review count on the profile, because Google hides some reviews (for example removed or filtered ones). Star-only ratings without text are included as reviews with an empty `text`.
- Contributors who made their profile private, or profile links that do not exist, are skipped with a warning.
- Only contributor profile URLs are supported. Place, search, and other Google Maps URLs are skipped.
- A contributor without public reviews still returns one item with the profile data and empty review fields.
- Relative dates (`publishedAtText`) are in English. Review text stays in the language the reviewer wrote it in.
- Fields such as `ownerResponse`, `details`, and `photos` are empty when the review does not have them.

### Why use the Google Maps Contributor Scraper?

- ✅ **No login needed**: works with public profile data only, so there is no Google account to manage.
- ⚡ **Fast and light**: one profile with 200 reviews takes only a few seconds.
- 🧹 **Clean data**: numbers are real numbers, dates use one standard format, and every review is linked to its place with a place ID and coordinates.
- 💸 **Pay for what you need**: set a review limit per contributor and keep every run small and cheap.
- 🔄 **Ready for automation**: schedule runs, export to Google Sheets, or connect to Make, Zapier, and n8n.

### FAQ

#### How many reviews can I scrape?

Up to 200 of the newest reviews per contributor. Add as many contributor URLs as you need in one run.

#### Do I need a Google account?

No. The actor only collects publicly available data. You do not need to log in or provide any account details.

#### Can I scrape data on a schedule?

Yes. Use Apify Schedules to run the actor every hour, day, or week, and get fresh data automatically.

#### Can I request a new feature or filter?

Yes. Right now the actor supports contributor profile URLs. If you need other inputs, such as finding reviewers from a place page, or extra data such as all profile photos, get in touch and they can be added.

#### Can I get a custom or private version?

Yes. The actor can be customized for your workflow, delivered as a private version, or a new scraper can be built for a different website. Use the contact details below.

### Need to scrape other review platforms?

- [Agoda Reviews Scraper](https://apify.com/aboo.script/agoda-reviews-scraper): hotel reviews from Agoda with ratings, traveler type, and hotel replies.
- [Viator Reviews Scraper](https://apify.com/aboo.script/viator-reviews-scraper): reviews of tours and activities on Viator.
- [Tiqets Reviews Scraper](https://apify.com/aboo.script/tiqets-reviews-scraper): reviews of attractions and tickets on Tiqets.
- [Fever Event Reviews Scraper](https://apify.com/aboo.script/feverup-reviews-scraper): reviews of events and experiences on Fever.
- [Fragrantica Reviews Scraper](https://apify.com/aboo.script/fragrantica-reviews-scraper): perfume reviews from Fragrantica.

***

**Need help or want a custom solution?**

- 📧 Email: aboo.script@gmail.com
- 🧩 More scrapers: [Apify profile](https://apify.com/aboo.script)

# Actor input Schema

## `startUrls` (type: `array`):

Google Maps contributor profile URLs, for example https://www.google.com/maps/contrib/109736708296406538146 (the /reviews and /photos tabs work too).

## `maxResults` (type: `integer`):

Maximum number of reviews to scrape per contributor, newest first. Google Maps shows up to the 200 most recent reviews of a profile. Set 0 to get all of them.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.google.com/maps/contrib/109736708296406538146/reviews"
    }
  ],
  "maxResults": 5
}
```

# Actor output Schema

## `overview` (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 = {
    "startUrls": [
        {
            "url": "https://www.google.com/maps/contrib/109736708296406538146/reviews"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("aboo.script/google-maps-contributor-scraper").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 = { "startUrls": [{ "url": "https://www.google.com/maps/contrib/109736708296406538146/reviews" }] }

# Run the Actor and wait for it to finish
run = client.actor("aboo.script/google-maps-contributor-scraper").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 '{
  "startUrls": [
    {
      "url": "https://www.google.com/maps/contrib/109736708296406538146/reviews"
    }
  ]
}' |
apify call aboo.script/google-maps-contributor-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,aboo.script/google-maps-contributor-scraper"
        }
    }
}
```

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/QyCQq5HIrSOkp6LJz/builds/f6tcjumlMOi9nuXwI/openapi.json
