# Google Maps Contributor & Local Guide Reviews Scraper (`unitbytes/google-maps-contributor-scraper`) Actor

Extract complete Google Maps Contributor & Local Guide profiles, reviews, ratings, levels, points, badges, and places visited. Fast, 100% reliable, and export-ready for Excel, CSV, Google Sheets, or any Database.

- **URL**: https://apify.com/unitbytes/google-maps-contributor-scraper.md
- **Developed by:** [UnitBytes | Enterprise Web Data](https://apify.com/unitbytes) (community)
- **Categories:** SEO tools, Lead generation, Automation
- **Stats:** 3 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.20 / 1,000 contributor profiles

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

<p align="center">
  <img src="https://unitbytes.com/assets/banners/unitbytes-google-maps-contributor-local-guide-scraper-banner.jpg" alt="Google Maps Contributor & Local Guide Reviews Scraper by UnitBytes" width="100%" />
</p>

## 🗺️ Google Maps Contributor & Local Guide Reviews Scraper

<p align="center">
  <a href="https://console.apify.com/actors/fQmUF4KtQ3dcQWNYh?addFromActorId=fQmUF4KtQ3dcQWNYh" target="_blank">
    <img src="https://raw.githubusercontent.com/unitbytes-com/1688-Wholesale-Scraper-API/main/try-it-free-now.svg" width="260" height="52" alt="Try it Free Now">
  </a>
  <br>
  <sub>⚡ <b>Instant Test:</b> Paste any profile link to see live Local Guide stats & reviews • Ready in seconds</sub>
</p>

<table>
  <tr>
    <td colspan="3" style="padding:10px 14px;background:#1E88E5;color:#FFFFFF;font-size:13px;font-weight:700;border-radius:6px 6px 0 0">
      ⚡ UnitBytes · Google Maps &amp; Local Business Intelligence Ecosystem
    </td>
  </tr>
  <tr>
    <td style="padding:10px 12px;border:1px solid #E2E8F0;background:#EBF5FF;vertical-align:top;width:33.3%">
      <span style="white-space:nowrap">🗺️ <b><a href="https://console.apify.com/actors/fQmUF4KtQ3dcQWNYh?addFromActorId=fQmUF4KtQ3dcQWNYh" style="color:#1E88E5;text-decoration:none;font-size:13px">Contributor Reviews Scraper</a></b></span><br>
      <span style="color:#1D4ED8;font-size:11px;font-weight:700">📍 You are here</span><br>
      <span style="color:#64748B;font-size:11px">Local Guide stats, points &amp; complete reviews</span>
    </td>
    <td style="padding:10px 12px;border:1px solid #E2E8F0;background:#FAFAFA;vertical-align:top;width:33.3%">
      <span style="white-space:nowrap">📸 <b><a href="https://apify.com/unitbytes/google-maps-contributor-photos-scraper" style="color:#0F172A;text-decoration:none;font-size:13px">Contributor Photos Scraper</a></b></span><br>
      <span style="color:#2563EB;font-size:11px;font-weight:600">Visual Portfolio Intelligence</span><br>
      <span style="color:#64748B;font-size:11px">Extract high-res photos, upload dates &amp; places</span>
    </td>
    <td style="padding:10px 12px;border:1px solid #E2E8F0;background:#FAFAFA;vertical-align:top;width:33.3%">
      <span style="white-space:nowrap">🔍 <b><a href="https://apify.com/unitbytes/google-maps-reviews-tracker" style="color:#0F172A;text-decoration:none;font-size:13px">Google Reviews Tracker</a></b></span><br>
      <span style="color:#2563EB;font-size:11px;font-weight:600">Reputation &amp; Review Audit</span><br>
      <span style="color:#64748B;font-size:11px">Track deleted, edited &amp; removed reviews</span>
    </td>
  </tr>
</table>

***

#### 🚀 Extract any Google Maps reviewer's full profile and up to 200 reviews directly into Excel, CSV, or Google Sheets in under 2 seconds.

Ever wanted to see **all reviews written by a specific person on Google Maps**, verify if a reviewer is a real Local Guide, or audit suspicious 1-star reviews hitting your business?

Google gives you no way to export this data, and checking manually takes hours. **This tool does it in 2 simple clicks:**

1. **[Paste any Google Maps contributor link](https://console.apify.com/actors/fQmUF4KtQ3dcQWNYh?addFromActorId=fQmUF4KtQ3dcQWNYh)** (or numeric User ID)
2. **Click Start** — and download your ready-to-use **Excel (.xlsx)** or **CSV** spreadsheet!

***

> ⭐ **Loving this Scraper?**\
> If this tool saved you hours of work, please support us with a **[5-Star Rating on the Apify Store](https://apify.com/unitbytes/google-maps-contributor-scraper)**! It directly helps us keep this tool actively maintained and updated.
>
> 💬 **Need Help, Custom Enhancements, Bug Reports, or Bulk Scraping?**\
> Have a question, want a specific data format, or encountered a bug? Email us directly at **<contact@unitbytes.com>** or open a ticket in the **[Apify Issues Tab](https://apify.com/unitbytes/google-maps-contributor-scraper/issues)** — we respond fast!

***

#### ⭐ Why Users Love This Tool:

- ⚡ **Lightning Fast:** Extracts up to 200 reviews in **~1.5 seconds** without slow browser waiting or freezing.
- 📊 **100% No-Code & Spreadsheet Ready:** Open directly in Microsoft Excel, Google Sheets, or CSV with clean columns.
- 🏆 **Complete Local Guide Intel:** Uncover Local Guide Level (1–10), total points, badges, and lifetime contribution stats.
- 🔗 **Verified Review Permalinks:** Direct clickable URLs leading straight to every single review on Google Maps.
- 📍 **Full Location Details:** Complete place names, business categories, addresses, city, country, price range, and direct place links.
- 💰 **Fair Pay-Per-Event:** Pay only for what you scrape. Zero monthly subscription lock-in.

***

### ❓ What Problem Does This Solve?

Google Maps offers **no export button** to inspect reviewer profiles, audit Local Guide history, or retrieve reviews written by a specific user. Whether you are vetting reviewer credibility, uncovering influencer journeys, or auditing suspicious review attacks, manual analysis is virtually impossible at scale.

This Actor accepts **Google Maps Contributor URLs**, **reviews tab links**, **share shortlinks**, or **numeric User IDs** and delivers clean, structured data ready for Excel, CSV, or database storage:

- 🏆 **Local Guide Intelligence:** Uncover Local Guide Level (1 to 10), total points, target points needed for the next level, and official badge icon.
- 📊 **Lifetime Contribution Counters:** Public counts of written reviews, ratings, uploaded photos, videos, answers, and approved map edits.
- 👤 **Profile Identity:** Public display name, avatar photo, and verified user ID.
- 📜 **Full Reviews History:** Detailed review text, star ratings (1–5), direct permanent review links, publication dates, and attached high-resolution photos.
- ⏰ **Exact Dates & Timestamps:** Microsecond-precision timestamps and ISO 8601 UTC dates for timeline and trend analysis.
- 📍 **Place & Location Details:** Place name, business category, street address, city, country, price range, and direct place links.
- 🍽️ **Dining & Experience Aspects:** Reviewer-reported dining mode (Dine-in / Takeout), meal type (Brunch / Dinner), spend per person, and food/service/atmosphere scores.
- 💬 **Business Owner Responses:** Extracts the owner's response text and reply date whenever a business responded.
- 🛡️ **Privacy & Status Detection:** Identifies active profiles, private accounts, and invalid links without crashing.

***

### 🥊 Why Choose This Scraper? (Feature Comparison)

| Capability | 🗺️ **This Actor** | Other Scrapers | Legacy Tools |
|---|:---:|:---:|:---:|
| **Speed** | ⚡ **~1.5 seconds per profile** | 10–30s per profile | 1–3 minutes |
| **Reliability** | **100% Stable (Zero freezing or crashes)** | Moderate | Frequently crashes or times out |
| **Spreadsheet Ready** | ✅ **Excel (.xlsx), CSV, Google Sheets** | ⚠️ JSON only | ⚠️ Inconsistent columns |
| **Exact Review Timestamps** | ✅ **Exact UTC timestamp & epoch ms** | ❌ Fuzzy text only ("3 weeks ago") | ❌ Fuzzy text only |
| **Direct Review Permalinks** | ✅ **Yes (direct link to review)** | ❌ Missing | ❌ Missing |
| **Direct Place Links & Details** | ✅ **Place URL, city, country, price** | ❌ Basic name only | ⚠️ Incomplete |
| **Review Aspects & Sub-scores** | ✅ **Food, service, atmosphere scores** | ❌ Missing | ❌ Missing |
| **Review Photo URLs** | ✅ **Complete high-res photos array** | ⚠️ Partial | ❌ Omitted |
| **Business Owner Replies** | ✅ **Full reply text & date** | ⚠️ Inconsistent | ❌ Missing |
| **Complete Local Guide Metrics** | ✅ **Level, points, next tier, badge** | ⚠️ Partial | ❌ Often missed |
| **Pricing Model** | 💰 **Fair Pay-Per-Event (no wasted credits)** | High monthly fees | High server compute costs |

***

### 📦 Two Flexible Export Formats

You can choose your preferred output structure under the **Output Format** setting:

#### 1. `flattened` (Default — 1 Row per Review)

- **Best for:** Microsoft Excel, Google Sheets, CSV, Airtable, or SQL databases.
- **Ready to Open:** Each row contains a single review together with the reviewer's full profile information. Non-technical users get clean, readable spreadsheet columns without needing to parse nested data.
- **Automatic Handling:** If a profile has 15 reviews, it produces 15 spreadsheet rows. If a profile is private or has 0 reviews, it outputs 1 row with their public profile stats and `status: "PRIVATE"`.

#### 2. `nested` (1 Document per Contributor)

- **Best for:** Developers, APIs, JSON exports, and CRM pipelines.
- **Clean Document Hierarchy:** Each document represents 1 contributor profile containing a complete `reviews: [...]` list of all their reviews. Ideal for storing contributor profiles as distinct documents in MongoDB, PostgreSQL (JSONB), or feeding directly into custom web applications.
- **Python & Data Science:** Easy to group or iterate by contributor profile without deduplicating profile metadata.

***

#### Spreadsheet Columns / Fields

| Field Name | Type | Description |
| :--- | :--- | :--- |
| `contributor_name` | string | null | Public display name of the reviewer |
| `contributor_id` | string | Google Maps 21-digit numeric user ID |
| `contributor_url` | string | Direct canonical link to the contributor profile |
| `avatar_url` | string | null | Profile avatar image URL |
| `is_local_guide` | boolean | `true` if the contributor is a verified Local Guide |
| `local_guide_level` | integer | null | Local Guide tier (1 to 10) |
| `local_guide_points` | integer | null | Total accumulated Local Guide points |
| `points_to_next_level`| integer | null | Points needed to reach the next tier |
| `badge_url` | string | null | Official Local Guide badge icon link |
| `total_reviews_count` | integer | null | Lifetime reviews written |
| `total_ratings_count` | integer | null | Lifetime star ratings submitted without text |
| `total_photos_count` | integer | null | Total photos contributed |
| `total_videos_count` | integer | null | Total videos contributed |
| `total_answers_count` | integer | null | Total community answers |
| `total_edits_count` | integer | null | Total approved map edits |
| `is_private` | boolean | `true` if the profile has private/restricted contributions |
| `status` | string | `"ACTIVE"`, `"PRIVATE"`, `"NOT_FOUND"`, or `"UNKNOWN"` |
| `review_id` | string | null | Unique Google Maps review ID |
| `place_name` | string | null | Name of the reviewed business or landmark |
| `place_category` | string | null | Business category (e.g. `"Cafe"`, `"Restaurant"`) |
| `place_address` | string | null | Physical street address |
| `place_id` | string | null | Google Place ID (CID) |
| `place_url` | string | null | Direct Google Maps link to the reviewed business |
| `place_city` | string | null | City of the reviewed place |
| `place_country` | string | null | Country of the reviewed place |
| `place_price_range` | string | null | Price level or cost per person (e.g. `"$10–20"`) |
| `latitude` | float | null | GPS latitude |
| `longitude` | float | null | GPS longitude |
| `stars` | integer | null | Star rating given (1 to 5) |
| `review_date` | string | null | Relative review date (e.g. `"a week ago"`, `"3 months ago"`) |
| `review_timestamp` | integer | null | **Exact Unix timestamp in milliseconds** (e.g. `1788632301000`) |
| `review_datetime_utc` | string | null | **Exact publication ISO 8601 UTC timestamp** (e.g. `"2026-09-05T18:18:21+00:00"`) |
| `review_text` | string | null | Full text content of the review |
| `review_permalink` | string | null | **Direct Google Maps permalink** to this specific review |
| `contrib_place_url` | string | null | Contributor place URL on Google Maps |
| `photos` | array | High-resolution photo URLs attached to this review. *(For full standalone photo galleries, see [Contributor Photos Scraper](https://apify.com/unitbytes/google-maps-contributor-photos-scraper))* |
| `dining_mode` | string | null | Dining mode reported by reviewer (`"Dine in"`, `"Take out"`, `"Delivery"`) |
| `meal_type` | string | null | Meal type reported by reviewer (`"Brunch"`, `"Dinner"`, `"Lunch"`) |
| `spend_per_person` | string | null | Reported spend per person range (e.g. `"$50–60"`) |
| `food_rating` | integer | null | Guided food quality rating (1 to 5) |
| `service_rating` | integer | null | Guided service rating (1 to 5) |
| `atmosphere_rating` | integer | null | Guided atmosphere rating (1 to 5) |
| `review_aspects` | object | Complete dictionary of all guided review questions and answers |
| `has_owner_reply` | boolean | `true` if the business owner replied to this review |
| `owner_reply` | string | null | Text of the business owner's response |
| `owner_reply_date` | string | null | Relative date of the business owner's reply |
| `owner_reply_timestamp` | integer | null | Exact owner reply Unix timestamp in milliseconds |
| `owner_reply_datetime_utc` | string | null | Exact owner reply ISO 8601 UTC timestamp |
| `error` | string | null | Error details if applicable |
| `timestamp` | string | ISO 8601 scrape timestamp |

***

### 🎯 High-Value Use Cases

#### 🌟 Local Influencer & Ambassador Outreach

Identify high-tier Local Guides (Levels 6–10) in your city or industry. Inspect their review style, photo uploads, and place preferences to discover trusted community brand ambassadors and food critics.

#### 🛡️ Review Fraud Detection & Reputation Defense

Audit reviewers to determine account legitimacy. Quickly differentiate between authentic local contributors with genuine reviews and fake burner accounts created solely to post negative reviews.

#### 🏢 Customer Feedback & Competitor Intelligence

Monitor top reviewers in your sector, discover where else your customers dine or shop, and analyze how competing business owners respond to reviewer feedback.

#### 📈 Local SEO & Citation Audits

Analyze how active Local Guides review businesses in your category, identify trending keywords, and understand what influences high-ranking local recommendations.

***

### 🔗 Supported Input Formats

Paste any of these formats and the Actor automatically resolves the canonical user profile:

1. **Standard Contributor Profile URLs:**\
   `https://www.google.com/maps/contrib/102520373756565203865`

2. **Tabbed Profile Links:**\
   `https://www.google.com/maps/contrib/102520373756565203865/reviews`\
   `https://www.google.com/maps/contrib/102520373756565203865/photos`

3. **Extended URLs with Map Coordinates & Query Parameters:**\
   `https://www.google.com/maps/contrib/102520373756565203865/reviews/@40.6925847,-74.1578387,11z/data=!4m3!8m2!3m1!1e1?hl=en-GB&entry=ttu&g_ep=EgoyMDI2MDkwOS4wIKXMDSoASAFQAw%3D%3D`

4. **Shortened Share Links:**\
   `https://maps.app.goo.gl/...`

5. **Raw Numeric User IDs:**\
   `102520373756565203865`

***

### ⚙️ Input Configuration

| Parameter | Type | Required | Default | Description |
| :--- | :--- | :---: | :--- | :--- |
| `contributors` | array | **Yes** | *None* | List of Google Maps contributor URLs, tab links, extended coordinate links, shortlinks, or numeric User IDs. |
| `maxReviews` | integer | No | `200` | Maximum number of reviews to extract per profile (0 to 200). Extracts up to this limit or total public reviews available in a single high-speed call. |
| `scrapeReviews` | boolean | No | `true` | When enabled, extracts the detailed `reviews` array. If disabled, extracts profile stats only. |
| `outputFormat` | string | No | `"flattened"` | Choose `"flattened"` (1 row per review, perfect for Excel/CSV) or `"nested"` (1 document per profile with a complete `reviews: [...]` array). |
| `language` | string | No | `"en"` | Language code for Google Maps localized strings (e.g. `"en"`, `"es"`, `"fr"`, `"de"`). |
| `country` | string | No | `"us"` | Country code for localized place info and regional bias (e.g. `"us"`, `"gb"`, `"fr"`, `"de"`). |
| `proxyConfiguration` | object | No | `{"useApifyProxy": true}` | Apify residential proxies are recommended to avoid rate limits and 403 blocks. |
| `maxConcurrency` | integer | No | `3` | Number of contributor profiles scraped concurrently (1 to 10). |
| `maxProxyRetries` | integer | No | `5` | Automatic proxy IP rotation retries upon rate limits or temporary blocks. |

***

#### Example Output Record (Single Row in Excel / JSON)

```json
{
  "contributor_name": "Reema Mulchandani",
  "contributor_id": "102520373756565203865",
  "contributor_url": "https://www.google.com/maps/contrib/102520373756565203865/reviews",
  "avatar_url": "https://lh3.googleusercontent.com/a-/ALV-UjXc8pSarhgq2xG0mE6F3j...",
  "is_local_guide": true,
  "local_guide_level": 7,
  "local_guide_points": 8119,
  "points_to_next_level": 15000,
  "badge_url": "https://maps.gstatic.com/mapfiles/localguides/badges/18px/level7.png",
  "total_reviews_count": 113,
  "total_ratings_count": 11,
  "total_photos_count": 878,
  "total_videos_count": 21,
  "total_answers_count": 557,
  "total_edits_count": 0,
  "is_private": false,
  "status": "ACTIVE",
  "review_id": "Ci9DQUlRQUNvZENodHljRjlvT2psaGVHNUNWMkpPYlRWVFdqZ3RMVXRmWTJOMk0yYxAB",
  "place_name": "Juhu Cafe",
  "place_category": "Cafe",
  "place_address": "517 Union Blvd Unit B, Totowa, NJ 07512",
  "place_id": "ChIJv8t4KBT_wokRCf-EIyWAT54",
  "place_url": "https://www.google.com/maps/place//data=!4m2!3m1!1s0x89c2ff142878cbbf:0x9e4f80252384ff09",
  "place_city": "Totowa",
  "place_country": "United States",
  "place_country_code": "US",
  "place_price_range": "$10–20",
  "latitude": 40.901379,
  "longitude": -74.216956,
  "stars": 5,
  "review_date": "2 weeks ago",
  "review_timestamp": 1788632301325,
  "review_datetime_utc": "2026-09-05T18:18:21+00:00",
  "review_text": "Juhu Cafe is a wonderful new addition to the area. The beachy atmosphere is bright and welcoming...",
  "review_permalink": "https://www.google.com/maps/reviews/data=!4m8!14m7!1m6!2m5!1sCi9DQUlRQUNvZENodHljRjlvT2psaGVHNUNWMkpPYlRWVFdqZ3RMVXRmWTJOMk0yYxAB!2m1!1s0x0:0x9e4f80252384ff09",
  "contrib_place_url": "https://www.google.com/maps/contrib/102520373756565203865/place/ChIJv8t4KBT_wokRCf-EIyWAT54",
  "photos": [
    "https://lh3.googleusercontent.com/grass-cs/ACvplmNaKbdVwMT1TibHnx1u8sfePPuH8hInF7w7ROzAMp5U..."
  ],
  "dining_mode": "Dine in",
  "meal_type": "Brunch",
  "spend_per_person": "$50–60",
  "food_rating": 5,
  "service_rating": 5,
  "atmosphere_rating": 5,
  "review_aspects": {
    "mode": "Dine in",
    "meal_type": "Brunch",
    "price_range": "$50–60",
    "food_aspect": 5,
    "service_aspect": 5,
    "atmosphere_aspect": 5
  },
  "has_owner_reply": true,
  "owner_reply": "Thanks so much for such a thoughtful review, Reema! We’re so glad you enjoyed your visit.",
  "owner_reply_date": "2 weeks ago",
  "owner_reply_timestamp": 1788640170000,
  "owner_reply_datetime_utc": "2026-09-05T20:29:30+00:00",
  "error": null,
  "timestamp": "2026-09-25T11:00:00.000Z"
}
```

***

### 💰 Fair Pay-Per-Event (PPE) Pricing

This Actor uses Apify's **Pay-Per-Event (PPE)** monetization model. You only pay for successful data extracted, with zero waste on idle server compute:

- **Per Contributor Profile (`profile` event):** Charged per contributor profile processed. Covers full profile identity, Local Guide badges, level, points, and lifetime contribution metrics (even if the profile has restricted/private contributions).
- **Per Review Extracted (`review` event):** Scales dynamically based on the exact number of detailed reviews successfully extracted.

#### Why Pay-Per-Event Saves You Money:

- **No Wasted Compute:** If a contributor only has 12 reviews, you are only charged for 12 reviews — not an arbitrary batch package.
- **Private Profiles Protection:** If a contributor profile is private or has 0 public reviews, you are only charged for the profile lookup.
- **No Monthly Lock-in:** Use it on-demand whenever you need it.

*You can view the current per-event rates under the **Pricing** tab above.*

***

### 🚀 Quick Start & Integration

#### 1. No-Code Web Console (Excel, CSV, or Google Sheets)

1. **Paste Your Profiles:** Paste any Google Maps contributor URLs, extended links, or numeric User IDs into the `contributors` box.
2. **Choose Review Limit:** Leave `maxReviews` at `200` to grab all recent reviews, or adjust as needed.
3. **Click Start:** Hit the green **Start** button and let the scraper run (typically 1–2 seconds per profile).
4. **Export in 1 Click:** Under the **Export** tab, click **Excel** or **CSV** to download your ready-to-use spreadsheet.

***

#### 2. Run via Python (`apify-client`)

```python
from apify_client import ApifyClient

## Initialize the ApifyClient with your API token
client = ApifyClient("YOUR_APIFY_API_TOKEN")

## Prepare Actor input
run_input = {
    "contributors": [
        "https://www.google.com/maps/contrib/102520373756565203865",
        "116847444302916322211"
    ],
    "maxReviews": 200,
    "scrapeReviews": True,
    "outputFormat": "flattened",
    "proxyConfiguration": { "useApifyProxy": True }
}

## Run the Actor and wait for it to finish
run = client.actor("unitbytes/google-maps-contributor-scraper\").call(run_input=run_input)

## Fetch and print results from the dataset
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(f"[{item.get('stars')}★] {item.get('place_name')} - by {item.get('contributor_name')} (Level {item.get('local_guide_level')})")
    print(f"Review: {item.get('review_text', '')[:60]}...")
    print(f"Permalink: {item.get('review_permalink')}\n")
```

***

#### 3. Run via Node.js / JavaScript (`apify-client`)

```javascript
import { ApifyClient } from "apify-client";

const client = new ApifyClient({
    token: "YOUR_APIFY_API_TOKEN",
});

const input = {
    contributors: [
        "https://www.google.com/maps/contrib/102520373756565203865",
        "116847444302916322211"
    ],
    maxReviews: 200,
    scrapeReviews: true,
    outputFormat: "flattened",
    proxyConfiguration: { useApifyProxy: true }
};

const run = await client.actor("unitbytes/google-maps-contributor-scraper\").call(input);

const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach(item => {
    console.log(`[${item.stars}★] ${item.place_name} - by ${item.contributor_name} (Level ${item.local_guide_level})`);
    console.log(`Permalink: ${item.review_permalink}`);
});
```

***

#### 4. Automated Workflows (Make, Zapier, Webhooks)

Easily trigger this Actor automatically via webhooks whenever a new negative or positive review is detected on your Google Business profile, and send enriched Local Guide auditor reports straight to Slack, Airtable, or Google Sheets.

***

### ⚡ Speed & Reliability

- **Ultra-Fast & Stable:** Extracts up to 200 reviews in ~1.5 to 2 seconds without browser lag or unexpected crashes.
- **Smart Anti-Blocking:** Automatically handles rate limits and rotates proxy sessions to ensure high success rates.
- **State Checkpointing:** Safe against restarts; already-scraped contributors are remembered so you never scrape or pay for duplicates.

***

### ❓ Frequently Asked Questions (FAQ)

##### Q: Do I need programming or coding skills to use this Actor?

**Not at all!** This tool is designed for non-technical users, business owners, agency marketers, and data teams alike. You can run everything directly inside your web browser in the Apify Console and download ready-to-open **Excel (.xlsx)** or **CSV** files with a single click.

##### Q: How many reviews can I extract per profile?

The Actor extracts up to your configured `maxReviews` (0 to 200, default is 200) or the total number of public reviews available on the contributor profile in a single fast call. For contributors with fewer reviews than `maxReviews`, all available public reviews are extracted.

##### Q: Does it extract photos uploaded by contributors?

Yes! Every review object in the dataset includes the full `photos: [...]` list of high-resolution image URLs attached to that specific review, plus the contributor's avatar and total lifetime photos count (`total_photos_count`).

*(If you need to scrape a contributor's complete standalone Google Maps photo portfolio — all uploaded photos, view counts, and photo locations — check out our dedicated sister tool: **[Google Maps Contributor Photos Scraper](https://apify.com/unitbytes/google-maps-contributor-photos-scraper)**).*

##### Q: What happens if a contributor has set their profile to private?

If a contributor has enabled privacy settings on Google Maps, Google does not make their reviews publicly visible. The Actor gracefully identifies this, returns `status: "PRIVATE"`, marks `is_private: true`, and still extracts all publicly visible metadata (display name, avatar, Local Guide level, points, and contribution counts) with an empty `reviews` array.

##### Q: Does every review have a direct permalink?

Yes! Every review object includes a verified `review_permalink` that links directly to that specific review on Google Maps.

##### Q: What proxies should I use?

We strongly recommend using **Apify Residential Proxies** (`{ "useApifyProxy": true }`). While datacenter proxies may work for low volumes, residential proxies provide consistent speed and prevent Google rate-limiting.

##### Q: Can I scrape only profile statistics without reviews?

Yes. Simply set `"scrapeReviews": false` in the input configuration. The Actor will extract only the profile metadata, Local Guide level, and contribution counts.

***

### 👨‍💻 Support, Bugs & Custom Enhancements

Actively maintained and supported. If Google updates contributor layouts, fixes and enhancements are deployed promptly within 24–48 hours.

- 📧 **Direct Email Support:** <contact@unitbytes.com>
- 🐛 **Bug Reports & Issues:** [Apify Issues Tab](https://apify.com/unitbytes/google-maps-contributor-scraper/issues)
- 💡 **Feature Requests & Custom Pipelines:** Need custom fields, high-volume bulk scraping, or CRM integrations? Contact us at <contact@unitbytes.com>.

***

### Keywords

local guide scraper
google maps reviewer scraper
google local guide data extraction
official google maps api alternative
google places api reviewer profile
reviewer profile scraper
google maps public profile scraper
local influencer data collection
review fraud detection tool
contributor api
google maps contribution scraper
google maps local guide scraper
google maps review api
contributor profile api
google maps public scraper
guide level scraper
local guide scraper python
google maps profile scraper
reviewer profile scraper python
local guide api
google places api alternative

***

### 💬 Enterprise Support & Custom Pipelines

Need custom web data feeds, high-frequency scheduled runs, private cluster deployments, or dedicated SLAs?

- 📧 **Direct Email**: <contact@unitbytes.com>
- 🌐 **Enterprise Platform**: <https://unitbytes.com>
- 💡 **Data Engine Specs & Live Docs**: <https://unitbytes.com/actors/google-maps-contributor-scraper/>

# Actor input Schema

## `contributors` (type: `array`):

Paste Google Maps contributor profile URLs or numeric User IDs.

**Supported formats:**
• `https://www.google.com/maps/contrib/102520373756565203865`
• `https://www.google.com/maps/contrib/102520373756565203865/reviews`
• `https://www.google.com/maps/contrib/102520373756565203865/photos`
• Extended URLs with coordinates/query params: `https://www.google.com/maps/contrib/102520373756565203865/reviews/@40.6925847,-74.1578387,11z...`
• Share shortlinks: `https://maps.app.goo.gl/...`
• Raw user ID: `102520373756565203865`

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

How many reviews to extract per contributor (0 to 200). The actor extracts up to this limit or the total number of public reviews available for that profile in a single high-speed call. Default is 200.

## `scrapeReviews` (type: `boolean`):

If enabled, extracts full reviews written by the contributor, including stars, full text, direct review permalinks, place info, and owner replies.

## `outputFormat` (type: `string`):

Choose dataset layout: 'flattened' produces 1 row per review (best for Excel, CSV, Google Sheets), while 'nested' outputs 1 complete record per contributor profile with a reviews array (best for JSON/API integrations).

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

Language code for Google Maps results (e.g. 'en', 'es', 'fr', 'de'). Default is 'en'.

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

Two-letter country code for regional formatting and location bias (e.g. 'us', 'gb', 'fr', 'de'). Default is 'us'.

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

Proxies to use. Apify Residential Proxies are recommended to prevent rate limits.

## `maxConcurrency` (type: `integer`):

Number of profiles to scrape concurrently (1 to 10).

## `maxProxyRetries` (type: `integer`):

Number of times to swap proxy IP upon rate limits or 403 blocks.

## Actor input object example

```json
{
  "contributors": [
    "https://www.google.com/maps/contrib/102520373756565203865",
    "116847444302916322211"
  ],
  "maxReviews": 200,
  "scrapeReviews": true,
  "outputFormat": "flattened",
  "language": "en",
  "country": "us",
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "maxConcurrency": 3,
  "maxProxyRetries": 5
}
```

# Actor output Schema

## `results` (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 = {
    "contributors": [
        "https://www.google.com/maps/contrib/102520373756565203865",
        "116847444302916322211"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("unitbytes/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 = {
    "contributors": [
        "https://www.google.com/maps/contrib/102520373756565203865",
        "116847444302916322211",
    ],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("unitbytes/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 '{
  "contributors": [
    "https://www.google.com/maps/contrib/102520373756565203865",
    "116847444302916322211"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call unitbytes/google-maps-contributor-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,unitbytes/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/fQmUF4KtQ3dcQWNYh/builds/RhVx4rWeromthAOMt/openapi.json
