Skip to contents

This function calculates a Cook County property tax bill using levy, base, and TIF information from the Cook County Clerk and Assessor. It allows users to simulate different tax scenarios by changing the input data. For example, this function can be used to answer the following questions:

  • What would my tax bill be if my assessed value was $10K lower?

  • What would my tax bill be if Chicago increased its levy by 5%?

  • What would my tax bill be if my property was in a different neighborhood?

  • What would my tax bill be if a large new development was added to my neighborhood?

Most of the data necessary to answer these questions is built into the included database. Data for the most current tax year is usually available the following year (i.e. 2021 data is available in 2022). If needed, users can supply current tax year data manually. See vignettes for more information.

Usage

tax_bill(
  year_vec,
  pin_vec,
  tax_code_vec = lookup_tax_code(year_vec, pin_vec),
  agency_dt = lookup_agency(year_vec, tax_code_vec),
  pin_dt = lookup_pin(year_vec, pin_vec),
  tif_dt = lookup_tif(year_vec, tax_code_vec),
  simplify = TRUE
)

Arguments

year_vec

Numeric vector of tax years for which to return bills.

pin_vec

Character vector of 14-digit Property Index Numbers (PINs) with no dashes or spaces.

tax_code_vec

Character vector of 5-digit Cook County tax codes. These codes are included on individual property tax bills. If missing, the lookup_tax_code function is used to retrieve tax codes based on year_vec and pin_vec.

agency_dt

data.table containing the levy and base amount for each taxing district in the specified tax code. Data must be identical to the format returned by lookup_agency. If missing, lookup_agency is used to retrieve each tax district's levy and base based on year_vec and tax_code_vec.

pin_dt

data.table containing the exemptions and assessed value specific to each PIN and year. Data must be identical to the format returned by lookup_pin. If missing, lookup_pin is used to retrieve each PIN's information based on year_vec and pin_vec.

tif_dt

data.table containing any TIF applicable to the specified tax code. Is an empty data.table if no TIF exists for the property. Data must be identical to the format returned by lookup_tif. If missing, lookup_tif is used to retrieve the tax code's TIF share based on year_vec and tax_code_vec.

simplify

Default TRUE. Boolean to keep only the columns that appear on a real tax bill. Additionally, collapses the TIF output column final_tax_to_tif to a line-item, similar to the format on a real tax bill.

Value

A data.table which contains a tax bill for each specified PIN and year. Each tax bill is broken out by taxing district, meaning there is a row for each district relevant to each PIN. Most PINs have 10-15 districts (rows) associated with each year.

Details

Note that all vector inputs (suffixed with _vec) have two input modes:

  1. If the input vectors are the same length, pairwise tax bills are returned (each PIN, year, and tax code combination returns 1 bill).

  2. If the input vectors are different lengths, the Cartesian product of the vectors is returned (5 years and 10 PINs will return all 5 years of bills for each PIN).

The district-level tax amounts returned by this function will not perfectly match the amounts on real tax bills. This is due to rounding and truncating that occurs in the real system. Most estimated amounts will still be within a few dollars of the amounts on real bills.

PIN and year combinations not found in the database will be silently dropped from the output.

Examples

if (FALSE) { # \dontrun{
# Get a single tax bill
tax_bill(2019, "14081020210000")

# Get tax bills for multiple years
tax_bill(2017:2019, "14081020210000")

# Get multiple tax bills for different PINs and years
tax_bill(c(2014, 2019), c("14081020210000", "07133020190000"))

# Get a tax bill for a new location
tax_bill(2019, "14081020210000", tax_code_vec = "35011")
} # }