Emergency-Credentialed Teachers
Share of Georgia teachers holding an emergency credential by school, district, and school-poverty stratum, 2018-2024.
- 2018–2024
- annual
- 1.0.0
- 2c38701537a7
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.
emergency_fte_rate — Emergency 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 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. |
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). |
poverty_subgroup | string | — | — | no | School-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▾
|
total_fte | number | — | yes | 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).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_fte | number | — | yes | 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.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_rate | number | — | yes | Share 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.
| 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 |
poverty_subgroup | categorical | high_povertylow_povertytotal | 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_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.