NJ School Data
← Data library
Data explainer

NJ IDEA classification rates

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.

1 · The source

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:

WorksheetWhat it holdsRows
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%.

2 · What the rate is not

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 2024A count of how many students need special education
The publisher's own arithmetic, reproduced not recomputedA measure of whether the services those students get are any good
Comparable across districts as a countComparable across districts as a judgment — a higher number is not better or worse
One day's recordEvidence about staffing, spending, out-of-district tuition, placement, program appropriateness, or compliance with anything

The high end is structural

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.

The classification rate is not the special-education share in a district budget. Those are different counts, of a different population, on a different date, from a different file. Our budget pages carry a planning-enrollment special-education row; subtracting one from the other produces a number that means nothing. We keep the two apart on the page for exactly this reason.

3 · Three kinds of empty cell

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:

CodeDistrictEnrollmentStudents with IEPRate
2220Holland Township522empty cellempty cell
8505Bergen Co JDC* withheld00%
8509Essex Co JDC500%
8511Middlesex Co JDC* withheld00%
8513Ocean Co JDC* withheld00%

Three states, three different acts by the publisher:

Note the shape of the suppression: no classification rate anywhere in this file is suppressed. The withholding lands on the denominator instead. At the three JDCs a rate is published and the enrollment it was computed from is not — so the module tells you the rate is zero and that the count behind it was withheld, rather than showing a rate beside a blank and leaving you to guess.

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.

4 · What this file does not carry

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:

QuestionWhat 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.

5 · The file disagrees with itself about the date

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.

6 · The districts with no row

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.

7 · What we built

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:

TableHoldsRows
idea_classification_districtDistrict 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 from655
idea_classification_stateThe statewide comparator, including the rate in the publisher's native fraction scale as well as percentage points1

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.

The issue registry

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.

three-empties-are-not-zero [breaks · mitigated] Three districts have a suppressed enrollment denominator (`*`), one has not-collected IEP and rate cells (empty), and four have an exact zero NJDOE printed — none of the three may render as the others

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.

rate-is-an-administrative-count [misleads · mitigated] The classification rate is the share of students holding an IEP on one October day; it measures neither need, identification quality, service quality, staffing, spending, placement nor compliance, and it is directionless

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.

no-district-level-breakdowns [context · mitigated] The 13 disability categories in this workbook exist for New Jersey only; there is no district-level disability breakdown, and no breakdown by race, age or educational environment at any level

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.

deaf-blindness-rate-rounds-to-zero [corrupts · open] The statewide Deaf-Blindness row publishes a classification rate of exactly 0 against a headcount of 18 students

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.

embedded-title-contradicts-reference-date [misleads · mitigated] The 2025-edition workbook's embedded title reads `School Year 2023-24` while the reference date NJDOE states for the data is 2024-10-15

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.

special-services-districts-have-no-row [context · mitigated] 29 of the 587 rendered district reports have no exact-code row in this file, and 20 of them are the county special-services districts, educational-services commissions and jointure commissions a special-education surface most invites a reader to look for

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.

Changelog

  • — Shipped the district-profile module (How many students have an IEP) and served the public explainer at /data/idea-classification-rates/, then registered the six issues a reader-facing surface has to get right — the three-way empty-cell distinction, the rate's directionlessness, the three absent dimensions, the Deaf-Blindness exact zero against 18 students, the embedded-title date conflict, and the 29 exact-code nonmatches. No projection change: the statewide disability categories remain outside the consumer mart. Measured while writing them: the release carries 13 disability categories plus all-iep-students, not 14 plus one, and 29 state-level cells rather than 31.

The text on this page was generated by Claude Opus 5, working as part of a stack of tools created by Lyra Forge.