🎓 edu¶
Institutional education data for K-12 districts, schools, and higher education. K-12 tables cover NCES Common Core of Data (CCD), Civil Rights Data Collection (CRDC), and NAEP assessments. Higher-ed tables cover IPEDS directory, completions, financials, and College Scorecard outcomes. All sourced via the Urban Institute Education Data Portal API (free, unauthenticated) except College Scorecard (free API key required). Complements census.acs_education (population attainment) — this schema describes the institutions themselves.
25 datasets · 310 columns
ccd_districts · table¶
NCES Common Core of Data — Local Education Agency (district) directory. One row per LEA per school year (year = end year; 2022 = 2021-22). Primary join target for ccd_schools (leaid) and geo.school_districts (sd_lea = leaid). Staff FTE fields (teachers, counselors, psychologists) enable resource equity analysis. Several numeric fields (number_of_schools, enrollment, spec_ed_students, english_language_learners, teachers_total_fte, guidance_counselors_total_fte, librarian_specialists_fte, staff_total_fte — see each column's own comment) carry raw NCES CCD sentinel codes instead of a real count on some rows: -1 = Missing and -2 = Not Applicable are NCES's own official codes (numeric fields, all CCD surveys since 2002-03); -9 = does not meet NCES data quality standards is also an official code, observed here on english_language_learners. These are meaningful metadata, not corrupted data, so this raw table keeps them as-is — but any view aggregating these fields (SUM/AVG/ratio) MUST exclude negative values first (value < 0), or the sentinel codes get silently summed in as if they were real counts.
| Column | Type | Null | Description |
|---|---|---|---|
leaid |
string | no | NCES LEA ID (7-digit string) — PK component |
year |
int | no | School year end year (e.g. 2022 = 2021-22) — PK component |
lea_ |
string | yes | District name |
fips |
int | yes | State FIPS code (integer 1-56) — FK to geo.states.state_fips |
state_ |
string | yes | 2-letter state abbreviation from state_location field |
county_ |
string | yes | County FIPS, zero-padded to 5 chars by the transformer (e.g. '06037') — FK to geo.counties.county_fips |
county_ |
string | yes | County name |
urban_ |
int | yes | NCES locale code (11=city large, 12=city mid, 13=city small, 21=suburb large, 31=town fringe, 41=rural fringe) |
cbsa |
int | yes | Core-Based Statistical Area code |
latitude |
double | yes | LEA mailing address latitude |
longitude |
double | yes | LEA mailing address longitude |
agency_ |
int | yes | 1=local, 2=supervisory union component, 3=state agency, 4=federal, 7=independent charter |
agency_ |
int | yes | 1=elementary, 2=secondary, 3=K-12, 4=other |
agency_ |
int | yes | 1=charter LEA, 0=not charter |
lowest_ |
int | yes | Lowest grade offered (-1=PK, 0=K, 1-12) |
highest_ |
int | yes | Highest grade offered |
number_ |
int | yes | Number of operational schools in LEA. May carry a negative NCES CCD sentinel code (see table comment) instead of a real count. |
enrollment |
int | yes | Total student enrollment (may be null for some administrative LEAs). May carry a negative NCES CCD sentinel code (see table comment) instead of a real count. |
spec_ |
int | yes | Students receiving special education services. May carry a negative NCES CCD sentinel code (see table comment) instead of a real count. |
english_ |
int | yes | English language learner students. May carry a negative NCES CCD sentinel code (see table comment, incl. -9) instead of a real count. |
teachers_ |
double | yes | Total FTE classroom teachers across all grade levels. May carry a negative NCES CCD sentinel code (see table comment) instead of a real count. |
guidance_ |
double | yes | Total FTE guidance counselors. May carry a negative NCES CCD sentinel code (see table comment) instead of a real count. |
school_ |
double | yes | FTE school counselors |
school_ |
double | yes | FTE school psychologists |
librarian_ |
double | yes | FTE librarian/media specialists. May carry a negative NCES CCD sentinel code (see table comment) instead of a real count. |
staff_ |
double | yes | Total FTE all staff categories. May carry a negative NCES CCD sentinel code (see table comment) instead of a real count. |
state_ |
string | yes | State lower legislative district |
state_ |
string | yes | State upper legislative district |
congress_ |
int | yes | Congressional district ID |
ccd_schools · table¶
NCES Common Core of Data — individual school directory. One row per school per year. Joins to ccd_districts via leaid. free_or_reduced_price_lunch enables poverty proxy at the school level. Biennial CRDC data joins via ncessch = crdc_schools.ncessch. Numeric fields (enrollment, teachers_fte, free_lunch, reduced_price_lunch, free_or_reduced_price_lunch, direct_certification — see each column's own comment) carry raw NCES CCD sentinel codes instead of a real count on some rows: -1 = Missing and -2 = Not Applicable are NCES's own official codes (numeric fields, all CCD surveys since 2002-03); a further -3 is consistently present across all six fields above but its exact NCES definition could not be confirmed against NCES/Urban Institute documentation as of 2026-08-02 (checked live; do not assume it means the same thing as -3 on unrelated datasets, e.g. IMLS's Public Libraries Survey — that's a different codebook). These are meaningful metadata, not corrupted data, so this raw table keeps them as-is — but any view aggregating these fields (SUM/AVG/ratio) MUST exclude negative values first (value < 0), or the sentinel codes get silently summed in as if they were real counts.
| Column | Type | Null | Description |
|---|---|---|---|
ncessch |
string | no | NCES school ID (12-digit string) — PK component |
leaid |
string | no | Parent LEA ID (7-digit) — FK to ccd_districts.leaid |
year |
int | no | School year end year — PK component |
school_ |
string | yes | School name |
fips |
int | yes | State FIPS (integer) — FK to geo.states.state_fips |
county_ |
string | yes | County FIPS, zero-padded to 5 chars by the transformer (e.g. '06037') — FK to geo.counties.county_fips |
latitude |
double | yes | School latitude |
longitude |
double | yes | School longitude |
urban_ |
int | yes | NCES locale code |
cbsa |
string | yes | CBSA code (string in API) |
school_ |
int | yes | 1=elementary, 2=middle, 3=high, 4=other combined |
school_ |
int | yes | 1=regular, 2=special ed, 3=vocational, 4=alternative |
school_ |
int | yes | 1=open, 2=closed, 3=new, 4=added, 5=changed agency, 6=reopened, 8=future |
lowest_ |
int | yes | Lowest grade (-1=PK, 0=K, 1-12) |
highest_ |
int | yes | Highest grade offered |
charter |
int | yes | Charter school indicator (1=yes, 0=no) |
magnet |
int | yes | Magnet school indicator (1=yes, 0=no) |
virtual |
int | yes | Virtual school indicator (1=yes, 0=no, 2=supplemental) |
shared_ |
int | yes | Shared-time school (students also attend another school) |
title_ |
int | yes | Title I status code (5=schoolwide, 6=targeted assistance, 7=eligible not participating) |
title_ |
int | yes | Title I eligible (1=yes, 0=no) |
title_ |
int | yes | Schoolwide Title I program (1=yes, 0=no) |
teachers_ |
double | yes | FTE classroom teachers. May carry a negative NCES CCD sentinel code (see table comment) instead of a real count. |
enrollment |
int | yes | Total student enrollment. May carry a negative NCES CCD sentinel code (see table comment) instead of a real count. |
free_ |
int | yes | Students approved for free lunch (NSLP). May carry a negative NCES CCD sentinel code (see table comment) instead of a real count. |
reduced_ |
int | yes | Students approved for reduced-price lunch. May carry a negative NCES CCD sentinel code (see table comment) instead of a real count. |
free_ |
int | yes | Combined free+reduced lunch count; divide by enrollment for poverty proxy. May carry a negative NCES CCD sentinel code (see table comment) instead of a real count — exclude value < 0 before using in any ratio. SOURCE BEHAVIOR: states that have moved their schools to the Community Eligibility Provision stop collecting FRPL applications altogether, and CCD then publishes NOTHING in this field for every school in the state while still publishing direct_certification. Observed live against production: no such state before 2016, then a state set that changes each year — 2016 {DE,DC,MA,TN}, 2021 peaks at 10, 2022 {DE,DC,MA,MT,TN,WV}, 2024 {AZ,DE,DC,MA,TN,WV,GU}. A NULL here for a whole state-year is therefore the source's own answer, not a gap in ingestion, and it is not repairable by a reprocess. direct_certification is the only poverty signal CCD carries for those state-years — see that column for why the two are not interchangeable. |
direct_ |
int | yes | Students directly certified for free meals via SNAP/TANF data matching, without a household application. May carry a negative NCES CCD sentinel code (see table comment) instead of a real count. NOT INTERCHANGEABLE WITH free_or_reduced_price_lunch: direct certification captures only the categorically eligible subset, so it runs well below FRPL wherever both are reported — measured live across production, the ratio of summed direct_certification to summed free_or_reduced_price_lunch on schools reporting both is 0.57-0.69 in every year 2016-2024. Substituting it for FRPL (a COALESCE, say) understates poverty by roughly a third and silently changes what the number means, so derive a separate rate from it rather than folding it into an FRPL rate. |
lunch_ |
int | yes | Lunch program type code |
bureau_ |
int | yes | Bureau of Indian Education school indicator |
congress_ |
int | yes | Congressional district |
state_ |
string | yes | State lower legislative district |
state_ |
string | yes | State upper legislative district |
naep_scores · table¶
NAEP (National Assessment of Educational Progress) state-level mean scale scores for grade 4 and grade 8 math/reading. One row per jurisdiction × year × subject × grade × variable_type × subgroup_name; jurisdiction=0 is the national aggregate, otherwise state FIPS (joins to ccd_districts.fips or geo.states.state_fips). Administered in odd years 2013-2019, then 2022 and 2024 (COVID-19 postponed the 2021 cycle) — not a strict biennial cadence. Proficiency-level (below_basic/basic/proficient/advanced) breakdowns are in the separate naep_achievement_levels table, joinable via the full key.
| Column | Type | Null | Description |
|---|---|---|---|
jurisdiction |
int | no | State FIPS code (0 = national aggregate) — PK component |
jurisdiction_ |
string | yes | State name or "National" |
year |
int | no | Assessment year — PK component |
subject |
string | no | MAT=mathematics, RED=reading — PK component |
grade |
int | no | 4 or 8 — PK component |
variable_ |
string | no | Disaggregation type (TOTAL, Race/Ethnicity, Gender, NAEP Eligibility) — PK component |
subgroup_ |
string | no | Subgroup label (All students, Male, White, Black, etc.) — PK component |
avg_ |
double | yes | Average NAEP scale score |
is_ |
int | yes | 1 if statistically displayable (sufficient sample size) |
naep_achievement_levels · table¶
NAEP proficiency level distributions sourced from GetAdhocData ALD stattype calls. One row per state × year × subject × grade × subgroup × level. level values: below_basic, basic, proficient, advanced. pct is the percentage of students at that level for the given key. Joins to naep_scores via (jurisdiction, year, subject, grade, variable_type, subgroup_name).
| Column | Type | Null | Description |
|---|---|---|---|
jurisdiction |
int | no | State FIPS code (0 = national aggregate) — PK component |
jurisdiction_ |
string | yes | State name or "National" |
year |
int | no | Assessment year — PK component |
subject |
string | no | MAT=mathematics, RED=reading — PK component |
grade |
int | no | 4 or 8 — PK component |
variable_ |
string | no | Disaggregation type (TOTAL, Race/Ethnicity, Gender, NAEP Eligibility) — PK component |
subgroup_ |
string | no | Subgroup label (All students, Male, White, Black, etc.) — PK component |
level |
string | no | Proficiency level — PK component; below_basic, basic, proficient, advanced |
pct |
double | yes | Percentage of students at this proficiency level |
is_ |
int | yes | 1 if statistically displayable |
crdc_schools · table¶
CRDC school-level civil-rights/equity data consolidated from four Urban Institute sub-endpoints, selected via the crdc_topic dimension: directory (charter/magnet/ alternative-school flags), chronic-absenteeism (chronically-absent student counts by race/sex/disability/LEP subgroup), offenses (firearm, homicide, rape, and assault incident counts), and teachers-staff (FTE teachers/certified-vs-uncertified/counselors/ psychologists/nurses/security/law-enforcement). Each row belongs to exactly one crdc_topic, so most columns are null outside their topic's rows. Joins to ccd_schools via ncessch (crdc_id equals ncessch for schools in the NCES universe; null ncessch means a non-NCES private/charter school with only a crdc_id). Collected by the Dept of Education Office for Civil Rights on an irregular, roughly-biennial schedule — not a strict 2-year interval, and not every topic shares the same loaded years: see observedCoverage below for the table-wide year set, but per-topic availability varies within it (e.g. offenses has no 2013 data even though teachers-staff does; year 2022 currently carries only chronic-absenteeism, not teachers-staff/offenses). CRDC's own known survey years are 2011, 2013, 2015, 2017, and the 2020-21 cycle (which lands here as two separate years, 2020 and 2021, not consolidated into one) — 2011 is a known CRDC survey year with no rows currently loaded in this table.
| Column | Type | Null | Description |
|---|---|---|---|
crdc_ |
string | yes | Best available PK component for CRDC records; more properly an AK (alternate key). Equals ncessch for schools in the NCES universe. Chronic-absenteeism pre-2022 data may be null (transformer backfills from ncessch). For schools outside NCES (private/charter), crdc_id is the only identifier; ncessch will be null instead. |
ncessch |
string | yes | NCES school ID — FK to ccd_schools.ncessch; null for ~1,800 non-NCES schools |
leaid |
string | yes | LEA ID — FK to ccd_districts.leaid |
fips |
int | yes | State FIPS |
year |
int | no | Survey year (2011, 2013, 2015, 2017) — PK component |
crdc_ |
string | no | Sub-endpoint dimension: directory, chronic-absenteeism, offenses, teachers-staff — PK component |
charter_ |
int | yes | Charter school per CRDC report (may differ from CCD value) |
magnet_ |
int | yes | Magnet school per CRDC |
alt_ |
int | yes | Alternative school indicator |
primarily_ |
int | yes | School primarily serves students with disabilities |
race |
string | yes | Race/ethnicity disaggregation (HI=Hispanic, BL=Black, WH=White, etc.; MF=all) |
sex |
string | yes | Sex disaggregation (M=male, F=female, MF=both) |
disability |
string | yes | Disability status disaggregation (WD=with disability, WOD=without, TOT=total) |
lep |
string | yes | Limited English proficiency disaggregation |
students_ |
int | yes | Count of chronically absent students (>10% days missed) for this subgroup |
firearm_ |
int | yes | Any firearm incident reported (0/1) |
homicide_ |
double | yes | Homicide incident indicator |
rape_ |
double | yes | Number of rape allegations |
sexual_ |
double | yes | Number of sexual battery incidents |
attack_ |
double | yes | Attacks with a weapon (non-firearm) |
attack_ |
double | yes | Attacks without a weapon |
possession_ |
double | yes | Firearm possession incidents |
teachers_ |
double | yes | Total FTE teachers per CRDC report |
teachers_ |
double | yes | FTE certified teachers |
teachers_ |
double | yes | FTE uncertified/emergency-certified teachers |
counselors_ |
double | yes | FTE school counselors |
psychologists_ |
double | yes | FTE school psychologists |
social_ |
double | yes | FTE school social workers |
nurses_ |
double | yes | FTE nurses |
security_ |
double | yes | FTE security guards |
law_ |
double | yes | FTE sworn law enforcement officers |
ipeds_institutions · table¶
NCES IPEDS Institutional Characteristics (HD survey) directory. One row per institution per year. Joins to geo.counties via county_fips (pad integer to 5-char string). Enrollment is NOT here (IPEDS EF survey). Tuition/fees are NOT here — see ipeds_tuition table (academic-year-tuition endpoint). college_scorecard joins via unitid = college_scorecard.id. ipeds_completions and ipeds_financials join via unitid. To reach an institution's cross-schema identity FROM another schema rather than by name, join ref.canonical_org_entity on ipeds_unitid = unitid — that table carries one foreign key per source, so the institution's LEI/SEC CIK and its unitid sit in the same row and the join is exact. Matching inst_name as text finds the wrong entities and misses institutions filing under a differently-worded name.
| Column | Type | Null | Description |
|---|---|---|---|
unitid |
int | no | IPEDS unit ID (integer) — PK component |
opeid |
string | yes | OPE ID 8-digit — parent key for college_scorecard.ope8_id (that child declares the FK) |
year |
int | no | Survey year — PK component |
inst_ |
string | yes | Institution name (INSTNM in bulk CSV) |
inst_ |
string | yes | Institution alias or common name |
address |
string | yes | Street address |
city |
string | yes | City |
state_ |
string | yes | State abbreviation — FK to geo.states.state_abbr |
zip |
string | yes | ZIP code |
fips |
int | yes | State FIPS (integer) — FK to geo.states.state_fips |
county_ |
int | yes | County FIPS integer (COUNTYCD in bulk); source for county_fips_str |
county_ |
string | yes | County FIPS zero-padded to 5 chars (e.g. '06037') — FK to geo.counties.county_fips |
county_ |
string | yes | County name |
longitude |
double | yes | Longitude (LONGITUD in bulk CSV) |
latitude |
double | yes | Latitude |
sector |
int | yes | 0=admin, 1=public 4yr, 2=private nonprofit 4yr, 3=private for-profit 4yr, 4=public 2yr, 5=private nonprofit 2yr, 6=private for-profit 2yr, 7=public <2yr, 8=private nonprofit <2yr, 9=private for-profit <2yr |
inst_ |
int | yes | 1=public, 2=private nonprofit, 3=private for-profit |
institution_ |
int | yes | 1=4yr or higher, 2=2-4yr, 3=<2yr |
hbcu |
int | yes | Historically Black College or University (1=yes, 0=no) |
hospital |
int | yes | Institution has hospital (1=yes, 0=no) |
medical_ |
int | yes | Medical degree offered (1=yes, 0=no) |
tribal_ |
int | yes | Tribal college or university (1=yes, 0=no) |
land_ |
int | yes | Land-grant institution (1=yes, 0=no) |
inst_ |
int | yes | 1=<1000 students, 2=1000-4999, 3=5000-9999, 4=10000-19999, 5=20000+ |
degree_ |
int | yes | Degree-granting institution (1=yes, 0=no) |
title_ |
int | yes | Title IV federal financial aid eligible |
offering_ |
int | yes | Undergraduate programs offered (1=yes) |
offering_ |
int | yes | Graduate programs offered (1=yes) |
cc_ |
int | yes | Carnegie Classification basic 2021 (integer code; see carnegie.edu for legend) |
cbsa |
int | yes | CBSA code |
cbsa_ |
int | yes | 1=metropolitan, 2=micropolitan |
url_ |
string | yes | Institution website URL |
ipeds_completions · table¶
NCES IPEDS Completions survey (C_A bulk CSV) — degrees/certificates awarded. One row per (unitid, year, cipcode, majornum, award_level). Race/ethnicity and sex counts are wide columns (ctotalt, caiant, casiat, cbkaat, chispt, cnhpit, cwhitt, c2mort, cunknt, cnralt and per-sex _m/_w variants). cipcode is the full 6-digit dotted string (e.g. "52.0101"). Source: nces.ed.gov/ipeds/datacenter/data/C{effective_year}_A.zip. Configured from 2010; the source has a multi-year publication lag (final revised files only, provisional-only vintages are skipped) — see observedCoverage below for the actual latest loaded vintage rather than assuming a fixed lag length.
| Column | Type | Null | Description |
|---|---|---|---|
unitid |
int | no | IPEDS unit ID — PK component; FK to ipeds_institutions.unitid |
year |
int | no | Award year — PK component; injected from URL dimension |
cipcode |
string | no | 6-digit CIP field of study (e.g. "52.0101") — PK component |
majornum |
int | no | 1=first major, 2=second major — PK component |
award_ |
int | no | IPEDS award level — PK component; 1=<1yr cert, 2=1-2yr cert, 3=Associate, 5=Bachelor's, 7=Master's, 17=Doctoral research, 18=Doctoral professional, 19=Doctoral other |
ctotalt |
int | yes | Total completions (all races, both sexes) |
ctotalm |
int | yes | Total completions — men |
ctotalw |
int | yes | Total completions — women |
caiant |
int | yes | American Indian/Alaska Native — total |
caianm |
int | yes | American Indian/Alaska Native — men |
caianw |
int | yes | American Indian/Alaska Native — women |
casiat |
int | yes | Asian — total |
casiam |
int | yes | Asian — men |
casiaw |
int | yes | Asian — women |
cbkaat |
int | yes | Black or African American — total |
cbkaam |
int | yes | Black or African American — men |
cbkaaw |
int | yes | Black or African American — women |
chispt |
int | yes | Hispanic or Latino — total |
chispm |
int | yes | Hispanic or Latino — men |
chispw |
int | yes | Hispanic or Latino — women |
cnhpit |
int | yes | Native Hawaiian/Other Pacific Islander — total |
cnhpim |
int | yes | Native Hawaiian/Other Pacific Islander — men |
cnhpiw |
int | yes | Native Hawaiian/Other Pacific Islander — women |
cwhitt |
int | yes | White — total |
cwhitm |
int | yes | White — men |
cwhitw |
int | yes | White — women |
c2mort |
int | yes | Two or more races — total |
c2morm |
int | yes | Two or more races — men |
c2morw |
int | yes | Two or more races — women |
cunknt |
int | yes | Race/ethnicity unknown — total |
cunknm |
int | yes | Race/ethnicity unknown — men |
cunknw |
int | yes | Race/ethnicity unknown — women |
cnralt |
int | yes | Nonresident alien — total |
cnralm |
int | yes | Nonresident alien — men |
cnralw |
int | yes | Nonresident alien — women |
ipeds_financials · table¶
NCES IPEDS Finance survey (F survey). Revenues, expenditures, endowment, and net position per institution per fiscal year. Sourced from NCES bulk ZIP downloads (nces.ed.gov/ipeds/datacenter/data/). Three form_type variants cover all institutions: F1A=GASB public, F2=FASB larger private, F3=FASB smaller private non-profit. All monetary values in dollars. Transformer maps NCES coded column names to canonical names. FY2022-23 is provisional (flag with is_provisional=true); FY2021-22 is the most recent final release. Joins to ipeds_institutions via unitid.
| Column | Type | Null | Description |
|---|---|---|---|
unitid |
int | no | IPEDS unit ID — PK component; FK to ipeds_institutions.unitid |
year |
int | no | Fiscal year end (end year of academic year, e.g. 2022 = FY2021-22) — PK component |
form_ |
string | no | NCES form variant — PK component; F1A=GASB public, F2=FASB larger private, F3=FASB smaller private |
is_ |
int | no | 1 if this is a provisional release (FY2022-23 and later); 0 if final |
rev_ |
double | yes | Gross tuition and fees revenue before allowances |
rev_ |
double | yes | Net tuition and fees revenue after discounts/allowances |
rev_ |
double | yes | State appropriations revenue |
rev_ |
double | yes | Federal appropriations revenue |
rev_ |
double | yes | Federal grants and contracts revenue |
rev_ |
double | yes | State grants and contracts revenue |
rev_ |
double | yes | Combined federal appropriations + grants revenue |
rev_ |
double | yes | Combined state/local appropriations + grants revenue |
rev_ |
double | yes | Private gifts, grants, and contracts revenue |
rev_ |
double | yes | Return on investments and endowment |
rev_ |
double | yes | Auxiliary enterprises net revenue (housing, dining, bookstore) |
rev_ |
double | yes | Total operating revenues |
rev_ |
double | yes | Total nonoperating revenues |
rev_ |
double | yes | Total all revenues and additions |
sch_ |
double | yes | Pell grant scholarships/fellowships |
sch_ |
double | yes | Unrestricted institutional grants awarded |
sch_ |
double | yes | Total student aid awarded |
sch_ |
double | yes | Discount/allowance applied to tuition and fees |
exp_ |
double | yes | Instruction expenditures total |
exp_ |
double | yes | Research expenditures total |
exp_ |
double | yes | Public service expenditures total |
exp_ |
double | yes | Academic support expenditures (libraries, computing, curriculum) |
exp_ |
double | yes | Student services expenditures (admissions, registrar, athletics) |
exp_ |
double | yes | Institutional support expenditures (executive management, finance, HR) |
exp_ |
double | yes | Auxiliary enterprises expenditures |
exp_ |
double | yes | Net grant aid and fellowships expenditures |
exp_ |
double | yes | Total expenses and deductions |
exp_ |
double | yes | Total salary expenditures across all functions |
endowment_ |
double | yes | Endowment assets beginning of year |
endowment_ |
double | yes | Endowment assets end of year |
assets |
double | yes | Total assets |
liabilities |
double | yes | Total liabilities |
net_ |
double | yes | Net position / net assets at end of year |
longterm_ |
double | yes | Long-term debt outstanding |
ipeds_tuition · table¶
NCES IPEDS IC_AY (Institutional Characteristics — Academic Year) survey. Published tuition and fees by institution, level of study, and tuition type. One row per (unitid, year, level_of_study, tuition_type). level_of_study: 1=undergraduate, 2=graduate. tuition_type: 1=in-district, 2=in-state, 3=out-of-state, 4=out-of-district. Use tuition_type=2 for in-state and tuition_type=3 for out-of-state comparisons. Data only available through year=2021 (the Urban Institute academic-year-tuition endpoint has no more recent years); use ipeds_institutions/college_scorecard for more current institution data.
| Column | Type | Null | Description |
|---|---|---|---|
unitid |
int | no | IPEDS unit ID — PK component; FK to ipeds_institutions.unitid |
year |
int | no | Academic year — PK component |
fips |
int | yes | State FIPS (denormalized) |
level_ |
int | no | 1=undergraduate, 2=graduate — PK component |
tuition_ |
int | no | 1=in-district, 2=in-state, 3=out-of-state, 4=out-of-district — PK component |
tuition_ |
int | yes | Full-time tuition and fees (combined) |
tuition_ |
int | yes | Full-time tuition only |
fees_ |
int | yes | Full-time required fees only |
credit_ |
int | yes | Per-credit-hour charge for part-time students |
tuition_ |
int | yes | Published (sticker) tuition |
fees_ |
int | yes | Published required fees |
tuition_ |
int | yes | Published total tuition and fees |
college_scorecard · table¶
Dept of Ed College Scorecard institution-level outcomes. Earnings, debt, completion rates, and enrollment demographics. One row per institution per vintage year. Joins to ipeds_institutions via id=unitid or ope8_id=opeid. API key required (API_DATA_GOV); PrivacySuppressed values are null. Earnings field is mean (not median) at 10yr — median available at 8yr. For program-level (CIP code / credential) earnings, see college_scorecard_programs (finer grain, same source).
| Column | Type | Null | Description |
|---|---|---|---|
id |
int | no | IPEDS unit ID — PK component; FK to ipeds_institutions.unitid |
ope8_ |
string | yes | OPE ID 8-digit — FK to ipeds_institutions.opeid |
ope6_ |
string | yes | OPE ID 6-digit |
year |
int | no | Data vintage year — PK component |
name |
string | yes | Institution name (school.name) |
city |
string | yes | City |
state |
string | yes | State abbreviation — FK to geo.states.state_abbr |
ownership |
int | yes | 1=public, 2=private nonprofit, 3=private for-profit |
carnegie_ |
int | yes | Carnegie basic classification (integer code) |
hbcu |
int | yes | HBCU flag (1=yes) |
tribal |
int | yes | Tribal college flag (1=yes) |
hispanic_ |
int | yes | Hispanic-serving institution (1=yes) |
online_ |
int | yes | Online-only institution (1=yes) |
locale |
int | yes | NCES locale code |
size |
int | yes | Total enrollment (latest.student.size) |
pell_ |
double | yes | Share of students receiving Pell grants (latest.aid.pell_grant_rate) |
completion_ |
double | yes | 6-year completion rate at 150% time for 4yr institutions |
completion_ |
double | yes | Completion rate for <4yr institutions |
retention_ |
double | yes | First-time full-time student retention rate (4yr) |
median_ |
double | yes | Median federal loan debt at completion (aid.median_debt.completers.overall) |
median_ |
double | yes | Median federal loan debt for non-completers (aid.median_debt.noncompleters) |
mean_ |
int | yes | Mean earnings 10yr after entry for working non-enrolled students (note: mean, not median) |
median_ |
double | yes | Median earnings 8yr after entry (earnings.8_yrs_after_entry.median_earnings) |
median_ |
int | yes | Median family income of entering students |
default_ |
double | yes | 3-year student loan cohort default rate |
avg_ |
int | yes | Average net price for public institutions after aid |
avg_ |
int | yes | Average net price for private institutions after aid |
tuition_ |
int | yes | In-state tuition (cost.tuition.in_state) |
tuition_ |
int | yes | Out-of-state tuition (cost.tuition.out_of_state) |
college_scorecard_programs · table¶
Dept of Ed College Scorecard program-level outcomes by CIP 4-digit code. One row per institution × program × credential level per year. Earnings by field of study — the most granular post-graduation outcome data. Joins to ipeds_completions via (unitid=unit_id, cipcode LIKE cip_code+'%'). PrivacySuppressed values are null. Institution-level scorecard outcomes (overall earnings, debt, completion rate) are in college_scorecard; this table breaks those out by field of study instead.
| Column | Type | Null | Description |
|---|---|---|---|
unit_ |
int | no | IPEDS unit ID — PK component; FK to ipeds_institutions.unitid |
ope6_ |
string | yes | OPE ID 6-digit |
year |
int | no | Data vintage year — PK component |
cip_ |
string | no | 4-digit CIP code (e.g. "0199") — PK component |
cip_ |
string | yes | CIP field of study title |
credential_ |
int | no | Credential level code — PK component; 1=certificate <1yr, 2=certificate 1-2yr, 3=associate, 5=bachelor's, 7=master's, 17=doctoral |
credential_ |
string | yes | Credential level description |
ipeds_ |
int | yes | IPEDS completions count for this program (counts.ipeds_awards1) |
median_ |
int | yes | Median earnings 1yr after completion (earnings.1_yr.overall_median_earnings) |
median_ |
int | yes | Median earnings 4yr after completion |
median_ |
int | yes | Median earnings 5yr after completion |
pell_ |
int | yes | Pell grant recipient median earnings 1yr after completion |
nonpell_ |
int | yes | Non-Pell recipient median earnings 1yr after completion |
library_outlets · table¶
IMLS Public Libraries Survey (PLS), outlet-level file — one row per physical library outlet (central, branch, or bookmobile stop) x fiscal year, the only PLS grain that carries square footage. IMLS lists every fiscal year's ZIP on one static landing page (not a per-year URL), so LibraryOutletsTransformer discovers the year's link from that page, then the "outlet" CSV inside the ZIP (which also holds a separate administrative-entity-level CSV with no square-footage column). Outlet identity is (state, fscs_key, fscs_seq) — NOT the source's own library_id field, which is not reliably unique/self-consistent in the raw data (confirmed: over a thousand library_id values collide across two different library systems in the FY2024 file). outlet_type: CE=Central, BR=Branch, BS=Bookmobile Stop, BM=Bookmobile. square_feet is null wherever the source carries an NCES missing/not-applicable/not-reported sentinel rather than a real count. county_fips is derived from the first 5 digits of the source's 11-digit Census tract FIPS (no county FIPS column is provided directly). Source: imls.gov/research-evaluation/surveys/public-libraries-survey-pls.
| Column | Type | Null | Description |
|---|---|---|---|
year |
int | no | PLS fiscal year — PK component |
state |
string | no | STABR, 2-letter USPS state code — PK component (FK to geo.state_ref) |
fscs_ |
string | no | FSCSKEY, the outlet's parent library system ID — PK component |
fscs_ |
string | no | FSCS_SEQ, sequence number of this outlet within its library system — PK component |
library_ |
string | yes | LIBID as reported (nominally FSCSKEY + '-' + FSCS_SEQ). NOT used as the key — see the table comment on source data-quality collisions. |
library_ |
string | yes | LIBNAME |
outlet_ |
string | yes | C_OUT_TY (CE=Central, BR=Branch, BS=Bookmobile Stop, BM=Bookmobile). One known source-data anomaly: library_id='MO0004-037' ("Library By Mail") carries outlet_type='MO' in year=2019 only (every other year for this outlet reads 'BM') -- confirmed present verbatim in IMLS's own FY2019 raw file (C_OUT_TY column, not a positional/mapping error on our side), not corrected here since there is no better field to derive the true value from. |
address |
string | yes | Street address |
city |
string | yes | CITY |
zip_ |
string | yes | ZIP |
county_ |
string | yes | CNTY (name, not FIPS) |
county_ |
string | yes | Derived from CENTRACT[0:5] (FK to geo.counties) |
square_ |
long | yes | SQ_FEET; null where the source carries a missing/not-applicable/not-reported sentinel |
latitude |
double | yes | LATITUDE |
longitude |
double | yes | LONGITUD |
f33_district_finance · table¶
Census Bureau Annual Survey of School System Finances ("F-33"), individual-unit file — one row per public school district (LEA) per fiscal year. Source: the Census Bureau's published elsec{yy}t.txt comma-delimited file, one per fiscal year (14,088 LEAs in the verified FY2023 file). leaid (source column NCESID) is the Census Bureau's own copy of the NCES LEA ID and joins directly to ccd_districts.leaid and geo.school_districts.sd_lea. Unlike ccd_districts (a staffing/enrollment directory with no dollar figures at all), this table carries the actual survey dollar aggregates: total_revenue_thousand, total_expenditure_thousand, and current_expenditure_thousand are reported in thousands of dollars (the source's own convention, not converted here — see each column's comment); per_pupil_current_expenditure, per_pupil_instruction_expenditure, and per_pupil_support_services_expenditure are the source's own per-pupil dollar figures (PPCSTOT/PPITOTAL/PPSTOTAL), computed by the Census Bureau from fall membership, not derived here. A two-year data lag applies (dataLag: 2 below) — the Census Bureau's most recently published fiscal year is real time minus roughly two years (verified live 2026-08-21: the FY2024 file was the latest published, FY2025 was not yet available). Verified live against the FY2023 file: NCESID is unique per row (0 duplicates) and always 7 digits; none of TOTALREV/TOTALEXP/TCURSPND/ PPCSTOT/ENROLL carried a negative value in that file, so (unlike CCD) this table does not null out negative sentinel codes — none were observed, but this has only been checked for FY2023/FY2024.
| Column | Type | Null | Description |
|---|---|---|---|
leaid |
string | no | NCES LEA ID (7-digit string), from source column NCESID — PK component. FK to ccd_districts.leaid and geo.school_districts.sd_lea. |
year |
int | no | Fiscal year of the survey (the yearRange dimension's effective_year, after dataLag=2 is applied) — PK component. Matches ccd_districts.year. |
pid6 |
string | yes | Census Bureau 6-digit processing identifier for the school system, source column PID6 (as of FY2023 this replaced the older IDCENSUS identifier as the Census Bureau's primary key for the unit). |
unit_ |
string | yes | Census government unit type code, source column UNIT_TYPE (raw code) |
state_ |
string | yes | 2-digit state FIPS code — FK to geo.states.state_fips. From source column FIPST for FY2022 and later; earlier files publish a narrower header with no FIPST at all, so it is taken from the leading two digits of CONUM (a county FIPS is the state FIPS plus a 3-digit county code). Null for the handful of multi-county educational cooperatives whose CONUM is the "M" not-applicable marker, and for those years PID6, UNIT_TYPE and SCHLEV are null too — those columns do not exist in the pre-FY2022 file. |
county_ |
string | yes | 5-digit county FIPS (state+county), source column CONUM — FK to geo.counties.county_fips |
district_ |
string | yes | School system name, source column NAME |
cbsa |
string | yes | Core-Based Statistical Area code, source column CBSA |
school_ |
string | yes | School level code, source column SCHLEV (raw code) |
enrollment |
long | yes | Fall membership (student enrollment) used to compute the per-pupil columns, source column ENROLL |
total_ |
double | yes | Total elementary-secondary revenue, in thousands of dollars, source column TOTALREV |
federal_ |
double | yes | Total revenue from federal sources, in thousands of dollars, source column TFEDREV |
state_ |
double | yes | Total revenue from state sources, in thousands of dollars, source column TSTREV |
local_ |
double | yes | Total revenue from local sources, in thousands of dollars, source column TLOCREV |
total_ |
double | yes | Total elementary-secondary expenditure, in thousands of dollars, source column TOTALEXP |
current_ |
double | yes | Total current spending (operating expenditure — excludes capital outlay and debt service), in thousands of dollars, source column TCURSPND |
instruction_ |
double | yes | Current spending for instruction, in thousands of dollars, source column TCURINST |
support_ |
double | yes | Current spending for support services, in thousands of dollars, source column TCURSSVC |
capital_ |
double | yes | Total capital outlay expenditure, in thousands of dollars, source column TCAPOUT |
interest_ |
double | yes | Interest on school system indebtedness, in thousands of dollars, source column TINTRST |
long_ |
double | yes | Long-term debt outstanding at end of the fiscal year, in thousands of dollars, source column DEBTOUT |
per_ |
double | yes | Per-pupil total current spending, in whole dollars — the source's own derived per-pupil figure (source column PPCSTOT), not computed here. |
per_ |
double | yes | Per-pupil current spending for instruction, in whole dollars, source column PPITOTAL |
per_ |
double | yes | Per-pupil current spending for support services, in whole dollars, source column PPSTOTAL |
district_resources · view¶
District-level pupil_teacher_ratio (enrollment / teachers_total_fte) and district_frpl_rate, a free/reduced-price-lunch poverty proxy computed by summing free_or_reduced_price_lunch and enrollment from ccd_schools per (leaid, year) and joining to ccd_districts. One row per district per year. ccd_districts.enrollment and teachers_total_fte and ccd_schools.free_or_reduced_price_lunch/enrollment all carry negative NCES CCD sentinel codes on some rows (see those tables' comments) — this view excludes them (value < 0 treated as null) before computing pupil_teacher_ratio and before summing into district_frpl_count/frpl_rate, so a sentinel code is never silently counted as a real value. frpl_rate is NULL for a whole district in any year its state runs the Community Eligibility Provision: CEP schools take no FRPL applications, so CCD publishes nothing in free_or_reduced_price_lunch statewide and carries direct_certification instead. That state set grows and shifts from 2016 on (2022: DE, DC, MA, MT, TN, WV; 2024: AZ, DE, DC, MA, TN, WV, GU). direct_cert_rate is provided for those districts but is a DIFFERENT measure, not a fallback — it counts only the categorically eligible subset and runs at 0.57-0.69 of FRPL wherever both are reported, so the two must not be pooled into one poverty control. Use one or the other and say which.
View — columns are resolved by the query engine at runtime.
naep_state_trends · view¶
NAEP aggregate trends for all-student subgroup by state, subject, and grade. Filters to variable_type=TOTAL to avoid double-counting disaggregations. One row per state × year × subject × grade. subject holds the raw NAEP code: MAT=mathematics, RED=reading.
View — columns are resolved by the query engine at runtime.
school_equity_profile · view¶
School-level equity view joining ccd_schools (enrollment, free_or_reduced_price_lunch poverty proxy) with two crdc_schools sub-endpoint topics: teachers-staff (counselor, psychologist, certified/uncertified teacher FTE) and offenses (firearm and rape incident counts). CRDC year is mapped to the closest CRDC survey year at or below the school year, among the years crdc_schools actually carries for these two topics — 2013, 2015, 2017, 2020, 2021 (verified live 2026-08-26; crdc_schools also has a 2011-labeled partition with 0 rows and a 2022 partition that carries only the chronic-absenteeism topic, neither of which teachers-staff/offenses can ever match, so neither is a mapping target). School years after 2021 map to the 2021 survey (the latest available) rather than going unmatched. offenses has no 2013 data (teachers-staff does), so offenses columns are null for school years mapped to 2013 even though teachers-staff columns are populated for that year. One row per school per year; CRDC columns are null where no match exists. s.enrollment and s.free_or_reduced_price_lunch carry negative NCES CCD sentinel codes on some rows (see ccd_schools' comment) — excluded (value < 0 treated as null) here before exposing them and before computing frpl_rate. frpl_rate is NULL for a whole school in any year its state runs the Community Eligibility Provision: CEP schools take no FRPL applications, so CCD publishes nothing in free_or_reduced_price_lunch statewide and carries direct_certification instead. That state set grows and shifts from 2016 on (2022: DE, DC, MA, MT, TN, WV; 2024: AZ, DE, DC, MA, TN, WV, GU). direct_cert_rate is provided for those schools but is a DIFFERENT measure, not a fallback — it counts only the categorically eligible subset and runs at 0.57-0.69 of FRPL wherever both are reported, so the two must not be pooled into one poverty control. Use one or the other and say which.
View — columns are resolved by the query engine at runtime.
institution_outcomes · view¶
Higher education institution outcomes: ipeds_institutions directory joined to college_scorecard earnings/debt/completion outcomes, plus both in-state and out-of-state full-time undergraduate tuition from ipeds_tuition (level_of_study=1). One row per institution per year, covering all institution levels (4yr, 2-4yr, <2yr).
View — columns are resolved by the query engine at runtime.
field_of_study_roi · view¶
Program-level return on investment: college_scorecard_programs earnings by CIP code and credential level (including ipeds_awards, a completions count sourced from the Scorecard API itself) joined to ipeds_institutions for institution name, state, and sector context. Enables ranking fields of study by median earnings at 1yr, 4yr, and 5yr after completion, including Pell vs. non-Pell earnings gaps.
View — columns are resolved by the query engine at runtime.
district_charter_profile · view¶
District-level summary of school types and equity metrics aggregated from ccd_schools: counts of charter, magnet, virtual, Title I schoolwide/eligible, and open schools, plus charter_share (charter fraction of schools) and district_frpl_rate (free/reduced-price-lunch share of aggregated school enrollment). Joins to ccd_districts for district name, FIPS, and district-level enrollment/teacher FTE context. One row per district per year via an inner join — districts with no matching ccd_schools rows are excluded. s.enrollment and s.free_or_reduced_price_lunch carry negative NCES CCD sentinel codes on some rows (see ccd_schools' comment) — excluded (value < 0 treated as null) before summing into school_enrollment_sum and district_frpl_rate. district_frpl_rate is NULL for a whole district in any year its state runs the Community Eligibility Provision — CEP schools take no FRPL applications, so CCD publishes nothing in free_or_reduced_price_lunch statewide (2022: DE, DC, MA, MT, TN, WV; 2024: AZ, DE, DC, MA, TN, WV, GU). district_direct_cert_rate covers those districts but is a DIFFERENT measure, not a fallback: it counts only the categorically eligible subset, running at 0.57-0.69 of FRPL wherever both are reported, so pooling the two into one poverty control understates poverty by roughly a third.
View — columns are resolved by the query engine at runtime.
institution_completions_summary · view¶
Institution-level completions totals by award level per year. Collapses ipeds_completions (wide format) to one row per institution per year by summing ctotalt — the grand total of awards across all races and both sexes — for majornum=1 (first-major) rows. Joins to ipeds_institutions for institutional context. award_level codes: 1/2=Certificate (<1yr/1-2yr), 3=Associate, 5=Bachelor, 7=Master, 17/18/19=Doctoral. completions_total is the grand sum across all award levels, not just those broken out individually.
View — columns are resolved by the query engine at runtime.
ipeds_financial_efficiency · view¶
Institution-level financial efficiency ratios from ipeds_financials joined to ipeds_institutions: tuition_dependency_ratio (net tuition / total current revenue; >0.70 signals heavy tuition reliance), salary_share_of_expenses (total salaries / total current expenses), and institutional_discount_rate (total student aid / gross tuition and fees). form_type (F1A=GASB public, F2/F3=FASB private) is preserved so institution types can be filtered or compared. One row per institution per fiscal year.
View — columns are resolved by the query engine at runtime.
district_naep_spending · view¶
State-level correlation view: naep_scores (filtered to variable_type=TOTAL, subgroup_name='All students') joined to ccd_districts/ccd_schools data aggregated to the state level — total_enrollment (sum), avg_pupil_teacher_ratio (average of each district's enrollment/teachers_total_fte), avg_frpl_rate (state free/reduced lunch share), and district_count. Enables correlating per-pupil staffing and poverty resources with NAEP outcomes. DESPITE THE NAME, this view carries NO dollar or per-pupil expenditure figures — "spending" here is proxied only by staffing (avg_pupil_teacher_ratio) and poverty (avg_frpl_rate); NCES CCD in this catalog has no district finance/dollars, so per-pupil spending in dollars is not available anywhere here. One row per jurisdiction × year × subject × grade; jurisdiction=0 (national aggregate) will not match any state's district data. d2.enrollment, d2.teachers_total_fte, and ccd_schools.free_or_reduced_price_lunch all carry negative NCES CCD sentinel codes on some rows (see those tables' comments) — excluded (value < 0 treated as null) before computing total_enrollment, avg_pupil_teacher_ratio, and avg_frpl_rate, so a sentinel code is never silently counted as a real value. avg_frpl_rate is NULL for a whole jurisdiction in any year where CCD published no FRPL count for that state at all, which is what CCD does for states running the Community Eligibility Provision: those schools take no FRPL applications, so the field is empty statewide and direct_certification carries the poverty signal instead. That set grows and shifts from 2016 on (2022: DE, DC, MA, MT, TN, WV; 2024: AZ, DE, DC, MA, TN, WV, GU) — see ccd_schools.free_or_reduced_price_lunch. avg_direct_cert_rate is provided for exactly those jurisdictions, but it is a DIFFERENT measure, not a fallback: it counts only the categorically eligible subset and runs at 0.57-0.69 of FRPL wherever both are reported, so a regression must not pool the two columns into one poverty control. Use one or the other and say which.
View — columns are resolved by the query engine at runtime.
institution_county_context · view¶
IPEDS institutions enriched with county name and state FIPS from geo.counties, joined via county_fips_str (zero-padded 5-digit FIPS computed by transformer) to geo.counties.county_fips. No year filter is applied on either side, so if geo.counties holds multiple years for a county, the join fans out to one row per (institution, geo.counties year) rather than staying one row per institution per year. Requires the geo schema present in the same Calcite model.
View — columns are resolved by the query engine at runtime.
state_naep_geography · view¶
NAEP state-level assessment scores joined to geo.states for state name and geographic context. Filters to all-student total rows to avoid double-counting disaggregations. jurisdiction=0 (national aggregate) will not join to geo.states and is retained with null geo fields. Requires geo schema present in the same Calcite model.
View — columns are resolved by the query engine at runtime.
naep_proficiency_summary · view¶
NAEP mean scores with proficiency level distributions in a single pivot row. Joins naep_scores to naep_achievement_levels via the full natural key. Filters to all-student TOTAL subgroup. One row per state × year × subject × grade. pct_* columns are null when achievement level data has not been ingested.
View — columns are resolved by the query engine at runtime.