Open data
The data behind this site, ready to download
Everything MoCo Parents publishes is available as static, schema-described files — per-school JSON, analysis payloads, GeoJSON boundaries, and a queryable Parquet fact table. No API key, no server, no tracking.
Start here
/data/index.json— the machine-readable catalog of everything below (URLs, schemas, sizes)./llms.txt— the same map, for AI assistants and agents./data/manifest.json— bundle version 4.0.0 and per-source as-of vintages.
Join key everywhere: 3-digit MCPS school code, zero-padded string (e.g. 427 = Walt Whitman HS). Suppression: null values alongside suppressed flags are privacy-suppressed small counts — do not impute or infer them.
Where to look
The question-to-file map, straight from the catalog — the same routing served to AI agents in /llms.txt.
| Question | File | Method |
|---|---|---|
| math acceleration | /data/school_year.parquet | accel_pct = share of grade 8 testing beyond Math 8 (placement, not performance - MEASURES.md 1); MS-vs-HS Algebra 1 split: QUERYING.md recipe 5 |
| compare schools / rankings | /data/school_year.parquet | show farms_pct beside any ranking - raw ranks mostly recover demographics (MEASURES.md 12); a context model explains ~90% of between-school variance |
| test scores by school, grade or subgroup | /data/assessments.parquet | SQL: assessments.parquet; fetch-only: /data/mcap/{code}.json per school; match grade exactly - grade != 'All' is NOT per-grade (QUERYING.md recipe 3) |
| suspensions / discipline | /data/school_year.parquet | suspended_pct = unique students suspended as pct of enrollment (near-fully suppressed from 2024); incident COUNTS are a different measure - warehouse domain='discipline_incidents' |
| class size | /data/mcps_consolidated.parquet | flat domain: WHERE domain='class_size' AND metric='avg_class_size' (see warehouse_domains.json); 2024 redefinition breaks secondary trends |
| absenteeism / attendance | /data/school_year.parquet | chronic_absent_pct + attendance_pct columns; full detail /data/climate.parquet |
| star ratings / accountability | /data/school_year.parquet | star_rating + acct_points_pct (2022-2025 only, no 2020-21); detail /data/accountability.parquet |
| per-pupil spending | /data/school_year.parquet | ppe_total vs ppe_state_local vs ppe_federal - never mix variants (MEASURES.md 10); detail /data/finance.parquet |
| graduation / dropout | /data/school_year.parquet | grad_rate_4yr (HS only); 5-yr cohorts + dropout detail /data/graduation.parquet |
| enrollment, demographics, poverty | /data/school_year.parquet | enrollment, farms_pct, eml_pct, swd_pct; MSDE top-codes FARMS ~80 pct from 2024 (MEASURES.md 6); by-grade history /data/enrollment.parquet |
| teacher experience / qualifications | /data/school_year.parquet | inexperienced_pct + emergency_cred_pct; poverty/students-of-color breakdowns /data/educators.parquet |
| school lookup / roster | /data/roster.json | code, name, type, cluster, lat, lon - the join spine; the 3-digit code keys every other file |
| boundaries / bus routes | /boundaries/HS.geojson | ES/MS/HS(.geojson) + MS_adopted/HS_adopted (post-2027); bus routes /bus/{code}.geojson per school |
Datasets
| Dataset | Files | Schema | Size |
|---|---|---|---|
School-by-year wide table — one row per school × year with the headline measure from every source (start here)school_year | 342 KB | ||
MCAP results — school + district, every student group, every grade, 2019-2026assessments | 1.2 MB | ||
MCAP results as JSON, one file per school (all years) — parquet-free mirrormcap_json | |||
Per-school profiles, district rollup, sped detail, income/gaps analysessite_core | 327 KB | ||
School roster (slim JSON) — code, name, type, cluster, coordinates for every schoolroster | 29 KB | ||
What each measure means — definitions, formulas, and what NOT to concludemeasures_guide | 6 KB | ||
How to query this data without fooling yourself — verified DuckDB recipesquerying_guide | 11 KB | ||
District-wide MCAP proficiency, race × special-services-group intersections, 2022-2026 (authoritative)assessments_race_service_district | 8 KB | ||
Bus routes (per-school GeoJSON + index)bus | 33 KB | ||
School directory (crosswalk) — codes, names, type, cluster, coordinates, coverageschools | 23 KB | ||
Attendance-area income / demographics / property profiles (ACS + SDAT)neighborhoods | 73 KB | ||
Historical enrollment by school × school-year × gradeenrollment | 28 KB | ||
School program capacity + facility attributes (by vintage)capacity | 15 KB | ||
MCPS official enrollment projections (by vintage × projected year)official_projections | 12 KB | ||
Housing-development pipeline student yield (by school × year)development | 7 KB | ||
HS college-test outcomes — SAT / ACT / AP graduate results, 2019 + 2021-2025hs_outcomes | 28 KB | ||
MSDE accountability — star rating, index points, percentile rank (by school × year)accountability | 14 KB | ||
Graduation — 4/5-yr cohort grad + dropout, HS completion, annual dropoutgraduation | 14 KB | ||
School climate — attendance, chronic absenteeism, mobility, promotionclimate | 26 KB | ||
Per-pupil expenditures (state/local, federal, total) by school × yearfinance | 22 KB | ||
Educator qualifications — inexperienced/out-of-field/emergency-cred, by poverty & students-of-color leveleducators | 24 KB | ||
Full-fidelity archive — every MCPS + MSDE figure, one row per source cell (audit layer; hardest to query — start with school_year or the typed tables)mcps_consolidated | 6.3 MB | ||
Warehouse pivot map — per-domain shape + ready-made pivot SQL for mcps_consolidated.parquetwarehouse_domains | 53 KB | ||
MSDE Maryland Report Card — every published figure, exactly as MSDE reports itmsde | 4.3 MB | ||
MCPS School Profiles — every published figure, exactly as MCPS reports itmcps | 578 KB |
Geo files
/boundaries/ES.geojson/boundaries/MS.geojson/boundaries/HS.geojson/boundaries/MS_adopted.geojson/boundaries/HS_adopted.geojson/bus/{code}.geojson— one GeoJSON per school (3-digit code)
Query the fact tables directly
These Parquet tables carry every figure behind this site's pages, plus many breakdowns no page shows: MCAP and SAT/ACT/AP results, accountability, graduation, climate, finance, educators, enrollment, capacity, and neighborhood profiles. The full list, with URLs and field docs, is in the table above and in index.json. Start with /data/school_year.parquet — one row per school and year with the headline measure from every source already joined (a ~230 KB CSV twin needs no Parquet reader at all). The full-fidelity archive,/data/mcps_consolidated.parquet, holds every source cell exactly as published (~3M rows) — use it to verify a number, not to start from. Any Parquet-aware tool can query these over HTTP without downloading them first — for example, inDuckDB:
SELECT school_name, accel_pct, math_all_pct, farms_pct
FROM 'https://mocoparents.org/data/school_year.parquet'
WHERE school_type = 'MS' AND year = 2025
ORDER BY accel_pct DESC LIMIT 5;Column meanings:mcps_consolidated_columns.json(consolidated), mcps_rows.schema.json, and msde_dictionary.json. Null values withsuppressed = true (MCPS) or marker strings in value_text (MSDE) are privacy suppression by design. Where both sources report the same fact, useWHERE canonical for one answer per fact (enrollment prefers MCPS; MSDE-origin rates and scores prefer MSDE), and treat discrepant = true rows with care — the sources genuinely disagree there (cross-check report).
Charts straight from SQL
The tables above aren't just downloads — the site itself builds charts from them. This one is a DuckDB query against mcps_consolidated.parquet executed at build time and shipped as inline SVG (no JavaScript): countywide enrollment from the canonical cross-source rows, where MCPS is preferred when both systems report a grade and MSDE fills the earlier years.
SELECT year::INT AS year, SUM(value)::DOUBLE AS students
FROM mcps_consolidated
WHERE concept = 'enrollment_by_grade_count' AND canonical
GROUP BY year ORDER BY yearTerms
All data derives from public MCPS, MSDE, and U.S. Census sources; this site's transformations are provided as-is, for any use, with attribution appreciated ("MoCo Parents, mocoparents.org"). Please don't present suppressed values as zeros, and check each dataset's schema before comparing numbers across sources.
Source: Generated with the data bundle by the mcps-pipeline exporter · Updated: 2026-07-31