Tracking Our Cash / Calgary
Sources
Every number on this site comes from something the City of Calgary publishes. This page lists each source, what we take from it, and where our copy lives so you can check it yourself.
How the data is collected
A scheduled job on GitHub runs every morning at 7:00 Calgary time (6:00 in winter). It downloads each source below, saves the result as plain CSV or JSON files in the project's GitHub repository, and rebuilds the site. Every change is a commit, so the repository's history shows what each source said on each day. The code for each step is linked in the tables.
City jobs
| Source | What we take from it | How often | Our copy |
|---|---|---|---|
| City of Calgary careers page calgary.ca, web page |
Every open posting: title, job category, closing date and link | Daily | data/jobs/postings.csv, daily copies in data/jobs/snapshots/Code: collectors/jobs.py |
| City job posting pages recruiting.calgary.ca, one page per posting |
Department, union, pay range, weekly hours, and how many permanent and temporary positions, from each posting's "Position and Pay Information" section | Daily, while a posting is open | Same file as above Code: collectors/jobs.py |
| Internet Archive copies of the careers page web.archive.org (Wayback Machine) |
Postings from January 2024 until daily collection started, dated by the first archived copy that lists them; pay and positions where the posting's own page was also archived | Once, as a backfill | Rows marked source=archive in data/jobs/postings.csvCode: scripts/backfill_jobs_from_archive.py |
| Compensation Disclosure List Open Calgary, dataset 9bze-mzx6 |
The salary range for every City position title, 2014 onwards, used to estimate pay when a posting doesn't show it | Daily (the City updates it yearly) | data/jobs/compensation.csvCode: collectors/compensation.py |
City staff and payroll
| Source | What we take from it | How often | Our copy |
|---|---|---|---|
| Annual Financial Reports calgary.ca, one PDF per year, 2010 onwards (each covers five years, so figures go back to 2006) |
Salaries, wages and benefits from "Expenses by object", and full-time equivalents (City and related authorities) and full-time equivalents per 1,000 people from "Demographic and other information" | Checked daily; a new report comes out each spring | data/workforce/annual_reports.csv, data/workforce/budget_fte.csv, list of documents read in data/workforce/documents.csvCode: collectors/workforce.py |
| 2026 Budget as approved, December 3, 2025 calgary.ca, PDF |
Budgeted full-time equivalents for 2023 to 2026 by department and business unit, and management exempt and union positions by department | Checked daily for new budget documents, such as the 2027–2030 budget |
Budget
| Source | What we take from it | How often | Our copy |
|---|---|---|---|
| Calgary Open Budget Open Calgary, dataset fqax-i3nz |
Operating and capital budget by department, business unit and year from the 2023–2026 Service Plans and Budgets, with actual capital spending for 2023 and 2024 | Daily (the City updates it yearly) | data/budget/open_budget.csvCode: collectors/budget.py |
Grants
| Source | What we take from it | How often | Our copy |
|---|---|---|---|
| Civic Partners funding calgary.ca, web page |
Operating, capital, community safety and innovation grants to each Civic Partner, by year | Daily (the City updates it yearly) | data/grants/grants.csvCode: collectors/grants.py |
| FCSS funding allocations calgary.ca, web page |
Family & Community Support Services funding to each agency and program, 2021 onwards | Daily (the City updates it each funding cycle) |
Wards
| Source | What we take from it | How often | Our copy |
|---|---|---|---|
| Ward budget and expenditure disclosures calgary.ca, one PDF per ward per year, e.g. Ward 1, 2026 |
Each ward office's budget, total spending (salaries included) and every itemized expense with vendor and reason, 2024 onwards | Daily (the City updates them through the year) | data/wards/ward_budgets.csv, data/wards/ward_expenses.csvCode: collectors/ward_expenses.py |
| Ward Boundaries Open Calgary, dataset tz8z-hyaz |
The shape of each of the 14 wards, for the map, and its councillor | Daily | data/wards/ward_boundaries.geojsonCode: collectors/ward_boundaries.py |
Council votes
| Source | What we take from it | How often | Our copy |
|---|---|---|---|
| Council and Committee Votes Open Calgary, dataset ruq3-99hx |
Every recorded vote at council and committee meetings since October 7, 2020: meeting, date, motion text, result, and each member's vote | Daily (the City adds new votes about monthly) | data/votes/motions.csv, data/votes/ballots.csvCode: collectors/votes.py |
| Council and committee minutes City of Calgary meetings portal (eScribe) |
Recorded votes from meetings the dataset above doesn't have yet: motion text, result, and who voted for and against. Only the meeting types the dataset covers are read, and each is dropped once the City adds that meeting. Minutes don't list absences. | Daily | data/votes/minutes_motions.csv, data/votes/minutes_ballots.csvCode: collectors/votes_minutes.py |