Skip to content
← All datasets

Per-Pupil Expenditure (FESR)

Annual per-pupil spending — total, federal, and state/local — for Georgia school districts (2014-2024) and schools (2017-2024), from the FESR methodology.

Year coverage
20142024
Updated
annual
Version
1.0.0
Schema hash
ea9016eba4ca

Detail levels available

DistrictSchool · default

Overview

Annual per-pupil expenditure panel for Georgia public school districts and schools under the GOSA Financial Efficiency Star Rating (FESR) methodology: total, federal, and state/local expenditures, full-time-equivalent K-12 enrollment, and the resulting per-pupil expenditure (PPE) for every fiscal year the FESR downloads cover — district rows FY2014-FY2024 (the 180 traditional systems), school rows FY2017-FY2024 (all schools, including charter authorizers). District rows additionally carry the federal vs state/local split of total expenditures; school rows additionally carry the pre-allocation included/excluded expenditure split and the school's share of district enrollment. This is the FESR included-cost per-pupil series, whereas the k12_expenditures topic is the full function-level expenditure ledger — their totals intentionally differ (FESR excludes capital, debt, and other non-included costs). It is also the reliable school-level PPE series (the k12_expenditures school per-pupil column is degenerate in 2023-24). The FESR star ratings built from this panel live in the sibling financial_efficiency_star_rating topic.

Row grain: One row per year, district_code, school_code.

Key metric

per_pupil_expenditurePer-Pupil Expenditure (currency)

The single headline value most answers want.

Variables

Every column in the fact table. The code is the exact field name the API returns.

ColumnTypeUnitRangeNull?Description
yearYearintegernoFiscal year the row's expenditure and enrollment inputs refer to (e.g. FY2024 = 2023-24 school year). Differs from the bronze filename year for back-window rows: each rolling FESR report covers up to 3 fiscal years, but gold keys every row by the actual fiscal year.
Full description
Fiscal year the row's expenditure and enrollment inputs refer to (e.g. FY2024 = 2023-24 school year). Differs from the bronze filename year for back-window rows: each rolling FESR report covers up to 3 fiscal years, but gold keys every row by the actual fiscal year.
district_codeDistrict CodestringnoGOSA district/system code (FK to districts dimension), zero-padded to 3 digits (7-digit codes are charter authorizers, school rows only). District-detail rows cover the 180 traditional school systems (codes 601-793); school-detail rows additionally include charter authorizer codes. Populated on every row.
Full description
GOSA district/system code (FK to districts dimension), zero-padded to 3 digits (7-digit codes are charter authorizers, school rows only). District-detail rows cover the 180 traditional school systems (codes 601-793); school-detail rows additionally include charter authorizer codes. Populated on every row.

Joins districts; adds its label columns.

school_codeSchool CodestringyesGOSA school code, zero-padded to 4 characters (composite FK to schools dimension with district_code; not globally unique on its own). Populated on school rows only — district aggregate rows carry NULL.
Full description
GOSA school code, zero-padded to 4 characters (composite FK to schools dimension with district_code; not globally unique on its own). Populated on school rows only — district aggregate rows carry NULL.

Joins schools; adds its label columns.

