One reference date: October 15, 2024 · 2025-edition workbook
Once a year New Jersey publishes, for every district, how many students it enrolled and how many of them held an individualized education program. The share is called the classification rate. It is one of the most useful numbers a parent can have about a district, and one of the easiest to read as something it is not. This page is the manual for both halves of that.
The federal Individuals with Disabilities Education Act requires every state to report, under Section 618, a count of the children it serves in special education. New Jersey publishes its answer as a single spreadsheet on the Office of Special Education's public IDEA data page, with two worksheets:
| Worksheet | What it holds | Rows |
|---|---|---|
| District Rates | One row per NJDOE district reporting unit: total enrollment, the count of students with an IEP, and the classification rate NJDOE calculated from them. | 655 districts |
| State Rates | The statewide total, plus one row for each of 13 disability categories — count of students and a statewide rate. No district appears here. | 14 rows |
Everything is measured on a single day: October 15, 2024. There is no earlier and no later figure in this file, so nothing on our pages built from it is a trend, and no movement can be read from it.
Statewide, NJDOE counted 1,394,970 students and 242,001 with an IEP — a classification rate of 17.35%. District rates run from 0.0% to 65.57%.
A classification rate counts the students who held an IEP on one October day. It has no direction. There is no “good” value.
This is the part that matters most, so it is worth being blunt about. A district whose rate sits above New Jersey's 17.35% may be finding and identifying students that other districts miss — or it may be classifying children who would not be classified a town over. A district below it may be under-identifying students who need help — or it may serve a population with less need. Nothing in this file distinguishes those cases, and neither can we.
| The rate is… | The rate is not… |
|---|---|
| An administrative count of who held an IEP on 15 October 2024 | A count of how many students need special education |
| The publisher's own arithmetic, reproduced not recomputed | A measure of whether the services those students get are any good |
| Comparable across districts as a count | Comparable across districts as a judgment — a higher number is not better or worse |
| One day's record | Evidence about staffing, spending, out-of-district tuition, placement, program appropriateness, or compliance with anything |
The four highest rates in the state belong to entities that are not ordinary school districts: the Department of Corrections education office (65.57%), the Department of Children and Families education office (40.55%), the Juvenile Justice Commission (39.6%), and Seaside Heights (41.88%). Placement settings enroll students who were sent to them because they need services, so a rate three times the state's says something about what kind of entity it is, not about how it serves a neighborhood.
650 of 655 districts publish cleanly. The five that do not are the interesting ones, and they are empty in three different ways that must never be collapsed into a zero:
| Code | District | Enrollment | Students with IEP | Rate |
|---|---|---|---|---|
2220 | Holland Township | 522 | empty cell | empty cell |
8505 | Bergen Co JDC | * withheld | 0 | 0% |
8509 | Essex Co JDC | 5 | 0 | 0% |
8511 | Middlesex Co JDC | * withheld | 0 | 0% |
8513 | Ocean Co JDC | * withheld | 0 | 0% |
Three states, three different acts by the publisher:
*) — NJDOE holds the figure and did not release it, at three county juvenile detention centers whose enrollment is small enough that publishing it could identify individuals. The state knows the number. You do not.On the district pages a withheld cell keeps NJDOE's own * so the mark is the publisher's and not ours, an empty cell reads “Not published,” and a printed zero is shown as the figure it is. Holland Township never shows a 0.
Three questions follow immediately from a classification rate, and this file answers none of them at the district level. Saying so is part of the answer:
| Question | What this file has |
|---|---|
| Which disabilities? | 13 categories — for New Jersey as a whole, and only there. Not one district in the file has a disability breakdown. |
| How does it break down by race? | Nothing, at any level. |
| Are these students in general-education classrooms? | Nothing, at any level. Nor is there any breakdown by age. |
Federal IDEA Section 618 collections by race, age and educational environment do exist. This New Jersey workbook is not them, and no amount of looking will find them inside it.
The statewide breakdown that does exist, for context: specific learning disability is the largest category at 67,445 students, then speech or language impairment (52,985), other health impairment (46,874) and autism (31,715). The smallest is deaf-blindness — 18 students, whose published rate is exactly 0, because a rate carried to four decimal places as a fraction rounds 18 out of 1.39 million to nothing. That zero is a rounding artifact, not a count, and it cannot honestly be printed without the 18. We do not currently render the category breakdown at all; it is not part of the data we load.
The workbook is a 2025-edition file. Its embedded document title says “School Year 2023-24.” The reference date NJDOE states for the data inside it is October 15, 2024, which falls in 2024-25.
All three labels are in the same artifact and they do not agree. We preserve the conflict rather than picking a winner: the reference date is what we print as the period, and wherever it appears we say that the embedded title disagrees. Neither label is ever printed alone.
We join this file to our districts on the exact zero-padded NJDOE district code, and never on names. Of the 587 district reports our build writes, 558 match; the other 29 have no row in the source and show nothing rather than a guess.
That omission has an awkward shape worth naming: 20 of the 29 are the county special-services districts, educational-services commissions and jointure commissions — which is precisely the population a reader arriving at a special-education page most wants to look up. A name-based fallback would fill those pages by attaching some neighboring district's rate to an entity that never reported one, and that is a worse answer than an absence. The remaining nine are ordinary districts (codes 0130, 0200, 0810, 2120, 2160, 3145, 4700, 4720 and 5490) with no source row.
The workbook arrives as an exact, verified offline pin from our upstream data warehouse; this repository downloads and parses nothing. The build checks the whole artifact — 670 source rows, 1,994 typed values, three metric definitions and every value-state population — before writing anything, then projects the district all-iep-students rows and the statewide total into two tables:
| Table | Holds | Rows |
|---|---|---|
idea_classification_district | District identity, the reference date, and for each of enrollment, students with an IEP and the classification rate: the value, the publisher's exact literal, its value state, and the workbook cell it came from | 655 |
idea_classification_state | The statewide comparator, including the rate in the publisher's native fraction scale as well as percentage points | 1 |
Every cell keeps its own value state — that field is what separates a withheld figure from an empty one from a printed zero, and without it all three are the same blank spreadsheet cell. The statewide disability categories are deliberately not projected: nothing on the site renders them, so nothing on the site can render them wrongly.
The data appears in two places: the How many students have an IEP section on each district profile, and the Costs and students section of each district budget report, where it sits beside the later budget-planning row precisely so a reader can see that the two are different quantities.
Source data: New Jersey Department of Education, Office of Special Education, 2025 IDEA Section 618 Public Reporting — Classification Rates (nj.gov/education/specialed/monitor/ideapublicdata), reference date October 15, 2024.
Every dataset behind this site keeps a structured registry of its known issues — the format breaks, suppression rules, entry errors, and definitional traps we hit while building on it — so that the next person (or agent) who works with this data doesn't rediscover them the hard way. Each issue has a stable id, a machine-readable scope (which years, columns, and tables it touches), and an effect: breaks stops a pipeline, corrupts silently wrongs the numbers, misleads invites a wrong reading of right numbers, context is background you must hold to use the data responsibly. Issues marked ★ are core: read them before any use of this data. The registry is maintained in the ergo format and served in machine-readable form alongside this page — links at the end of this section.
NJ Department of Education, Office of Special Education · source confidence A · updated 2026-07-30 · 6 known issues (2 core)
The pitfall: The classification rate is an October 15, 2024 administrative record, not the later UFB planning share or evidence of need, staffing, spending, service quality, or compliance.
Type: suppression — applies to tables: idea_classification_district · columns: total_enrollment_state, students_with_iep_state, classification_rate_state · rows: total_enrollment_state <> 'reported' OR students_with_iep_state <> 'reported'
How to spot it: Value-state populations in idea_classification_district: total_enrollment 652 reported / 3 suppressed; students_with_iep and classification_rate 650 reported / 4 exact-reconciliation-zero / 1 not-collected. The suppressed literal is `*` and the not-collected literal is the empty string. No classification rate is suppressed anywhere in the file — suppression lands only on the denominator.
The misread: Rendering `*` or the empty literal as 0 or 0%. Holland Township (2220) reports 522 students and no IEP count at all; printed as a zero it becomes a district where no child has an IEP. Conversely, greying the four printed zeros as 'not available' deletes a figure NJDOE published.
Full entry, with the story and the numbers, in the served ergo doc.
Type: definitional — applies to tables: idea_classification_district, idea_classification_state · columns: classification_rate_value
How to spot it: The published district rates run from 0.0 to 65.57 percentage points against a statewide 17.35. The four highest are state-operated or county-operated programs — Department of Corrections education (65.57), Department of Children and Families education (40.55), the Juvenile Justice Commission (39.6) — placement settings whose enrolled population arrives already classified. Nothing in the file distinguishes a district that identifies students well from one that over-identifies them, and there is no direction in which the number is better.
The misread: Reading a high rate as unmet need being met, or as over-classification; reading a low rate as under-identification, or as a healthy population. Ranking districts on the rate. Placing the rate beside the UFB special-education planning share as if the difference between them meant something — different population, different date, different file.
Full entry, with the story and the numbers, in the served ergo doc.
Type: coverage — applies to tables: idea_classification_district · columns: category_id · entities: all 655 district reporting units
How to spot it: The release carries 14 category ids: `all-iep-students` plus 13 `idea-disability-*`. Every one of the 1,965 district-level cells (655 rows x 3 metrics) is `all-iep-students`; the 13 disability categories appear only in the 29 state-level cells. No race, age or educational-environment dimension exists anywhere in the artifact.
The misread: Promising a parent a district disability breakdown, or reading the statewide category shares as this district's. The federal IDEA Section 618 collections by race, age and educational environment do exist; this NJDOE file is not them, and looking for them in this pin will not find them.
Full entry, with the story and the numbers, in the served ergo doc.
Type: measurement — applies to rows: category_id = 'idea-disability-deaf-blindness' AND metric_id = 'idea.classification.rate-percent' · entities: statewide Deaf-Blindness disability category
How to spot it: In the pinned release, category `idea-disability-deaf-blindness` carries students-with-IEP literal `18` typed reported, and rate literal `0` typed exact-reconciliation-zero, at `State Rates!8:B` and `State Rates!8:C`. Every other statewide category publishes a non-zero fraction; the three next-smallest (visual impairment, traumatic brain injury, orthopedic impairment) publish `0.0002`.
The misread: Printing the category's rate as 0 or 0% without its headcount, which says no New Jersey student is deaf-blind. The zero is a rounding artifact of a rate expressed as a fraction to four decimal places, not a count.
Full entry, with the story and the numbers, in the served ergo doc.
Type: entry — applies to the whole dataset
How to spot it: Release metadata carries `publisher_edition = 2025`, `reference_date = 2024-10-15` and `embedded_title_defect = School Year 2023-24`. The conflict is inside the published file and is preserved rather than reconciled.
The misread: Labeling the figures `2023-24` from the embedded title, or `2025` from the edition. Either label alone attaches the count to a school year NJDOE did not say it measures.
Full entry, with the story and the numbers, in the served ergo doc.
Type: linkage — applies to tables: idea_classification_district · columns: district_code · entities: 29 rendered districts with no exact-code source row
How to spot it: 558 of 587 rendered district budget reports match by exact zero-padded NJDOE district code; the 29 that do not are locked in tests/test_aquifer_idea_classification_adapter.py. Twenty carry special-services, educational-services-commission or jointure-commission routes; the other nine are ordinary districts (0130, 0200, 0810, 2120, 2160, 3145, 4700, 4720, 5490) with no source row.
The misread: Falling back to a name match to fill the gap, which would attach a neighboring district's classification rate to a special-services entity. Reading the absence as a district with no students holding IEPs.
Full entry, with the story and the numbers, in the served ergo doc.
Machine-readable: this page as an ergo doc · all datasets (index.json) · format: ergo · implementation: source repo
The text on this page was generated by Claude Opus 5, working as part of a stack of tools created by Lyra Forge.