{
  "dataset_name": "Cook County township residential appeal outcomes and reassessment change",
  "description": "Per Cook County township per tax year: closed residential appeals at the Assessor and the share that changed a value, Board of Review appeals and the share decreased, the township's latest reassessment median change, and its verified appeal window.",
  "file": "/data/downloads/cook-county-township-appeal-outcomes.csv",
  "rows": 114,
  "columns": [
    {
      "name": "township",
      "description": "Township name as the Assessor writes it."
    },
    {
      "name": "township_code",
      "description": "The Assessor's township code."
    },
    {
      "name": "triad",
      "description": "The reassessment triad the township sits in (City, North, South)."
    },
    {
      "name": "residential_parcels",
      "description": "Residential (class 2xx) parcels in the township in the current parcel universe — the count the township page prints. A property of the township, so it repeats on each of its year rows."
    },
    {
      "name": "tax_year",
      "description": "Tax year the appeals were filed against."
    },
    {
      "name": "assessor_appeals_closed",
      "description": "Closed residential (class 2xx) appeals the Assessor decided. Empty when we hold none for that year."
    },
    {
      "name": "assessor_appeals_changed",
      "description": "Of those, the number where the Assessor's own record says the value changed. Empty when the count is empty."
    },
    {
      "name": "assessor_change_rate_pct",
      "description": "changed ÷ closed, as a percentage to one decimal. EMPTY when the township-year has fewer than 30 closed appeals — the page prints no rate there either."
    },
    {
      "name": "bor_appeals",
      "description": "Residential appeals the Board of Review decided. Empty when we hold none for that year."
    },
    {
      "name": "bor_appeals_decreased",
      "description": "Of those, the number whose recorded result is “Decrease”."
    },
    {
      "name": "bor_decrease_rate_pct",
      "description": "decreased ÷ appeals, as a percentage to one decimal. EMPTY below 30 appeals."
    },
    {
      "name": "latest_reassessment_year",
      "description": "Most recent year clearing 1,000 homes valued in two consecutive years with a median shift of at least 2%. Empty when no year clears it."
    },
    {
      "name": "latest_reassessment_homes_compared",
      "description": "Class-2 properties valued in both years, behind that median."
    },
    {
      "name": "latest_reassessment_median_change_pct",
      "description": "Median change in assessed value at that reassessment, signed, to one decimal. Empty when there is no qualifying year."
    },
    {
      "name": "appeal_window_tax_year",
      "description": "Tax year of the appeal window in the next four columns. Empty when no verified window is held."
    },
    {
      "name": "appeal_window_body",
      "description": "Which office the window belongs to."
    },
    {
      "name": "appeal_window_opens_on",
      "description": "ISO date the window opened. Empty when the calendar does not publish one."
    },
    {
      "name": "appeal_window_closes_on",
      "description": "ISO date the window closes."
    },
    {
      "name": "appeal_window_verified_on",
      "description": "The date this window was last compared, automatically, against a captured copy of the office's published calendar. Empty means we hold no window for that township — we never print a deadline we have not compared."
    }
  ],
  "missing_values": "An empty cell means the value is not published by the source, or that our sample floor suppresses it. It is never written as 0 — a zero in this file is a measured zero.",
  "coverage": {
    "records": "38 townships × tax years 2023–2025",
    "temporal": "2023/2025",
    "spatial": "Cook County, Illinois"
  },
  "generated_on": "2026-09-28",
  "generated_by": "civicdelta.dataset_exports.write_exports",
  "mirrors_page": "/property/townships/",
  "sql": {
    "townships": "\nSELECT township_code, township_name, triad_name, count(*) FILTER (WHERE class::text LIKE '2%%') AS residential\nFROM core.parcels WHERE jurisdiction = 'IL-Cook' AND township_code IS NOT NULL\nGROUP BY 1, 2, 3 ORDER BY township_name\n",
    "reassessment": "\nWITH a AS (SELECT pin, township_code, tax_year, mailed_tot::float8 AS v FROM property.assessments\n           WHERE jurisdiction = 'IL-Cook' AND class::text LIKE '2%%' AND mailed_tot > 0)\nSELECT x.township_code, y.tax_year, count(*), percentile_cont(0.5) WITHIN GROUP (ORDER BY y.v / x.v)\nFROM a x JOIN a y ON y.pin = x.pin AND y.tax_year = x.tax_year + 1 AND y.township_code = x.township_code\nGROUP BY 1, 2\n",
    "assessor_appeals": "\nSELECT township_code, tax_year, count(*), count(*) FILTER (WHERE change = 'change')\nFROM property.assessor_appeals\nWHERE jurisdiction = 'IL-Cook' AND class ~ '^2[0-9]{2}$' AND tax_year = ANY(%(years)s) AND status LIKE 'closed%%' AND change IS NOT NULL\nGROUP BY 1, 2\n",
    "bor_appeals": "\nSELECT township_code::text, tax_year, count(*), count(*) FILTER (WHERE result = 'Decrease')\nFROM property.bor_appeals\nWHERE jurisdiction = 'IL-Cook' AND tax_year = ANY(%(years)s) AND result IS NOT NULL\n  -- The Board of Review file writes class as 29900 for 2022-2023 and 299 from 2024 (measured 14 Sep 2026).\n  AND (CASE WHEN class >= 1000 THEN class / 100 ELSE class END) BETWEEN 200 AND 299\nGROUP BY 1, 2\n",
    "appeal_calendar": "\nSELECT township_code, body, opens_on, closes_on, verified_on FROM property.appeal_calendar\nWHERE tax_year = %(year)s ORDER BY township_code, body\n"
  },
  "sources": [
    {
      "source_key": "cook_assessor_appeals",
      "dataset_title": "Assessor - Appeals",
      "publisher": "Cook County Assessor's Office",
      "dataset_id": "y282-6ig3",
      "dataset_page": "https://datacatalog.cookcountyil.gov/d/y282-6ig3",
      "loaded_on": "2026-09-28",
      "terms_url": "https://datacatalog.cookcountyil.gov/",
      "terms_summary": "Published as open data on the Cook County Open Data portal. Confirm portal terms of use and record the date.",
      "terms_verified_by_a_human_on": null,
      "attribution": "Cook County Assessor's Office, “Assessor - Appeals” (dataset y282-6ig3), loaded 2026-09-28"
    },
    {
      "source_key": "cook_assessed_values",
      "dataset_title": "Assessor - Assessed Values",
      "publisher": "Cook County Assessor's Office",
      "dataset_id": "uzyt-m557",
      "dataset_page": "https://datacatalog.cookcountyil.gov/d/uzyt-m557",
      "loaded_on": "2026-09-28",
      "terms_url": "https://datacatalog.cookcountyil.gov/",
      "terms_summary": "Published as open data on the Cook County Open Data portal. Confirm portal terms of use and record the date.",
      "terms_verified_by_a_human_on": null,
      "attribution": "Cook County Assessor's Office, “Assessor - Assessed Values” (dataset uzyt-m557), loaded 2026-09-28"
    },
    {
      "source_key": "cook_bor_appeals",
      "dataset_title": "Board of Review Appeal Decision History",
      "publisher": "Cook County Board of Review",
      "dataset_id": "7pny-nedm",
      "dataset_page": "https://datacatalog.cookcountyil.gov/d/7pny-nedm",
      "loaded_on": "2026-09-28",
      "terms_url": "https://datacatalog.cookcountyil.gov/",
      "terms_summary": "Published as open data on the Cook County Open Data portal. Confirm portal terms of use and record the date.",
      "terms_verified_by_a_human_on": null,
      "attribution": "Cook County Board of Review, “Board of Review Appeal Decision History” (dataset 7pny-nedm), loaded 2026-09-28"
    }
  ],
  "attribution": "Source: Cook County Assessor's Office, “Assessor - Appeals” (dataset y282-6ig3), loaded 2026-09-28; Cook County Assessor's Office, “Assessor - Assessed Values” (dataset uzyt-m557), loaded 2026-09-28; Cook County Board of Review, “Board of Review Appeal Decision History” (dataset 7pny-nedm), loaded 2026-09-28. Computed by CivicDelta.",
  "license_note": "Terms are the publisher's, at the terms_url above. Where terms_verified_by_a_human_on is null we have not yet had a person confirm them, and we do not assert a license on the publisher's behalf. CivicDelta's own computation over these files is free to reuse with the attribution line above.",
  "contains": [
    "Residential property only (Cook County class 2xx, including condominium units).",
    "Counts of appeals that were DECIDED; a pending appeal is not in them.",
    "Only appeal windows compared against a captured copy of the office's own calendar."
  ],
  "does_not_contain": [
    "Anything about an individual property, owner or appellant — no PINs, no names.",
    "Dollar amounts. An appeal that changed a value is counted, not measured.",
    "Commercial, industrial or vacant-land appeals.",
    "A prediction. These are township-wide rates over closed cases."
  ]
}
