live record51.0447°N · 114.0719°Walt 1045 m

/finances · budget vs actual

Not all variances are alike — some are one-time, some are structural

The gap between what the City budgeted and what actually happened is only meaningful once you know why. A one-time investment-income surge is not proof of structural fiscal health; a single year’s capital under-spend is normal because capital plans run multi-year. This page lays out every line of the audited consolidated statement of operations, budget vs actual, and tags each variance so the recurring patterns are told apart from the one-offs. Net municipal taxes appear here as a City-wide revenue line — how that maps to a resident’s bill is a separate question the property-taxes section answers. Every figure links to the page of the Annual Financial Report it was read from.

Consolidated statement of operations · 2024

Every line: budgeted vs actual

All figures in thousands of CAD, read from the 2024Annual Financial Report’s audited Consolidated Statement of Operations (the AFR budget-comparison column is the denominator). Sort any column; filter to revenue or expense — the totals row tracks the filtered set. The classification is editorial; hover or tap it for the rationale.

ClassSource
Operational services$1,725,475$2,352,755$627,280+36.4%AFR p.45
Investment income$110,110$312,073$201,963+183.4%AFR p.45
Net taxes available for municipal purposes$2,544,594$2,627,877$83,283+3.3%AFR p.45
Government transfers related to operating$152,909$178,613$25,704+16.8%AFR p.45
Community services$1,603,190$1,626,943$23,753+1.5%AFR p.45
Licences, permits and fees$138,514$153,977$15,463+11.2%AFR p.45
Miscellaneous revenue$32,366$44,051$11,685+36.1%AFR p.45
Fines and penalties$83,047$75,731−$7,316−8.8%AFR p.45
Infrastructure services$260,800$243,144−$17,656−6.8%AFR p.45
Sales of goods and services$1,377,646$1,341,457−$36,189−2.6%AFR p.45
Planning and development services$299,794$236,089−$63,705−21.2%AFR p.45
General government$594,486$526,276−$68,210−11.5%AFR p.45
Government transfers related to capital$760,636$684,848−$75,788−10.0%AFR p.45
Developer contributions$231,285$145,368−$85,917−37.1%AFR p.45
Equity in earnings (loss) of ENMAX Corporation$353,000$181,248−$171,752−48.7%AFR p.45
Developer contributions-in-kind related to capitalnot budgeted$345,075n/aAFR p.45
Total · 16 lines$10,267,852$11,075,525$462,598

How the classification works

One-time vs structural vs mixed vs unclassified

The classification is editorial, assigned in a checked-in file reviewed as content — never computed from the figures at render time. The rule is applied strictly to the primary-verified multi-year figures; where the evidence is thin the honest answer is unclassified. Across the 20202024 statement: 9 structural · 0 one-time · 1 mixed · 13 unclassified.

one-time
A variance driven by a single, named, non-recurring event (an asset sale, a one-off grant tranche). At MVP no line is classified one-time: assigning a one-time cause requires verbatim-verifying the AFR's stated cause, and an unverified causal label must not ship — an honest unclassified is used instead.
structural
A line consistently over or under budget in the same direction across multiple years (≥3 of the observed years by ≥5%). A structural variance is a candidate for budget-realism review — it recurs by design, not by accident.
mixed
A line with both a directional lean and a genuine volatility / sign-flip component, so neither one-time nor structural alone is honest.
unclassified
Insufficient multi-year history (fewer than 3 observed years — e.g. the pre-2022 expense taxonomy was retired by the re-alignment), or a real but sub-threshold pattern. Rendered honestly rather than guessed; the section upgrades lines as evidence accumulates.

Capital plan variance

A single year’s capital under-spend is normal

Capital-related lines on the statement above — government transfers related to capital, developer contributions — run far under their single-year budget every year (government capital transfers were ~50% below budget in most years). That is expected, not a failure: capital plans run multi-year and grant tranches arrive on project milestones, so any one year’s figure is a slice of a multi-year plan. Reading a single year’s capital under-spend as money the City “didn’t need” is the second framing this page rejects. The planned-vs-actual capital picture is not duplicated here — it lives, in full, on the capital-program sub-page. see alsocapital plan: planned vs actual

Methodology

The denominator (which budget).For each reporting year, both the budget and the actual are read from that year’s ownAnnual Financial Report Consolidated Statement of Operations — the Note-referenced “Budget” column beside the audited “Actual” column (afr-budget-comparison-column). This is the AFR budget-comparison column, chosen for audited internal consistency. The AFR Budget column is Note-referenced (Note 16/17/18 depending on year) and reflects the budget as amended through mid-cycle adjustments, not the original 2023–2026 Service Plans & Budgets council-approved figure. MCA handling is documented in the methodology section (spec FR-020). A later report sometimes restatesa prior year’s actual; the figure shown is always that year’s own report as originally published — restatements are noted, never substituted.

Mid-cycle adjustments (MCA).The AFR Budget column already reflects the budget as amended through mid-cycle adjustments, not the original Service Plans & Budgets council-approved figure. The council-approved-vs- amended reconciliation is out of MVP scope and recorded in the artefact’s derivation rather than charted.

Classification rules. A line is structural when ≥3 of its observed years show same-direction variance ≥5% and the sign does not flip; mixed when a directional lean coexists with a genuine sign-flip/volatility; one-time only when a single dominant year has a primary-verified named cause (none qualify at MVP — an unverified causal label must not ship); unclassified when there are fewer than 3 observed years (the pre-2022 expense taxonomy was retired by the re-alignment) or the pattern is real but sub-threshold. The classification is editorial — loaded from a checked-in file, never computed at render time.

Every figure was read directly from the cited AFR page by the author and each year’s per-line figures reconcile to that statement’s own printed subtotals — verification tier primary-verified. Sources:

Download the data. The page renders from this same artefact and the checked-in editorial classification file — no editorial-only data layer. The full multi-year series for every line (including the long tail beyond the top-10 drilldowns) is in the JSON.

verification
primary-verified
derivation
Every budget and actual figure was read directly from the cited PDF page of the relevant year's City of Calgary Annual Financial Report by the author (primary-verified). For reporting year Y, both the budget and the actual come from year Y's OWN AFR Consolidated Statement of Operations (the Note-referenced 'Budget Y' column and the audited 'Actual Y' column on the same page) — the AFR's budget comparison column, chosen as the denominator for audited internal consistency (spec FR-020 / US5). Each year's revenue and expense per-line figures were reconciled to that statement's own printed subtotals (see verification_cross_checks). Later AFRs sometimes RESTATE a prior year's actual; the canonical figure is the year's own AFR as originally reported — restatements are noted, never substituted (spec Edge Cases). The 2022 organizational re-alignment changed the expense taxonomy: 2020–2021 use the old function categories, 2022–2024 the new five segments; the two expense line sets are NOT stitched and the per-line view surfaces the break as a discontinuity (spec FR-012/FR-025). Variance = actual − budget; percentage variance is null where budget is not set (no false % against zero). Variance classification (one-time/structural/mixed/unclassified) is EDITORIAL, loaded from the checked-in web/public/data/finances/_classifications/budget-vs-actual.yaml (spec FR-006/FR-026) — never algorithmically derived. All derived figures are computed once here and baked into the `derived` block (spec FR-027 / feedback_math_in_code).
sources