# Changelog of Google Maps Lead & Competitor Intelligence (`datahunter_labs/google-maps-lead-competitor-intelligence`) Actor

- **URL**: https://apify.com/datahunter\_labs/google-maps-lead-competitor-intelligence/changelog.md
- **Full Actor documentation**: https://apify.com/datahunter\_labs/google-maps-lead-competitor-intelligence.md

## Changelog

### 0.1.6 - Dedicated bare review-count control fix

- Fixed the remaining cloud regression where Google Maps' dedicated `pane.reviewChart.moreReviews` control can expose only a bare numeric text such as `408`; v0.1.5 intentionally rejected bare values and therefore returned `reviewCount: null`.
- Bare numeric/compact counts are accepted **only** from the dedicated review-count control; broad selectors remain strict so ratings and "Write a review" controls cannot become counts.
- Added regression coverage for bare `408`, thousands separators, compact `1.2K`, and rejection of decimal rating `4.8`.
- Bumped the cache namespace to v5 and synchronized the package `__version__` to 0.1.6.

### 0.1.5 - Review count extraction hardening

- Fixed a cloud-observed regression where `reviewCount` could become `null` because a broad review selector matched the `Write a review` control before the numeric review-count element.
- Review-count extraction now scans multiple matching elements and only accepts values positively identified as counts.
- Added rating-block fallback for forms such as `4.8 (408)` and compact counts such as `1.2K reviews`.
- Added localized review-label selectors and regression tests.
- Bumped the cache namespace to v4 so stale rows with missing review counts are not reused.

### 0.1.4 - 2026-09-22

- Added a bounded Store auto-test `prefill` profile: 1 stable query, max 3 places, website enrichment off, concurrency 1, and a 12-request ceiling so Apify's daily Store health test stays fast and inexpensive.
- Kept production `default` values unchanged; the lightweight values are UI/Store-test prefills only.
- Synced `lead-returned` package pricing metadata to the active Store price of **$0.0035 per lead ($3.50 / 1,000)** and title `Business lead`.
- Runtime scraping, scoring, enrichment, monitoring, proxy, and billing flow are otherwise unchanged.

### 0.1.3 - 2026-09-22

- Reject responsive image/static asset filenames such as `audience-1@2x.avif` from email extraction.
- Stop scanning arbitrary raw HTML for emails; use visible text, JSON-LD, and explicit `mailto:` links.
- Treat missing Google Maps review counts as unknown instead of zero so scoring does not invent review-risk signals.
- Add review-count extraction fallback from button/span `aria-label` attributes.
- Bump analysis/enrichment cache namespace to v3.
- Add cloud-regression tests for false email extraction, unknown review counts, and aria-label review counts.

### 0.1.2 - 2026-09-22

- Fixed data-quality false positives when website enrichment is disabled: empty email/social arrays now mean "not checked", not "missing".
- Added explicit `websiteEnrichmentStatus` values (`not_requested`, `not_applicable_no_website`, or real enrichment status).
- `emailCoverage` is now `null` when website enrichment is disabled, and summaries expose `websiteEnrichmentEnabled`.
- Added coordinate extraction fallback for Google Maps URLs that expose coordinates as `!3dLAT!4dLNG` instead of `@LAT,LNG`.
- Bumped the actor-scoped cache namespace to v2 so old analytically misleading rows cannot be served.
- Added regression tests for all cloud-discovered data-quality issues.

### 0.1.1 - 2026-09-22

- Fixed Apify Input Schema validation for `language` by adding the required string `editor`.
- Audited every string, array, and object input field against the current Apify Input Schema v1 editor requirements.
- Added permanent regression coverage for required Apify editors so this class of cloud-build failure is caught locally.
- Runtime scraping, scoring, proxy, billing, and monitoring logic are unchanged.

### 0.1.0 - 2026-09-22

- Initial Google Maps Lead & Competitor Intelligence cloud candidate.
- Added direct-first Playwright Maps discovery and place extraction.
- Added configurable bounded detail-page concurrency with a maximum of 2.
- Added bounded proxy fallback and session rotation after blocking/transient failures.
- Added circuit-breaker behavior for persistent blocking and source-structure failures.
- Added hollow-source detection so an empty challenge/shell cannot be reported as success.
- Added optional public website contact enrichment with private-network/SSRF target protection and proxy-use accounting.
- Added lead scoring, contactability, reputation/opportunity signals, and sales-angle summaries.
- Added baseline-safe new/changed/missing-from-sample monitoring.
- Added actor-scoped cache/state/billing namespaces, request budgets, diagnostics, deduplication, and PPE-aware result delivery.
- Added current Apify schema/PPE preflight tests and Python 3.11 grammar validation.

#### Pre-delivery hardening

- Removed the stale hard-coded Chrome user agent so Playwright uses the browser-matched UA.
- Enforced `maxProxyRotations` as a run-wide ceiling, including website-enrichment proxy fallback.
- Made the last-resort business identity stable across runs by excluding timestamps and analytical fields.
