12 documents written by this project, from records the town and district published and from documents obtained by request. Each one is published as a web page, a PDF and its source text, and most are checked by a script that recomputes every figure in them.
Read this first
Written by this project, not by the town or the district.
Nothing on this page is an official document. These analyses are written here, from documents the town and district published and from records obtained by request. They have not been reviewed or endorsed by the Town of Lunenburg, the Lunenburg School Committee, the Finance Committee or Lunenburg Public Schools, and this project is not affiliated with any of them.
Every figure in an analysis is recomputed from the underlying data by a script, and the script is named on the row. The data itself is published below — you do not have to take any of this on trust, and you should not.
Where an earlier version of an analysis was wrong, the correction stays in the text rather than being edited out. Several of these documents describe their own earlier errors.
The documents
Newest first among the current work. Each row links the readable version, the printable one, the source text with its checksum, and — where one exists — the command that reproduces every figure in it from the database.
The school department’s FY26, read line by line from the town’s own ledger. What the $482,101 headline actually is, and three things it cannot explain.
sha256 c780f91f702401575b1b6ebbf94136ddc90a3620d4be8f7faf31814065e7541f
The same ledger read for the other 67 departments. Snow at 292% of its appropriation, a Reserve Fund never touched, and school costs sitting on the town’s books.
python3 scripts/verify_fy26_closeout_town.pysha256 c795329e63c4b2f07d125a01813bc783ef24ea0b48934b2acdf2bb0bc6369e5c
Did the money the town budgeted match the money it spent? Careful about what the documents can and cannot support.
sha256 8f3e4e7199a727e228e585f2f01e0539487235b7478d8c8cf500f9a7078ca5ac
How much of Lunenburg’s certified free cash is genuinely spendable, built from the state’s own proofs for nine towns.
sha256 790b2f3d1500baaec6a19d0bcb82398e1382cb91e6f9339a3a7d1f6f343b3820
The one programme where both sides of the money are visible, and therefore the only place the net-versus-gross problem can be measured rather than described.
sha256 4367d1d8fb11b4185b558a94404fe7f6359deb371e85586f31b34bc2db0bff52
Three years of the athletics revolving fund at transaction level, from a records request. Includes $254,121.18 described only as “per memo”.
sha256 5a555381965d4f67dfc61d40ebe003164fb1d36327cf26c09ba96046656f3201
Special education is about 22% of the budget and the largest single driver of the gap. What the rates rest on.
sha256 1569eb3d4c4b70a0a77dd3d2194605e78add1f369e8540d2e2f92e138450d6cf
Whether the special education escalator can be distinguished from grant money unwinding. It currently cannot, and this says why.
sha256 e15cb5aad9fda3548fa64902298ebac12891187b84b069dc0ef6ad3cdf766086
What the FY27 budget did, what the override would have done, and what the votes actually decided.
sha256 ecd22c4236375ad1c8037e225f90964dc994c0f4960ecef36e23993a4748c281
Reconciling the district’s published cut list against its own budget columns.
sha256 292cf06ead505b654da6b3c1e210912227d5de73ee3653b5a66292ac98557970
What six neighbouring districts did with the same year, and what that does and does not tell you about Lunenburg.
sha256 ab6bdb11829ac11648675e41d0e840943ad61320d83faef5cbe594f839c0f961
Every calculation the site publishes, with its inputs, its formula, a worked example, and whether each figure is published, contractual, statutory, our measurement or our assumption.
sha256 e545e26c157b9fa6c3044aac6dfbbc75f19260d12b22336af85e1a3233c51823
Underneath all of it
Nothing above has to be taken on trust. These are the same sources the analyses are computed from, published at stable addresses.
/data/lunenburg.db
Every figure on this site in one SQLite file. The same database the analyses are computed from.
/api/index
A read-only JSON API. No key, no rate limit. /api/schema states the grain of each table and the four ways to get a confident wrong answer out of it.
/sources
Every source document, with its address, the publisher’s own filename and a checksum.
/docs/data/gross-school-budget-fy2026.xlsx
The district’s budget in the district’s own shape, with what was actually spent and what other money paid for it — and amber cells wherever that money is not held.
Index generated 2026-09-02 by scripts/build_reports_index.py, so it cannot describe a document that is not there or omit one that is.