Skip to content
← All datasets

Emergency-Credentialed Teachers

Share of Georgia teachers holding an emergency credential by school, district, and school-poverty stratum, 2018-2024.

Year coverage
20182024
Updated
annual
Version
1.0.0
Schema hash
2c38701537a7

Detail levels available

StateDistrictSchool · default

Overview

Georgia Office of Student Achievement (GOSA) Emergency-credential teacher FTE report. For every Georgia public school, school district, and the state as a whole, reports the total teacher full-time equivalent (`total_fte`), the FTE of teachers holding an Emergency teaching credential (`emergency_fte`), and the emergency-credentialed FTE as a percentage of total FTE (`emergency_fte_rate`, on a 0-1 decimal scale). Each entity has three rows — Total, High Poverty, and Low Poverty — reporting the same three metrics across poverty strata of schools. Coverage spans the 2017-2018 school year through 2023-2024. Despite the topic name referencing 'Provisional' credentials, no provisional rows appear in the source; only Emergency is reported.

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

Key metric

emergency_fte_rateEmergency 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.

ColumnTypeUnitRangeNull?Description
yearYearintegernoEnding 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_codeDistrict Codestringyes3-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 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 are dropped only under documented predicates; the transform manifest records each dropped class and count per year.

Joins districts; adds its label columns.

school_codeSchool Codestringyes4-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).

Joins schools; adds its label columns.

poverty_subgroupPoverty SubgroupstringnoSchool-poverty stratum the row covers: all schools (total), or only the highest- or lowest-poverty quartile; 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` covers only the entity's schools in the state's highest-poverty quartile; `low_poverty` only those in the lowest-poverty quartile. Per GOSA's K-12 Teacher & Leader Workforce Reports, a school's poverty level is defined by its direct-certification rate (the share of students directly certified for free/reduced-price meals) — higher direct certification means higher poverty. For a school-level row the stratum describes the school itself, so `high_poverty`/`low_poverty` rows duplicate 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.
3 allowed values
  • high_poverty
  • low_poverty
  • total — total / aggregate
total_fteTotal FTEnumbercountyesTotal teacher full-time equivalent count in the entity (or in the poverty subgroup). Fractional FTEs are real (e.g. 34.8). NULL when suppressed by the GOSA reporting floor (`TFS`, < 10 teachers). Denominator of `emergency_fte_rate`. The 2019 statewide level (162,256.2) is ~37% above neighboring years (2018: 118,009.1; 2020: 110,800.8) — a broader teacher population GOSA reported that year at every detail level, preserved faithfully per data-cleaning-standards §4b (extreme-but-conceivable).
Full description
Total teacher full-time equivalent count in the entity (or in the poverty subgroup). Fractional FTEs are real (e.g. 34.8). NULL when suppressed by the GOSA reporting floor (`TFS`, < 10 teachers). Denominator of `emergency_fte_rate`. The 2019 statewide level (162,256.2) is ~37% above neighboring years (2018: 118,009.1; 2020: 110,800.8) — a broader teacher population GOSA reported that year at every detail level, preserved faithfully per data-cleaning-standards §4b (extreme-but-conceivable).
emergency_fteEmergency FTEnumbercountyesTeacher FTE holding an Emergency teaching credential in the entity (or poverty subgroup). NULL when suppressed (`TFS`, < 10 FTE) — observed from 2021 onward. True zeros (no emergency-credentialed teachers) are preserved as 0.0 in 2018-2020, before GOSA introduced suppression for this report. Numerator of `emergency_fte_rate`. Sourced from bronze columns CATEGORY_FTE (2023-24), Emergency_FTE (2022), and the MIS-LABELED OUTOFFIELD_FTE (2018-21) — see the limitations note.
Full description
Teacher FTE holding an Emergency teaching credential in the entity (or poverty subgroup). NULL when suppressed (`TFS`, < 10 FTE) — observed from 2021 onward. True zeros (no emergency-credentialed teachers) are preserved as 0.0 in 2018-2020, before GOSA introduced suppression for this report. Numerator of `emergency_fte_rate`. Sourced from bronze columns CATEGORY_FTE (2023-24), Emergency_FTE (2022), and the MIS-LABELED OUTOFFIELD_FTE (2018-21) — see the limitations note.
emergency_fte_rateEmergency FTE RatenumberproportionyesShare of teacher FTE holding an emergency credential, on a 0-1 scale (emergency_fte / total_fte).
Full description
`emergency_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. Because GOSA rounds the percent to an integer computed from unrounded FTE values, the published rate can deviate from emergency_fte/total_fte by up to ~0.012 at small schools (worst observed: 0.0121 at a 1.9-FTE program in 2020); a quality check enforces reconciliation within 0.015. The rate is preserved from bronze even when `emergency_fte` is suppressed — e.g. a row can have emergency_fte=NULL with a non-NULL rate.

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
poverty_subgroupcategoricalhigh_povertylow_povertytotalmulti-value, enum-enforced
district_typedimension_attribute
7 allowed values
  • commission_charter
  • resa
  • standard
  • state_agency
  • state_charter
  • state_school
  • state_special
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_emergency_and_provisional_credentials"

schools data for 2024

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

Filtered to poverty_subgroup = high_poverty for 2024

curl "https://georgiacivicdata.org/api/v1/education/educator_qualifications_emergency_and_provisional_credentials?year=2024&poverty_subgroup=high_poverty"

One district (code 601), 2024

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

Download 2024 as CSV

curl "https://georgiacivicdata.org/api/v1/education/educator_qualifications_emergency_and_provisional_credentials?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

Source-lineage caveat: in the 2018-2021 bronze files (Era 3) the metric columns are NAMED `OUTOFFIELD_FTE` / `OUTOFFIELD_FTE_PCT`, but the VALUES they carry are Emergency-credential FTE counts, not out-of-field counts — a confirmed GOSA source mis-labeling (the 2021 state total here, 9,796.9, differs from the genuine out-of-field report's 6,281.9). The transform reads these as emergency_fte / emergency_fte_rate; do not re-interpret those years as out-of-field data. Despite the topic name, no 'Provisional' rows appear in the source — only Emergency is reported. Suppression is era-asymmetric: 2018-2020 publish a real `0` (true zero emergency-credentialed teachers), while 2021 onward suppress any value below 10 with `TFS` (treat NULL as 'count < 10' for 2021+ but as genuinely missing pre-2021); emergency_fte_rate may be non-null even when emergency_fte is suppressed. 2019 statewide FTE is ~37% above neighboring years (a broader teacher population GOSA reported that year), preserved faithfully per data-cleaning-standards §4b. The 2018 file mixes scopes ACROSS detail levels: school rows are on the broad teacher-population scope while district and state rows are on the narrow scope (statewide school-row total_fte sums to 157,557.3 vs the state row's 118,009.1, a 1.335x ratio; e.g. Gwinnett's district aggregate is 11,170.0 while its school rows sum to 22,190.6) — 2018 school rows do NOT sum to their district or state aggregates. 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 are dropped only under documented predicates — redundant 2023 truncated charter-container aggregates and cataloged source gaps — with per-year counts in the transform manifest. State rows have NULL district_code and school_code; district rows have NULL school_code.