The money
Between FY11 and FY25 the state recorded Lunenburg’s in-district enrolment falling −5.7% and its teacher FTE moving +2.7%. Over the same years its paraprofessional FTE went from 24.1 to 67.0. That is one line moving and the rest holding — and nothing in these documents says why.
Three different quantities are on this page, and none of them is “how many people work for the schools”.
Nothing on this page divides one of them by another. Dollars over FTE looks like a cost per employee and is not one: the numerator leaves out every fund but the general fund, and the denominator counts the staff those funds pay for.
DESE publishes paraprofessional FTE for Lunenburg and for every district on its own comparison sheet. In FY13 Lunenburg reported 0.94 per 100 in-district pupils — the lowest of the 6, and below every one of them. It was last of 6 for 5 straight years, FY11 to FY15. In FY25 it reported 4.27, the highest of the group.
The V is Lunenburg’s alone. No comparison district falls below 1.86 in any year of the series. That rules out a change in how the state counts paraprofessionals, which would have moved every district at once. It does not rule out a change in how Lunenburg reports them.
Paraprofessional FTE per 100 in-district pupils. Every district on DESE’s own comparison sheet.
Lunenburg, per year
| Year | Para FTE | Per 100 pupils | Rank | Highest in group |
|---|---|---|---|---|
| FY09 | 46.4 | 2.65 | 2 of 6 | Ashburnham-Westminster 2.66 |
| FY10 | 39.9 | 2.32 | 4 of 6 | Groton-Dunstable 2.86 |
| FY11 | 24.1 | 1.45 | 6 of 6 | Ayer 3.41 |
| FY12 | 24.1 | 1.47 | 6 of 6 | Ayer Shirley School District 3.54 |
| FY13 | 14.8 | 0.94 | 6 of 6 | Ayer Shirley School District 3.26 |
| FY14 | 16.2 | 1.03 | 6 of 6 | Ayer Shirley School District 3.87 |
| FY15 | 31.0 | 1.98 | 6 of 6 | Ayer Shirley School District 4.32 |
| FY16 | 51.0 | 3.25 | 2 of 6 | Ayer Shirley School District 3.63 |
| FY17 | 59.5 | 3.67 | 1 of 6 | Lunenburg 3.67 |
| FY18 | 51.0 | 3.15 | 2 of 6 | Ayer Shirley School District 3.26 |
| FY19 | 53.0 | 3.20 | 1 of 6 | Lunenburg 3.20 |
| FY20 | 57.0 | 3.45 | 1 of 6 | Lunenburg 3.45 |
| FY21 | 59.5 | 3.78 | 1 of 6 | Lunenburg 3.78 |
| FY22 | 55.5 | 3.47 | 2 of 6 | Ayer Shirley School District 3.74 |
| FY23 | 59.0 | 3.77 | 2 of 6 | Ayer Shirley School District 4.00 |
| FY24 | 66.0 | 4.18 | 1 of 6 | Lunenburg 4.18 |
| FY25 | 67.0 | 4.27 | 1 of 6 | Lunenburg 4.27 |
What this does not show
Whether any of this is about children. An FTE count is staff. It is not a count of students with disabilities, of one-to-one assignments, or of hours delivered. Two districts with the same ratio can be doing entirely different things.
Who pays. DESE’s FTE count includes staff paid from grants, circuit breaker reimbursement and revolving funds. The town’s budget lines do not. So the FTE series and the dollar series below are not two views of one number and must not be divided into each other.
That the trough is real. FY13’s 14.8 FTE is what the state published. Whether Lunenburg employed that few paraprofessionals, or classified them somewhere else that year, is not decidable from this sheet.
A possible explanation — nothing here tests it
A district that cuts paraprofessional posts in a hard budget year and rebuilds them afterwards would produce exactly this shape. So would a district that kept the same people and changed which fund or which category they were reported under. So would one whose special education population changed. The three fit the same seventeen numbers equally well, and this series cannot separate them.
What would settle it: DESE’s staffing report broken out by funding source, and the district’s End of Year Financial Report, which separates spending by fund. Both would say whether the rise is posts added or grant-funded posts moving onto the general fund. Neither is currently in this archive.
Over the same years the town was printing rosters, in-district enrolment moved −5.7% — from 1663.5 FTE pupils to 1568.9 — while teacher FTE moved +2.7%. Teachers per 100 pupils therefore rose +8.9%, from 6.15 to 6.70.
That still leaves Lunenburg with the fewest teachers per pupil in its group. It has been last of 6 for 7 consecutive years, and the highest district in FY25 reports 8.55 against Lunenburg’s 6.70. A ratio rising and a ratio being low are not in tension: both are true here.
All three set to 100 in FY09. One axis on purpose — two scales would let the picture be chosen rather than read.
Teacher FTE per 100 in-district pupils. Every district on DESE’s own comparison sheet.
Lunenburg, as the state published it
| Year | Teacher FTE | Para FTE | In-district pupils | Teachers per 100 | Paras per 100 |
|---|---|---|---|---|---|
| FY09 | 120.2 | 46.4 | 1750.0 | 6.87 | 2.65 |
| FY10 | 120.4 | 39.9 | 1719.2 | 7.00 | 2.32 |
| FY11 | 102.3 | 24.1 | 1663.5 | 6.15 | 1.45 |
| FY12 | 114.5 | 24.1 | 1639.5 | 6.98 | 1.47 |
| FY13 | 103.0 | 14.8 | 1581.0 | 6.51 | 0.94 |
| FY14 | 100.6 | 16.2 | 1565.6 | 6.43 | 1.03 |
| FY15 | 101.6 | 31.0 | 1563.3 | 6.50 | 1.98 |
| FY16 | 104.7 | 51.0 | 1567.3 | 6.68 | 3.25 |
| FY17 | 112.1 | 59.5 | 1619.3 | 6.92 | 3.67 |
| FY18 | 115.1 | 51.0 | 1620.5 | 7.10 | 3.15 |
| FY19 | 110.5 | 53.0 | 1654.0 | 6.68 | 3.20 |
| FY20 | 107.4 | 57.0 | 1651.3 | 6.50 | 3.45 |
| FY21 | 108.7 | 59.5 | 1575.5 | 6.90 | 3.78 |
| FY22 | 111.3 | 55.5 | 1599.8 | 6.96 | 3.47 |
| FY23 | 112.8 | 59.0 | 1566.1 | 7.20 | 3.77 |
| FY24 | 114.0 | 66.0 | 1580.5 | 7.21 | 4.18 |
| FY25 | 105.1 | 67.0 | 1568.9 | 6.70 | 4.27 |
What this does not show
Whether a staffing level was chosen. A district cannot shed a teacher for every departing child: sections, grade spans and required subjects set a floor that has nothing to do with the enrolment total. A ratio moving is the arithmetic of a falling denominator at least as much as it is a decision.
What a teacher is here. DESE’s definition, applied by DESE. It is not the district’s payroll, not the contract’s bargaining unit, and not the roster on the next chart down.
Two panels of five budget lines each, read from the district’s own documents at the actual stage across their whole run, over the 9 years both of them cover. Special education paraprofessional lines moved +108% — from $597,464 to $1,244,894. Special education teacher lines moved +20%, from $1,537,583 to $1,846,499.
Both series set to 100 in FY17. The dollars themselves are in the table.
Both panels, actual stage, as printed
| Year | Special education paraprofessionals | Special education teachers |
|---|---|---|
| FY17 | $597,464 | $1,537,583 |
| FY18 | $641,635 | $1,492,886 |
| FY19 | $672,872 | $1,506,433 |
| FY20 | $879,279 | $1,617,268 |
| FY21 | $920,345 | $1,723,153 |
| FY22 | $1,021,005 | $1,777,239 |
| FY23 | $1,018,072 | $1,809,200 |
| FY24 | $1,005,949 | $1,801,037 |
| FY25 | $1,244,894 | $1,846,499 |
The paraprofessional panel runs from FY14 and the teacher panel from FY17; the comparison above uses only the 9 years both cover. Reading a 12-year percentage against a 9-year one is the like-for-like error wearing a different coat.
What this does not show
That anybody was hired. A budget line is dollars. It is not a post, not a person and not an hour. The line rising and the line paying more for the same people are the same number on the page.
What special education cost. These are net general-fund lines. Circuit breaker reimbursement, IDEA grant money and revolving funds pay for real staff and appear in none of them, so a year where a grant ended looks identical to a year where the district added people.
That the two panels are comparable in kind. They are two sets of five lines from the same workbook, which makes them comparable as budget lines. It does not make a paraprofessional dollar and a teacher dollar the same unit of anything.
The same treatment for every other staffing panel where a fixed set of lines reports in every year of its run. Each is read at the actual stage; none of them is a headcount.
$366,965 in FY14 to $1,244,894 in FY25 · 5 lines · from budget_figure
$1,537,583 in FY17 to $1,846,499 in FY25 · 5 lines · from sped_teacher_history
$201,879 in FY17 to $272,057 in FY25 · 5 lines · from budget_figure · 3 earlier years dropped, because not every line in the panel reports in them
$82,262 in FY14 to $105,171 in FY25 · 5 lines · from budget_figure
Every annual town report carries a faculty and staff roster for each school, by name. 3815 names in all, of which 3651 are in the comparable panel below. It is the only published thing in this archive that touches the standing question of whether budgeted positions were filled.
It cannot be read as a staffing trend, because what got printed changed. Which schools appear varies — there are 3 different combinations across 15 years. Central office is printed in 8 of them and left out of the rest, so it is excluded here entirely: a total that gains a whole page of names in some years and not others is measuring the page, not the payroll.
School buildings only. Central office and the regional vocational school are excluded — see below for why each.
Every year, and what was printed in it
| Year | Names | Rosters | Pages | Central office printed | Schools |
|---|---|---|---|---|---|
| FY11 | 194 | 4 | 6 | yes | Lunenburg High School, Passios Elementary School, Lunenburg Primary School, Turkey Hill Elementary School |
| FY12 | 177 | 3 | 4 | yes | Lunenburg High School, Lunenburg Primary School, Turkey Hill Elementary School |
| FY13 | 172 | 3 | 5 | no | Lunenburg High School, Lunenburg Primary School, Turkey Hill Elementary School |
| FY14 | 210 | 3 | 4 | yes | Lunenburg High School, Lunenburg Primary School, Turkey Hill Elementary School |
| FY15 | 230 | 3 | 6 | yes | Lunenburg High School, Lunenburg Primary School, Turkey Hill Elementary School |
| FY16 | 252 | 4 | 5 | yes | Lunenburg High School, Lunenburg Middle School, Lunenburg Primary School, Turkey Hill Elementary School |
| FY17 | 276 | 4 | 7 | yes | Lunenburg High School, Lunenburg Middle School, Lunenburg Primary School, Turkey Hill Elementary School |
| FY18 | 277 | 4 | 6 | no | Lunenburg High School, Lunenburg Middle School, Lunenburg Primary School, Turkey Hill Elementary School |
| FY19 | 251 | 4 | 7 | no | Lunenburg High School, Lunenburg Middle School, Lunenburg Primary School, Turkey Hill Elementary School |
| FY20 | 249 | 4 | 4 | no | Lunenburg High School, Lunenburg Middle School, Lunenburg Primary School, Turkey Hill Elementary School |
| FY21 | 233 | 4 | 5 | yes | Lunenburg High School, Lunenburg Middle School, Lunenburg Primary School, Turkey Hill Elementary School |
| FY22 | 272 | 4 | 5 | yes | Lunenburg High School, Lunenburg Middle School, Lunenburg Primary School, Turkey Hill Elementary School |
| FY23 | 265 | 4 | 7 | no | Lunenburg High School, Lunenburg Middle School, Lunenburg Primary School, Turkey Hill Elementary School |
| FY24 | 272–279 | 4 | 8 | no | Lunenburg High School, Lunenburg Middle School, Lunenburg Primary School, Turkey Hill Elementary School |
| FY25 | 250 | 4 | 8 | no | Lunenburg High School, Lunenburg Middle School, Lunenburg Primary School, Turkey Hill Elementary School |
What this does not show
Full-time equivalence. A roster prints a name and a title. A 0.4 music teacher and a full-timer are one row each, and there is no way to tell them apart. This is the single reason a roster count cannot be compared to the state FTE series above.
Who pays. No roster names a funding source. That is the question that matters most for the budget and it is answered nowhere in these documents.
When. The rosters are undated within the year. Two consecutive reports may be photographs taken at different points in the school year.
Whether a post was vacant. A name is a person the report named. A post held open all year appears nowhere at all, and looks exactly like a post that was never budgeted.
The same names, sorted by what the printed title says the person does. The classification is ours — 266 of 3651 names (7.3%) carry a title no rule recognised, and those are counted as unrecognised rather than quietly filed under “other”.
The eight roles with the most names across the whole run. Every panel is on the same vertical scale. The amber bar is FY24, where one school’s roster was printed twice and there is no way to split a role between the two.
FY11–FY25 · 1357 names in all
FY11–FY25 · 721 names in all
FY11–FY25 · 303 names in all
FY11–FY25 · 210 names in all
FY11–FY25 · 185 names in all
FY11–FY25 · 173 names in all
FY11–FY25 · 106 names in all
FY11–FY25 · 77 names in all
Every role category, first printed year to last
| Role | Names in FY11 | Names in FY25 | Total across the run |
|---|---|---|---|
| Teachers | 67 | 96 | 1357 |
| Paraprofessionals | 42 | 52 | 721 |
| Specialists | 11 | 11 | 303 |
| Title not recognised | 27 | 22 | 266 |
| Administrators | 10 | 16 | 210 |
| Custodial | 4 | 11 | 185 |
| Food service | 5 | 11 | 173 |
| Counsellors | 9 | 7 | 106 |
| Office staff | 5 | 3 | 77 |
| Nurses | 4 | 4 | 60 |
| Speech | 3 | 5 | 60 |
| Psychologists | 1 | 3 | 37 |
| OT / PT | 1 | 4 | 31 |
| Librarians | 3 | 3 | 23 |
| Social workers | 0 | 2 | 22 |
| Technology | 2 | 0 | 20 |
What this does not show
That a category rising means more of that job. Custodial and food service staff appear on some schools’ rosters and not others, in ways that change year to year. A category that doubles between two reports may be a category that started being printed.
That a category vanishing means a post was cut. A title the report stopped printing and a post the district stopped filling are the same absence on the page. This is why the names are kept: a person appearing under a new title separates a renamed post from a departure, and nothing else here can.
FY25. Names only — no FTE, no funding source, and 12 people appear on more than one school’s roster that year, which is district-wide staff in the source rather than a duplication in the extract.
Every item below is found by a rule in the generator rather than written down, so the counts move when the extraction improves instead of going quietly stale.
FY24: Turkey Hill Elementary School’s roster is printed twice
Pages 107 and 108 of the FY24 annual town report each carry a complete roster for that school — 61 names on one and 70 on the other, 33 of them on both, with different principals. Nothing on either page says which year it describes. Summing them doubles a school; picking one discards a document. That year is drawn as a range, and the range is the honest answer rather than a caveat under a single bar.
5 printed department headings came back from OCR unreadable
These roster pages are scans and are read by OCR. 39 of the 586 names filed under a heading that names a grade sit under a heading whose grade level cannot be read. The rule is that a heading containing the word grade must have a recognisable ordinal beside it; these do not. Nothing else on this page depends on the grade level, so the effect is that those names have a school and a role and no grade — not that any count is wrong.
| As OCR read it | Names | Years | Schools |
|---|---|---|---|
| Ith Grade: | 16 | FY19, FY21, FY25 | Lunenburg Middle School |
| econd Grade Teacher | 8 | FY23 | Lunenburg Primary School |
| secona Grade | 5 | FY12 | Lunenburg Primary School |
| 8t Grade Teachers | 5 | FY15 | Lunenburg High School |
| Gth Grade: | 5 | FY23 | Lunenburg Middle School |
Two things excluded, and why
The town publishes gross wages. They cannot be used to count school employees.
3545 rows across 13 years, one per named employee — and only 414 of them carry a department at all, so there is no way to tell a school employee from a highway employee for the rest. Every row is marked no check: the report prints no total, so nothing in the extraction can be reconciled against the document. It is a real dataset and it answers a different question.
The state’s FTE and enrolment
17 years, FY09–FY25, LEA 01620000, 7 districts. Every measure reconciles against DESE’s own printed totals (161 yes).
sources/state-dese/radar-district-comparison.xlsx
The rosters
3815 names read page by page out of 15 annual town reports. There is no total printed on a roster, so the check is line accounting — every non-blank line on a page claimed as an entry or a heading.
PROVENANCE-staff-rosters.md carries the per-page ledger.
The dollars
4 panels, actual stage throughout. Each panel is a fixed set of lines reporting in every year of its run, so a sum across years measures the lines and not the coverage.
This page’s own data file
Everything above is read at build time from sources/data/lunenburg.db — staff_roster_entries, role_classification, dese_measure, budget_figure, report_gross_wages by scripts/build_staffing_charts.py and served as one static file. Nothing is typed into a sentence.
The one number nobody publishes
Which fund pays which post. The town publishes names without FTE or funding; the state publishes FTE without funding; the budget publishes dollars net of every fund but one. Any question of the form “did the town take on staff a grant used to pay for” needs all three joined, and no document in this archive joins them.