SCHOOLSCHEDULESDATABASE.COM · DAY-LEVEL K–12 CALENDARS · 49 STATES + DC API STATUS: OPERATIONAL

Know when every school in America is on break.

Day-level calendars for ~12,000 districts: spring break, winter break, teacher in-service, first and last day. Resolved to the district, scored for confidence, and ready to drop into your demand model. No scraping, no PDF parsing, no guessing.

Get the sample → Read the docs
Not in session · ILLUSTRATIVE
Students out
Districts out
Illustrative animation of how the school year moves across the country — not a render of live district data. The real per-district calendars are in the API.
12,023
districts · 49 states + DC
4,801
districts with dates read from their own published calendar; every other date is labeled estimated
3
school years, 2024–25 → 2026–27
100%
of dates carry their method and confidence; nothing is presented as certain when it isn't

No key required

Try it in your pipeline.

One prompt with everything your agent needs. Copy and paste.

Add the School Schedules Database to my data pipeline.

It's a day-level API of US school calendars — one row per district per day
(in session / half day / off), with the break name, a 0-1 confidence score,
and the method each date came from.

Base URL: https://api.hazeydata.ai/ssd/v1
Free sample (no key): GET /sample/districts
  -> the 100 largest districts with their IDs, states and enrollment.
     This is the district index, NOT calendar data — calendar days need a key.
Everything else needs: Authorization: Bearer ssd_live_...   ($99/mo)

# Try the keyless sample now
curl -s "https://api.hazeydata.ai/ssd/v1/sample/districts"

Paid endpoints, once I have a key:
  GET /days?district_id=NE_3172840&school_year=2026-2027   <- the calendar
  GET /export?format=csv&state=FL&school_year=2026-2027

District IDs are {STATE}_{NCES_ID}. Each /days row returns:
  date · school_year · is_in_session · day_type · break_name
  confidence · source_method

IMPORTANT — how to tell observed from estimated:
There is no "estimated" boolean. Derive it from source_method:
  observed / deterministic / legacy      -> confirmed
  inferred / state_median_imputation     -> ESTIMATED, treat as a guess
Most 2026-2027 dates are currently estimated.

Pull the keyless sample, show me the JSON, and write a function that takes a
district_id and school year and returns a dataframe with an is_estimated
column derived from source_method.

What's in the data

One schema — every district, every day.

Certainty · LTS
Endpoints we never deprecate

The calls you ship today keep working. Paid endpoints are long-term-support: no silent breaking changes.

Certainty · Price
Your price never goes up

Lock your rate at signup. New tiers never reprice existing customers. Cancel anytime, no annual lock-in.

Certainty · Data
One dataset, sample to production

The keyless sample and full access return identical data and confidence scores. Access differs by volume, freshness and support — never by quality.

Format
JSON & CSV, one schema

Bulk export or per-district. Day-level expansion — one row per district per day, flat for time-series.

Join
NCES IDs on every row

Standard identifiers. Join straight onto Census, enrollment, or your own geodata.

Score
Confidence on every date

A 0–1 score separates verified-from-source from inferred, so you filter to your own threshold.

Pricing

Full access is one flat price.

One plan unlocks the full dataset: same data, more volume.

Full access
$99 / mo

Every district, every day — in production.

  • All ~12,000 districts, all 3 years
  • Unmetered practical volume
  • JSON + CSV, bulk & per-district
  • Usage alerts at 75 / 90 / 100%
  • Price locked for life · LTS endpoints
Get your API key →
Enterprise
Custom

Volume SLAs, custom delivery, procurement.

  • Dedicated throughput & SLA
  • Warehouse / S3 delivery
  • Invoicing & DPA
  • Priority support
Contact sales