# Cook County (Chicago) property records API > Pay-per-call property-records API for Cook County, Illinois — including the City of Chicago. Look up any property by street ADDRESS or 14-digit PIN and get parcel details, recorded sales & deed history, building permits, and property-tax assessment history, joined and normalized into one answer. Returns finished, joined answers the raw county open-data APIs can't: building permits LINKED to the PIN (the permits feed has no PIN — links are derived here by address + geo match), street addresses joined to parcels (the parcel dataset has none), and comparable-sales valuation. You get the answer, not rows to query, stitch, and derive yourself. Use for real-estate due diligence, automated valuation / comparable-sales (comps), title and lien research prep, lead enrichment, and market analysis. ~1.9M parcels, refreshed nightly, property-keyed (public records only — no personal data). No signup or API key: pay per call via the x402 protocol (USDC on Base or Solana). Pay-per-call HTTP API (x402: HTTP 402 + USDC on Base or Solana), no API keys. Coverage is Cook County, Illinois (including Chicago) ONLY — nothing outside it (no other counties/states, no owner or occupant names, no mortgages, no MLS listings). Property-keyed public records. Try the FREE sample first to see response shapes. ## Endpoints - [Free sample](https://api.ingest0r.com/v1/sample): representative responses, $0, no payment needed - [Free LIVE example](https://api.ingest0r.com/v1/dossier/09253050270000): real parcel 09253050270000, served free — verify live data quality against the county's own portals before paying - [Free LIVE example](https://api.ingest0r.com/v1/dossier/09253060510000): real parcel 09253060510000, served free — verify live data quality against the county's own portals before paying - [Free LIVE example](https://api.ingest0r.com/v1/dossier/09253140190000): real parcel 09253140190000, served free — verify live data quality against the county's own portals before paying - [GET /v1/search/{q}](https://api.ingest0r.com/v1/search/{q}) ($0.01): Address → PIN lookup for Cook County / Chicago. - [GET /v1/parcel/{pin}](https://api.ingest0r.com/v1/parcel/{pin}) ($0.01): Single Cook County, IL parcel record by PIN: street address, city, ZIP, assessor property class, township, neighborhood, ward/municipality,… - [GET /v1/dossier/{pin}](https://api.ingest0r.com/v1/dossier/{pin}) ($0.03): Complete property record for a Cook County / Chicago parcel in one paid call: address and parcel basics PLUS recorded sales & deed history,… - [GET /v1/comps/{pin}](https://api.ingest0r.com/v1/comps/{pin}) ($0.10): Comparable sales (comps) and a lightweight automated valuation for a Cook County / Chicago property: recent arm's-length sales in the same… ## Machine discovery - [Discovery manifest](https://api.ingest0r.com/): schemas, prices, example flow - [Full LLM docs](https://api.ingest0r.com/llms-full.txt): everything in one fetch (schemas, examples, errors, pricing) - [Pricing](https://api.ingest0r.com/pricing): machine-readable rate card - [Changelog](https://api.ingest0r.com/changelog.json): versions + additive-only schema policy - [OpenAPI 3.1](https://api.ingest0r.com/openapi.json): per-route x-payment-info - [x402 resource list](https://api.ingest0r.com/.well-known/x402) - [A2A agent card](https://api.ingest0r.com/.well-known/agent-card.json) - [MCP endpoint](https://api.ingest0r.com/mcp): streamable-http; tools: search_chicago_property_by_address, get_cook_county_parcel, get_cook_county_property_dossier, find_chicago_comparable_sales, get_free_sample ## Route details ### GET /v1/search/{q} ($0.01) Address → PIN lookup for Cook County / Chicago. Resolve a full or partial STREET ADDRESS to its parcel PIN(s): ranked candidate parcels with address, city, ZIP and a match score — resolving the address↔parcel gap (the raw parcel dataset has no address). The entry point when you have an address but not a PIN — call this before /v1/dossier, /v1/parcel, or /v1/comps. Public assessor records. Input schema: ```json { "type": "object", "required": [ "q" ], "properties": { "q": { "type": "string", "description": "Street address or partial (\u22654 chars), e.g. '1 E 113th St'" } } } ``` Output schema: ```json { "type": "object", "properties": { "query": { "type": "string" }, "matches": { "type": "array", "items": { "type": "object", "properties": { "pin": { "type": "string" }, "prop_address": { "type": "string" }, "prop_city": { "type": "string" }, "prop_zip": { "type": "string" }, "score": { "type": "number", "description": "0\u20131 address similarity" } } } } } } ``` Example output: ```json { "query": "1 E 113th St", "matches": [ { "pin": "25212190120000", "prop_address": "1 E 113TH ST", "prop_city": "CHICAGO", "prop_zip": "60628", "score": 0.98 } ] } ``` ### GET /v1/parcel/{pin} ($0.01) Single Cook County, IL parcel record by PIN: street address, city, ZIP, assessor property class, township, neighborhood, ward/municipality, census tract, school districts, walkability and airport-noise context, and lat/lon — with the street address joined in (the raw parcel dataset has none). The cheap single-property lookup. Source: Cook County Assessor, refreshed nightly. Input schema: ```json { "type": "object", "required": [ "pin" ], "properties": { "pin": { "type": "string", "description": "14-digit Cook County PIN (digits or dashed). Use /v1/search first if you only have a street address." } } } ``` Output schema: ```json { "type": "object", "properties": { "pin": { "type": "string" }, "prop_address": { "type": "string" }, "prop_city": { "type": "string" }, "prop_zip": { "type": "string" }, "class": { "type": "string" }, "township_name": { "type": "string" }, "nbhd_code": { "type": "string" }, "tax_year": { "type": "integer" }, "lat": { "type": "number" }, "lon": { "type": "number" } } } ``` Example output: ```json { "pin": "25212190120000", "prop_address": "1 E 113TH ST", "prop_city": "CHICAGO", "prop_zip": "60628", "class": "203", "township_name": "Hyde Park", "nbhd_code": "70091", "tax_year": 2025, "lat": 41.6883, "lon": -87.6219 } ``` ### GET /v1/dossier/{pin} ($0.03) Complete property record for a Cook County / Chicago parcel in one paid call: address and parcel basics PLUS recorded sales & deed history, building permits, and property-tax assessment history, joined and normalized — with neighborhood/ward/school/walkability context. Includes building permits LINKED to the PIN — a join the raw permit open-data can't return (it has no PIN; links are derived here by address + geo match). One finished record, not several raw queries to stitch. For real-estate due diligence, valuation, underwriting, and lead enrichment. Nightly-fresh; property-keyed (no personal data). Input schema: ```json { "type": "object", "required": [ "pin" ], "properties": { "pin": { "type": "string", "description": "14-digit Cook County PIN (digits or dashed). Use /v1/search first if you only have a street address." } } } ``` Output schema: ```json { "type": "object", "properties": { "pin": { "type": "string" }, "prop_address": { "type": "string" }, "class": { "type": "string" }, "municipality": { "type": "string" }, "ward": { "type": "string" }, "sales_history": { "type": "array", "items": { "type": "object", "properties": { "date": { "type": "string" }, "price": { "type": "number" }, "doc_no": { "type": "string" }, "deed_type": { "type": "string" } } } }, "permits": { "type": "array", "items": { "type": "object", "properties": { "issued": { "type": "string" }, "type": { "type": "string" }, "cost": { "type": "number" }, "desc": { "type": "string" } } } }, "assessment_history": { "type": "array", "items": { "type": "object", "properties": { "year": { "type": "integer" }, "certified": { "type": "number" }, "board": { "type": "number" } } } } } } ``` Example output: ```json { "pin": "25212190120000", "prop_address": "1 E 113TH ST", "prop_city": "CHICAGO", "prop_zip": "60628", "class": "203", "township_name": "Hyde Park", "municipality": "CHICAGO", "ward": "9", "nbhd_code": "70091", "tax_year": 2025, "lat": 41.6883, "lon": -87.6219, "sales_history": [ { "date": "2021-06-15", "price": 245000, "doc_no": "2116622045", "deed_type": "WARRANTY DEED" }, { "date": "2014-03-20", "price": 98000, "doc_no": "1407944120", "deed_type": "WARRANTY DEED" } ], "permits": [ { "issued": "2022-08-02", "type": "RENOVATION/ALTERATION", "cost": 18500, "desc": "Interior renovation \u2014 kitchen and bath" }, { "issued": "2019-05-11", "type": "EASY PERMIT PROCESS", "cost": 4200, "desc": "Replace rear porch" } ], "assessment_history": [ { "year": 2025, "certified": 31250, "board": 29800 }, { "year": 2024, "certified": 29500, "board": 29500 }, { "year": 2023, "certified": 27100, "board": 26300 } ] } ``` ### GET /v1/comps/{pin} ($0.10) Comparable sales (comps) and a lightweight automated valuation for a Cook County / Chicago property: recent arm's-length sales in the same assessor neighborhood and property class over the last 18 months, with an implied low/median/high price range. Non-arm's-length and multi-parcel deeds are filtered out — a derived valuation you won't get from a raw open-data query. For valuation, underwriting, investment screening, and due diligence. Input schema: ```json { "type": "object", "required": [ "pin" ], "properties": { "pin": { "type": "string", "description": "14-digit Cook County PIN (digits or dashed). Use /v1/search first if you only have a street address." } } } ``` Output schema: ```json { "type": "object", "properties": { "pin": { "type": "string" }, "comps": { "type": "array", "items": { "type": "object", "properties": { "pin": { "type": "string" }, "prop_address": { "type": "string" }, "sale_date": { "type": "string" }, "sale_price": { "type": "number" }, "deed_type": { "type": "string" } } } }, "implied_range": { "type": "object", "properties": { "low": { "type": "number" }, "median": { "type": "number" }, "high": { "type": "number" }, "n": { "type": "integer" } } } } } ``` Example output: ```json { "pin": "25212190120000", "comps": [ { "pin": "25212190140000", "prop_address": "5 E 113TH ST", "sale_date": "2024-09-12", "sale_price": 262000, "deed_type": "WARRANTY DEED" } ], "implied_range": { "low": 238000, "median": 255000, "high": 271000, "n": 7 } } ``` ## Errors (all 4xx are self-describing JSON) - 400 `{"error":"invalid_pin"}` — PIN must be 14 digits (dashed ok); use /v1/search/{q} to resolve an address to a PIN. - 400 `{"error":"query_too_short"}` — /v1/search needs >= 4 chars. - 402 `{"error":"Payment required"}` — machine-readable x402 terms in the body AND the payment-required header; pay and retry. - 404 `{"error":"not_found"}` — valid PIN, not in Cook County. - 429 `{"error":"rate_limited"}` — per-IP limit; Retry-After: 60. ## Payment Every /v1/ route (except /v1/sample and the free live examples) returns HTTP 402 with x402 v2 terms until paid: USDC on Base (eip155:8453) or Solana. No signup, no API key. Prices: /v1/search = $0.01, /v1/parcel = $0.01, /v1/dossier = $0.03, /v1/comps = $0.10. ## Provenance Every paid answer carries as_of (nightly refresh timestamp), source attribution, and a canonical cite URL. Data: Cook County Assessor/Recorder & City of Chicago open data. Schema version 0.3.0 — additive-only within /v1 (see https://api.ingest0r.com/changelog.json).