# Changelog of Solar Panel Rooftop Lead Scorer: No-Key PVGIS Google Solar API (`kamerozkan/solar-rooftop-lead-scorer`) Actor

- **URL**: https://apify.com/kamerozkan/solar-rooftop-lead-scorer/changelog.md
- **Full Actor documentation**: https://apify.com/kamerozkan/solar-rooftop-lead-scorer.md

## Changelog

### 0.2.2 - 2026-07-31

- Fixed the Actor failing every run started from the prefilled input schema.
  `acceptTerms` was required with a `false` default and no prefill, so an
  unmodified run threw before any analysis and Apify's automated quality test
  flagged the Actor as under maintenance.
- `acceptTerms` is no longer a required input. Keyless `OPEN_DATA` runs are
  covered by the Terms in the README, which apply on use. `GOOGLE` mode still
  requires `acceptTerms: true`, because Google attribution and retention duties
  attach to the caller's own key.
- Removed `acceptTerms` from the keyless README examples so the quick start
  runs as pasted, and added a schema test asserting that every required input
  carries a prefill.

### 0.2.1 — 2026-07-28

- Added backward-compatible `addressItems` input for per-address
  `roofAreaM2` or `systemCapacityKw`, allowing address-based open-data results
  to qualify when the customer supplies property-specific capacity evidence.
- Made keyless U.S. address matching fail closed unless the input includes a
  house number, street, city, two-letter state code, and five-digit ZIP code.
- Rejects multiple Census candidates instead of silently selecting the first
  match, and verifies house number, state, and ZIP against the returned match.
- Added transparent, Actor-derived geocoding confidence labels, candidate
  count, and component-level match evidence. The Actor does not invent a
  Census-provided numeric confidence score.
- Expanded the automated suite from 69 to 76 tests.

### 0.2.0 — 2026-07-28

- Added real `OPEN_DATA` analysis as the no-key default, backed by the pinned European Commission JRC PVGIS 5.3 server API.
- Added keyless U.S. address support through the official U.S. Census `Public_AR_Current` geocoder and direct coordinate support in most PVGIS-covered land areas, subject to provider coverage.
- Preserved the original `GOOGLE` BYOK Solar API mode and automatic compatibility for existing callers that already supply a Google key.
- Added per-item roof area and system capacity plus dataset-field mappings.
- Added standardized 5 kW comparison scenarios when roof data is absent, with explicit low confidence instead of pretending the capacity was measured; standardized and shared default-roof scenarios cannot qualify without item-level roof area or system-capacity evidence.
- Separated open-data scenario and estimated-packing fields from legacy Google maximum/recommended rooftop fields, which are now null in `OPEN_DATA`.
- Added explicit evidence-completeness, plane-of-array irradiation, PVGIS model/provenance, and applied financial-assumption fields.
- Renamed open-data price-derived financial output as gross modeled energy value, made the default incentive zero, and kept legacy Google savings/payback fields null in `OPEN_DATA`.
- Added selectable PVGIS mounting and crystalline-silicon technology models, defaulting to a ventilated-rack proxy and the `crystSi2025` model.
- Added transparent energy low/base/high ranges, source versions, model years, assumptions, limitations, confidence, and `requiresSiteSurvey`.
- Added bounded retry handling for PVGIS `429`, `529`, transient server failures, and Census service failures.
- Changed open-data Google attribution and expiry fields to explicit `null`; Google mode retains its original attribution and 30-day expiry behavior.
- Made Apify cloud PPE charging fail-closed by default, and report the Actor event, automatic dataset-item event, total per-result price, and charged result count separately.
- Reworked Store input, dataset, output, README, Terms, Privacy, and provenance copy for the dual-provider product.
- Expanded the automated suite from 37 to 69 tests and passed a live 20-location open-data cohort with zero processing errors.

### 0.1.5 — 2026-07-26

- Added fail-fast validation for missing, placeholder, denied, disabled, billing-blocked, and quota-blocked Google API configurations.
- Changed all-error runs from misleading success to a real failed run with an actionable summary.
- Added explicit Terms and permitted-use acceptance to the input.
- Added required Google Maps, Solar-data, and derived-content attribution to every result and dataset view.
- Added a 30-day `googleContentExpiresAt` marker to every result.
- Added public Terms of Use, Privacy Policy, data-retention guidance, safe first-run onboarding, and spending examples.
- Removed unconsented purchased-lead and resale positioning.
- Added API-key redaction for provider messages.
- Expanded the automated suite to 32 tests.

### 0.1.4 — 2026-07-26

- Corrected the Google Solar request parameter to the canonical `requiredQuality` REST field.
- Made Google Money parsing currency-safe, including nanos-only values.
- Added structured handling for malformed geocoding and Solar responses.
- Added HTTP-date `Retry-After` support and retries for transient non-JSON provider responses.
- Serialized result commits so concurrent work cannot race the pay-per-event spending limit.
- Added accurate spending-limit skip counts to the run summary.
- Expanded dataset fields for location match, energy, and financial provenance.
- Reduced the production Docker build context.
- Expanded the automated edge-case and concurrency suite to 26 tests.

### 0.1.0

- Initial MVP.
- Address, coordinate, and Apify dataset inputs.
- Google Geocoding and Solar Building Insights adapters.
- Explainable rooftop lead scoring.
- Optional financial estimates.
- Pay-per-event integration with spending-limit handling.
- Production pay-per-event configuration enabled for the `property-analyzed` event.
- Input, output, and dataset schemas.
- Mock-based automated test suite.
- Production default reduced to 256 MB and a public-safe sample input added.
- Provider error messages normalized and terminal run summaries clarified.
- Store description, categories, and SEO metadata completed.
