Certified Personnel Compensation (Salaries and Positions)
Average salaries, contract days, and FTE position counts for Georgia school staff by school, district, and state, 2011-2024.
- 2011–2024
- annual
- 1.0.0
- e00ffea94b1d
Overview
Georgia Office of Student Achievement (GOSA) certified-personnel compensation dataset, compiled from local school systems' Certified/Classified Personnel Information (CPI) submissions. For every Georgia public school, school district, and the state as a whole, publishes four position measures per employee group (Administrators, PK-12 Teachers, Support Personnel): the full-time-equivalent (FTE) count of certified positions and the average annual salary, average daily salary, and average contract days of those positions. Coverage runs from the 2010-11 school year through 2023-24. This is one of three topics split from the retired certified_personnel dataset, all reading the same GOSA source: staff headcounts by certificate level, certification status, gender, employment status, and race/ethnicity live in certified_personnel_composition, and years-of-experience band headcounts live in certified_personnel_experience.
Row grain: One row per year, district_code, school_code, employee_type.
avg_annual_salary — Average Annual Salary (currency)
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 | GOSA district code (FK to the education districts dimension): 3-digit zero-padded for standard districts, 7-digit for state/commission charter schools (present from 2012 onward). NULL for state-level aggregate rows (the bronze sentinel `ALL`).Full description▾GOSA district code (FK to the education districts dimension): 3-digit zero-padded for standard districts, 7-digit for state/commission charter schools (present from 2012 onward). NULL for state-level aggregate rows (the bronze sentinel `ALL`). |
school_code | string | — | — | yes | 4-digit zero-padded GOSA school code (FK to the education schools dimension, composite key with district_code). NULL for district-level and state-level aggregate rows (the bronze sentinel `ALL`).Full description▾4-digit zero-padded GOSA school code (FK to the education schools dimension, composite key with district_code). NULL for district-level and state-level aggregate rows (the bronze sentinel `ALL`). |
employee_type | string | — | — | no | Which staff group the row covers: administrators, PK-12 teachers, or support personnel.Full description▾Certified employee group this row's position and compensation figures cover. Snake_case recode of bronze EMPLOYEE_TYPE: `administrators`, `pk_12_teachers`, `support_personnel`. 3 allowed values▾
|
fte_positions | number | — | no | Full-time-equivalent count of certified positions in this staff group — fractional because part-time positions count as fractions.Full description▾Full-time-equivalent (FTE) count of certified positions for this employee group (bronze Positions/Number). An FTE-style count, so legitimately fractional — part-time positions contribute fractions of a position. This is the N behind the three salary/contract-day averages (their denominator). Do not sum school rows to rebuild district or state totals — use the published aggregate rows. | |
avg_annual_salary | number | — | no | Average annual salary (US dollars) of this staff group's certified positions.Full description▾Average annual salary in US dollars across this entity's certified positions in the employee group (bronze Positions/Average Annual Salary). An entity-level mean: never sum across entities, and a state average is not the sum (or mean) of district averages. Reconciles with avg_daily_salary x avg_contract_days to within $5 (enforced by a quality check). A value of 0.0 is a real published figure, occurring at small cells where an entity reports positions without salary data (observed max: 250,831.94). | |
avg_daily_salary | number | — | no | Average daily salary (US dollars) of this staff group's certified positions.Full description▾Average daily salary in US dollars across this entity's certified positions in the employee group (bronze Positions/Average Daily Salary). An entity-level mean: never sum across entities. Multiplied by avg_contract_days it reproduces avg_annual_salary to within $5 (observed max: 2,764.56). | |
avg_contract_days | number | — | — | no | Average number of contract days per year for this staff group's certified positions.Full description▾Average number of contract days per year across this entity's certified positions in the employee group (bronze Positions/Average Contract Days). An entity-level mean: never sum across entities. Declares no `unit` (days are neither a rescaled percentage nor a currency); the [0, 366] range is enforced by an authored quality check instead (observed bronze range: [30, 260]). |
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 |
employee_type | categorical | administratorspk_12_teacherssupport_personnel | multi-value, enum-enforced, pick one |
district_type | dimension_attribute | 7 allowed values▾
| multi-value, enum-enforced |
school_level | dimension_attribute | elementarymiddlehighk12other | multi-value, enum-enforced |
locale | dimension_attribute | citysuburbtownrural | 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/certified_personnel_compensation"schools data for 2024
curl "https://georgiacivicdata.org/api/v1/education/certified_personnel_compensation?year=2024"Filtered to employee_type = administrators for 2024
curl "https://georgiacivicdata.org/api/v1/education/certified_personnel_compensation?year=2024&employee_type=administrators"One district (code 644), 2024
curl "https://georgiacivicdata.org/api/v1/education/certified_personnel_compensation?district_code=644&year=2024&detail=districts"Download 2024 as CSV
curl "https://georgiacivicdata.org/api/v1/education/certified_personnel_compensation?year=2024&format=csv"Notes & limitations
NULL handling
- Zero is a real, reported value.
Limitations
This source has no suppression markers in any year (2010-11 through 2023-24): every value is published, zeros are real, and all four metric columns are non-null on every row. avg_annual_salary, avg_daily_salary, and avg_contract_days are entity-level means — never sum them across entities, and a state average is not the sum (or mean) of district averages; use the published district/state rows for aggregate analysis. avg_annual_salary can be a real 0.0 at small cells where an entity reports positions without salary data. fte_positions is an FTE-style fractional position count (part-time positions count as fractions), and it is the N behind the three averages; do not sum school rows to rebuild district or state position totals. State rows have NULL district_code and school_code; district rows have NULL school_code.