Analyses
In FY2025 grants fell in 16 parts of the school budget. The town’s money rose in 8 of them.
Every dollar the district spent, split by the fund that paid it, FY2009 to FY2025 — from the state’s End of Year Financial Report.
lunenburgbudgetproject.org — written by the Lunenburg Budget Project, an independent tool for residents. Not affiliated with the Town of Lunenburg, the School Committee or the school district. The data this page is computed from: /data/grant-unwinding.json
These are fund totals, not grants, and not people. The state collects what each district spent against each of its own function codes and splits it two ways: the general fund, and grants and revolving funds together. It does not name a grant, it does not name a post, and a general fund rise beside a grant fall in the same function is consistent with the town picking up a cost without establishing it. Nothing on this page says the town took over any particular thing, because nothing published says that.
statedthe district’s own statutory return to the state
What this establishes
The general fund carries 89.9% of school spending, up 8.4 points since FY2009 — and it did not get there in a straight line.
FY2025 is the biggest year on record for both things at once: 8 functions where the town’s money replaced grant money, and 8 where it did not.
Read district-wide, FY2025 looks like an almost exact replacement. That reading is wrong, and it is the easiest mistake on this page to make.
Even where the town’s money rose, it usually did not rise by as much — 4 of the 8 swaps still spent less in total than the year before.
The number this page nearly published
The first version of this analysis had one headline: grants fell $2,023,188, the general fund rose $1,999,627, and the district spent $23,561 less in all. Those three figures are correct. The sentence anybody would build from them is not.
What the aggregate says
Grants -$2,023,188. General fund $1,999,627. Net -$23,561 across 43 functions. It reads as a handover.
What the decomposition says
8 functions swapped: $1,127,647 of grants out, $1,136,013 of general fund in. 8 functions simply lost the money: $1,542,511 of grants, and a further $606,553 of general fund on top.
And what is actually the biggest number
Insurance for Active Employees rose $3,026,556 in the general fund — on its own, larger than the entire grant fall. Grants in that function moved $179,646. Meanwhile Insurance for Retired School Employees fell $1,125,784 across both funds.
So the aggregate is several things at once. 8 functions did hand over from one fund to the other. Across the 27 functions where grants did not fall, the general fund moved $1,470,167 — a movement with no grant fall anywhere behind it, and it is bigger than the swap. The total lands near zero because large changes in both directions cancel, not because one replaced the other. The near-identity is a coincidence of magnitudes, and it is the only thing on this page that would have been quoted at a meeting.
What this does not show
Both funds, every year the state has collected them
The two parts of one total — the state’s own total column, which the extract reconciles to before any of this is published. The general fund is what the town appropriates and argues about at Town Meeting. Everything above it is money the district spends that never appears in that argument.
The same figures
| Year | General fund | Grants and revolving | All funds | General fund share |
|---|---|---|---|---|
| FY09 | $15,842,808 | $3,603,645 | $19,446,453 | 81.5% |
| FY10 | $16,287,750 | $3,104,025 | $19,391,775 | 84.0% |
| FY11 | $16,387,213 | $3,060,525 | $19,447,738 | 84.3% |
| FY12 | $17,152,190 | $3,041,224 | $20,193,414 | 84.9% |
| FY13 | $18,199,750 | $2,476,542 | $20,676,292 | 88.0% |
| FY14 | $18,782,388 | $2,333,940 | $21,116,328 | 89.0% |
| FY15 | $19,400,624 | $2,019,663 | $21,420,287 | 90.6% |
| FY16 | $20,088,618 | $2,108,544 | $22,197,162 | 90.5% |
| FY17 | $21,032,539 | $2,493,775 | $23,526,313 | 89.4% |
| FY18 | $22,586,382 | $1,805,429 | $24,391,811 | 92.6% |
| FY19 | $22,971,644 | $1,623,462 | $24,595,106 | 93.4% |
| FY20 | $23,005,734 | $1,453,893 | $24,459,626 | 94.1% |
| FY21 | $23,599,163 | $2,237,805 | $25,836,968 | 91.3% |
| FY22 | $24,980,292 | $2,384,081 | $27,364,372 | 91.3% |
| FY23 | $25,613,575 | $3,945,897 | $29,559,472 | 86.7% |
| FY24 | $25,289,273 | $4,287,612 | $29,576,885 | 85.5% |
| FY25 | $26,986,344 | $3,044,898 | $30,031,242 | 89.9% |
The same thing as a share, plotted from zero
The general fund share never drops below 81.5% across the whole record, so drawing it needs an axis that does not start at zero — and a truncated axis on a share turns a real move into a cliff. Its complement carries the same information and starts at zero.
What this does not show
Where grants fell, and what happened next
Every function present in two consecutive years, sorted on the signs of two numbers. The top panel is the functions where grants fell and the general fund rose. The bottom is the functions where grants fell and the general fund did not. They share a scale so they can be compared — and they are drawn apart so they cannot be added, because adding them is the aggregate this page refuses to report.
Grants fell, the general fund rose
The two bars mirror. Same function, same year, the money arriving from a different fund.
Grants fell, the general fund did not rise
Both bars point down. Nothing replaced the grant money in these functions.
Every year, both classes, never netted
| Year | Swapped: functions | Swapped: grants | Swapped: general fund | Reduced: functions | Reduced: grants | Reduced: general fund | Functions matched |
|---|---|---|---|---|---|---|---|
| FY10 | 8 | -$716,553 | $707,910 | 6 | -$74,313 | -$39,800 | 46 |
| FY11 | 9 | -$403,287 | $562,077 | 9 | -$227,056 | -$269,567 | 45 |
| FY12 | 13 | -$611,331 | $554,296 | 8 | -$158,730 | -$39,085 | 46 |
| FY13 | 10 | -$559,912 | $1,018,653 | 8 | -$282,187 | -$141,318 | 45 |
| FY14 | 10 | -$738,033 | $817,676 | 2 | -$110,694 | -$129,985 | 45 |
| FY15 | 12 | -$270,992 | $479,906 | 7 | -$282,745 | -$382,341 | 47 |
| FY16 | 6 | -$114,732 | $538,046 | 5 | -$68,785 | -$529,024 | 47 |
| FY17 | 7 | -$62,729 | $218,918 | 6 | -$108,743 | -$355,992 | 48 |
| FY18 | 14 | -$691,382 | $2,873,981 | 6 | -$61,070 | -$90,277 | 47 |
| FY19 | 13 | -$432,798 | $641,831 | 2 | -$14,531 | $0 | 51 |
| FY20 | 9 | -$300,193 | $675,376 | 7 | -$174,979 | -$392,868 | 50 |
| FY21 | 4 | -$241,898 | $193,751 | 2 | -$14,292 | $0 | 49 |
| FY22 | 8 | -$533,165 | $565,000 | 7 | -$402,993 | -$151,362 | 50 |
| FY23 | 3 | -$261,966 | $131,522 | 0 | $0 | $0 | 53 |
| FY24 | 8 | -$243,262 | $486,842 | 5 | -$688,125 | -$3,154,184 | 47 |
| FY25 | 8 | -$1,127,647 | $1,136,013 | 8 | -$1,542,511 | -$606,553 | 43 |
The largest single swaps in the whole record
One function, one year, ranked on how far the grant money fell. The list is here because the year-by-year totals above are sums over many functions, and a reader should be able to see which individual movements are doing the work.
| Year | Function | Code | Grants | General fund | All funds |
|---|---|---|---|---|---|
| FY14 | Teachers, Classroom | 2305 | -$485,283 | $204,187 | -$281,096 |
| FY25 | Guidance incl Adjustment Counselors | 2710 | -$428,805 | $165,029 | -$263,776 |
| FY18 | Tuition to Non-Public Schools | 9300 | -$339,141 | $159,325 | -$179,816 |
| FY25 | Tuition to Non-Public Schools | 9300 | -$308,247 | $305,812 | -$2,435 |
| FY10 | Teachers, Classroom | 2305 | -$261,499 | $261,627 | $128 |
| FY25 | Paraprofessionals | 2330 | -$254,461 | $181,363 | -$73,098 |
| FY13 | Insurance for Active Employees | 5200 | -$246,329 | $310,095 | $63,766 |
| FY22 | Teachers, Classroom | 2305 | -$229,643 | $386,034 | $156,391 |
| FY10 | Tuition to Non-Public Schools | 9300 | -$170,119 | $3,871 | -$166,248 |
| FY11 | Insurance for Active Employees | 5200 | -$165,939 | $12,509 | -$153,430 |
| FY22 | General Classroom Supplies | 2430 | -$158,261 | $5,723 | -$152,538 |
| FY13 | Teachers, Classroom | 2305 | -$149,410 | $280,504 | $131,094 |
| FY12 | Other Student Activities | 3520 | -$135,686 | $325 | -$135,361 |
| FY23 | School Leadership | 2210 | -$130,984 | $49,878 | -$81,106 |
| FY20 | Maintenance of Buildings | 4220 | -$130,000 | $31,558 | -$98,442 |
What this does not show
FY2025, function by function
Grants fell and the general fund rose
8 functions. Grants -$1,127,647, general fund $1,136,013. The signs are kept from here down: these are tables of movements rather than sentences about them.
| Function | Code | In or out of district | Grants | General fund | All funds |
|---|---|---|---|---|---|
| Guidance incl Adjustment Counselors | 2710 | In-District | -$428,805 | $165,029 | -$263,776 |
| Tuition to Non-Public Schools | 9300 | Out-of-District | -$308,247 | $305,812 | -$2,435 |
| Paraprofessionals | 2330 | In-District | -$254,461 | $181,363 | -$73,098 |
| Instructional Hardware - Student and Staff Devices (computers) | 2451 | In-District | -$50,000 | $171 | -$49,829 |
| School Leadership | 2210 | In-District | -$49,644 | $122,519 | $72,875 |
| Medical/ Therapeutic Services | 2320 | In-District | -$27,779 | $311,743 | $283,964 |
| Medical/Health Services | 3200 | In-District | -$8,463 | $32,842 | $24,379 |
| Textbooks | 2410 | In-District | -$248 | $16,534 | $16,286 |
Grants fell and the general fund did not rise
8 functions. Grants -$1,542,511, general fund -$606,553.
| Function | Code | In or out of district | Grants | General fund | All funds |
|---|---|---|---|---|---|
| Teachers, Classroom | 2305 | In-District | -$808,239 | -$247,393 | -$1,055,632 |
| Other Instructional Matls (Libraries) | 2415 | In-District | -$246,164 | -$828 | -$246,992 |
| Psychological Services | 2800 | In-District | -$192,409 | -$69,626 | -$262,035 |
| Tuition to Collaboratives | 9400 | Out-of-District | -$86,364 | -$162,022 | -$248,386 |
| Instructional Equipment | 2420 | In-District | -$76,450 | -$1,876 | -$78,326 |
| Curriculum Directors and Dept. Heads (Supervisory) | 2110 | In-District | -$74,476 | -$5,016 | -$79,492 |
| Substitutes, Short-Term | 2325 | In-District | -$41,070 | -$110,130 | -$151,200 |
| Other Instructional Services | 2440 | In-District | -$17,339 | -$9,662 | -$27,001 |
And the largest general fund increases, whatever the grants did
The two lists above are selected on a grant falling, which is exactly the selection that makes a year look like a handover. These are the biggest general fund movements in FY2025 without that filter.
| Function | Code | General fund | Grants | All funds |
|---|---|---|---|---|
| Insurance for Active Employees | 5200 | $3,026,556 | $179,646 | $3,206,202 |
| Medical/ Therapeutic Services | 2320 | $311,743 | -$27,779 | $283,964 |
| Tuition to Non-Public Schools | 9300 | $305,812 | -$308,247 | -$2,435 |
| Transportation Services | 3300 | $282,882 | $0 | $282,882 |
| Athletics | 3510 | $245,385 | $32,796 | $278,181 |
| Paraprofessionals | 2330 | $181,363 | -$254,461 | -$73,098 |
And the largest falls across both funds
| Function | Code | All funds | Grants | General fund |
|---|---|---|---|---|
| Insurance for Retired School Employees | 5250 | -$1,125,784 | $0 | -$1,125,784 |
| Teachers, Classroom | 2305 | -$1,055,632 | -$808,239 | -$247,393 |
| Technology Infrastructure, Maintenance, and Support - All Other | 4450 | -$458,532 | $0 | -$458,532 |
| Business and Finance | 1410 | -$287,850 | $19,271 | -$307,121 |
| Guidance incl Adjustment Counselors | 2710 | -$263,776 | -$428,805 | $165,029 |
| Psychological Services | 2800 | -$262,035 | -$192,409 | -$69,626 |
The one line this project has flagged as load-bearing
The in-district special education escalator in this project’s model rests on a paraprofessional line, and the standing note beside it says the line cannot be distinguished from grant money unwinding. In FY2025 function 2330, Paraprofessionals, moved -$254,461 in grants and $181,363 in the general fund — -$73,098 across both. This is as close as the published record gets, and it is not close enough: it shows the funding mix for a function moving. It does not show a post moving, or a person, or the same work being paid for from a different pocket.
A possible explanation — nothing here tests it
What would settle it: the district’s grant award and payroll charge detail for these posts, by fund and fiscal year — which would say which post each grant paid and what happened to it, and which nothing published does.
What was said at the time
This project’s method requires it: for anything a report says rose or fell, search the meeting archive for what people said about that thing in the same year. This is the one page where the answer is abundant. The end of the federal money was discussed at length, by name, with figures attached, and well before it happened.
“We have a loss of $650,000 in ESSER funds, this is much more significant than we expected.”
School Committee · 2023-11-15 · our copy · the town’s
Said while the FY2025 budget was being developed -- the year DESE later reports the largest grant fall on record. It is the district naming the quantity in advance.
“We are anticipating a 10% increase in health insurance to be $500,000, Contractual increases of $400,000 and the loss of ESSER funds of $600,000. While we knew ESSER funds would not be continuing, the increase in health insurance was unexpected.”
School Committee · 2024-01-17 · our copy · the town’s
The two movements this page insists are separate, named separately in the same paragraph by the people doing the budget. The insurance rise and the grant loss are one sentence apart and are not the same event.
“I personally did not feel it appropriate to transfer the burden of that money from the federal government grants on to the backs of Lunenburg taxpayers.”
School Committee · 2024-05-22 · our copy · the town’s
The swap-or-reduction question, put as policy, by the Chair, after the override passed. It says what was intended. It does not say what happened, and DESE reports both outcomes in the same year.
“These cuts do equal the ESSER funds when cuts are made per contract.”
School Committee · 2024-06-12 · our copy · the town’s
Said in the same passage as a list of the posts being cut. The page reports this beside the state figures rather than against them: a count of posts and a fund total are different quantities.
“Ms. Cameron reflected on the impact budget cuts have had on the schools over the years, including the elimination of a librarian position at the Primary school”
School Committee · 2026-03-10 · our copy · the town’s
One of the largest reductions in FY2025 is a line DESE calls Other Instructional Materials (Libraries). THESE ARE NOT THE SAME THING and this page cannot connect them: that line is materials rather than posts, the speaker names no year, and DESE reports dollars against a function rather than positions. It is here because a resident who remembers a librarian going will find the library line, and an unaddressed number is worse than an addressed one.
“So we didn ’t cut beyond ESSER, which is a really important thing to remember”
School Committee · 2025-09-03 · our copy · the town’s
A year later, the same claim in retrospect. Quoted with the space the extracted text carries, because that is what the document renders to.
What this does not show
The terms run against the archive, with what each returned: ESSER in 125, ARPA in 360, circuit breaker in 27, grant funded in 10, one-time funds in 2, federal grant in 76, Title I in 38, revolving in 145. Searched across 12,014 extracted documents, out of 12,015 the archive holds. Only 8,899 of those — 74% — carry readable text at all; the other 3,116 are mostly image scans (3,096 of them) awaiting OCR. An empty result above is a statement about the readable archive and never about the town.
What would have shown this coming
The district said it, in public, with a figure, before the budget was voted. The loss was named to the School Committee on 2023-11-15 and again on 2024-01-17, alongside the insurance increase that was not anticipated. Whatever else is arguable here, naming a known cliff far enough ahead to plan around it is the thing a board most needs and does not always get, and the record shows it happening.
And the fund split is published every year. The state has collected it since FY2009; it arrives after the year closes, so it is a check on what happened rather than a warning about what is coming. What neither source carries is which grant — and that is the number that would have let anybody test the claim being made at the time.
One thing to ask for next year
The district’s end-of-year grant expenditure detail by grant code — or Schedule 19 of the End of Year Financial Report as filed, which lists each grant separately — alongside the budget rather than after it. That single document turns “grants and revolving funds fell $2,023,188” into a statement about named programmes with end dates, which is what a board is being asked to plan against. It is a report the accounting the district already files can produce.
“Were the cuts really only the grant money?”
It is the question this page will be read for, and the honest answer is that nothing here tests it. The claim is about posts and contracts; this source reports dollars against function codes, split two ways, with every grant and every revolving fund in one column. Those are different quantities on different calendars, and putting them beside each other would not reconcile them. What the state’s figures do show is that in FY2025 the money left 16 functions and the general fund rose in 8 of them — which bounds the question and does not settle it.
How this was measured
One table. dese_function_expenditure, LEA 01620000. The FY2009–FY2025 frame comes from the rows the state marks as the district total; every function-level figure comes from the detail rows, joined to themselves one year apart on the function code and on whether the spending is in or out of district. 43 functions matched across FY2024–FY2025.
Each matched function falls into exactly one of four classes, on the signs of two differences. These labels are ours. The state publishes the two columns and no classification of them.
The four classes, and FY2025 in each
| Class | What it means | Functions | Grants | General fund |
|---|---|---|---|---|
| swapped | grants fell and the general fund rose | 8 | -$1,127,647 | $1,136,013 |
| reduced | grants fell and the general fund did not rise | 8 | -$1,542,511 | -$606,553 |
| grants grew | grants rose | 10 | $646,970 | $2,981,452 |
| grants unchanged | no grant money moved either way | 17 | $0 | -$1,511,285 |
| every matched function | the aggregate — not a finding | 43 | -$2,023,188 | $1,999,627 |
The last row is in the table because the four classes have to be seen to account for every function — three of them adding to something short of the total, with no way to tell which functions were missing, is worse than printing the aggregate with a label on it. It is not a finding and the page does not use it as one.
A figure we computed that is not a measurement
What the general fund would have carried in 2025 if the split had stayed at its 2009 share. If grants and revolving funds had gone on paying 18.5% of everything, the general fund would have carried $24,466,117 in FY2025 rather than $26,986,344 — a difference of $2,520,227.
What this does not show
What this cannot say
Which grant. DESE reports a fund total; it does not name a grant.
Which post. A dollar attributed to a fund is not a person, and a function falling in one fund while rising in another does not establish that anybody moved between them.
That the same activity continued. A general fund rise beside a grant fall is equally consistent with the town picking up a cost and with two unrelated things happening in one function in one year.
A district-wide netting. In FY2025 the aggregate reads as though the town replaced almost exactly what grants stopped paying; decomposed, half the grant fall was replaced and half simply stopped, and the largest general fund increase that year was employee insurance, which no grant was paying.
Closes: Nothing published maps a grant to the posts it paid for. DESE’s End of Year Financial Report is the furthest the public record goes: it separates the funds and stops there. The district’s own grant award letters and its end-of-grant reports would name the positions. These limits are rows in the register at what we cannot answer, which is what the records request reads — not prose written only here.
The document behind this
Massachusetts Department of Elementary and Secondary Education. A statutory return. DESE sets the schema, not the district. Our copy is district-expenditures-by-function.xlsx (26.2 MB), fetched from https://educationtocareer.data.mass.gov/resource/cnfs-edqq.csv. Its sha256 is 9e43789807b17ea6a1098273da8fb7fd8a28c20d4cd4733ba9e25fc69d4d4423.
The payload this page draws is published whole at /data/grant-unwinding.json, and the rows behind it can be queried directly — see the database. The same DESE split, for the categories where the district’s own book took lines to zero, is on what stopped being funded.
One thing about scope
This is the school department only, and it is a statutory return. The district files it to the state’s definitions rather than its own, which is what makes 17 comparable years possible at all — the district’s own budget book changed shape twice in the same period. Nothing here compares the town side with the school side; the town codes its accounts by function and the district files against DESE’s, and this project refuses to invent the mapping between them.