Explore the Village of Oak Park's budget and learn how the money is being spent.
Oak Park has six main governing bodies that collect taxes and provide services within the village.
We started with The Village of Oak Park’s budget because it is Oak Park's governing body.
The Village of Oak Park operates under the Village Manager form of government. An elected Village Board, with a president and six trustees, sets policy and hires a professional manager to oversee day-to-day operations and the delivery of municipal government services. The elected Village Clerk records the proceedings of all Village Board meetings and special meetings; maintains all official legislative records, certifications, and the Village seal; and monitors Village compliance with the Illinois Open Meetings Act and Illinois Freedom of Information Act.
The Village of Oak Park's responsibilities include creating a safe community; protecting the community's public health; maintaining municipal infrastructure; and managing land use (building codes and urban planning). To provide the related services, the Village operates the Fire, Police, Public Health, and Public Works departments, among other smaller departments.
The budgets are posted on The Village of Oak Park’s website.
This website includes the Village's expenses, as reported in its actual budget documents. The funds, departments, and descriptions are as the Village officially reports. All expenses, except for the current and previous year, are actual expenses as reported in published budget documents. Estimates for the current and previous year are pulled from the current fiscal year’s budget. All expenses and their coding is unchanged by us, with the exception of merging duplicate line items.
The website has two main views: Function and Fund. To help community members understand the budget, we created eight functional areas and grouped each line item with the best matching function. This is the Function view. The Fund view organizes the expenses by fund and department as shown in the budget documents.
The Village codes interfund transfers as expenses in its budgets. For consistency, these interfund transfers are likewise included as expenses in this website. These transfers can be found in the interfund transfers grouping in the function view and interspersed with their originating fund/department in the fund view. Many of these transfers, as well as some debt payments, are coded as expenses for the Finance Department. Because of this, the Finance Department’s expenses appear larger than the actual costs associated with operating the department.
A functional area is grouping of budget line items by general programmatic purpose. Many states and municipalities group their budgets by functional areas to help people understand how resources are allocated. Because the Village of Oak Park does not use functional areas, we created a set of six functions that represent the Village's main services and two functions that isolate special accounting features in the budget. The following definitions describe what is included in each function.
This project had two primary parts: the data collection and cleanup, and the website itself. All of the code and data are open source on GitHub.
The website was built by Derek and is based off of the open source Budget Breakdown code developed by Derek Eder, Nick Rougeux, Open City and DataMade, which has been used to visualize budgets for Cook County and Macoupin County, IL, the City of New Orleans, Washington State, and New York State. We customized the code to fit Oak Park’s budget and match the colors of the Village flag.
The data was collected, extracted, and cleaned by Alicia. Using an open source tool called Tabula, she was able to extract budget tables from the adopted budget PDFs. Once the data from each budget was extracted into its own spreadsheet, we merged the set into one spreadsheet containing all the years' budget data using our data cleanup script.
To understand how we verified that our converted budget data matched the source documents, it is helpful to understand what each expense table in the budget document includes. For our purposes, we focused on two amounts for each expense line item:
To illustrate this format, here is page 70 of the Fiscal Year 2021 Budget:
The 2021 Budget includes actual expenses for 2018 and 2019, as well as, the adopted budget expenses for 2021. After pulling the expenses for 2018, 2019, and 2021, we totaled up the values for each year. To ensure our data was correct, we compared our total 2021 expenses with the total reported in the 2021 Budget. The budget documents do not include totals for actual expenses in prior years. So, when our total for the adopted budget expenses matched the same reported in the budget, we were assured that we had captured all three years of data correctly. Once the totals matched, we doubled checked our data by visually comparing our spreadsheet with the source PDF documents to catch any omissions or errors. None were found.
There were several issues we encountered when preparing the budget data for this site:
As explained above, budget data was only made available in PDF documents published on The Village of Oak Park’s website. We used a very helpful tool called Tabula to help convert the tables within these books into spreadsheets, but it was a time-consuming process. This project would have been much easier if we had the spreadsheets provided directly by the Village.
Our imported total expenses and the budget’s reported total expenses matched for the fiscal year 2019 and 2021 budgets. However, this process was not successful for the 2017 budget. The 2017 budget reports its total adopted expenses for fiscal year 2017 to be $176,038,974, but our imported amount totals to $176,404,247, a difference of $365,373. Despite importing the data multiple times, this discrepancy remained. We totaled the individual tables and all of those totals matched the table totals shown in the PDF budget. We are confident that the imported expenses match the expenses in the fiscal year 2017 budget. We do not have an explanation for why the fiscal year 2017 budget reports a total adopted expense amount different from the total derived from the line items that the same PDF contains.
We used a combination of Fund ID, Department ID, Program ID, and Account ID to identify and group each line item in the budget across all included years. However, in doing so, we discovered that there were a number of duplicate line items. To resolve this, we aggregated matching line items and combined them into one row. You can see how we did this in our data cleanup script.
If you have additional questions not already answered in this FAQ, please email us at firstname.lastname@example.org.