Retained (Held-Back) K-12 Students
Students held back a grade in Georgia public schools, with counts and the race/gender makeup of the retained group, by school and district, 2004-2024.
- 2004–2024
- annual
- 1.0.0
- 9a026e84857d
Overview
Georgia Office of Student Achievement (GOSA) Retained K-12 dataset. For every Georgia public school, school district, and the state as a whole, reports the total number of students retained (held back) in grades K-12 during the school year, the total K-12 enrollment (2011 onward only), and a demographic breakdown of the retained population — counts and shares of retained by race and gender. The race axis carries six canonical codes (`native_american`, `asian_pacific_islander` — the bronze `Asian`/`Asians` label is a combined Asian/Pacific Islander bucket, with no separate Pacific Islander row — `black`, `hispanic`, `multiracial`, `white`); gender is `male`/`female`. Coverage spans the 2003-04 school year (filename year 2004) through the 2023-24 school year (filename year 2024) — 21 files.
Row grain: One row per year, district_code, school_code, demographic.
pct_of_retained_cohort — Percent of Retained Cohort (proportion)
The single headline value most answers want.
Variables
Every column in the fact table. The code is the exact field name the API returns.
| Column | Type | Unit | Range | Null? | Description |
|---|---|---|---|---|---|
year | integer | — | — | no | Ending calendar year of the school year (2024 = 2023-2024). Sourced from the bronze `School Year` / `School_Year` column for 2011-2024 (cross-checked against the filename); from the filename for 2004-2010 (no year column in those eras).Full description▾Ending calendar year of the school year (2024 = 2023-2024). Sourced from the bronze `School Year` / `School_Year` column for 2011-2024 (cross-checked against the filename); from the filename for 2004-2010 (no year column in those eras). |
district_code | string | — | — | yes | 3-digit GOSA district code (zero-padded) for standard districts; 7-digit code for state charter / state school networks. NULL for state-level aggregate rows. FK to districts dimension.Full description▾3-digit GOSA district code (zero-padded) for standard districts; 7-digit code for state charter / state school networks. NULL for state-level aggregate rows. FK to districts dimension. |
school_code | string | — | — | yes | 4-digit GOSA school code (zero-padded). NULL for district- and state-level aggregate rows. FK to schools dimension (composite key with district_code).Full description▾4-digit GOSA school code (zero-padded). NULL for district- and state-level aggregate rows. FK to schools dimension (composite key with district_code). |
demographic | string | — | — | no | Student subgroup the row covers (race or gender); 'all' is the whole retained group. Race uses the combined asian_pacific_islander bucket.Full description▾Canonical demographic code (FK to demographics dimension). `all` is the overall retained cohort; race uses the combined `asian_pacific_islander` bucket (pre-1997 OMB convention: the six race-bucket retained counts sum exactly to the total retained at the state row in every year, so Pacific Islanders are folded in, never published separately); gender is `male`/`female`. Race values are mutually exclusive with each other, as are gender values; `all` overlaps both axes. 9 allowed values▾
|
num_retained | integer | — | yes | Number of K-12 students in this demographic at this entity who were retained (held back) during the school year. For `demographic = all`, the total retained count. NULL when suppressed.Full description▾Number of K-12 students in this demographic at this entity who were retained (held back) during the school year. For `demographic = all`, the total retained count. NULL when suppressed. | |
num_students | integer | — | yes | Total K-12 enrollment at this entity. Populated only on `demographic = all` rows in 2011 and 2013-2024. NULL for every non-`all` row (bronze publishes no per-demographic enrollment) and for every row in 2004-2010 (the wide-era bronze publishes no enrollment at all — its total columns are retained counts). 2012 is fully NULL: the 2012 bronze `Total Enrolled` is corrupt (inflated ~17x at every detail level, state row 27,864,309 vs ~1.65M expected) and is NULLed per the known-source-defect rule; 2012 `num_retained` is internally consistent and preserved. With `num_retained` on `all` rows this yields an overall retention rate.Full description▾Total K-12 enrollment at this entity. Populated only on `demographic = all` rows in 2011 and 2013-2024. NULL for every non-`all` row (bronze publishes no per-demographic enrollment) and for every row in 2004-2010 (the wide-era bronze publishes no enrollment at all — its total columns are retained counts). 2012 is fully NULL: the 2012 bronze `Total Enrolled` is corrupt (inflated ~17x at every detail level, state row 27,864,309 vs ~1.65M expected) and is NULLed per the known-source-defect rule; 2012 `num_retained` is internally consistent and preserved. With `num_retained` on `all` rows this yields an overall retention rate. | |
pct_of_retained_cohort | number | — | yes | Share of this entity's retained students who are in this demographic, on a 0-1 scale; a makeup share, NOT a retention rate, and NULL on the 'all' row.Full description▾Share of the entity's total retained cohort who belong to this demographic, 0-1 scale (bronze 0-100 divided by 100; whole-percent precision in 2011-2024). NOT a within-demographic retention rate. In 2009 the published White and Multiracial percent columns are corrupt (both repeat the Male share); for those two demographics in 2009 the share is derived as num_retained / total retained from the internally consistent counts instead. |
Filters
Query parameters the fact endpoint accepts. Comma-separated values are OR within a parameter; multiple parameters AND together.
| Parameter | Kind | Allowed values | Notes |
|---|---|---|---|
year | year_exact | any value | — |
year_min | year_range | any value | — |
year_max | year_range | any value | — |
detail | detail | districtsschoolsstates | enum-enforced, default: schools |
district_code | foreign_key | any value | multi-value |
school_code | foreign_key | any value | multi-value |
demographic | foreign_key | 9 allowed values▾
| multi-value, enum-enforced |
district_type | dimension_attribute | 7 allowed values▾
| multi-value, enum-enforced |
demographic_category | dimension_attribute | 12 allowed values▾
| multi-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/retained_students"schools data for 2024
curl "https://georgiacivicdata.org/api/v1/education/retained_students?year=2024"One district (code 601), 2024
curl "https://georgiacivicdata.org/api/v1/education/retained_students?district_code=601&year=2024&detail=districts"Download 2024 as CSV
curl "https://georgiacivicdata.org/api/v1/education/retained_students?year=2024&format=csv"Notes & limitations
NULL handling
- Suppressed cells (too few students to report) are NULL, never zero.
- Zero is a real, reported value.
Limitations
`num_students` (total K-12 enrollment) is available only on `demographic = all` rows for 2011 and 2013-2024. It is NULL for every non-`all` demographic row (bronze has no per-demographic enrollment), for every row in 2004-2010 (the wide-format bronze publishes no enrollment column), and for all of 2012 (corrupt bronze `Total Enrolled`, inflated ~17x, is NULLed); 8 2016 `all` rows are also NULL where source enrollment was unpublished. An overall retention rate (`num_retained` / `num_students`) is therefore computable only on `demographic = all` rows in 2011 and 2013-2024. `pct_of_retained_cohort` is a SHARE of the total retained cohort that belongs to each demographic (it sums toward 1.0 across race demographics and across gender demographics within an entity), NOT a within-demographic retention rate; it is NULL on `demographic = all` rows (100% by definition). Suppressed cells (cohort below the privacy threshold) null `num_retained` and `pct_of_retained_cohort`.