← HomeDeep dive
Source Lookup: Where Every Number Comes From
Use this to trace any chart number back to its original document and page. For per-CSV methodology notes (why KFF for health insurance, why national vs Boston-metro CPI, why per-pupil data starts at FY2008, the Prop 2½ ballot history row counts and caveats), see Data File Methodology.
Document links below point at the primary source archive, a GitHub release of this repository that mirrors every town document cited. State-agency links (MA DOR, mass.gov, PERAC) remain on their live upstream URLs.
Tax Levy ($30.2M in FY01 to $83.9M in FY25)
- FY01-FY10: FY10 ACFR page 121, “Property Tax Levies and Collections”
- FY05-FY14: FY14 ACFR page 117, same table
- FY16-FY25: FY25 ACFR page 122, same table
- FY15: FY24 ACFR page 129 (the FY25 ACFR’s 10-year window starts at FY16)
- FY25 first-year collection rate is 99.11% per the audited statistical schedule on page 122; the MD&A narrative on page 3 quotes “approximately 97.18%,” which does not reconcile from the schedule’s columns and is likely a typo. Use the schedule.
Tax Rate ($8.42 in FY03 to $8.56 in FY26)
Average Single Family Tax Bill ($11,055 in FY26)
Total FTE (599.6 in FY01 to 684.0 in FY25)
- FY01-FY10: FY10 ACFR page 127, “Full-time Equivalent Town Employees by Function”
- FY05-FY14: FY14 ACFR page 123, same table
- FY16-FY25: FY25 ACFR page 129, same table
- FY15: FY24 ACFR page 136 (FY25 ACFR window starts at FY16)
- CAUTION: The FY25 ACFR retroactively restated FY20-FY23 totals upward (FY20 667.71 -> 730.41; FY23 709.00 -> 751.00). The restatement only affects the Education row; other functions carry identical values in both ACFRs. See inside-school-staffing.html for the full reconciliation.
Education FTE (489.8 in FY15 to 512.0 in FY25)
- FY25 ACFR table (restated): FY16 489.17, FY17 493.17, FY18 504.20, FY19 483.90, FY20 543.00, FY21 543.00, FY22 540.00, FY23 579.00, FY24 538.00, FY25 512.00
- Same ACFR pages as Total FTE, “Education” row
- For the pre-restatement values (FY20-FY24 as originally reported in FY24 ACFR), use the FY24 ACFR table directly.
Population and School Enrollment
- FY01-FY10: FY10 ACFR page 125, “Demographic and Economic Statistics”
- FY05-FY14: FY14 ACFR page 121, same table
- FY16-FY25: FY25 ACFR page 127, same table; school enrollment also on page 130 (Operating Indicators by Function)
- FY15: FY24 ACFR page 134 (FY25 ACFR window starts at FY16)
- FY25 population 20,583; FY25 enrollment 2,564
Group Insurance Spending ($8.0M in FY06 to $16.8M in FY27)
- FY06: FY06 ACFR page 82, budget schedule, “Group Insurance” line
- FY07: FY07 ACFR page 84
- FY08: FY08 ACFR page 83
- FY09: FY09 ACFR page 85
- FY10: FY10 ACFR page 83
- FY11: FY11 ACFR page 83
- FY12: FY12 ACFR page 85
- FY13: FY13 ACFR page 85
- FY14-FY16: 2016 FinCom Report page 17, Line 221
- FY17-FY19: 2019 FinCom Report page 14, Line 221
- FY21-FY23: 2022 FinCom Report page 17, Line 221
- FY24-FY25: 2025 FinCom Report page 23, Line 221
- FY25 (audited actual, $13,007,996): FY25 ACFR page 96, General Fund Budget and Actual schedule, Group Insurance line. Original budget $14,473,518; mid-year de-appropriation of $1,106,382 to final $13,367,136; actual $13,007,996 (2.7% under final). First year in 12 to break the 12-22% structural pad pattern. See the-insurance-surplus.html.
- FY26-FY27: FY27 Proposed Budget page 4, Line 221
Pension Expenditure ($5.1M in FY01 to $11.4M in FY25)
- FY01-FY10: FY10 ACFR page 118, “Changes in Fund Balances,” “Pension benefits” row
- FY05-FY14: FY14 ACFR page 114, same table
- FY16-FY25: FY25 ACFR page 119, same table; FY25 Pension benefits row = $11,402,956
- FY15: FY24 ACFR page 126 (FY25 ACFR window starts at FY16)
- CAUTION: This line is volatile due to GASB accounting changes. Not a clean trend.
Pension Assessment - Budget Line ($5,380,625 in FY26)
- FY26-FY27: FY27 Proposed Budget page 4, Line 217 “Contributory Retirement Fund”
- FY27: $5,843,360 (same document)
OPEB Insurance Membership (642-748 retired, FY11-FY25)
GIC Premium Rates ($24,107 in FY19 to $38,562 in FY26)
Net Pension Liability ($40.1M at 6/30/2025)
- FY25 ACFR page 31 (Reconciliation, Net Pension Liability line in long-term liabilities) and pages 86-90 (Required Supplementary Information, pension schedules)
- Town’s proportionate share: $40,112,618 (was $42,840,952 at 6/30/2024)
- System funded ratio improved 69.77% (FY23) -> 72.49% (FY24 measurement date)
- Town contributions: see Schedule of Contributions on page 88
Net OPEB Liability ($136.3M at 6/30/2025, Town only)
- FY25 ACFR page 31 (Reconciliation, Net OPEB Liability line) and pages 91-94 (Required Supplementary Information, OPEB schedules)
- Total OPEB liability $146,998,774 minus Plan fiduciary net position $4,954,123 = Net OPEB liability $142,044,651 (Town); funded ratio 3.37% (was 3.00% at 6/30/2024). The “$136.3M” figure in the long-term liabilities note is the change-in-long-term-liabilities row total which already nets some items differently.
- ADC vs contribution gap: $9.93M actuarially determined; $6.91M contributed; $3.0M under-funded for FY25 (was $4.1M under-funded for FY24)
- Discount rate changed from 5.74% to 5.51%; investment return assumption from 6.97% to 6.09%; mortality tables updated. These assumption changes plus favorable actual-vs-plan experience (-$10.4M) drove the net deficit improvement noted elsewhere.
- Municipal Light Department OPEB plan (separate): Total $6,130,047 - $2,789,560 fiduciary = Net OPEB liability $3,340,487; funded ratio 45.51%
Cash Reserves History (FY16–FY25 year-end balances)
- File:
data/cash_reserves_history.csv — used by /monthly-pacing/ section 3
- General Fund balance by category (Committed / Assigned / Unassigned, plus Restricted and Nonspendable in Other Governmental Funds): FY25 ACFR page 118, “Fund Balances, Governmental Funds — Last Ten Fiscal Years”
- Pension Trust fiduciary net position (10-year trend): FY25 ACFR page 115, RSI Schedule of Changes in Town’s Net Pension Liability and Related Ratios
- OPEB Trust fiduciary net position, Town plan (FY18–FY25): FY25 ACFR page 123, RSI Schedule of Changes in Town’s Net OPEB Liability and Related Ratios
- OPEB Trust fiduciary net position, Municipal Light Department plan (FY19–FY25): FY25 ACFR page 124, same schedule for MMLD
- General Stabilization Fund balance ($557,204 at 6/30/2025; $532,368 at 6/30/2024): FY25 ACFR Note III.J (Fund Balances). The dedicated stabilization fund (MGL Ch.40 §5B; 2/3 Town Meeting vote required to draw) is reported as part of the General Fund Unassigned line in the audited statements, not separately on the balance sheet.
PERAC Retirement System (358 active, 339 retired in FY24)
FY26 Budget Line Items (every position and salary)
- FY26 General Fund Budget (Excel)
- Four sheets: TOWN BUDGET, SCHOOL BUDGET, TOWN PIVOT TABLE, SCHOOL PIVOT TABLE
- Key lookups:
- Town Administrator salary: TOWN BUDGET, “SB-DEPT HEAD” = $207,732
- Sustainability Coordinator: TOWN BUDGET, “PCD-SUSTAINABILITY COORD” = $79,445
- Grant Coordinator: TOWN BUDGET, “PCD-GRANT COORDINATOR” = $79,064
- Health Insurance Transfer: TOWN PIVOT TABLE, “HEALTH INS TSF” = $11,828,487
- Pension: TOWN PIVOT TABLE, “CONTRIB RETIRE” = $5,380,625
FY27 Deficit ($8,471,823)
Bond Rating (AAA affirmed, outlook to negative, April 10, 2026)
- S&P Global Ratings letter to Finance Director Aleesha Benjamin, April 10, 2026, reference number 40447311
- Series 2015 General Obligation Municipal Purpose Loan Bonds, due 08/01/2035
- Archived PDF contains the rating-action letter only. The supporting rationale (research update with reserve ratios, debt figures, and downgrade triggers) is referenced as an enclosure but is not included in the publicly distributed letter. Secondary coverage: Marblehead Independent, “S&P affirms Marblehead’s AAA bond rating, shifts outlook to negative”. That article paraphrases the rationale as citing a “~$7.7 million” FY27 structural deficit, which predates the $8,471,823 figure presented at the January 28, 2026 State of the Town; use the Town Administrator figure for site-wide deficit references.
Long-Term Debt Outstanding ($107.4M at 6/30/2025)
- FY25 ACFR page 59 (Note F, summary of outstanding long-term obligations)
- 10-year trend: FY25 ACFR page 123, “Ratios of Outstanding Debt by Type”
- Changes in long-term liabilities: FY25 ACFR page 57
- Local copies of ACFRs:
data/town_docs/FY24_Town_of_Marblehead_ACFR.pdf, data/town_docs/FY25_Town_of_Marblehead_ACFR.pdf
- Structured digest used by
town-debt.html: data/debt_summary.json
GO Bond Maturity Schedule (through FY2044)
- FY25 ACFR page 59, “Payments on outstanding bond balances due in future years”
- Governmental Activities general obligation bonds only: principal $93,525,000 + interest $21,549,675 = $115,074,675 total (FY26-FY44 remaining)
Legal Debt Limit and Margin ($475.2M limit, 13.87% used FY25)
- FY25 ACFR page 125, “Computation of Legal Debt Margin, Last Ten Fiscal Years”
- Limit = 5% of equalized valuation per M.G.L. c. 44 § 10
Authorized But Unissued Debt ($23.78M at 6/30/2025)
- FY25 ACFR page 57
- Breakdown: High School roof and HVAC $8.61M, Roads and sidewalks $6.98M, Mary Alley building HVAC $5.75M, Gerry School construction $1.62M, Water projects $0.82M
- Up from $12.23M at 6/30/2024; the FY25 ATM added the HS roof+HVAC ($8.61M new) and expanded Mary Alley from roof-only ($480K) to building HVAC ($5.75M). Franklin Street Fire Station roof ($131K) is no longer on the list, presumably bonded or completed during FY25.
Debt-Exclusion Ballot History (50 WIN / 1 LOSS, 1988–2025)
- MA DOR Division of Local Services debt-exclusion file:
data/dor_debt_exclusion_all.csv
- Marblehead filtered: 51 rows. Only LOSS is the June 2002 Tucker’s Wharf vote (Culture and Recreation).
Debt Service as % of Total Spending (peer comparison, FY24)
- MA DLS Schedule A for 17 peer towns:
data/peer_schedule_a_expenditures.csv
- Calculation:
debt_service / total_expenditures per (town, fiscal_year) row
- FY24 Marblehead: $11,006,139 / $100,501,118 = 10.95%
2026 Annual Town Meeting Warrant (May 4, 2026)
- 2026 Annual Town Meeting Warrant, posted February 26, 2026, signed by Town Administrator Thatcher Kezer
- Article 28: School Department Supplemental Appropriation, contingent on Proposition 2½ ballot question
- Article 29: Supplemental Appropriation and Expenses of Several Departments, contingent on Proposition 2½ ballot question
- Both override-contingent appropriations are written as “a sum of money” in the warrant; tier-specific amounts are set by motion on the floor.
- Article 30 rescinds $1,619,627 of unused borrowing authority from the 2019 Gerry Elementary School authorization.
2026 Annual Town Meeting Results (May 4, 2026)
- Source: moderator’s announcements from the floor, May 4 ATM (attended). Town Clerk minutes will be the documented form of the same record once posted.
- Article 29 (override authorization): 1,227 in favor, 159 against, 1,386 total cast (88.5% yes). Vote taken with the Meridia ARS clicker (electronic, secret per voter).
- Article 4 (3A multifamily overlay): 881 in favor, 82 against, 963 total cast (91.5% yes).
- Article 1 amendment (article reordering): 1,023-225 (1,248 total).
Revenue and Expense Projections
Melrose/Stoneham Case Studies
Override Tier Amounts and Tax Impact
Extracted into:
data/override_town_line_items.csv has every town-side item funded at each tier (slide 6)
data/override_school_items.csv has school-side items by tier and fiscal year (slides 7-9)
data/override_draws_schedule.csv has the year-by-year draw schedule per tier. Values reconciled to the signed FY27-29 Override Framework MOU (dated April 7, 2026; marbleheadma.gov/wp-content/uploads/2026/05/SB-SC-FinCom-FY27-29-Override-Framework-MOU.pdf), Override Structure section, which supersedes the April 8 presentation draft (slides 10-12). FY27 draws and the $9M/$12M/$15M totals match the presentation; the FY28/FY29 splits differ by up to ~$85K per tier.
data/override_tax_impact_asf.csv has the annual and monthly tax impact on the average single-family home ($1,291,507) per tier per year (April 8 slides 13-15)
data/override_tax_impact_median.csv has the phase-in schedule on the median single-family home ($998,600) per tier per year (April 15 FINAL slide 7)
data/override_tax_impact_by_home_value.csv has the steady-state (fully-phased) annual tax increase by home value from $500K to $1.5M, plus tier 3 monthly cost (April 15 FINAL slide 9)
data/override_trash_schedule.csv has the Question 2 trash and recycling draw breakdown (April 8 slide 20; April 15 FINAL deck drops Question 2)
Cumulative annual tax increase on avg single-family home ($1,291,507), April 8 draws:
- Tier 1 ($9M): FY27 +$167.90, FY28 +$804.93, FY29 +$1,186.68 (full phase-in)
- Tier 2 ($12M): FY27 +$361.62, FY28 +$1,132.65, FY29 +$1,587.17
- Tier 3 ($15M): FY27 +$555.35, FY28 +$1,369.97, FY29 +$1,985.39
Cumulative annual tax increase on median home ($998,600), April 15 FINAL:
- Tier 1 ($9M): Year 1 +$130, Year 2 +$663, Year 3 +$919
- Tier 2 ($12M): Year 1 +$280, Year 2 +$956, Year 3 +$1,230
- Tier 3 ($15M): Year 1 +$430, Year 2 +$1,150, Year 3 +$1,538
Note: the April 15 deck’s Y2 figures for the avg home ($168 / $857 / $1,188) differ slightly from the April 8 values in override_tax_impact_asf.csv (+$52 gap in Year 2). The cumulative end-of-Year-3 totals agree within rounding, so the difference is a phase-in-schedule revision, not a change in the override size. override_tax_impact_median.csv reflects the April 15 schedule; the avg-home CSV has not been updated to reflect the revised phase-in.
Steady-state tax rate per $1,000 assessed value (derived from April 15 slide 9):
- Tier 1: $0.90/$1,000 Tier 2: $1.20/$1,000 Tier 3: $1.50/$1,000
(The deck’s footnote “Rate: $0.10 per $1,000” does not match its own table; the rates above are back-computed from the $500K row: $450/$500K = $0.90/$1,000, etc. and verified against the AVG and MEDIAN rows.)
Each year’s draw stays on the levy permanently; Year 3 is the ongoing annual cost.
Town Payroll Headcount and GIC Invoice History (PRR, April 2026)
Two datasets released by the Town’s Records Access Officer in response to a public records request dated April 10, 2026 (response letter dated April 28, 2026, signed by RAO Kyle A. Wiley).
data/employee_count_FY2008-2026.xls – Town payroll “Employee Earnings History” report, one sheet per fiscal year FY2008–FY2026. Each row is one employee with department number, name, title, and pay frequency. Each sheet ends with department subtotals titled “Number of Employees”.
data/gic_invoices_FY2014-2026.xlsx – GIC monthly invoice ledger, one sheet per fiscal year FY2014–FY2026 (FY26 partial through 11 months). Columns: month, invoice date, headcount by enrollment category (active, retired, retiree dental, survivor, COBRA), dollar cost by category, full premium, admin fee, roster adjustments, and total amount due.
data/baber_2026-04-10_PRR_response.docx – the cover letter.
Derived for charts and CSVs on the site:
data/town_employee_headcount_FY08-26.csv – long-form: FY, Department, Headcount.
data/town_employee_headcount_summary_FY08-26.csv – FY × Schools / Town / Total. School-side rows include the five schools, ADMIN & SYSTEMWIDE (dept 301, district admin and substitutes), SCH CUST/MAINT & TRANSP (dept 303), SCHOOL REVOLVING FUND, and SCHOOL GRANTS.
data/gic_monthly_invoices_FY14-26.csv – one row per monthly invoice with all fields.
data/gic_invoices_summary_FY14-26.csv – per-FY rollup: average enrollment by category and total dollars by category.
Caveats:
- Headcount, not FTE. Counts every paid employee regardless of frequency (annual, weekly, on-call, seasonal). A 0.5 FTE position counts as 1 here. Year-over-year deltas are still useful because the methodology is consistent across years.
- The schools/town split treats dept 301 ADMIN & SYSTEMWIDE as schools (verified by sampling: titles include SUPERINTENDENT, ASST SUPERINTENDENT, ATHLETIC DIRECTOR, district teachers and substitutes; dept #s 301/303/304+ are all school accounts).
- FY26 GIC sheet covers 11 months only (July 2025 through May 2026 invoice dates).
- GIC invoice totals are the full premium (employer + employee share). This is not the same number as the Town’s “Group Insurance” budget line, which represents the Town’s own appropriation. Compare with care.
FY26 Checkbook and Adopted Budget (Socrata portals, June 2026)
The town runs two Socrata-hosted portals that publish FY26 spending data. The latest refresh was on 2026-06-10; the published CSVs are bundled into this repo so the checkbook tool can render without hitting the live API.
- Spending portal – vendor-payment detail.
scripts/fetch_checkbook_export.py pulls the full FY-to-date ledger from /api/checkbook_data.csv?year=2026 (the same endpoint the portal’s UI export button hits; open, no session required as of 2026-06-10) and pipes it through scripts/build_checkbook_csv.py, which drops the two medical-claim funds, masks student/employee-identifying descriptions, and regenerates data/checkbook_redaction_disclosure.json. The 2026-06-10 pull produced data/checkbook_FY26_2026-06-09.csv (15,364 rows, $99,931,420.37 total, covering 2025-07-01 through 2026-06-09; 565 rows / $438,934 dropped, 313 descriptions masked). Columns: Vendor, Fund, Division, Description, Date, Amount. Excludes payroll, inter-fund transfers, and intergovernmental remittances posted through the GL. The raw export carries PII (employee surnames on medical claims, truncated student first names on out-of-district SpEd placements) and must never be committed; the fetch script writes it under /tmp/ by default.
- Budget portal – revised/actual/original budget by Fund Group, Fund, Department, Category, Division, and Object. The
fund_source_data.json endpoint (no cookie required, no CORS) gave the 317-fund all-funds rollup ($206,063,591.63) saved as data/budget_FY26_by_fund.json. The portal’s CSV-export buttons on the Budgeted Annual Funds view gave five drill-downs (by Fund / Department / Category / Division / Object) for the $127,338,097.88 Budgeted Annual envelope; these and the top-level Adopted Budget rollup were merged via scripts/build_budget_actual.py into data/budget_actual_FY26.json.
The checkbook total ($98.5M) and the budget portal’s Actual rollup ($140.4M) intentionally don’t match: the checkbook is AP-only, while Actual includes payroll runs, transfers, and intergovernmental remittances. The Electric Light Department ($13.16M of Actual) runs as a self-supporting enterprise with no appropriation, so it appears with $0 Revised Budget. Used by charts/checkbook.html.
Parcel Assessments (MassGIS Standardized Assessors’ Parcels, FY2025)
- Source: MassGIS “Massachusetts Property Tax Parcels” ArcGIS feature service (the Level 3 Standardized Assessors’ Parcels extract), layer
FeatureServer/0, filtered to TOWN_ID=168 (Marblehead). Pulled 2026-07-16. Dataset home: MassGIS Property Tax Parcels.
scripts/fetch_massgis_parcels.py pages the service (2,000 rows per request, resultOffset, returnGeometry=false, ordered by OBJECTID) and writes data/parcels.csv (committed, de-identified) plus data/parcels_raw/parcels_full.csv (gitignored, adds owner1 + mailing). Raw JSON pages are cached under data/parcels_raw/ (gitignored) for provenance. One run is ~5 requests for all 8,805 parcels. Field mapping lives in scripts/massgis_parcels.py (unit-tested in data/test_massgis_parcels.py).
- The gitignored full CSV is the input to
scripts/sync_parcel_owners.mjs, which normalizes addresses and loads the parcel_owners D1 table behind the community-pulse self-serve verification feature. Its buildRow reads site_addr, owner1, prop_id, and fy from this CSV.
- Vintage: MassGIS carries the prior fiscal year’s certified values, so this is FY2025 (the
fy column records it per row). The town’s live Patriot Properties database shows the FY2026 revaluation, ~20% higher on a sampled waterfront parcel; do not present these as current-year values without the vintage caveat.
- Owner names and mailing addresses are public record but are deliberately kept out of the committed CSV: marbleheaddata.org is a public static site, so committing the bulk owner list would publish it. The de-identified file is what the site reads.
- Note on sourcing: an earlier attempt scraped the town’s live Patriot Properties WebPro database parcel-by-parcel; it got the IP rate-limited (403) after ~7,000 requests and only covered ~2% of parcels. MassGIS provides the same data (one fiscal year older) in one polite bulk pull, so that is the source of record here.
Household Income Distribution (ACS 2020–2024, table B19001)
- Source: US Census Bureau, ACS 2020–2024 5-year estimates, table B19001, Marblehead town, Essex County, MA (FIPS 25-009-38400)
- API endpoint:
https://api.census.gov/data/2024/acs/acs5?get=NAME,B19001_001E,...,B19001_017E&for=county%20subdivision:38400&in=state:25%20county:009
- Raw JSON saved:
data/acs_b19001_marblehead_2024.json
- B19001_001E = total households (8,289). Brackets _002E through _017E cover <$10K up to $200K+. Percentiles on the override calculator are derived from cumulative bracket sums divided by _001E.
School-Age Population (ACS B01001, ages 5–17)
- Source: US Census Bureau, ACS 5-year estimates, table B01001 “Sex by Age”, Marblehead town (FIPS 25-009-38400), end-years 2014–2023.
- API endpoint pattern:
https://api.census.gov/data/<year>/acs/acs5?get=NAME,B01001_004E,B01001_005E,B01001_006E,B01001_028E,B01001_029E,B01001_030E,...M&for=county+subdivision:38400&in=state:25+county:009
- Variables sum male+female counts for ages 5-9, 10-14, and 15-17. Margin of error propagated as sqrt of sum of squared component MOEs.
- Raw data:
data/acs_school_age_marblehead.csv. Fetch script: scripts/fetch_acs_school_age.py. Used by charts/enrollment_vs_staffing.html school-age section.
DESE Enrollment by Reason (Marblehead district, SY 2014–2026)
- Socrata dataset
8xyg-59b2, “Reasons for Student Enrollment by Town (Receiving)”: educationtocareer.data.mass.gov/resource/8xyg-59b2.json
- Filtered to
dist_code=01680000 (Marblehead). Each row is one (school year, enrollment reason, town of residence) combination.
- MPS resident enrollment = sum where
town_name=Marblehead (across all enrollment reasons).
- METCO = sum where
enr_reason=METCO.
- Other non-resident = remainder (school-choice, in-state agreement, foreign exchange from non-Marblehead towns).
- Cross-checked against Socrata
t8td-gens district-level total enrollment within ±1.
- Raw data:
data/dese_metco_nonresident.csv. Fetch script: scripts/fetch_dese_selected_populations.py.
DESE School-Attending Children (Marblehead-resident, SY 1985–2025)
- Socrata dataset
rdxw-mfv3, “School Attending Children”: educationtocareer.data.mass.gov/resource/rdxw-mfv3.json
- Filtered to
town=Marblehead. Each row is one school year with counts of Marblehead-resident kids attending each school category: local public (loc_pub_cnt), regional academic, vocational, collaboratives, charter, out-of-district public, homeschool, in-state private, out-of-state private.
- SY 2020 is missing from the source dataset. SY 2007 and SY 2008 have known total-count anomalies; charts compute non-MPS totals as the sum of all non-
loc_pub categories rather than total_cnt - loc_pub to avoid those anomalies.
- Raw data:
data/dese_school_attending_marblehead.csv. Fetch script: scripts/fetch_dese_school_attending_children.py.
Peer Town General Fund Revenues and Expenditures, FY2002–FY2025
Two CSVs pulled from the Massachusetts Department of Revenue Division of Local Services (DLS) Schedule A General Fund reports:
data/peer_schedule_a_revenues.csv – 15 peer towns (Arlington, Brookline, Cohasset, Duxbury, Framingham, Hingham, Lexington, Marblehead, Melrose, Natick, Needham, Stoneham, Swampscott, Wellesley, Winchester) × FY2002–FY2025. Columns: dor_code, municipality, fiscal_year, taxes, service_charges, licenses_permits, federal_revenue, state_revenue, other_govt_revenue, special_assessments, fines, miscellaneous, other_financing, transfers, total_revenues.
data/peer_schedule_a_expenditures.csv – same 15 towns and years. Columns: dor_code, municipality, fiscal_year, then DLS expenditure categories (general government, public safety, education, public works, human services, culture and recreation, debt service, intergovernmental, fixed costs, etc.) and total_expenditures.
data/peer_gf_rev_exp_summary.csv – derived summary with just municipality, fiscal_year, total_revenues, total_expenditures.
Upstream URL (no year parameter needed; the form lets you select year and municipality checkboxes): DLS Schedule A General Fund.
Scraper: pull_schedule_a.mjs in the repo root. It uses Playwright to submit the form for each year and paginate through all 351 Massachusetts municipalities, filtering to the 15 peer towns on save.
DLS’s definition of General Fund scope follows the Uniform Massachusetts Accounting System (UMAS). Schedule A totals reflect the government-wide general fund and do not match ACFR governmental-fund totals one-to-one (different fund groupings, different reporting period boundaries). Use these CSVs for cross-town comparison; use ACFRs for single-town historical detail.
Note on the general_government category: Schedule A’s general_government is a state-standardized definition that lets all 351 Massachusetts municipalities be compared on the same line. It does not always match a town’s internal budget grouping. For Marblehead in FY27, the local “general government” category in the town budget (~$6.89M) is roughly twice the Schedule A value (~$3.31M FY24) because some functions Marblehead groups under general government locally (notably facilities and shared services) are categorized elsewhere by Schedule A. Used by charts/general_government_over_time.html.
Annual Town Reports, 2006–2025 (full corpus)
Plain-text extracts of every Annual Town Report published by the Town, covering calendar years 2006 through 2025 (20 reports total). Pulled from marbleheadma.gov/document/annual-town-reports and extracted with pdftotext -layout.
data/town_docs/annual_reports/Annual-Report-YYYY.txt – one text file per calendar year, ~14k–30k lines each
data/town_docs/annual_reports/manifest.csv – year, source PDF URL, file sizes, page count, extraction method, extraction date
data/town_docs/annual_reports/README.md – provenance and citation pattern
PDFs themselves are gitignored; URLs in the manifest let any future session re-fetch a specific year.
What’s in each report (shape varies year to year, but typically):
- Department writeups: Selectmen, Police, Fire, DPW, Schools, Library, Recreation, Health, COA, Building, Community Development, etc.
- Town Meeting warrants and voted results (Annual + any Specials), article by article
- Election warrants and tallies (annual local, state primary, state election, presidential primary)
- Employee rosters with annual salaries (the report’s “Compensation” or “Salaries Paid” appendix)
- Vital statistics: births, marriages, deaths
- Boards and committees with member names
- Town Treasurer’s financial summary
Treat as secondary for any audited financial figure – the ACFR is the audited primary source. Use the ATR for narrative context, town meeting article history, and historical employee/department rosters.
Caveats:
pdftotext -layout preserves table columns at the cost of leading whitespace. Most queries are fine; if you need paragraph-flow text, re-extract from the PDF without -layout.
- 2012 and 2022 extracts are 4–5× larger than other years because those PDFs use unusually wide column layouts, not because they contain more content.
- Citation pattern: Marblehead Annual Town Report YYYY, [Department Name], page N (use the PDF page number from the report’s table of contents).
Marblehead Free Cash, FY2004–FY2024
data/marblehead_free_cash.csv joins two series for Marblehead in one file:
- Certified free cash (FY2004–FY2024): the unreserved fund balance certified by the Department of Revenue at the end of each prior fiscal year and made available to appropriate during that fiscal year. Pulled from the DOR DLS Gateway Certified Free Cash report (community: Marblehead, all years).
- Appropriated free cash (FY2015–FY2024): the portion of the certified pool actually drawn into the operating budget that year. From
data/general_fund_budgetary_FY15-24.csv, which traces each year to its ACFR original budget schedule.
- Cushion: certified minus appropriated. The unspent portion that rolled forward.
Pre-FY2015 appropriated values are not in this CSV because the matching ACFR-derived series only covers FY15 onward. The certified series alone for FY04–FY14 is still useful for trend context.
Caveats per the underlying CSV’s notes column: appropriated values for FY15–FY19 are total budgeted fund balance use (slightly broader than pure operating free cash). FY20 onward is specifically operating (use of free cash to reduce the tax rate) per the post-FY20 ACFR schedule format. FY22 ACFR captures pre-amendment original $8,792,102; the FinCom 2022 report shows an amended total of $8,950,000 after a $142,102 collective bargaining supplemental.
Marblehead Independent & Current Articles (referenced across site)