Skip to content
← All datasets

Student Growth Model (SGM) End-of-Grade Results

Student growth percentiles on Georgia Milestones grades 4-8 tests by school, district, grade, and subject, 2015-2023.

Year coverage
2015–2023
Updated
annual
Version
1.1.0
Schema hash
b96869f8e00f

Detail levels available

StateDistrictSchool · default

Overview

Georgia Student Growth Model (GSGM / SGP) on End-of-Grade (EOG) Milestones assessments. Each row is a (year x detail_level x geography x subject x grade) cohort's growth-related measures: Median Student Growth Percentile (1-99 ordinal), share of students at or above Typical growth (SGP >= 35), and (in 2023 only) a three-bucket SGP split (Low < 35, Typical 35-65, High > 65). 2015-2019 also report achievement-level percentages (Proficient / Developing Learner and above) on the underlying EOG assessment. Data covers reporting years 2015, 2016, 2017, 2018, 2019, and 2023. No GSGM was reported during COVID years 2020-2022. 2015-2016 report four subjects (ELA, Math, Science, Social Studies); 2017-2019 report only ELA + Math; 2023 reports only ELA + Math.

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

Key metric

sgp_median — SGP Median (percentile, 1–99)

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
yearYearinteger——noEnding calendar year of the school year (spring year). E.g., 2017 = school year 2016-2017. Data published years are 2015, 2016, 2017, 2018, 2019, 2023.
Full description
Ending calendar year of the school year (spring year). E.g., 2017 = school year 2016-2017. Data published years are 2015, 2016, 2017, 2018, 2019, 2023.
district_codeDistrict Codestring——yes3-digit GOSA district/system code (FK to districts dimension). 7-digit charter / state-school codes are preserved in full; 2015-2017 school-level rows published under the bare charter SYSTEM codes 782/783 are promoted to the 7-digit campus code (system + school code) used by 2018+ files. State schools: 2015-2019 school-level rows are keyed on the 7-digit campus codes 7991893/7991894/7991895 (the 2015-2017 rows are promoted from the bare umbrella code 799, matching 2018-2019 and the Milestones EOG, attendance and enrollment-by-grade topics; SGM EOC and Milestones EOC still key 2015-2017 on 799); 2023 school-level rows stay on the bare 799 per the repo-wide 2020+ convention; the 2015-2017 district-level 799 aggregate row is retained. NULL for state-level rows.
Full description
3-digit GOSA district/system code (FK to districts dimension). 7-digit charter / state-school codes are preserved in full; 2015-2017 school-level rows published under the bare charter SYSTEM codes 782/783 are promoted to the 7-digit campus code (system + school code) used by 2018+ files. State schools: 2015-2019 school-level rows are keyed on the 7-digit campus codes 7991893/7991894/7991895 (the 2015-2017 rows are promoted from the bare umbrella code 799, matching 2018-2019 and the Milestones EOG, attendance and enrollment-by-grade topics; SGM EOC and Milestones EOC still key 2015-2017 on 799); 2023 school-level rows stay on the bare 799 per the repo-wide 2020+ convention; the 2015-2017 district-level 799 aggregate row is retained. NULL for state-level rows.

Joins districts; adds its label columns.

school_codeSchool Codestring——yes4-digit GOSA school code (FK to schools dimension, composite with district_code). NULL for district- and state-level rows.
Full description
4-digit GOSA school code (FK to schools dimension, composite with district_code). NULL for district- and state-level rows.

Joins schools; adds its label columns.

grade_levelGrade Levelstring——noGrade tested, 04 through 08 (grade 3 has no prior score for growth); 'all' is the across-grades aggregate.
Full description
Grade level as a zero-padded 2-char string categorical, matching the rest of the per-grade education topics. Per-grade rows carry `"04"`-`"08"` (EOG SGP is only reported for grades 4-8 because an SGP requires a prior-year score, and grade 3 is the first tested grade). The published AllGrades aggregate (2015-2019 only) is preserved as `"all"` because its `sgp_median` cannot be reconstructed from the per-grade medians — analogous to the `"all"` value used in the `demographic` column for cross-demographic aggregates. 2023 has no AllGrades row in bronze.
6 allowed values
  • all — total / aggregate
  • 04
  • 05
  • 06
  • 07
  • 08
subjectSubjectstring——noThe content area tested (english_language_arts, mathematics, science, social_studies).
Full description
Snake-case subject label. 2015-2016 report four subjects (english_language_arts, mathematics, science, social_studies); 2017+ reports only english_language_arts and mathematics.
4 allowed values
  • english_language_arts
  • mathematics
  • science
  • social_studies
