Analyses
Lunenburg by the numbers
Who lives here, from the Census Bureau’s 2019–2023 estimates. Every figure is a sample with a margin, and every one of them is printed with it.
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/lunenburg-by-the-numbers.json
Each of those is an estimate from a sample, not a count, and the number after the ± is how far out it may be. Two figures whose ranges overlap are not different from each other. That matters here more than it would in a city: the American Community Survey reaches a small number of households in a town this size, so 65 and over is 1,979 ± 309 — somewhere between 1,669.614 and 2,288.386 people. The 1,568 children in the schools, by contrast, is a count: the district counted them.
What this page establishes
1,979 ± 309 residents are 65 or over — 16.8% of the town, on a five-year sample.
A group about the size of the 1,568 children in the schools, and measured far less exactly.
The count is a sum of twelve age cells, so its margin is the root of the sum of their squares, and the interval it describes runs from 1,670 to 2,288. The enrolment figure beside it is a DESE count of children rather than a sample estimate, which is the difference this whole page turns on: 1,568 means exactly that, and this does not.
What it rests on Census Bureau, American Community Survey five-year estimates, table B01001, 2019–2023, for Lunenburg town; DESE enrolment for the latest published year.
What it does not show Nothing about what this group wants, can afford, or how it votes. An age is an age.
1,477 ± 198 of 4,529 households have a child under 18 — 32.6% of them.
The rough claim heard in town, that schools serve about a third of homes, is fair on this measure.
This is a CEILING on homes with a child in the Lunenburg public schools rather than that figure: it counts children at Monty Tech, at private and charter schools, and children not yet of school age. The share carries a margin of 4.0% in its own right, so about a third is the honest reading and any exact fraction is not.
What it rests on Census Bureau, American Community Survey five-year estimates, table B11005, 2019–2023, for Lunenburg town.
What it does not show Which households have a child in the town’s own schools. Nothing published joins a child to a household to a school, and that is a registered gap.
A household headed by someone 65 or over has a median income of $72,935 ± $8,677.
That is 56.5% of a 45-to-64 household’s $129,183 — the gap under the “fixed incomes” argument.
Two medians of two different sets of households in the same five years. It is not one household’s income falling as it ages, and it says nothing about savings, equity or a tax bill — none of which this archive holds by age at all. The under-25 band is published as a sentinel in both releases and is not a figure.
What it rests on Census Bureau, American Community Survey five-year estimates, table B19049, 2019–2023, for Lunenburg town.
What it does not show What any household can afford. Income is not wealth, and no record here joins a property tax payment to the age of the person paying it.
81.3% of occupied homes are owner-occupied — 3,682 households.
A rise in the levy reaches most households as a bill they receive, rather than through a rent.
The remaining 847 ± 189 homes are renter-occupied. A renting household pays property tax through its rent rather than on a bill, which is a different thing to experience and the same thing to fund; nothing here measures how much of a levy increase reaches a rent, or how fast.
What it rests on Census Bureau, American Community Survey five-year estimates, table B25003, 2019–2023, for Lunenburg town.
What it does not show What any household pays. Tenure is not a tax bill, and the town publishes no split of the levy by who pays it.
Ordinary income for Massachusetts, and 310 of 318 districts on spending for each pupil.
Both are true at once, and this town has not had the two put side by side before.
Lunenburg’s median household income ranks 167 of 350 Massachusetts municipalities — and 205 of them have an income interval that overlaps this town’s, so the rank is arithmetic and the band is the finding. On spending for each pupil the town sits in the bottom quarter of Massachusetts districts in 17 of 17 measured years. The two are not the same kind of rank: one is municipalities on a sample estimate with a margin, the other is districts on a figure DESE computes from returns.
What other districts spend, for each pupil →
What it rests on Census table B19013 for every Massachusetts municipality, 2019–2023; DESE’s all-district per-pupil expenditure, every published year.
What it does not show Any relation between the two. Nothing here establishes what a town of this income should spend for each pupil, and the two ranks are drawn over different sets.
Only 3 of 15 measures compared across the two five-year windows clear their margins.
The town changed less than any table of five-year differences would make it look.
The windows are 2014–2018 and 2019–2023, which do not overlap — consecutive ACS releases share four years of sample and may not be differenced at all. What survives: Population; Households; Median income, householder 65 and over. Everything else, including the share of residents 65 or over and the share of households with a child under 18, moved by less than the combined margin of its own two estimates, which is not a change.
What it rests on Census Bureau, American Community Survey five-year estimates, tables B01001, B11005, B19049 and B25003, the two releases side by side.
What it does not show That nothing changed. A difference inside the margin is one this instrument cannot see, which is not the same as one that did not happen.
Those are the answers this report could reach from the documents behind it. If the one you came for is not among them, ask us — no name or email needed.
The town, by age
Five age groups, each with its own margin. 65 and over and under 18 are the two the budget argument is about, and they are closer in size than either side usually says: 1,979 ± 309 against 2,736 ± 429.
the same figures
| Age | Residents | Margin | Share of the town | Share margin |
|---|---|---|---|---|
| Under 18 | 2,736 | ± 429 | 23.2% | ± 3.6% |
| 18 to 24 | 653 | ± 247 | 5.5% | ± 2.1% |
| 25 to 44 | 2,983 | ± 391 | 25.3% | ± 3.3% |
| 45 to 64 | 3,453 | ± 471 | 29.3% | ± 4.0% |
| 65 and over | 1,979 | ± 309 | 16.8% | ± 2.6% |
Census table B01001, 2019–2023, for Lunenburg town. The whiskers are each group’s own margin of error; the label above each bar is its share of the town. A group is a sum of twelve or more published cells, so its margin is the root of the sum of theirs — wider than any one of them.
What this does not show
Households, and who is in them
This is the denominator under the thing people say at meetings — that the schools are for about a third of homes. On this measure the claim is fair. But it counts a child under 18, which includes children at Monty Tech, at private and charter schools, and children not yet old enough for school, so it is a ceiling on homes with a child in the Lunenburg public schools rather than that figure. Nothing published joins a child to a household to a school; that limit is a registered gap, not an oversight of this page.
households and tenure, 2019–2023
| Estimate | Margin | |
|---|---|---|
| Households | 4,529 | ± 235 |
| With a child under 18 | 1,477 | ± 198 |
| With no child under 18 | 3,052 | ± 325 |
| Owner-occupied | 3,682 | ± 321 |
| Renter-occupied | 847 | ± 189 |
Tenure is the reason a levy increase is felt so directly here: 81.3% of occupied homes get the bill themselves. The remaining 847 ± 189 pay property tax through a rent, which is a different thing to experience and the same thing to fund — and nothing here measures how much of an increase reaches a rent.
What households earn
Median household income overall, and by the age of the person who heads the household. The last of those is the number the “fixed incomes” argument has never had: a household headed by someone 65 or over has a median income of $72,935 ± $8,677, which is 56.5% of the $129,183 a household headed by someone 45 to 64 has — a gap of $56,248 a year.
the same figures
| Householder | Median household income | Margin |
|---|---|---|
| All households | $109,753 | ± $12,275 |
| 25 to 44 | $119,500 | ± $20,747 |
| 45 to 64 | $129,183 | ± $21,150 |
| 65 and over | $72,935 | ± $8,677 |
Census table B19049, 2019–2023. Four separate medians of four separate sets of households, measured in the same five years — not one household’s income changing as it ages, and not a series through time. The under 25 band is not drawn because the Census published no estimate for it.
What this does not show
Where Lunenburg sits in Massachusetts
Lunenburg’s median household income is $109,753 ± $12,275. Ranked against the other 350 municipalities in Massachusetts that puts it 167 of 350 — and 205 of those 350 have an interval that overlaps this town’s, spanning everything from 37th to 336th place. The rank is real arithmetic on real figures and it is not a ranking anybody should carry to a meeting. The honest sentence is that Lunenburg is an ordinary Massachusetts town on income, and no amount of sorting will make it otherwise.
municipalities by median household income
| Median household income | Municipalities | Lunenburg |
|---|---|---|
| $0k–$20k | 0 | |
| $20k–$40k | 0 | |
| $40k–$60k | 12 | |
| $60k–$80k | 42 | |
| $80k–$100k | 85 | |
| $100k–$120k | 81 | here |
| $120k–$140k | 54 | |
| $140k–$160k | 28 | |
| $160k–$180k | 16 | |
| $180k–$200k | 16 | |
| $200k–$220k | 9 | |
| $220k–$240k | 2 | |
| $240k–$260k | 5 |
The dashed lines are the ends of Lunenburg’s own interval, $97,478 to $122,028 around an estimate of $109,753. Every other municipality’s figure has an interval of its own, which the bars do not draw.
Census table B19013, 2019–2023, every Massachusetts municipality. The statewide median municipality is $107,705. 4 municipalities publish no usable margin — the Census top-codes a median above its highest bracket — so they are counted in the distribution and in neither of the two counts above; every one of them is far above Lunenburg. On the Census’s own significance test, which is stricter than an overlap of intervals, 152 of 350 municipalities still cannot be told apart from this town.
And the same town, ranked on what it spends for each pupil
Both of these are true at once. On income Lunenburg is in the middle of Massachusetts and indistinguishable from most of it. On spending for each pupil it is 310 of 318 districts in FY2025, and in the bottom quarter in 17 of 17 published years. The two ranks are not the same kind of rank — one is municipalities on a sample estimate with a margin, the other is school districts on a figure the state computes from returns, including charter and virtual districts — so they sit side by side and are never differenced. The per-pupil comparison in full.
Did anything change between 2014–2018 and 2019–2023?
Mostly, nothing that can be shown. 15 measures were compared across the two releases and 3 of 15 clear their own margins: Population; Households; Median income, householder 65 and over. The other 12 moved by less than the combined margin of their own two estimates, which is a difference this survey cannot see. That includes the share of the town 65 or over and the share of households with a child — the two figures an argument about a changing town would most want.
every comparison, and whether it clears its own margin
| Measure | Earlier release | Later release | Difference | Combined margin | Verdict |
|---|---|---|---|---|---|
| Population | 11,271 ± 25 | 11,804 ± 19 | +533 | ± 31 | clears its margin |
| Residents 65 and over | 1,810 ± 262 | 1,979 ± 309 | +169 | ± 406 | inside the margin |
| Share of the town 65 and over | 16.1% ± 2.3% | 16.8% ± 2.6% | +0.7 points | ± 3.5 points | inside the margin |
| Residents under 18 | 2,578 ± 360 | 2,736 ± 429 | +158 | ± 560 | inside the margin |
| Share of the town under 18 | 22.9% ± 3.2% | 23.2% ± 3.6% | +0.3 points | ± 4.8 points | inside the margin |
| Households | 4,203 ± 145 | 4,529 ± 235 | +326 | ± 276 | clears its margin |
| Households with a child under 18 | 1,463 ± 141 | 1,477 ± 198 | +14 | ± 243 | inside the margin |
| Share of households with a child under 18 | 34.8% ± 3.1% | 32.6% ± 4.0% | −2.2 points | ± 5.1 points | inside the margin |
| Median household income | $101,510 ± $6,813 | $109,753 ± $12,275 | +$8,243 | ± $14,039 | inside the margin |
| Median income, householder 25 to 44 | $111,569 ± $10,609 | $119,500 ± $20,747 | +$7,931 | ± $23,302 | inside the margin |
| Median income, householder 45 to 64 | $117,891 ± $14,396 | $129,183 ± $21,150 | +$11,292 | ± $25,585 | inside the margin |
| Median income, householder 65 and over | $42,742 ± $12,593 | $72,935 ± $8,677 | +$30,193 | ± $15,293 | clears its margin |
| Owner-occupied homes | 3,475 ± 218 | 3,682 ± 321 | +207 | ± 388 | inside the margin |
| Share of homes owner-occupied | 82.7% ± 4.3% | 81.3% ± 5.7% | −1.4 points | ± 7.2 points | inside the margin |
| Renter-occupied homes | 728 ± 168 | 847 ± 189 | +119 | ± 253 | inside the margin |
The dashed lines are one margin either side of no change: a bar that does not reach one of them is a difference this survey cannot see, which is not the same as one that did not happen. The axis stops at three margins, and a bar that runs past it carries its true multiple.
2014–2018 against 2019–2023: two five-year windows that do not overlap, which is what makes the comparison permissible at all. Consecutive releases share four years of sample and may not be differenced. Every difference is drawn in multiples of its own combined margin, because the15 measures are counted in people, households, dollars and percentage points, and one axis cannot carry four units. Population clears by far the largest multiple because the survey measures the town total to ±19 where a single age group inside it is measured to ±309.
What this does not show
The record, and what it does not carry
What this report counts
RESIDENTS AND HOUSEHOLDS, as five-year SAMPLE ESTIMATES. Not a count: the American Community Survey samples a town of 11,804 and publishes a margin of error with every figure. Two estimates whose intervals overlap are not different. Nothing here is a dollar of budget, a child in a classroom or a tax bill.
What the town has said about who lives here
“particularly seniors on fixed incomes, a $3,000,000 override would translate to approximately $600 per year in additional taxes, a significant burden”
Finance Committee · minutes · 2026-01-27 · our copy · the town’s
A Finance Committee member at the Tri-Board meeting, on whether an override is necessary. This is the claim the income-by-age table can finally be set beside: a household headed by someone 65 or over has a median income a little over half that of a 45-to-64 household. It establishes what was said. It does not establish what any particular household can afford, which no table here measures.
“young families are looking for smaller houses with some land, but developers are building large houses that young families cannot afford”
Master Plan Steering Committee · minutes · 2024-04-05 · our copy · the town’s
The Master Plan Steering Committee, in the same minute that records an aging population looking for accessible and affordable options. Both halves of the town appear in one paragraph, which is the shape this page is trying to keep: the same numbers handed to both sides.
Searched 8,899 of the 12,015 meeting documents this archive holds (74%), covering 2009-01-05 to 2026-11-17. The other 3,116 carry no text a search can match — 3,096 of them are image scans awaiting OCR. An empty result above is a statement about what can be read, never about what was said.
The codes that are not numbers
The Census publishes sentinels where it has no figure, and each is a large negative number that would read as data to anything that did not know better. They are kept verbatim in the archive and never rendered as figures here: 2 cells in this page’s tables carry one.
| Code | Where | What it means |
|---|---|---|
| -666666666 | estimate | no estimate could be published for this cell |
| -222222222 | margin | no margin of error could be computed |
| -333333333 | margin | the estimate is top-coded, so no margin applies |
| -555555555 | margin | the estimate is CONTROLLED to an independent total and has no sampling error — which is not a margin of zero |
What this page cannot answer
- How many Lunenburg homes have a child in the LUNENBURG PUBLIC SCHOOLS — as opposed to a child under 18?The Census answers the second and not the first. B11005 puts 1,477 of 4,529 households — 32.6% — with a child under 18, which is what people mean when they say "about 30% of taxpaying homes", and on that reading the claim is fair. But that count includes children at Monty Tech, at private and charter schools, and children not yet of school age, so it is a CEILING rather than the figure. The arithmetic suggests the gap is real: 1,477 households against roughly 1,745 school-age children is about 1.2 per household, low enough that a meaningful share of those homes have only pre-school children. Nothing published joins a child to a household to a school. — closes: a count of DISTINCT HOUSEHOLDS with at least one child enrolled, which the district can produce from its own student information system and DESE cannot, because DESE counts children and the Census counts households and neither knows about the other.
- Who actually lives in Lunenburg — how many are over 65, how many households have a child in the schools, and what each group can afford?ANSWERED IN PART, 11 September 2026, and the part that remains is the part the argument actually runs on. The Census tables named below were fetched and are loaded as `census_acs`: 11,804 ± 19 residents, 1,979 ± 309 of them 65 or over, 4,529 ± 235 households, 1,477 ± 198 with a child under 18, median household income $109,753 ± $12,275 and $72,935 ± $8,677 where the householder is 65 or over. See /lunenburg-by-the-numbers, where every figure carries its margin. WHAT SURVIVES is the third clause — what each group can AFFORD. Income is not wealth, not savings, not equity and not a tax bill, and nothing published joins a property tax payment to the age of the person who paid it; the two rows below carry the two halves of what is still missing. — closes: the town census, which counts every resident by name, age and household rather than sampling them, held by the Town Clerk.
- How much of the property tax levy is paid by households headed by someone 65 or over?The Census now gives income by age of householder — a household headed by someone 65 or over has a median income of $72,935 ± $8,677, against $129,183 ± $21,150 for a 45-to-64 household — and that is income, not tax. The override argument is about a BILL: what a $3,000,000 override adds to a household is quoted at meetings as a town-wide average, and the town publishes no split of the levy by who pays it, by age or by anything else. Nor does it publish how many households take the statutory elderly exemptions and abatements that would change the answer. So "seniors on fixed incomes cannot carry it" cannot be checked in either direction, and neither can its opposite. — closes: the Board of Assessors’ commitment list with the Clause 41A, 41C and 17D exemptions granted, joined to the town census by age of owner — both held by the Town and neither published.
What this does not establish
- That any of these figures is a count. Every one is a five-year SAMPLE estimate with a margin of error, and two figures whose intervals overlap are not different. The town’s own population total is measured to ±19; a single age band inside it is not.
- That 1,477 ± 198 households have a child in the LUNENBURG PUBLIC SCHOOLS. The Census counts a child under 18, which includes Monty Tech, private and charter children and children not yet of school age, so the figure is a ceiling.
- That Lunenburg is richer or poorer than a town it out-ranks. 205 of the 350 municipalities have an income interval that overlaps this town’s, so a rank of 167 of 350 is arithmetic rather than a finding.
- That the income rank and the per-pupil rank measure the same population. One is 350 municipalities on a sample estimate; the other is 318 school districts on a figure DESE computes from returns, and it includes charter and virtual districts that are not municipal.
- Anything about what a household can AFFORD. Income is not wealth, not savings, not equity in a house and not a tax bill, and nothing in this archive joins a property tax payment to the age of the person who paid it.
- Anything in real terms. This archive holds no price index, so no figure here is deflated and no change described is a change in purchasing power.
- Anything at all from 2 published sentinel(s) — the Census’s codes for "no estimate" and "no computable margin". They are not zeros and are not printed as figures.
- Why any of this is so. Every figure here is a measurement of who lives in this town; a reason for it would be a hypothesis, and this page states none.
What would close these
The town census. It counts every resident by name, age and household each year, it is compiled by the Town Clerk, and it is the one record that would replace every estimate on this page with a count — including the two things the Census cannot say: which households have a child in the Lunenburg public schools, and what the people in them pay in property tax. Every limit on this page is also a row in what we cannot answer, which is the single registry the records request reads from.
Where every figure came from
The Census answers a query with JSON, and an API answer is a document like any other: each raw response is saved, hashed and published, and the figures on this page are read from those files rather than from a query nobody kept.
acs5-2023-B01001-lunenburg.json
United States Census Bureau
Sex by age — the 65-and-over share, and every band beneath it
table B01001, 2019–2023 · 4 KB
sha256 3c371d3a828e55fe…
acs5-2023-B11005-lunenburg.json
United States Census Bureau
Households by presence of people under 18 — the real denominator for "the 30% who have students in the school"
table B11005, 2019–2023 · 2 KB
sha256 0f738e9f49925607…
acs5-2023-B19013-massachusetts-lunenburg.json
United States Census Bureau
Median household income — every Massachusetts municipality, so Lunenburg can be ranked against them rather than described
table B19013, 2019–2023 · 31 KB
sha256 4edbe5e1bf435d95…
acs5-2023-B19049-lunenburg.json
United States Census Bureau
Median household income in the past 12 months, by age of householder — what turns "seniors on fixed incomes" from a claim into a number
table B19049, 2019–2023 · 1 KB
sha256 1c2f173a60ceaa4a…
acs5-2023-B25003-lunenburg.json
United States Census Bureau
Tenure — owner-occupied against renter-occupied
table B25003, 2019–2023 · 0 KB
sha256 b95763743e50449c…
acs5-2018-B01001-lunenburg.json
United States Census Bureau
Sex by age — the 65-and-over share, and every band beneath it
table B01001, 2014–2018 · 4 KB
sha256 693f9671c3106eda…
acs5-2018-B11005-lunenburg.json
United States Census Bureau
Households by presence of people under 18 — the real denominator for "the 30% who have students in the school"
table B11005, 2014–2018 · 2 KB
sha256 3e61847b189e3e19…
acs5-2018-B19013-massachusetts-lunenburg.json
United States Census Bureau
Median household income — every Massachusetts municipality, so Lunenburg can be ranked against them rather than described
table B19013, 2014–2018 · 30 KB
sha256 ec6f1555065f3532…
acs5-2018-B19049-lunenburg.json
United States Census Bureau
Median household income in the past 12 months, by age of householder — what turns "seniors on fixed incomes" from a claim into a number
table B19049, 2014–2018 · 1 KB
sha256 e1f3e77454e2d0b8…
acs5-2018-B25003-lunenburg.json
United States Census Bureau
Tenure — owner-occupied against renter-occupied
table B25003, 2014–2018 · 0 KB
sha256 bc36438db2e40aba…
census-acs.csv
Built by this project, from the responses above
One row per estimate per vintage, the margin of error in the same row. Written by scripts/fetch_census_acs.py, which refuses to write if the API returns anything that is not JSON.
table Every estimate, with its margin · 260 KB
sha256 505e8e0e1a5dc039…
Built by scripts/build_lunenburg_by_the_numbers.py, and recomputed from the CSVs by a second route in scripts/verify_lunenburg_by_the_numbers.py.
Every other report
Every analysis this project has written, in one index, is at reports.