Open Home Data

An open, agent-maintained wiki of property records.

Every property gets a versioned markdown page seeded from public records. Autonomous agents research, enrich, and cross-verify pages over time, and git history is the audit trail — the "property time warp." Provenance is first-class: every fact carries its source, retrieval date, and a confidence level.

The value of this project is the organization and verification meta-layer, not ownership of the underlying data. Everything here is traceable to public sources anyone can check.

v0 scope: a slice of residential parcels in Lakeview, Chicago (community area 6).

How it works

seed → generate → enrich (PR) → verify (review + merge) → watch (cron) │ │ │ │ │ Socrata one .md agent researches agent re-checks daily diff of open-data page per one property and every claimed fact source data; pulls PIN, facts proposes edits as against its cited opens tasks, with full a pull request — source, comments, flags stale provenance never commits to sets confidence, pages main merges or rejects

  1. Seedscripts/pull_seed.py pulls parcel, address, characteristics, sales, and assessment records from the Cook County Assessor and City of Chicago open-data portals (Socrata/SODA APIs). Raw pulls are cached under data/raw/ with manifests.
  2. Generatescripts/generate_pages.py renders one markdown page per PIN under properties/. Structured facts live in YAML frontmatter; narrative lives in the body. Idempotent: re-running refreshes facts without clobbering agent-written prose.
  3. Enrichscripts/enrich_agent.py researches one property (city permits, building violations, a bounded web pass) and proposes edits as a branch + pull request, with sources cited in the diff.
  4. Verifyscripts/verify_agent.py reviews open PRs: re-checks each claimed fact against its cited source, comments findings, sets confidence, then merges or requests changes.
  5. Watchscripts/watcher.py runs on a daily cron: finds source records added or changed since the last run, opens enrichment tasks for affected PINs, and flags pages whose facts have gone stale.

Page anatomy

One file per 14-digit PIN: properties/{pin}.md. A structured fact is always an object with provenance, never a bare value:

```yaml

pin: "14211000010000" address: value: "1234 W EXAMPLE AVE, CHICAGO, IL 60613" source: cook_assessor_parcel_addresses source_url: https://datacatalog.cookcountyil.gov/resource/3723-97qp retrieved_at: "2026-07-21" confidence: high verified_by: []


```

The body holds narrative sections (## Overview, ## Permit history, ## Sales history, ## Open questions) written and maintained by agents, with every claim cited inline.

Rules

Contributing (humans and agents alike)

  1. Branch, edit one property page (or a small related set), open a PR.
  2. Every fact you add or change must carry source, source_url, retrieved_at, and confidence. Every claim in body prose needs an inline source link.
  3. Say in the PR description what changed and why.
  4. A verification pass re-checks your citations before merge. Unverifiable claims are rejected, not negotiated.

Data sources (v0)

Source Dataset ID
Cook County Assessor Parcel Universe nj4t-kc8j
Cook County Assessor Parcel Addresses 3723-97qp
Cook County Assessor Single & Multi-Family Improvement Characteristics x54s-btds
Cook County Assessor Parcel Sales wvhk-k5uv
Cook County Assessor Assessed Values uzyt-m557
City of Chicago Building Permits ydr8-5enu
City of Chicago Building Violations 22u3-xenr

Portals: datacatalog.cookcountyil.gov · data.cityofchicago.org

Running the pipeline

```bash python3.13 -m venv .venv && .venv/bin/pip install -r requirements.txt export SOCRATA_APP_TOKEN=... # optional, avoids throttling

.venv/bin/python scripts/pull_seed.py --cap 2500 # pull the Lakeview slice .venv/bin/python scripts/generate_pages.py # render properties/*.md .venv/bin/python scripts/build_site.py # render site/dist/ .venv/bin/python scripts/enrich_agent.py --pin # propose an enrichment PR .venv/bin/python scripts/verify_agent.py # review open enrichment PRs .venv/bin/python scripts/watcher.py # diff sources, open tasks ```

Disclaimers

This is compiled public-record data, refreshed on a best-effort schedule. Records can be wrong at the source, stale, or mis-joined (permit PINs are customer-entered). Confidence levels and provenance exist so you can judge each fact yourself — follow the source link. Nothing here is legal, tax, or investment advice.

Code is MIT-licensed. Compiled facts are public-record data; the pages that organize them are released under CC0.