Cook County Assessment Appeals - Values & Board Decisions
Pricing
from $0.06 / 1,000 cook county assessment records
Cook County Assessment Appeals - Values & Board Decisions
Cook County assessment records keyed on one parcel id (public open data, 59.8M rows): a parcel's value as mailed, certified and Board-revised; every appeal case with type, status and reasons; and Board of Review decisions showing the Assessor's value against the Board's and the outcome.
Pricing
from $0.06 / 1,000 cook county assessment records
Rating
0.0
(0)
Developer
Wenhao Yang
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
27 minutes ago
Last modified
Categories
Share
Every parcel in Cook County gets an assessed value, and every assessment can be challenged - first with the Assessor, then with the Board of Review. This actor turns the county's assessment record into a charged-per-record search, filter and aggregate tool across three datasets that all key on the same parcel id: the values, the appeals against them, and the Board's decisions.
Built for: property tax appeal and protest work, assessment-ratio and equity studies, appraisal and valuation research, portfolio due diligence, and anyone who needs the county's own assessment record rather than a portal lookup one PIN at a time.
What it covers
Three corpora, all joined on the 14-digit parcel index number (PIN) - an exact key, not a name match. One parcel's whole assessment history lines up on one id.
| Corpus | Rows | Years | One row is |
|---|---|---|---|
values | 50,670,551 | 1999-2026 (28) | a parcel's assessed value on one roll |
appeals | 2,646,399 | 1999-2026 (14) | an appeal case against a parcel |
decisions | 6,933,428 | 2010-2025 (16) | a Board of Review decision on an appeal |
Depth beyond a value figure:
- Three valuation stages on one row. The values corpus carries the same parcel's assessment as mailed (first notice), as certified (after Assessor review) and as revised by the Board of Review - so the effect of each stage is visible in the record itself.
- The appeal case in full. Type (residential / condo-coop / commercial / land / incentive / omitted), status, whether the value changed, up to three coded reasons with their descriptions, and the agent who filed it.
- The outcome, quantified. Board decisions carry the Assessor's value against the Board's revised value side by side (
assessorTotalValuevsboardTotalValue) with the result: Decrease 3,194,842 / No Change 3,733,475 / Increase 5,111.
The fine print that matters
The appeals corpus has a hole in it, and it is the county's, not ours. The source states in its own description that appeals "for many years are currently missing from this dataset as we repopulate our system of record", with appeals from 2021 on expected to remain available. Measured 2026-09-17 that is exactly what the data shows: 1999-2004 are present, 2005-2020 are essentially absent (2014 has a single row, 2020 has 27), and 2021-2026 are present and full. So a year filter on 2015 returns an empty result - which is correct - and this actor validates the year against the years the corpus actually holds, so you get an explicit message telling you so rather than a silently empty answer that looks like a bug.
A profile is the join. mode=profile with a PIN returns that parcel's values, appeal cases and Board decisions in one response. Because the three datasets share the PIN, this is an exact join, and it traces a whole appeal chain: one Barrington parcel was mailed $104,500 for 2025, certified at the same figure, then reduced by the Board to $70,470 - and its 2026 mailed value is $70,470, carrying the decision forward into the next roll.
The three corpora carry different year spans (28 / 14 / 16), so a year valid in one may not exist in another - and a filter belonging to one corpus (say result, which only Board decisions have) is rejected when set against another, rather than silently returning unfiltered rows.
Value fields are returned as the county publishes them, including the three separate exemption columns the source keeps apart. On the newest roll the assessment is still moving through the cycle: the Board column is empty on all 1,863,562 parcels because no Board review has completed, while the certified column is populated on 367,712 of them (19.7%) as certifications land through the year. That is the county's own state of progress, not a gap in the data.
Typical questions
- "Did this parcel win its appeal, and by how much?" - one PIN, values plus decisions.
- "Board decisions that reduced the assessment, by class or township."
- "Every appeal filed against a parcel, with the agent and the reasons cited."
- "A parcel's assessed value at the mailed, certified and Board stages."
- "All appeals handled by a given agent or tax firm."
- "Aggregate decisions by outcome, major class or year."
Inputs
| Input | What it does |
|---|---|
mode | rows (default) / aggregate / profile |
corpus | values (default) / appeals / decisions |
pin | exact 14-digit parcel id - required for profile |
year | roll year; blank = newest roll of that corpus |
township / class | exact township code / property class |
result / majorClass | Board outcome (Decrease / No Change / Increase) and major class - decisions only |
status / appealType / change / hearingType / agent | appeal case fields - appeals only |
appellant | the appealing party - decisions only |
groupBy | aggregate over tax year / class / township / appeal type / status / result / major class |
maxResults | cap records (default 50) |
Default run = 50 records from the newest roll - fast for the daily auto-test. For a targeted query add a filter; for a whole parcel use profile; for a broad view use aggregate.
Example inputs
One parcel's whole appeal chain - mode=profile keys on the PIN and returns
that parcel's values, its appeal cases and its Board decisions together.
{ "mode": "profile", "pin": "01011000020000", "maxResults": 50 }
Board decisions that cut the assessment
{ "corpus": "decisions", "result": "Decrease", "maxResults": 5 }
Appeal cases that have closed
{ "corpus": "appeals", "status": "closed", "maxResults": 5 }
Decisions by outcome - one row per result.
{ "mode": "aggregate", "corpus": "decisions", "groupBy": "result" }
Low cost
From $0.0001 per record, down to $0.00006 at Gold Pay-per-event: you are charged per record delivered, and nothing for the query. Cost scales with what you pull, not with the size of the datasets, and each record is metered individually - a full parcel profile costs a fraction of a cent.
Example output
One parcel on one roll - mode=profile, pin=01011000020000 returns the
values row below alongside that parcel's appeal cases and Board decisions:
{"platform": "cook-assessment-appeals","source": "cook-county-values","corpus": "values","mode": "rows","groupKey": "","groupCount": "","groupBy": "","agentCode": "","agentName": "","appealCertifiedBuilding": "","appealCertifiedLand": "","appealCertifiedTotal": "","appealMailedBuilding": "","appealMailedLand": "","appealMailedTotal": "","appealSeq": "","appealTrack": "","appealType": "","appealTypeCode": "","appealTypeDescription": "","appellant": "","assessorImprovementValue": "","assessorLandValue": "","assessorTotalValue": "","boardBuilding": "","boardHomeownerExemption": "","boardImprovementValue": "","boardLand": "","boardLandValue": "","boardTotal": "","boardTotalValue": "","caseNumber": "","certifiedBuilding": "","certifiedHomeownerExemption": "","certifiedLand": "","certifiedTotal": "","change": "","changeReason": "","class": "592","hearingType": "","mailedBuilding": "33591.0","mailedHomeownerExemption": "0.0","mailedLand": "36879.0","mailedTotal": "70470.0","majorClass": "","neighborhoodCode": "10012","noChangeReason": "","noChangeReasonDescription": "","pin": "01011000020000","reasonCode1": "","reasonCode2": "","reasonCode3": "","reasonDescription1": "","reasonDescription2": "","reasonDescription3": "","result": "","sourceUpdatedAt": "2026-09-15","status": "","subkey": "","taxCode": "","taxYear": "2026","townshipCode": "10","townshipName": "Barrington","volume": ""}
mode=aggregate, corpus=decisions, groupBy=result - one row per outcome:
Decrease 3,194,842No Change 3,733,475Increase 5,111