The money
The town appropriates. Families pay a fee into a separate fund. That fund spends. For every other line in the budget you can see the first of those three and nothing else — which is why what athletics shows about the gap between an appropriation and a cost matters far beyond athletics.
Four claims a resident could repeat at a meeting. Each is recomputed from the database when this page is built, and each names the table it came out of.
An athletics appropriation is not what athletics costs — and here that is a measurement, not a warning.
athletics_history joined to athletics_by_sport on comparable categories, FY24 only.Two-thirds of the bus bill was paid outside the town’s budget in FY24. A year later it was 3.6%.
athletics_history both sides, checked against athletics_by_sport’s own transportation total — the two budget sides sum to it exactly in both years.Most of what came into the fund in FY25 was four journal entries nobody outside Town Hall can read.
fund_1301_cash_journal, src = ‘GEN’.Participation is roughly flat over three years while the fee it pays has risen 30%.
athletics_by_sport where metric = ‘Total Athletes’, and athletic_fee_schedule.Three figures here differ from the written analyses. These are the recomputed ones.
Every number on this page is derived from the database at build time. The reports are prose, and prose was true on the day it was written. Where they disagree, this is what the data now says — and what moved underneath it.
The town’s appropriation and what the fee-funded revolving fund spent, added only in the years both were published. 4 of 13 years show no fund side at all — and that is a gap in the record, not a fund that spent nothing.
| Year | Town appropriation | Fee-funded fund | Whole programme | Fund’s share |
|---|---|---|---|---|
| FY14 | $194,316 | $108,147 | $302,463 | 36% |
| FY15 | $224,799 | $111,938 | $336,737 | 33% |
| FY16 | $210,913 | $113,819 | $324,732 | 35% |
| FY17 | $222,695 | $156,551 | $379,246 | 41% |
| FY18 | $326,478 | $103,001 | $429,479 | 24% |
| FY19 | $307,931 | $87,902 | $395,833 | 22% |
| FY20 | $292,049 | not published | ≥ $292,049 | — |
| FY21 | $356,700 | not published | ≥ $356,700 | — |
| FY22 | $395,940 | not published | ≥ $395,940 | — |
| FY23 | $320,384 | not published | ≥ $320,384 | — |
| FY24 | $285,281 | $129,125 (partial) | ≥ $414,406 | — |
| FY25 | $533,464 | $53,940 (partial) | ≥ $587,404 | — |
| FY26 | $518,334 | $146,911 | $665,245 | 22% |
FY20–FY23 is blank on the fund side because no document published one. FY24 and FY25 carry two lines only, drawn paler, and the fund certainly paid for more than two things in those years. So the whole-programme figure is a floor wherever it is marked “≥”. The fund’s REVENUE is not on this chart at any height: it is a third quantity, and a published figure of “$335,856 through the revolving fund” was once revenue and spending added together.
What this does not show
Whether the fund’s share is stable. It is 22% in FY19 and 22% in FY26 — but there is nothing in the archive between them on the fund side, and two points cannot show a line. What did change is the composition: coaches and supplies early, transportation throughout, officials and uniforms by FY26.
Athletic transportation is the clearest case on the page, because for two years we can see the whole cost and how it was split. In FY24 the town’s line was $40,000 against a $117,555 bill. In FY25 the fund’s share fell to $3,244.
| Year | Town budget line | Fee-funded fund | Outside the budget |
|---|---|---|---|
| FY14 | $17,000 | $30,085 | — |
| FY15 | $21,600 | $40,742 | — |
| FY16 | $23,000 | $33,308 | — |
| FY17 | $23,000 | $50,986 | — |
| FY18 | $33,500 | $27,450 | — |
| FY19 | $24,975 | $40,000 | — |
| FY20 | $38,795 | not published | — |
| FY21 | $45,000 | not published | — |
| FY22 | $48,755 | not published | — |
| FY23 | $39,880 | not published | — |
| FY24 | $40,000 | $77,555 | 66% |
| FY25 | $87,822 | $3,244 | 3.6% |
| FY26 | $127,550 | not published | — |
What this does not show
Why the fund stopped paying. Three orderings fit the same rows: the town took the cost on because the fund could not carry it; the fund was relieved of it as policy and the cash consequence followed; or both follow from a third decision recorded in the memos. Nothing in these files distinguishes them.
That the FY26 fund paid nothing for buses. The fund’s own year-end report bundles transportation inside one line reading purchase of service (officials, uniforms, transportation, ice time, dues), so the FY26 fund bar here is not published separately rather than zero.
The district’s own sport-by-sport workbook is the only document that puts a cost against a category. Its columns sum to its own printed total to the cent in both years — the generator refuses to publish this chart if they stop doing so, because then the split would be ours rather than the document’s.
| Year | Coaches | Transportation | Officials | Everything else | Total |
|---|---|---|---|---|---|
| FY24 | $127,088 | $117,555 | $51,570 | $55,429 | $351,643 |
| FY25 | $91,589 | $91,066 | $50,696 | $50,371 | $283,721 |
Two years, FY24 and FY25 — the only years the workbook observes. Its two later columns are the prior year escalated 6.5% and are model output, not data, so they are not drawn.
Three different measurements, on one axis and never added: the coaching lines in the town’s budget, coaching paid by the fund in the years the fund reported it, and what the district’s workbook says coaching cost.
| Year | Town budget | Fund | Workbook cost |
|---|---|---|---|
| FY14 | $114,636 | $45,278 | — |
| FY15 | $130,661 | $27,221 | — |
| FY16 | $120,646 | $40,092 | — |
| FY17 | $130,020 | $34,815 | — |
| FY18 | $163,146 | — | — |
| FY19 | $150,636 | — | — |
| FY20 | $92,801 | — | — |
| FY21 | $143,417 | — | — |
| FY22 | $147,191 | — | — |
| FY23 | $100,351 | — | — |
| FY24 | $46,733 | — | $127,088 |
| FY25 | $155,614 | — | $91,589 |
| FY26 | $177,671 | — | — |
What this does not show
Who was on the fund’s payroll. The cashbook shows $121,347 of payroll run through the fund in FY24 and carries no name, no position and no object code on a payroll row. The workbook attributes $127,088 of coaching cost to the same year, and the general fund also carried coaching lines that year. The two do not add up and the ledger cannot say why.
That a line moving means people. A budget line is dollars. It is never a count of coaches, and the town publishes no coaching headcount.
The workbook prints a cost for each sport and prints a headcount beside it, and never divides one by the other. This division is ours. In FY25 it runs from $1,298 a participation for Ski Team down to $46 for Unified Track ($100), against a first-child fee of $250. Across the whole programme it is $521 in FY24 and $424 in FY25.
The dashed rule is the high-school fee a first child paid that year — $250.
| Sport | Season | Participations | Cost | Per participation |
|---|---|---|---|---|
| Ski Team | Winter | 10 | $12,984 | $1,298 |
| HS Basketball - Girls | Winter | 23 | $25,535 | $1,110 |
| Football | Fall | 39 | $41,920 | $1,075 |
| Ice Hockey - Girls | Winter | 5 | $5,121 | $1,024 |
| HS BasketBall - Boys | Winter | 27 | $23,603 | $874 |
| Golf | Fall | 16 | $11,266 | $704 |
| Girls Soccer | Fall | 34 | $19,522 | $574 |
| Boys CC | Fall | 9 | $4,866 | $541 |
| Ice Hockey - Boys | Winter | 39 | $20,723 | $531 |
| Field Hockey | Fall | 22 | $10,227 | $465 |
| Indoor Track - Boys | Winter | 25 | $11,363 | $455 |
| Boys Soccer | Fall | 35 | $15,629 | $447 |
| Indoor Track - Girls | Winter | 29 | $11,363 | $392 |
| Cheer | Fall | 18 | $6,535 | $363 |
| Girls Lax | Spring | 22 | $7,407 | $337 |
| Girls CC | Fall | 15 | $4,614 | $308 |
| Softball | Spring | 26 | $7,540 | $290 |
| Baseball | Spring | 25 | $7,221 | $289 |
| Field Hockey (MS) | Fall | 27 | $7,760 | $287 |
| Basketball - Girls (MS) | Winter | 15 | $3,976 | $265 |
| Basketball - Boys (MS) | Winter | 18 | $3,976 | $221 |
| Cross Country (MS) | Fall | 21 | $4,471 | $213 |
| Unified Basketball $100 | Fall | 19 | $2,996 | $158 |
| Boys Lax | Spring | 29 | $4,253 | $147 |
| Softball (MS) | Spring | 12 | $1,214 | $101 |
| Boys Track | Spring | 34 | $2,264 | $67 |
| Track (MS) | Spring | 44 | $2,853 | $65 |
| Girls Track | Spring | 32 | $2,021 | $63 |
| Unified Track ($100) | Spring | 11 | $501 | $46 |
What this does not show
That the fee is meant to cover a sport’s cost. It is not, and never has been: the fund pays for some categories and the town pays for others, and which is which has changed twice. A sport above the dashed rule is not a sport being subsidised more than one below it — the rule is a fee, and the bar is a cost, and no document maps one onto the other per sport.
Cost per student. These are participations. One child playing three seasons appears three times, so nothing here divides by a number of children, and the town publishes no unduplicated athlete count.
Participations by season and level, for the three years the district’s workbook covers. Three years is short. It is also more forward visibility than the boards in this town currently use, so it is drawn — with the span on the chart.
FY24–FY26 — three years, which is the whole of what the district’s workbook covers. 675 participations to 649: −3.9%.
| Year | Fall | Winter | Spring | High school | Middle school | All |
|---|---|---|---|---|---|---|
| FY24 | 252 | 187 | 236 | 560 | 115 | 675 |
| FY25 | 255 | 179 | 235 | 532 | 137 | 669 |
| FY26 | 257 | 182 | 210 | 533 | 116 | 649 |
4 rows in the workbook are negative — out-of-district athletes subtracted back out, -44 across the three years, all of them in Winter and Spring. They are counted the way the sheet counts them, which means a season total is a net figure and not a headcount of bodies.
What this does not show
How many children play sports. Two town documents give 593 and 649 for the same year and count different things — one counts fee categories, the other counts participations by sport. They do not reconcile and must not be added. Neither publishes distinct students.
Every participation in the workbook falls into a fee category. These counts are summed from its rows: the sheet’s own printed totals for these columns are dollars rather than counts, so the row sum is the only reading that means what the column heading says.
| Year | paid the full fee | second-child rate | third-child rate | fee waived entirely | in none of the four columns | All |
|---|---|---|---|---|---|---|
| FY24 | 505 | 66 | 7 | 64 | 33 | 675 |
| FY25 | 516 | 56 | 7 | 80 | 10 | 669 |
The reduced-fee columns are deliberately absent. HS Red Fee totals 213 in FY24 and 662.5 in FY25 — it is dollars in one year and something else in the other, and a column whose meaning cannot be stated is not a column that may be summed. That is what the grey residual is: participations in none of the four countable columns.
The first-child fee by level and season, each figure carrying the document that set it. FY26’s high-school rate was priced at the previous year’s figure on this site for months, because the source stated rates and never stated a year — which is why the register records the date a rate was set beside the rate.
| Season | High school | Middle school | Set on |
|---|---|---|---|
| 2023-24 | $250 | $200 | not recorded |
| 2024-25 | $250 | $200 | not recorded |
| 2025-26 | $325 | $275 | 2025-02-26 |
| 2026-27 | $400 | — | 2026-08 |
What a participation actually paid, FY26
$306
high school — $162,871 of net user fees over 533 participations, against a stated first-child fee of $325. Below the top tier, which is what a blend of full pay, reduced fees and waivers has to be.
$225
middle school — $26,074 of net user fees over 116 participations, against a stated first-child fee of $275. Below the top tier, which is what a blend of full pay, reduced fees and waivers has to be.
Rule 11, pointing the other way. What the fund banked is already net of the payment processor’s charge, so a fee model calibrated on it is not a model of what families were asked for.
277 postings across 3 years, with dates, warrant numbers and the clerk’s own comments. Every other fund in the town — and the whole school general fund — is visible to this project only as a budget document restating itself. That is why this one page is the control case for how far the money can be followed anywhere.
| Year | Opened | In | Out | Closed | Without the memos |
|---|---|---|---|---|---|
| FY24 | $137,846 | $213,151 | -$317,004 | $33,993 | -$15,932 |
| FY25 | $33,993 | $390,300 | -$293,054 | $131,239 | -$122,882 |
| FY26 | $131,239 | $171,248 | -$171,154 | $131,333 | $131,333 |
The chain is the town’s, not ours: each year’s closing cash is checked against the opening balance the town printed for the next, and it ties to the cent in all 3 years. FY26 stops on 12 June and carries no year-end entries, so it is not a closed year.
The 5 entries, exactly as the ledger writes them
| effective | posted | journal | reference | amount | comments |
|---|---|---|---|---|---|
| 2024-06-30 | 2024-09-18 | 1576 | ADJ EXP | $49,925 | ADJ PER MEMO 08/12/24 |
| 2025-02-12 | 2025-02-12 | 157 | ADJ EXP | $1,283 | PER MEMO 01/30/25 |
| 2025-05-02 | 2025-05-06 | 54 | ADJ EXP | $113,559 | PER MEMO 05/02/25 |
| 2025-06-30 | 2025-07-02 | 709 | ADJ EXP | $19,271 | PER MEMO 7/02/25 |
| 2025-06-30 | 2025-08-27 | 1339 | ADJ EXP | $120,009 | PER MEMO 08/20/2025 |
Journal 1339 is effective 30 June 2025 and was posted 27 August 2025 — after the fiscal year closed, and after the FY26 budget was voted. That is the general property worth carrying away from this page: when a budget document prints an “actual” for a prior year, that figure may have been adjusted by a memo months afterwards, and the document will not say so.
What this does not show
What the entries were for. An entry raising cash in a fund and labelled as an expense adjustment fits at least three readings: expenses charged here and later moved elsewhere; a transfer in from another fund; a correction of charges posted to the wrong account. Those are different facts about the world and identical facts on the page.
That the fund was overdrawn on any date. Ordering backdated rows by effective date puts it below zero for months, but that ordering is ours. MUNIS backdates, and rows sharing an effective date have no defined order.
Who was paid. The vendor field is populated on receipts and empty on 171 of 173 disbursement rows. Warrant numbers are there, so the warrants themselves would name the carriers.
The comparison the whole page turns on, taking only the categories the workbook and the budget both name. Everything outside them is reported separately rather than folded in.
| Category | Workbook cost | Town budget | Outside the town’s budget |
|---|---|---|---|
| Officials | $51,570 | $0 | $51,570 |
| Coaches | $127,088 | $46,733 | $80,355 |
| Transportation | $117,555 | $40,000 | $77,555 |
| Uniforms | $16,294 | $0 | $16,294 |
| Everything else matched | $39,136 | $37,568 | $1,568 |
| Total | $351,643 | $124,301 | $227,342 |
A further $160,980 sat on general fund athletics lines with no counterpart in the workbook at all — director $90,200, trainer $61,800, insurance $8,980. Adding those to one side of a comparison the other side cannot see is precisely the error this page is about, so they are named here instead.
What this does not show
That the district hid anything. The fund is a Chapter 658 revolving fund; its purpose is to hold fee revenue and spend it, and the district described the arrangement in its own budget overview — beside athletics, in writing, as a line reduced “with anticipation that athletic revolving may be enough to offset this reduction”. Rule 11 is documented here, not suspected.
That 35% generalises. One year, one programme, comparable categories only. Nothing here measures anybody else’s share, and the workbook is a departmental operating record rather than a ledger.
These are rows in the gap register, not observations made on this page. A limit written in one paragraph of one page is invisible to everybody who did not read it, so it lives in money_gaps, loads into the database and is published at /what-we-cannot-answer.
money out
What any special revenue fund bought
no expense report exists for these funds · purpose is presumed, never observed
document wanted
`glytdbud-expense` for the special revenue funds
The identical report the town already runs for the general fund and for each of the four enterprise funds, pointed at funds 13xx/22xx/26xx–29xx instead.
Closed by: Turns every restricted edge above from presumption into traced fact — athletics, lunch, circuit breaker, extended day, and every grant.
document wanted
DESE End of Year Financial Report
Published by the state.
Closed by: Separates district spending by FUND, which is the one thing the town’s budget documents never show.
people
Which fund pays which post
This is the load-bearing one. The rosters name people and the budget names dollars, and nothing published joins them to a funding source. So a paraprofessional line rising cannot be distinguished from a grant that was paying for those posts ending — which is exactly what the special education escalator rests on.
Closed by: DESE's End of Year Financial Report, which separates spending by fund.
money out
What the four `ADJ EXP` journal entries moved, and from where
$254,121.18 — 65% of everything that reached the athletics revolving fund in FY2025 — arrived on four general-journal entries whose entire description is an expense adjustment made per a memo. An entry raising cash in a fund and labelled as an expense adjustment fits at least three readings: expenses charged here and later moved elsewhere, a transfer in from another fund, or a correction of charges posted to the wrong account. Those are different facts about the world and identical facts on the page, and the same shape of entry could be adjusting any fund in the town without either budget document showing a trace.
Closed by: the five memos the ledger names, dated 08/12/24, 01/30/25, 05/02/25, 07/02/25 and 08/20/2025.
money out
Whether a general fund athletics line is net of the revolving fund
In FY2024 the town’s comparable athletics lines came to $124,301 against $351,643 the district’s own sport-by-sport workbook totals for the same categories — so the appropriation covered 35% of the cost. That is measurable for FY2024 and FY2025 only, because those are the only years anybody published both halves. For every other year, and every other programme, a line that rose because the cost rose looks exactly like a line that rose because a fund stopped paying part of it.
Closed by: the MUNIS `Account_Detail` export for the general fund athletics orgs S3066672 and S3066671, all object codes.
people
How many children play sports
Two town documents give 593 and 649 for the same year and count different things: one counts fee categories, the other counts participations by sport, and a participation is not a child — one student playing three seasons is three of them. Some workbook rows are negative, subtracting out-of-district athletes back out, so a season total is a net figure rather than a headcount of bodies. Nothing published is an unduplicated count.
Closed by: an unduplicated athlete roster, or a participation report that states whether it counts students or participations.
Written by scripts/build_athletics_charts.py from sources/data/lunenburg.db — athletics_history, athletics_by_sport, athletic_fee_schedule, fund_1301_cash_journal, money_gaps, at build time. It refuses to write at all unless four things hold: the workbook’s cost columns sum to its own printed total for every year; the fund’s cash chains from each year’s closing to the next year’s printed opening balance; every series has rows in it; and no revenue row reaches a spending total. A join that matches nothing looks exactly like data that is absent, which is why each of those is an assertion rather than a comment.
Every table above is downloadable as itself: /data/athletics.json is exactly what this page reads.
This page draws two written analyses. It does not replace them: the argument, the sources, the sha256 of every document and the alternatives that fit the same data are there.
Athletics: what it costs, who pays, and what the budget line does not say
The written analysis: both sides of the money, FY14 to FY26, and why an appropriation is not a cost
7,302 words · updated 2026-09-07 · PDF
The athletics ledger: what a fund's cashbook shows that a budget line cannot
Three years of the fund at transaction level — 277 postings with vendor, check number and the clerk’s own comments
4,324 words · updated 2026-09-07 · PDF
Why a 1.7% programme has its own page
It is not a driver of the budget gap and never will be — a line matters in proportion to its share of spending times how far its growth exceeds the levy cap, and athletics fails that test on the first term. It is here because it is the only place the mechanism can be watched: a programme whose cost was more than twice its appropriation, costs moving between funds by a memo that appears in neither budget document, and the change landing after the year had closed. Every one of those could be true of a line that does drive the gap, and for those lines there is no cashbook to look at.