Vol. 1 · Fitchburg, Massachusetts · Established 1764

Burg Budget

An Independent Accounting of City Hall

How This Is Built

Every dollar figure on this site is machine-extracted, never entered by hand. A scheduled program re-reads the City of Fitchburg's own published documents, extracts the numbers, checks them against each other, and rebuilds every page. This is what it does and where it can go wrong.

The explanatory text on the revenue and department pages (what each item is, where it comes from, who controls it, and applicable tax rates) is the one part of this site that's hand-written rather than scraped — state statute and municipal-finance structure don't change often enough to be worth automating. It's written in plain language on purpose, since most people reading it aren't finance professionals, but the underlying legal citations are real: each "Governing law" link points to the actual Massachusetts General Law on malegislature.gov, verified against the statute's current text rather than assumed from memory. A line item without a citation means it isn't set by a single specific state law (a locally-set fee, a federal grant term, or a bookkeeping offset, for example), not that a citation was skipped. Every dollar figure alongside that text is still pulled from the budget PDF at build time, same as everywhere else.
The italicized "compared to last year" note under every trend chart isn't hand-written, unlike the text above it - it's a sentence generated fresh at build time from that item's own year-by-year figures, written to read the way someone might actually say it out loud rather than like a spreadsheet footnote. The wording (whether something "inched up," "jumped," or "stayed exactly flat") is picked automatically based on how big the swing was, not written in advance and not random - the same figures always produce the same sentence, and the sentence changes on its own the next time the underlying numbers do. The small note directly under it points back to exactly which figures it was built from. That same automated check also watches for a handful of specific patterns worth flagging - a line item showing up in the budget for the first time, a line dropping to zero for a year before coming back, or a year that breaks a multi-year streak of consistent increases or decreases - and adds a sentence about it when it finds one, using nothing but that item's own figures. Deliberately absent: a bare "this has gone up most years" observation, since nominal spending rises most years almost everywhere thanks to inflation and cost-of-living raises alone - that's noise, not signal. What actually matters is answered by a "share of the whole" check instead: a department's share of the total city budget, a revenue category's share of total operating revenue, a line item's share of its category - computed for the earliest and latest years on record, and mentioned whenever that share has moved by a percentage point or more (skipped when it hasn't, so it doesn't clutter pages where the share has stayed put). For department spending specifically, that shift is spelled out as a change in priority - is the city making this a bigger or smaller piece of the budget than it used to be - since that's the real question a rising dollar figure alone can't answer. The "Add: 2 1/2%" line gets one further, purpose-built check on top of the generic ones: Proposition 2½ caps that line at exactly 2.5% of the prior year's levy limit, so the pipeline computes what that 2.5% should have been each year and says so whenever the city actually took less (or, in principle, more) than the full amount.
A handful of revenue line items get a "Mayor's Corner" box: a check comparing the sitting Mayor's average for that line against the immediately preceding Mayor's, using each fiscal year's own budget book to identify who was Mayor at the time (every year's Mayor's Budget opens with a cover page naming them) rather than guessing from election dates. This only runs on line items that reflect an actual annual choice the Mayor makes - "Add: 2 1/2%" (how much of the state-allowed property tax increase to actually take) and the handful of locally-set fee lines under Local Receipts (trash fees, licenses and permits, cemetery fees, rentals, and general fees/charges). It's deliberately left off the local-option excise taxes (meals, rooms, marijuana), since those rates are set once by City Council ordinance rather than chosen fresh each budget season, and off anything state-formula-driven or driven by market/enforcement activity rather than a number the city itself sets (fines, investment income, reimbursements).
A few pages also carry a "Backstory" box - a short, separately hand-researched note with its own named source, distinct from both the generated trend sentence and the plain-language explanations above. These exist only where they add real context a reader would otherwise be missing (why the hotel tax briefly hit zero, why the meals tax has no history before FY2026) and are added sparingly, not for every line - most pages won't have one.

Data Sources

Mayor's Budgets — the city's Archive Center, category "Mayor's Budgets", currently FY2016 through the present. Each budget book contains a General Fund Expenditures-by-department table and a General Fund Revenue recap covering that year plus several prior years.

Audited Financial Statements — the Office of the City Auditor's annual audited statements, cataloged with links back to 2010.

Retirement & OPEB reports — actuarial valuations of the pension system and retiree health benefits liability, cataloged from the city's own archive categories.

How the Numbers Are Extracted

Fitchburg's budget books aren't spreadsheets — they're PDFs where each number is just text positioned on a page. The pipeline opens each PDF, groups text by its position into rows and columns, and reconstructs the table the same way a person reading it would: find the header row naming each fiscal year and column type (Actual, Projected, Requested, Mayor), then read each department's row beneath it.

For every fiscal year, only that year's own adopted ("Mayor") column is treated as authoritative for that year — a department's FY2022 figure always comes from the FY2022 budget book, never restated by a later one.

Validation

After extracting each department's row, the pipeline adds them up and compares the sum to the "Total Expenditures" row printed in the same document. If they match (within rounding), the year is marked high confidence. If they don't, the year is marked unverified and shown with a note rather than silently published. As of today, fiscal year(s) 2016 fall into this category.

Known Limitations

Update Schedule & Source Code

The data pipeline runs on a schedule and rebuilds this entire site automatically whenever the city publishes something new. Every line of the pipeline, and every page you're reading, is open source: https://github.com/nmadd57/burgbudget.