total_expendituresTotal ExpendituresnumbercurrencyyesTotal expenditures for the fiscal year (nominal dollars, not inflation-adjusted). For DISTRICT rows this is the district's total included expenditures (= federal_expenditures + state_local_expenditures within $1, enforced by a quality check). For SCHOOL rows this is the per-school total — included expenditures plus the school's allocated share of district central costs (= total_federal_expenditures + total_state_local_expenditures within $10; from FY22 also folds in Allocated CCA and Alternative Program costs, so FY22+ school totals are not strictly comparable to FY17-FY21). per_pupil_expenditure = total_expenditures / fte_enrollment at both levels.
Full description
Total expenditures for the fiscal year (nominal dollars, not inflation-adjusted). For DISTRICT rows this is the district's total included expenditures (= federal_expenditures + state_local_expenditures within $1, enforced by a quality check). For SCHOOL rows this is the per-school total — included expenditures plus the school's allocated share of district central costs (= total_federal_expenditures + total_state_local_expenditures within $10; from FY22 also folds in Allocated CCA and Alternative Program costs, so FY22+ school totals are not strictly comparable to FY17-FY21). per_pupil_expenditure = total_expenditures / fte_enrollment at both levels.
fte_enrollmentFTE EnrollmentintegercountyesFull-time-equivalent K-12 enrollment, the denominator of per_pupil_expenditure (per_pupil_expenditure = total_expenditures / fte_enrollment within rounding at both detail levels, enforced by a quality check).
Full description
Full-time-equivalent K-12 enrollment, the denominator of per_pupil_expenditure (per_pupil_expenditure = total_expenditures / fte_enrollment within rounding at both detail levels, enforced by a quality check).
per_pupil_expenditurePer-Pupil ExpenditurenumbercurrencyyesTotal dollars spent per student for the fiscal year (nominal, not inflation-adjusted).
Full description
Per-pupil expenditure for the fiscal year (nominal dollars) = total_expenditures / fte_enrollment, as published (rounded to cents by the source). A few Atlanta (district 660) school rows in FY21/FY22 are negative — faithful GOSA restatements preserved per §4b, not errors.
federal_per_pupil_expenditureFederal per Pupil ExpenditurenumbercurrencyyesFederal portion of per_pupil_expenditure (nominal dollars). federal_per_pupil_expenditure + state_local_per_pupil_expenditure = per_pupil_expenditure within rounding (enforced by a quality check). NULL for district FY2014.
Full description
Federal portion of per_pupil_expenditure (nominal dollars). federal_per_pupil_expenditure + state_local_per_pupil_expenditure = per_pupil_expenditure within rounding (enforced by a quality check). NULL for district FY2014.
state_local_per_pupil_expenditureState Local per Pupil ExpenditurenumbercurrencyyesState + local portion of per_pupil_expenditure (nominal dollars). NULL for district FY2014.
Full description
State + local portion of per_pupil_expenditure (nominal dollars). NULL for district FY2014.
federal_expendituresFederal ExpendituresnumbercurrencyyesFederal portion of the district's total_expenditures (nominal dollars). District-detail rows only. The school-level analogue of this quantity is total_federal_expenditures (both split the shared total_expenditures column); they are kept as separate columns because the school download names them differently and additionally publishes the pre-allocation included_* split, which districts do not.
Full description
Federal portion of the district's total_expenditures (nominal dollars). District-detail rows only. The school-level analogue of this quantity is total_federal_expenditures (both split the shared total_expenditures column); they are kept as separate columns because the school download names them differently and additionally publishes the pre-allocation included_* split, which districts do not.
state_local_expendituresState Local ExpendituresnumbercurrencyyesState + local portion of the district's total_expenditures (nominal dollars). District-detail rows only; the school-level analogue is total_state_local_expenditures.
Full description
State + local portion of the district's total_expenditures (nominal dollars). District-detail rows only; the school-level analogue is total_state_local_expenditures.
included_expendituresIncluded ExpendituresnumbercurrencyyesTotal included expenditures for the school (nominal dollars), BEFORE allocation of district central costs — the school's total_expenditures equals included_expenditures plus its allocated central-cost share. School-detail rows only. Placeholder $0 values on unreported/non-compliant FY17-FY18 rows are NULLed per §4b (see limitations).
Full description
Total included expenditures for the school (nominal dollars), BEFORE allocation of district central costs — the school's total_expenditures equals included_expenditures plus its allocated central-cost share. School-detail rows only. Placeholder $0 values on unreported/non-compliant FY17-FY18 rows are NULLed per §4b (see limitations).
included_federal_expendituresIncluded Federal ExpendituresnumbercurrencyyesFederal portion of the school's included_expenditures (nominal dollars). included_federal_expenditures + included_state_local_expenditures = included_expenditures (exact in the canonical bronze blocks; enforced by a quality check). School-detail rows only. FY17-FY18 placeholder $0 values NULLed per §4b.
Full description
Federal portion of the school's included_expenditures (nominal dollars). included_federal_expenditures + included_state_local_expenditures = included_expenditures (exact in the canonical bronze blocks; enforced by a quality check). School-detail rows only. FY17-FY18 placeholder $0 values NULLed per §4b.
included_state_local_expendituresIncluded State Local ExpendituresnumbercurrencyyesState + local portion of the school's included_expenditures (nominal dollars). School-detail rows only. FY17-FY18 placeholder $0 values NULLed per §4b.
Full description
State + local portion of the school's included_expenditures (nominal dollars). School-detail rows only. FY17-FY18 placeholder $0 values NULLed per §4b.
excluded_expendituresExcluded ExpendituresnumbercurrencyyesExpenditures excluded from the PPE computation (nominal dollars) per the FESR methodology. NOT a component of total_expenditures (totals = included + allocated central costs). School-detail rows only. A few rows per year carry negative values — faithful GOSA restatements preserved per §4b. FY17-FY18 placeholder $0 values NULLed per §4b.
Full description
Expenditures excluded from the PPE computation (nominal dollars) per the FESR methodology. NOT a component of total_expenditures (totals = included + allocated central costs). School-detail rows only. A few rows per year carry negative values — faithful GOSA restatements preserved per §4b. FY17-FY18 placeholder $0 values NULLed per §4b.
total_federal_expendituresTotal Federal ExpendituresnumbercurrencyyesFederal portion of the school's total_expenditures (post-allocation; nominal dollars). The school-level analogue of the district's federal_expenditures (both split the shared total_expenditures). School-detail rows only. FY17-FY18 placeholder $0 values NULLed per §4b.
Full description
Federal portion of the school's total_expenditures (post-allocation; nominal dollars). The school-level analogue of the district's federal_expenditures (both split the shared total_expenditures). School-detail rows only. FY17-FY18 placeholder $0 values NULLed per §4b.
total_state_local_expendituresTotal State Local ExpendituresnumbercurrencyyesState + local portion of the school's total_expenditures (post-allocation; nominal dollars). School-detail rows only; the district analogue is state_local_expenditures. FY17-FY18 placeholder $0 values NULLed per §4b.
Full description
State + local portion of the school's total_expenditures (post-allocation; nominal dollars). School-detail rows only; the district analogue is state_local_expenditures. FY17-FY18 placeholder $0 values NULLed per §4b.
pct_of_district_enrollmentPercent of District EnrollmentnumberproportionyesThe school's share of its district's total enrollment, 0-1 decimal (0.2912 = 29.12%), used by the FESR methodology to allocate district central costs. School-detail rows only. Caveat: within-district sums are not a strict partition — they exceed 1.0 in 552 district-years (55 of them by more than 0.005, up to 1.82), faithful to bronze.
Full description
The school's share of its district's total enrollment, 0-1 decimal (0.2912 = 29.12%), used by the FESR methodology to allocate district central costs. School-detail rows only. Caveat: within-district sums are not a strict partition — they exceed 1.0 in 552 district-years (55 of them by more than 0.005, up to 1.82), faithful to bronze.