num_testedNumber Testedintegercount—yesNumber of students who took the EOG assessment. NULL in 2023 (Era 6 does not report this column — see bronze-data-structure.md §Era 6).
Full description
Number of students who took the EOG assessment. NULL in 2023 (Era 6 does not report this column — see bronze-data-structure.md §Era 6).
num_sgp_receivedNumber SGP Receivedintegercount—yesNumber of students with enough prior-year scores to receive a Student Growth Percentile (subset of num_tested in 2015-2019; the only count metric reported in 2023).
Full description
Number of students with enough prior-year scores to receive a Student Growth Percentile (subset of num_tested in 2015-2019; the only count metric reported in 2023).
sgp_received_rateSGP Received Ratenumberproportion—yesShare of tested students who received an SGP (num_sgp_received / num_tested). 0-1 decimal scale. NULL in 2023 (not reported).
Full description
Share of tested students who received an SGP (num_sgp_received / num_tested). 0-1 decimal scale. NULL in 2023 (not reported).
sgp_medianSGP Mediannumberpercentile1–99yesMedian student growth percentile (1-99); 50 is average growth, higher means faster growth than similar peers.
Full description
Median Student Growth Percentile on the 1-99 ordinal scale (the true SGP domain — there is no 0 or 100 SGP, so the range guard is tightened from the percentile default [0, 100] to [1, 99]). NOT converted to 0-1 — it's a percentile rank, preserved verbatim per data-cleaning-standards §4. 50 is the statewide reference (typical) percentile; published state grade/subject medians can differ from it (e.g. 49 or 51 in 2015-2016). Values can be `.5` halves (e.g., 44.5). NULL on empty-cohort rows (num_sgp_received == 0): a median is undefined with no students, and bronze's sentinel 0 there is outside the valid 1-99 scale, so it is nulled rather than carried (which is why the tightened [1, 99] guard holds). The mask is recorded in the transform manifest (masked_values).
pct_proficient_learner_or_abovePercent Proficient Learner or Abovenumberproportion—yesShare of students at the Proficient Learner achievement level or higher on the EOG assessment (0-1 scale; bronze / 100). NULL in 2023 (metric dropped).
Full description
Share of students at the Proficient Learner achievement level or higher on the EOG assessment (0-1 scale; bronze / 100). NULL in 2023 (metric dropped).
pct_developing_learner_or_abovePercent Developing Learner or Abovenumberproportion—yesShare of students at the Developing Learner achievement level or higher on the EOG assessment (0-1 scale; bronze / 100). NULL in 2023 (metric dropped).
Full description
Share of students at the Developing Learner achievement level or higher on the EOG assessment (0-1 scale; bronze / 100). NULL in 2023 (metric dropped).
pct_sgp_typical_or_high_growthPercent SGP Typical or High Growthnumberproportion—yesShare of SGP-scored students with SGP >= 35 (Typical or High growth). 0-1 scale. NULL in 2023 — Era 6 replaced this with the three-bucket SGP split below.
Full description
Share of SGP-scored students with SGP >= 35 (Typical or High growth). 0-1 scale. NULL in 2023 — Era 6 replaced this with the three-bucket SGP split below.
pct_sgp_low_growthPercent SGP Low Growthnumberproportion—yesShare of SGP-scored students in the Low Growth band (SGP < 35). 0-1 scale. Era 6 (2023) only; NULL for 2015-2019.
Full description
Share of SGP-scored students in the Low Growth band (SGP < 35). 0-1 scale. Era 6 (2023) only; NULL for 2015-2019.
pct_sgp_typical_growthPercent SGP Typical Growthnumberproportion—yesShare of SGP-scored students in the Typical Growth band (35 <= SGP <= 65). 0-1 scale. Era 6 only; NULL for 2015-2019. NOT the same as pct_sgp_typical_or_high_growth — Era 1-5's `% Typical or High` lumps typical and high together (SGP >= 35).
Full description
Share of SGP-scored students in the Typical Growth band (35 <= SGP <= 65). 0-1 scale. Era 6 only; NULL for 2015-2019. NOT the same as pct_sgp_typical_or_high_growth — Era 1-5's `% Typical or High` lumps typical and high together (SGP >= 35).
pct_sgp_high_growthPercent SGP High Growthnumberproportion—yesShare of SGP-scored students in the High Growth band (SGP > 65). 0-1 scale. Era 6 only; NULL for 2015-2019.
Full description
Share of SGP-scored students in the High Growth band (SGP > 65). 0-1 scale. Era 6 only; NULL for 2015-2019.

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—
detaildetaildistrictsschoolsstatesenum-enforced, default: schools
district_codeforeign_keyany valuemulti-value
school_codeforeign_keyany valuemulti-value
grade_levelcategoricalall0405060708multi-value, enum-enforced
subjectcategoricalenglish_language_artsmathematicssciencesocial_studiesmulti-value, enum-enforced, pick one
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/georgia_student_growth_model_end_of_grade"

schools data for 2023

curl "https://georgiacivicdata.org/api/v1/education/georgia_student_growth_model_end_of_grade?year=2023"

Filtered to grade_level = 04 for 2023

curl "https://georgiacivicdata.org/api/v1/education/georgia_student_growth_model_end_of_grade?year=2023&grade_level=04"

One district (code 601), 2023

curl "https://georgiacivicdata.org/api/v1/education/georgia_student_growth_model_end_of_grade?district_code=601&year=2023&detail=districts"

Download 2023 as CSV

curl "https://georgiacivicdata.org/api/v1/education/georgia_student_growth_model_end_of_grade?year=2023&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.