Methodology
Exactly how SproutScore works, and where it can be wrong.
Everything on this page describes the data behind SproutScore, the deterministic rules that turn it into readable reports, and the honest limits of both. No machine learning runs at report time.
1. Sources
SproutScore is built on a single public dataset, fetched once and frozen into a deterministic bundle:
- Publisher: NYC Department of Health and Mental Hygiene (DOHMH), via NYC Open Data (Socrata).
- Dataset: dsg6-ifza, "DOHMH Childcare Center Inspections (Historical)". The city has since archived this dataset as "(Historical)"; the separate "current" program directory (gy3q-4tzp) lists centers but carries no inspection history.
- Window: inspections dated 2020-05-29 through 2023-04-24. Rows last updated 2023-04-26. The city has published no newer childcare inspection rows since April 2023.
- Bundle pulled: 2026-09-19. Raw rows: 27,828. After aggregation: 3,014 centers ยท 15,909 inspections ยท 16,204 citations.
- Coverage: center-based programs regulated under NYC Health Code Article 47 (daycare centers) and Article 43 (school-based child care) โ preschools, infant/toddler programs, school-based childcare, and camps.
2. What each field means
One dataset row = one inspection ร one cited violation. Rows with a blank healthcodesubsection are clean inspections โ no violation cited.
| Source column | Meaning |
|---|---|
| dc_id | Day Care ID (e.g. DC40674) โ the stable key used to group rows into centers. |
| centername / legalname | Display name / legal entity name. |
| building, street, borough, zipcode, phone | Address and contact as published by the city. |
| permitnumber, status, agerange, maximumcapacity | Permit context โ e.g. permitted capacity and ages served. |
| programtype, facilitytype, childcaretype | Program classification, e.g. PRESCHOOL / GDC, and the cohort used for averages (see ยง4). |
| inspectiondate | Date the inspection occurred. |
| inspectionsummaryresult | Type of inspection, e.g. "Initial Annual Inspection - Reinspection Not Required". |
| healthcodesubsection | The violation code, e.g. 47.41(j). Blank = clean inspection. |
| regulationsummary | The city's own human-readable text for the citation. Always shown alongside our translation. |
| violationcategory | The city's per-citation classification: GENERAL / CRITICAL / PUBLIC HEALTH HAZARD. |
| violationstatus | CORRECTED (city recorded a fix), OPEN (no correction on record), or blank. |
| violationratepercent / violationavgratepercent | The center's violation rate % and the NYC average % across inspected centers, as computed and published by the city per row. The average is cohort-specific (see ยง4). |
3. How violations become plain English
- The dataset contains 478 distinct violation codes. SproutScore groups them into 117 plain-English families such as "Staff health & immunization records", "Building condition: floors, walls, windows, exits", and "Fire safety & emergency equipment".
- The translations were AI-seeded and are pending human review. We say this plainly because it matters: the family labels and plain-English summaries are a readability aid, not a legal interpretation. The city's own citation text (regulationsummary) is always shown alongside, so any parent can check our wording against the source.
- Severity mapping: each code inherits the highest classification the city ever assigned to that code across the dataset โ PUBLIC HEALTH HAZARD โ critical, CRITICAL โ major, GENERAL โ minor. A code the city once treated as a public health hazard keeps the critical tag even if later citations were GENERAL. Codes with no classification on record default to minor and show "Translation pending".
- Severity meanings:
- Critical โ the city classified this as a PUBLIC HEALTH HAZARD at least once: a condition that can directly harm a child (injury, poisoning, infection, unsafe supervision, unvetted staff contact).
- Major โ the city classified this as CRITICAL: a real safety or compliance failure a well-run center should not have. Not an immediate-danger finding.
- Minor โ the city classified this as GENERAL: typically paperwork, record-keeping, or physical-plant upkeep. Common in small numbers among otherwise clean inspections.
- No AI runs at report time. Reports are deterministic lookups into the translation table plus fixed templates โ the same center always produces the same report.
4. How the score, grade, and comparisons are computed
Score/grade. Every center starts at 100. Each cited violation deducts: 25 points per critical, 10 per major, 3 per minor. If the city's status for that citation is CORRECTED, half the deduction is restored (rounded down). The score is clamped to 0โ100. Bands: A โฅ 90, B 80โ89, C 70โ79, D 55โ69, F below 55. The per-violation deduction lines are itemized in paid reports.
Standing vs NYC average. A center's violation rate is its flagged inspections รท total inspections. It is compared against the city's own published average for the center's program cohort (violationavgratepercent):
| Cohort (childcaretype) | City-published average violation rate |
|---|---|
| Child Care - Pre School | 21.905% |
| School Based Child Care | 45.1817% |
| Child Care - Infants/Toddlers | 17.4391% |
| Camp | 26.8868% |
Verdicts: better than average if the center's rate is under 80% of its cohort average; about average if within ยฑ20%; worse than average otherwise. A preschool is never compared against the school-based-care average. Fallback global average, recomputed from the bundle: 30.9% of inspections flagged.
Nearby comparison. Same ZIP code; if fewer than 5 centers share the ZIP, widen to the borough. Each center is ranked by flagged-inspection rate (1 = cleanest); ties share the rank; reported as "N of M". Copy is templated from the numbers only.
5. Limitations
- Data ends April 2023. Nothing published by the city after 2023-04-24 is represented. Conditions at centers will have changed โ SproutScore is a starting point for a tour, not a verdict.
- Pre-adjudicated citations. These are violations recorded at inspection; the data does not show appeals, dismissals, or final determinations.
- Centers that closed, renamed, or opened after April 2023 may be missing or out of date in the data.
- OPEN status means no correction was recorded by the city's last data update (April 2023) โ not proof the condition is still uncorrected today. We never write "still broken".
- Low data: centers with fewer than 3 inspections get a "too few to judge a pattern" caveat โ a starting point, not a verdict.
- Translations are AI-seeded and pending human review; the city's own citation text is always shown alongside for verification.
6. Update cadence
The site runs on a frozen, versioned data bundle (data_as_of: 2023-04-24). When the city publishes fresh inspection data, the bundle is rebuilt: rows re-aggregated, citywide stats recomputed deterministically from the script compute_citywide_stats.py, and the data_as_of label advanced everywhere โ reports, this page, llms.txt, and the safety facts. Quotable stats are never edited by hand; they are regenerated from the dataset, so every number on this site is reproducible.