Filters

Query parameters the fact endpoint accepts. Comma-separated values are OR within a parameter; multiple parameters AND together.

ParameterKindAllowed valuesNotes
yearyear_exactany value
year_minyear_rangeany value
year_maxyear_rangeany value
detaildetaildistrictsschoolsenum-enforced, default: schools
district_codeforeign_keyany valuemulti-value
school_codeforeign_keyany valuemulti-value
district_typedimension_attribute
7 allowed values
  • commission_charter
  • resa
  • standard
  • state_agency
  • state_charter
  • state_school
  • state_special
multi-value, enum-enforced
school_leveldimension_attributeelementarymiddlehighk12othermulti-value, enum-enforced
localedimension_attributecitysuburbtownruralmulti-value, enum-enforced

Example requests

Run these against the base URL — they return live data.

All rows (first page), schools level

curl "https://georgiacivicdata.org/api/v1/education/per_pupil_expenditure"

schools data for 2024

curl "https://georgiacivicdata.org/api/v1/education/per_pupil_expenditure?year=2024"

One district (code 657), 2024

curl "https://georgiacivicdata.org/api/v1/education/per_pupil_expenditure?district_code=657&year=2024&detail=districts"

Download 2024 as CSV

curl "https://georgiacivicdata.org/api/v1/education/per_pupil_expenditure?year=2024&format=csv"

Notes & limitations

NULL handling

  • Zero is a real, reported value.

Limitations

Two detail levels (district, school) in one fact table, split by parquet filename; school_code is NULL on district rows. Detail level is read from the geography-key NULL pattern. The district level covers FY2014-FY2024 (180 traditional systems, codes 601-793, no charters/RESAs/state agencies); the school level covers FY2017-FY2024 (all schools, including charter authorizers). School-level and district-level rows come from two independent GOSA downloads whose K-12 bases need not reconcile, so school rows are NOT guaranteed to sum to their district row. Level-specific columns are NULL on the other level: federal_expenditures / state_local_expenditures are district-only; included_* / excluded_expenditures / total_federal_expenditures / total_state_local_expenditures / pct_of_district_enrollment are school-only. The district federal_expenditures and the school total_federal_expenditures are the same federal share of total_expenditures but are kept as separate columns (different source naming; schools also publish the distinct pre-allocation included_* split). District federal/state-local breakdowns are NULL for FY2014 (the only source covering FY14 published totals only). FY2022 methodology change: from FY22 school total_expenditures (and per_pupil_expenditure) additionally include Allocated CCA and Alternative Program costs, so FY22+ school totals are not strictly comparable to FY17-FY21. This is the FESR included-cost per-pupil series — totals intentionally differ from the k12_expenditures function-level expenditure ledger. Placeholder $0 school expenditure amounts on unreported/non-compliant FY17-FY18 rows are NULLed per §4b (see _transform_manifest.json masked_values). A small number of district 660 (Atlanta) school rows carry negative expenditure / per-pupil values — faithful GOSA restatements preserved as-is. Currency is nominal dollars (not inflation-adjusted). No cell-level small-cell suppression exists in this source; NULLs are structural or §4b masks, never suppression.