Inexperienced Teachers and Leaders
Share of Georgia teachers and leaders in their first career years by school, district, role, and poverty stratum, 2018-2024.
- 2018–2024
- annual
- 1.0.0
- 97f942f22b6b
Overview
Georgia Office of Student Achievement (GOSA) Inexperienced Teachers and Leaders report. For every Georgia public school, school district, and the state as a whole, reports the total educator full-time equivalent (`total_fte`), the FTE of educators classified as Inexperienced — within the first years of their career, per the ESSA inexperienced-educator standard — (`inexperienced_fte`), and the inexperienced FTE as a percentage of total FTE (`inexperienced_fte_rate`, on a 0-1 decimal scale). Unlike the sibling educator-qualifications topics (Teachers-only), this dataset reports both Teachers and Leaders (`role`), and each entity carries rows across school-poverty strata (`poverty_subgroup`: total, high_poverty, low_poverty, plus not_applicable and unknown for Leaders). Coverage spans the 2017-2018 school year through 2023-2024.
Row grain: One row per year, district_code, school_code, role, poverty_subgroup.
inexperienced_fte_rate — Inexperienced FTE Rate (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. Year 2024 = 2023-2024 school year. Derived from the bronze `LONG_SCHOOL_YEAR` column's ending year.Full description▾Ending calendar year of the school year. Year 2024 = 2023-2024 school year. Derived from the bronze `LONG_SCHOOL_YEAR` column's ending year. |
district_code | string | — | — | yes | 3-digit GOSA district code (zero-padded) for standard districts; 7-digit charter code for charter / specialty-school districts; NULL for state-level aggregate rows. FK to the education districts dimension. Because the source publishes only district NAMES (no codes), codes are resolved against `data/gold/education/_dimensions/districts.parquet` via the shared educator-topic resolver (year-aware certified_personnel lookups, curated code pins, and guarded name matching — see src/etl/education/gosa/_educator_lookups.py). Rows whose names cannot be resolved or faithfully attributed are dropped only under documented predicates; the transform manifest records each dropped class and count per year.Full description▾3-digit GOSA district code (zero-padded) for standard districts; 7-digit charter code for charter / specialty-school districts; NULL for state-level aggregate rows. FK to the education districts dimension. Because the source publishes only district NAMES (no codes), codes are resolved against `data/gold/education/_dimensions/districts.parquet` via the shared educator-topic resolver (year-aware certified_personnel lookups, curated code pins, and guarded name matching — see src/etl/education/gosa/_educator_lookups.py). Rows whose names cannot be resolved or faithfully attributed are dropped only under documented predicates; the transform manifest records each dropped class and count per year. |
school_code | string | — | — | yes | 4-digit GOSA school code (zero-padded); NULL for district-level and state-level aggregate rows. FK to the education schools dimension (composite key with district_code). Resolved by name via the shared educator-topic resolver; school-level rows whose name cannot be resolved to a dimension entry are dropped under documented source-gap predicates only (counts in the transform manifest).Full description▾4-digit GOSA school code (zero-padded); NULL for district-level and state-level aggregate rows. FK to the education schools dimension (composite key with district_code). Resolved by name via the shared educator-topic resolver; school-level rows whose name cannot be resolved to a dimension entry are dropped under documented source-gap predicates only (counts in the transform manifest). |
role | string | — | — | no | Workforce role the row measures: teachers or leaders (principals and assistant principals).Full description▾Workforce role the row measures: `teachers` or `leaders` (principals / assistant principals). Unlike the sibling emergency / out-of-field educator-qualifications topics (Teachers-only), this dataset reports both roles. 2 allowed values▾
|
poverty_subgroup | string | — | — | no | School-poverty stratum the row covers (total, high, or low poverty; Leaders add not_applicable/unknown); a school-poverty level, not a student demographic.Full description▾Poverty stratum of the schools whose FTE this row aggregates. `total` covers all schools in the entity; `high_poverty` / `low_poverty` cover only the entity's schools in the state's highest- / lowest-poverty quartile (per GOSA's K-12 Teacher & Leader Workforce Reports, school poverty is defined by the direct-certification rate). Leaders rows additionally carry `not_applicable` (the dominant Leaders stratum) and `unknown` (rare — chiefly Department of Juvenile Justice facilities, plus isolated Mitchell County 2022 and Gwinnett County 2024 rows); Teachers rows never carry either (enforced by a quality check). For a school-level row the stratum describes the school itself, so a stratum row duplicates that school's `total` row (enforced by a quality check). This is a SCHOOL-poverty stratum, NOT a student demographic — it does not map to the global demographics dimension. 5 allowed values▾
|
total_fte | number | — | yes | Total educator full-time equivalent count in the entity for the given role and poverty subgroup. For `poverty_subgroup = total` this is the entity's total role FTE; for other strata it is the FTE in just that stratum of schools. Fractional FTEs are real (e.g. 58.2). NULL when suppressed by the GOSA reporting floor (`TFS`, < 10 FTE) — 2021 onward. Denominator of `inexperienced_fte_rate`.Full description▾Total educator full-time equivalent count in the entity for the given role and poverty subgroup. For `poverty_subgroup = total` this is the entity's total role FTE; for other strata it is the FTE in just that stratum of schools. Fractional FTEs are real (e.g. 58.2). NULL when suppressed by the GOSA reporting floor (`TFS`, < 10 FTE) — 2021 onward. Denominator of `inexperienced_fte_rate`. | |
inexperienced_fte | number | — | yes | Educator FTE classified as Inexperienced (within the first years of their career, per the ESSA inexperienced-educator standard) in the entity for the given role and poverty subgroup. NULL when suppressed (`TFS`, < 10 FTE) — observed from 2021 onward. True zeros (no inexperienced educators) are preserved as 0.0 in 2018-2020, before GOSA introduced suppression for this report. Numerator of `inexperienced_fte_rate`. WARNING — not additive across hierarchy levels for Teachers: school-row sums exceed the district row and district-row sums exceed the state row by ~1.4x in every year (bronze-native; consistent with experience measured relative to the reporting unit — new-to-school vs new-to-district vs new-to-profession). Never derive an aggregate by summing lower-level rows; use the published row for the level you need. Leaders rows and `total_fte` DO reconcile across levels (~1.000). Six 2018-2020 Leaders rows at tiny programs exceed `total_fte` by exactly 0.1 (e.g. 2.0 vs 1.9 at Randolph Clay High School 2018) — an artifact of GOSA rounding each FTE to 0.1 independently; preserved per data-cleaning-standards §4b (extreme-but-conceivable).Full description▾Educator FTE classified as Inexperienced (within the first years of their career, per the ESSA inexperienced-educator standard) in the entity for the given role and poverty subgroup. NULL when suppressed (`TFS`, < 10 FTE) — observed from 2021 onward. True zeros (no inexperienced educators) are preserved as 0.0 in 2018-2020, before GOSA introduced suppression for this report. Numerator of `inexperienced_fte_rate`. WARNING — not additive across hierarchy levels for Teachers: school-row sums exceed the district row and district-row sums exceed the state row by ~1.4x in every year (bronze-native; consistent with experience measured relative to the reporting unit — new-to-school vs new-to-district vs new-to-profession). Never derive an aggregate by summing lower-level rows; use the published row for the level you need. Leaders rows and `total_fte` DO reconcile across levels (~1.000). Six 2018-2020 Leaders rows at tiny programs exceed `total_fte` by exactly 0.1 (e.g. 2.0 vs 1.9 at Randolph Clay High School 2018) — an artifact of GOSA rounding each FTE to 0.1 independently; preserved per data-cleaning-standards §4b (extreme-but-conceivable). | |
inexperienced_fte_rate | number | — | yes | Share of educator FTE classified as inexperienced, on a 0-1 scale (inexperienced_fte / total_fte).Full description▾`inexperienced_fte` / `total_fte` on a 0-1 decimal scale. Bronze publishes an integer 0-100 percent (verified range 0-100 across all years); divided by 100 per data-cleaning-standards §4. GOSA computes the integer percent from UNROUNDED FTE values while publishing FTEs rounded to 0.1, so at small programs the published rate deviates from inexperienced_fte/total_fte (up to 0.9 below 10 FTE, e.g. published 0.1/0.1 with rate 0.10; at or above the 10-FTE reporting floor the worst observed deviation is 0.09). A quality check enforces reconciliation within 0.10 where total_fte >= 10. The rate is preserved from bronze even when `inexperienced_fte` is suppressed. |
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 |
role | categorical | leadersteachers | multi-value, enum-enforced, pick one |
poverty_subgroup | categorical | high_povertylow_povertynot_applicabletotalunknown | multi-value, enum-enforced |
district_type | dimension_attribute | 7 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/educator_qualifications_inexperienced_teachers_leaders"schools data for 2024
curl "https://georgiacivicdata.org/api/v1/education/educator_qualifications_inexperienced_teachers_leaders?year=2024"Filtered to role = leaders for 2024
curl "https://georgiacivicdata.org/api/v1/education/educator_qualifications_inexperienced_teachers_leaders?year=2024&role=leaders"One district (code 601), 2024
curl "https://georgiacivicdata.org/api/v1/education/educator_qualifications_inexperienced_teachers_leaders?district_code=601&year=2024&detail=districts"Download 2024 as CSV
curl "https://georgiacivicdata.org/api/v1/education/educator_qualifications_inexperienced_teachers_leaders?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
Suppression is era-asymmetric: 2018-2020 publish a real `0` (true zero inexperienced educators, 723-765 rows per year), while 2021 onward suppress any value below 10 with `TFS` (treat NULL as 'value < 10' for 2021+ but as genuinely missing pre-2021); inexperienced_fte_rate may be non-null even when inexperienced_fte is suppressed. The source publishes only district/school NAMES, so codes are resolved by name against the education dimensions via the shared educator-topic resolver (year-aware certified_personnel lookups, curated code pins, guarded matching); rows that cannot be resolved or faithfully attributed are dropped only under documented predicates — unresolved truncated charter-container placeholders, cataloged source gaps (e.g. Ivy Prep Kirkwood), and the ambiguous 52-char-truncated Genesis Innovation Academy district aggregates (Boys/Girls distinguisher erased; bare school rows carry the real values) — with per-year counts in the transform manifest. District-level coverage for Genesis Innovation Academy is therefore missing in 2023-2024 while its school-level rows are complete. The 2024 truncated Utopian Academy aggregates (one Leaders/Total identical-metric pair collapsed by dedup, plus a single Leaders/Low Poverty row) are all bound to the pinned main campus 7820121 even though the truncated name also covers the Trilith campus 7820619 — the Low Poverty row likely describes Trilith; preserved as published and matching the v1-approved handling. Six 2018-2020 Leaders rows carry inexperienced_fte exceeding total_fte by exactly 0.1 (independent 0.1-FTE rounding; preserved per data-cleaning-standards §4b). Teachers `inexperienced_fte` does NOT aggregate across hierarchy levels: school-row sums exceed the district row and district-row sums exceed the state row by ~1.4x in every year (consistent with experience measured relative to the reporting unit); never derive aggregates by summing lower-level rows. The 2019 file's Teachers FTE levels run ~40% above adjacent years statewide (162,256.2 vs 118,009.1 in 2018 / 110,800.8 in 2020) and the 2018 file's school-level total_fte can sum above the district row (149 of 205 districts) — treat 2018-2019 levels as a distinct measurement basis when trending. State rows have NULL district_code and school_code; district rows have NULL school_code.