# Changelog of Property Owner, Tax & Deed Records Intel (`seibs.co/property-records-intel`) Actor

- **URL**: https://apify.com/seibs.co/property-records-intel/changelog.md
- **Full Actor documentation**: https://apify.com/seibs.co/property-records-intel.md

## Changelog

### 0.1 - 2026-06-12 - Initial release

- Four modes: `property_search`, `parcel_profile`, `owner_portfolio`, `distress_scan`.
- Two parameterized connector bases - `ArcGISParcelConnector` (the dominant county GIS pattern: an Esri ArcGIS REST FeatureServer/MapServer `/query` endpoint with a SQL `where` clause) and `SocrataParcelConnector` (open-data SoQL JSON, the same API used by the business-registry actor). A county connector is just a `service_url`/`domain` + a `field_map`.
- Three verified-live (fixture-validated AND confirmed returning real data) counties: NYC (DOF/DCP PLUTO `64uk-42ks`, all 5 boroughs, Socrata), DC (Office of Tax & Revenue Common Ownership / Integrated Tax, ArcGIS layer 40), and LA County (Assessor parcel layer, ArcGIS - owner redacted by CA, APN/address search returns the assessment facts). Validated end-to-end on the real runtime: a NYC+DC owner\_portfolio run resolved DC + NYC Housing Authority portfolios (8 parcels each), scored distress flags, and an LA address search returned real roll values.
- Two additional ArcGIS connectors with field maps implemented + fixture-validated but whose live service URL needs a recapture (registered as catalog until refreshed - a one-line change): Mecklenburg/Charlotte and Maricopa/Phoenix.
- A national catalog of ~28 more major counties (Cook, Harris, Dallas, Travis, Miami-Dade, Broward, King, San Diego, Philadelphia, Allegheny, Suffolk/Boston, Cuyahoga, Fulton, ...) registered with the correct portal + access method + anti-bot level; a per-county field map is pending a live capture, so they return a documented `county_pending` note rather than fabricated data. Upgrading a catalog county to full is one `field_map` dict.
- Normalized cross-county parcel schema (APN, owner, owner-type, situs + mailing address, owner-occupancy/absentee, land use, assessed/land/improvement/market value, sale history, deed type, tax status, year built, lot size, source URL) with canonical owner-type / tax-status / land-use vocabularies and robust value/date parsing (handles ArcGIS epoch-millis dates).
- Value layer: owner-to-parcel linking + `owner_portfolio` rollups (multi-parcel owners flagged - the wholesaler/investor signal), and equity/distress scoring (`distress_scan`): tax delinquency, absentee / out-of-state owner, estimated equity (assessed value vs last sale price), estate/trust ownership, long tenure, vacant land, and portfolio owner -> a per-parcel `distress_score` + `distress_summary` rollup.
- Three-tier anti-bot escalation ladder in `parcel_client`: httpx (datacenter) -> curl\_cffi Chrome TLS impersonation (residential) -> optional Playwright/patchright browser (residential) -> fail-soft `fetch_error`. Browser tier + opt-in CAPTCHA solver wired for the catalog browser-required portals.
- Fuzzy owner matching via rapidfuzz when present, stdlib `difflib` fallback (no hard dependency).
- Legal-safety: county property records are public-by-law; logged-out, public-record fields only (owner name, tax-roll mailing address, assessment + recorded sale facts). **No skip-tracing** into private phone/email/SSN data - a deliberate scope line, and the `responsible_use` note + `_disclaimer` label equity/distress as estimates and investigative leads, not verified title/lien determinations.
- Cost-control: pre-flight caps, `_RunBudget` guard (compute-vs-PPE), demo-mode soft-fail, hardcoded PPE prices kept in sync with `pay_per_event.json`.
- Monitor mode (scheduled-run delta digest of new parcels / ownership changes / new tax delinquencies + Slack webhook), next-actions, and OUTPUT artifacts.
- Paired `mcp-property-records-intel` MCP server (5 tools) with x402 (USDC on Base) + Skyfire agentic-payment hook.
