# Changelog of Google Maps Reviewer Profile & Local Guide History Scraper (`unitbytes/google-maps-contributor-scraper`) Actor

- **URL**: https://apify.com/unitbytes/google-maps-contributor-scraper/changelog.md
- **Full Actor documentation**: https://apify.com/unitbytes/google-maps-contributor-scraper.md

## Changelog

All notable changes to the **Google Maps Contributor & Local Guide Reviews Scraper** are documented here.

***

### \[1.0.19] - 2026-10-14

#### 🛡️ Critical PPE Billing & Budget Protection

- **Budget Cap Enforcement & Zero-Leak Guarantee**: Resolved critical exploit where `maxTotalChargeUsd` or account credit depletion caused `Actor.charge()` to return `event_charge_limit_reached=True` without raising an exception, which allowed unbilled items to reach the dataset.
- **Strict Post-Charge Dataset Gatekeeping**: Moved `Actor.push_data()` to execute strictly *after* successful PPE billing confirmation. If a budget limit is encountered mid-batch, review items are dynamically sliced to match the exact `charged_count`.
- **Clean Run Circuit-Breaker**: Added `BudgetLimitReachedException` to immediately halt the queue orchestrator, abort in-flight workers, set an informative terminal status message, and exit cleanly with `exit_code=0`.
- **Truth-in-Telemetry**: Telemetry reports actual billed events (`total_charged`) rather than total pushed items.

***

### \[1.0.18] - 2026-10-01

#### 🛡️ Production Hardening & Reliability

- **Pure HTTP RPC Scraper:** Maintained 100% pure HTTP architecture utilizing `curl_cffi` TLS impersonation and Google Maps MAS ProtoJSON RPC without browser overhead.
- **PPE Billing Protection:** Audited and hardened `Actor.charge()` logic. Strictly enforces zero review charges on private profiles, profiles with 0 reviews, or missing profiles. Safely wraps all billing events in non-fatal `try/except`.
- **Graceful ValidationError Handling:** Replaced container aborts/`Actor.fail()` on invalid inputs with informative `Actor.set_status_message()` and graceful `Actor.exit(exit_code=0)`.
- **Proxy 407 & Rate Limit Rotation:** Added automated detection and handling of proxy 407 authentication errors, 429 rate limits, and 403 blocks with smooth jittered exponential backoff and seamless session rotation.
- **Clean Public Logs & Live Telemetry:** Eliminated stack traces from public logs (preserving `exc_info` in DEBUG only) and integrated real-time progress updates via `Actor.set_status_message()`.
- **Real-Data Verification Suite:** Created `tests/test_all_inputs.py` and `tests/test_proxy_rotation.py` verifying real extraction against public profiles, private accounts, numeric IDs, and share shortlinks.

***

### \[1.0.16] - 2026-09-29

#### 🚀 Developer Experience & Automation

- **Hyper-Flexible Input Compatibility:** Automatically recognizes and normalizes single contributor IDs (`contributorId`), ID batches (`contributorIds`), standard Apify request objects (`startUrls`), and limit aliases (`limit`, `maxItems`, `maxResultsPerContributor`).
- **Instant Exploration Mode:** Defaulted initial trial batches to 10 reviews per contributor for rapid 1-second results and minimal credit usage, while retaining full support for up to 200 reviews.
- **Scheduled Monitoring Blueprints:** Added pre-configured cron schedules (`0 8 * * *`, `0 */6 * * *`) for automated reviewer surveillance and brand audit pipelines.
- **Database & Webhook Pipelines:** Added ready-to-run copy-paste integration recipes for Supabase, PostgreSQL, Make, and Zapier.
- **Safe Limit Clamping:** Automatically normalizes high review limits to the maximum allowable boundary (200) without throwing validation errors.

***

### \[1.0.10] - 2026-09-25

#### ✨ Improvements & Branding

- **Store Branding & Visual Polish:** Published new high-resolution widescreen banner and dynamic cache-busting trial action buttons.
- **Photo Capabilities Clarification:** Enhanced documentation detailing review-attached high-resolution photos and added cross-reference to the companion Contributor Photos Scraper.
- **Safe Review Scaling:** Built-in safeguards to reliably deliver maximum allowable review batches (up to 200 items per contributor) with zero data loss or drops.
- **Support Routing:** Updated direct support channels (`contact@unitbytes.com`) and public Apify Issues tracking.

***

### \[1.0.8] - 2026-09-15

#### 🚀 Data Enrichments

- **Exact Review Timestamps:** Added microsecond-precision timestamps (`review_timestamp` epoch ms) and ISO 8601 UTC dates (`review_datetime_utc`) for temporal auditing.
- **Guided Dining & Review Aspects:** Extracted reviewer-reported dining mode (Dine-in, Takeout, Delivery), meal types (Brunch, Lunch, Dinner), spend per person, and guided ratings for food, service, and atmosphere.
- **Place Geolocation Details:** Direct clickable Google Maps place permalinks, physical street addresses, city, country, price tiers, and coordinates.
- **Business Owner Replies:** Full extraction of business owner responses with reply text and exact dates.

***

### \[1.0.5] - 2026-09-14

#### 📦 Export Formats & Resiliency

- **Dual Export Layouts:** Added user-selectable `outputFormat`:
  - `flattened` (default): 1 row per review, optimized for instant opening in Microsoft Excel, Google Sheets, and CSV.
  - `nested`: 1 structured JSON document per contributor profile, optimized for APIs and databases.
- **Automatic Status Detection:** Gracefully handles private accounts (`status: "PRIVATE"`) and missing profiles without run failures.
- **State Checkpointing:** Added run state persistence to resume seamlessly during migration events without duplicate charging.

***

### \[1.0.3] - 2026-09-13

#### 🌍 Localization & Link Resolution

- **Regional Localization:** Added `language` (`hl`) and `country` (`gl`) controls for localized Google Maps place names and review text.
- **Smart Link Resolution:** Automatic resolution of mobile share shortlinks (`maps.app.goo.gl`) into canonical contributor profiles.
- **Intelligent Deduplication:** Automatic filtering of duplicate profile URLs and User IDs across batch inputs.

***

### \[1.0.0] - 2026-09-10

#### 🎉 Initial Release

- **Lightning-Fast Extraction:** Pure lightweight architecture extracting contributor profiles and up to 200 reviews in ~1.5–2 seconds.
- **Local Guide Intelligence:** Complete tier level (1–10), accumulated points, points needed for next tier, and official badge icon URL.
- **Lifetime Contribution Metrics:** Public counters for written reviews, ratings, photos, videos, community answers, and approved edits.
- **Direct Review Permalinks:** Verified links leading directly to individual Google Maps reviews.
- **Fair Pay-Per-Event (PPE):** Charged per profile and review extracted with zero charges for idle server compute.
