Georgia Milestones End-of-Course (EOC) Results by Grade
Georgia Milestones high school course achievement results broken out by test-taker grade, course, and subgroup, 2015-2024.
- 2015–2024
- annual
- 1.0.0
- 742035feecb4
Overview
Georgia Milestones End-of-Course (EOC) assessment results disaggregated by the grade level of the test-taker, published by the Governor's Office of Student Achievement (GOSA). Each row is one (entity x grade x demographic subgroup x course) combination reporting the number of students tested plus the count and percentage at each of four achievement levels (Beginning, Developing, Proficient, Distinguished Learner) and two derived cumulative shares. Covers school years 2014-15 through 2023-24 (2019-20 absent — EOC testing suspended due to COVID-19) at state, district, and school detail levels.
Row grain: One row per year, district_code, school_code, demographic, grade_level, subject.
pct_proficient_learner_or_above — Percent Proficient Learner or Above (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 (e.g., 2024 = 2023-24). Derived from the filename and cross-checked against the source's LONG_SCHOOL_YEAR. 2020 is absent (EOC testing suspended during COVID-19 closures).Full description▾Ending calendar year of the school year (e.g., 2024 = 2023-24). Derived from the filename and cross-checked against the source's LONG_SCHOOL_YEAR. 2020 is absent (EOC testing suspended during COVID-19 closures). |
district_code | string | — | — | yes | GOSA district code (FK to districts dimension): 3-digit zero-padded county/city codes or 7-digit state-charter codes. NULL on state-level rows.Full description▾GOSA district code (FK to districts dimension): 3-digit zero-padded county/city codes or 7-digit state-charter codes. NULL on state-level rows. |
school_code | string | — | — | yes | GOSA school code, zero-padded to 4 characters (composite FK to schools dimension with district_code; not globally unique on its own). NULL on district- and state-level rows.Full description▾GOSA school code, zero-padded to 4 characters (composite FK to schools dimension with district_code; not globally unique on its own). NULL on district- and state-level rows. |
demographic | string | — | — | no | Demographic subgroup the row reports; 'all' is the overall figure (subgroups are non-additive).Full description▾Canonical demographic subgroup code (FK to the global demographics dimension), normalized from bronze SUBGROUP_NAME. This topic uses the SPLIT race convention — separate asian and pacific_islander rows in every year (no combined asian_pacific_islander bucket). Coverage grew over time: the stable 18-key core (2015+), plus active_duty and homeless from 2021, with active_duty renamed at the source to military_connected from 2022 alongside new foster_care rows. NON-ADDITIVE MILITARY KEYS: active_duty (dependents of currently-serving active-duty members) is a subset of military_connected (any DoD-connected family) — never sum the two. 22 allowed values▾
|
grade_level | string | — | — | no | Grade level of the test-takers, 07-12; grade 7 is rare and grade 12 includes retakes.Full description▾Grade level of the test-takers this row represents, as a 2-char zero-padded string. Bronze ACDMC_LVL is unpadded (7..12) in 2015-2019 and zero-padded (07..12) in 2021-2024; gold normalizes both to 07-12. Grade 7 is rare (the small set of 7th graders taking EOC courses early); grade 12 includes retake/make-up administrations. 6 allowed values▾
|
subject | string | — | — | no | EOC course assessed (e.g. biology, algebra_i, us_history); the value set tracks curriculum changes over time.Full description▾EOC course assessed, snake_case canonical. The value set tracks real curriculum changes: 9th_grade_literature_and_composition, analytic_geometry, economics_business_free_enterprise, geometry, and physical_science were retired after 2021; algebra_i and geometry first administered 2016; algebra_concepts_and_connections added 2024 (replacing coordinate_algebra over time). Historical course identities are preserved — algebra_i, coordinate_algebra, and algebra_concepts_and_connections are distinct courses, not aliases. 11 allowed values▾
|
num_tested | integer | — | yes | Count of students in this grade tested on this EOC course in this (entity x demographic) cell. Includes test-takers without a valid achievement-level score, so it can exceed the sum of the four num_*_learner counts (observed in 2023-2024; the sum never exceeds num_tested). Suppressed (NULL) in every year, most heavily in 2024 (~55% of rows) where the pct_* columns still carry the rounded distribution.Full description▾Count of students in this grade tested on this EOC course in this (entity x demographic) cell. Includes test-takers without a valid achievement-level score, so it can exceed the sum of the four num_*_learner counts (observed in 2023-2024; the sum never exceeds num_tested). Suppressed (NULL) in every year, most heavily in 2024 (~55% of rows) where the pct_* columns still carry the rounded distribution. | |
num_beginning_learner | integer | — | yes | Count of students scoring Beginning Learner (lowest of the four achievement levels). Bronze BEGIN_CNT; NULL when suppressed (TFS string, or — on the fully-suppressed rows of every 2015-2019 file — genuine empty CSV fields).Full description▾Count of students scoring Beginning Learner (lowest of the four achievement levels). Bronze BEGIN_CNT; NULL when suppressed (TFS string, or — on the fully-suppressed rows of every 2015-2019 file — genuine empty CSV fields). | |
num_developing_learner | integer | — | yes | Count of students scoring Developing Learner. Bronze DEVELOPING_CNT. 2017 ANOMALY: the 2017 source file is the only year/column where suppression was ENTIRELY absent (zero TFS markers) — it carries 3,001 literal 0 values and a ~7% null rate vs 43-75% in every other year, conflating true zeros with small counts the publisher should have suppressed. Two sibling columns show the same published-zero irregularity in single years (num_distinguished_learner 2015: 4,940 zeros; num_proficient_learner 2017: 824 zeros — see those columns); no other year/column pair has any literal zeros. Bronze-faithful pass-through; do not compare 2017 values for this column directly against other years.Full description▾Count of students scoring Developing Learner. Bronze DEVELOPING_CNT. 2017 ANOMALY: the 2017 source file is the only year/column where suppression was ENTIRELY absent (zero TFS markers) — it carries 3,001 literal 0 values and a ~7% null rate vs 43-75% in every other year, conflating true zeros with small counts the publisher should have suppressed. Two sibling columns show the same published-zero irregularity in single years (num_distinguished_learner 2015: 4,940 zeros; num_proficient_learner 2017: 824 zeros — see those columns); no other year/column pair has any literal zeros. Bronze-faithful pass-through; do not compare 2017 values for this column directly against other years. | |
num_proficient_learner | integer | — | yes | Count of students scoring Proficient Learner. Bronze PROFICIENT_CNT; NULL when suppressed. 2017 CAVEAT: the 2017 source published 824 literal 0 values for this column (TFS suppression was still applied to 47,937 other cells) — no other year has any. The zeros conflate true zeros with small counts that would normally be suppressed; bronze-faithful pass-through.Full description▾Count of students scoring Proficient Learner. Bronze PROFICIENT_CNT; NULL when suppressed. 2017 CAVEAT: the 2017 source published 824 literal 0 values for this column (TFS suppression was still applied to 47,937 other cells) — no other year has any. The zeros conflate true zeros with small counts that would normally be suppressed; bronze-faithful pass-through. | |
num_distinguished_learner | integer | — | yes | Count of students scoring Distinguished Learner (highest level). The most heavily suppressed metric (~80% NULL in 2023, ~88% in 2024) — few cells have enough distinguished scorers to clear the threshold. 2015 CAVEAT: the 2015 source published 4,940 literal 0 values for this column (TFS suppression was still applied to 48,267 other cells), depressing the 2015 null rate to ~52% vs 75-79% in 2016-2019 (2015 min is 0 vs 10 elsewhere); no other year has any. The zeros conflate true zeros with small counts that would normally be suppressed — do not compare 2015 values for this column directly against later years; bronze-faithful pass-through.Full description▾Count of students scoring Distinguished Learner (highest level). The most heavily suppressed metric (~80% NULL in 2023, ~88% in 2024) — few cells have enough distinguished scorers to clear the threshold. 2015 CAVEAT: the 2015 source published 4,940 literal 0 values for this column (TFS suppression was still applied to 48,267 other cells), depressing the 2015 null rate to ~52% vs 75-79% in 2016-2019 (2015 min is 0 vs 10 elsewhere); no other year has any. The zeros conflate true zeros with small counts that would normally be suppressed — do not compare 2015 values for this column directly against later years; bronze-faithful pass-through. | |
pct_beginning_learner | number | — | yes | Share of tested students scoring Beginning Learner, 0-1 scale (bronze 0-100 divided by 100). In 2015-2023 NULL exactly when num_tested is NULL (fully suppressed cell); in 2024 always reported — GOSA publishes the rounded distribution even when every count is suppressed. The four pct_*_learner shares are computed against num_tested and can sum to less than 1.0 when some test-takers lack a valid achievement-level score (pronounced in 2023-2024); they never sum above ~1.002 (rounding).Full description▾Share of tested students scoring Beginning Learner, 0-1 scale (bronze 0-100 divided by 100). In 2015-2023 NULL exactly when num_tested is NULL (fully suppressed cell); in 2024 always reported — GOSA publishes the rounded distribution even when every count is suppressed. The four pct_*_learner shares are computed against num_tested and can sum to less than 1.0 when some test-takers lack a valid achievement-level score (pronounced in 2023-2024); they never sum above ~1.002 (rounding). | |
pct_developing_learner | number | — | yes | Share of tested students scoring Developing Learner, 0-1 scale. Same suppression and partition behavior as pct_beginning_learner.Full description▾Share of tested students scoring Developing Learner, 0-1 scale. Same suppression and partition behavior as pct_beginning_learner. | |
pct_proficient_learner | number | — | yes | Share of tested students scoring Proficient Learner, 0-1 scale. Same suppression and partition behavior as pct_beginning_learner.Full description▾Share of tested students scoring Proficient Learner, 0-1 scale. Same suppression and partition behavior as pct_beginning_learner. | |
pct_distinguished_learner | number | — | yes | Share of tested students scoring Distinguished Learner, 0-1 scale. Same suppression and partition behavior as pct_beginning_learner.Full description▾Share of tested students scoring Distinguished Learner, 0-1 scale. Same suppression and partition behavior as pct_beginning_learner. | |
pct_developing_learner_or_above | number | — | yes | Cumulative share at Developing Learner or higher, derived at transform time as pct_developing_learner + pct_proficient_learner + pct_distinguished_learner (0-1 scale). Sums of publisher-rounded shares landing within 0.005 above 1.0 are capped to 1.0. NULL whenever any summand is NULL.Full description▾Cumulative share at Developing Learner or higher, derived at transform time as pct_developing_learner + pct_proficient_learner + pct_distinguished_learner (0-1 scale). Sums of publisher-rounded shares landing within 0.005 above 1.0 are capped to 1.0. NULL whenever any summand is NULL. | |
pct_proficient_learner_or_above | number | — | yes | Share of tested students scoring Proficient Learner or higher, on a 0-1 scale (the headline EOC proficiency rate).Full description▾Cumulative share at Proficient Learner or higher (the headline 'proficiency rate'), derived at transform time as pct_proficient_learner + pct_distinguished_learner (0-1 scale). Sums of publisher-rounded shares landing within 0.005 above 1.0 are capped to 1.0. NULL whenever either summand is NULL. |
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 | 22 allowed values▾
| multi-value, enum-enforced |
grade_level | categorical | 070809101112 | multi-value, enum-enforced, pick one |
subject | categorical | 11 allowed values▾
| multi-value, enum-enforced, pick one |
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/georgia_milestones_end_of_course_by_grade_level"schools data for 2024
curl "https://georgiacivicdata.org/api/v1/education/georgia_milestones_end_of_course_by_grade_level?year=2024"Filtered to grade_level = 07 for 2024
curl "https://georgiacivicdata.org/api/v1/education/georgia_milestones_end_of_course_by_grade_level?year=2024&grade_level=07"One district (code 601), 2024
curl "https://georgiacivicdata.org/api/v1/education/georgia_milestones_end_of_course_by_grade_level?district_code=601&year=2024&detail=districts"Download 2024 as CSV
curl "https://georgiacivicdata.org/api/v1/education/georgia_milestones_end_of_course_by_grade_level?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
Suppressed cells are NULL (not zero). State rows have NULL district_code and school_code. District rows have NULL school_code.