Skip to content
← All datasets

Certified Personnel Composition (Staff Characteristics)

Staff headcounts by certificate level, certification status, gender, employment status, and race/ethnicity for Georgia schools and districts, 2011-2024.

Year coverage
20112024
Updated
annual
Version
1.0.0
Schema hash
67f87ed56ccd

Detail levels available

StateDistrictSchool · default

Overview

Georgia certified-personnel staff composition, from the Governor's Office of Student Achievement (GOSA) Certified Personnel report (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 staff headcounts along five mutually exclusive staff-attribute axes — certificate level (Bachelor's through Doctoral, plus Other), certification status (Professional / Provisional), gender, employment status (Full/Part-time), and race/ethnicity — for each of three employee groups (Administrators, PK-12 Teachers, Support Personnel), school years 2010-11 through 2023-24. This topic covers WHO the staff are; its sibling topics from the same GOSA source cover how experienced they are (`certified_personnel_experience`: years-of-experience band headcounts and the mean) and their positions and pay (`certified_personnel_compensation`: FTE position counts and average salary/contract days).

Row grain: One row per year, district_code, school_code, employee_type, staff_attribute_category, staff_attribute.

Key metric

num_staffNumber Staff (count)

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 CodestringyesGOSA 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`).

Joins districts; adds its label columns.

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

Joins schools; adds its label columns.

employee_typeEmployee TypestringnoWhich staff group the headcount covers: administrators, PK-12 teachers, or support personnel.
Full description
Employee group this headcount covers. Snake_case recode of bronze EMPLOYEE_TYPE: `administrators`, `pk_12_teachers`, `support_personnel`.
3 allowed values
  • administrators
  • pk_12_teachers
  • support_personnel
staff_attribute_categoryStaff Attribute CategorystringnoWhich staff-attribute axis the row slices by: certificate level, certification status, gender, employment status, or race/ethnicity.
Full description
The staff-attribute axis this row belongs to. Each of the five axes partitions the SAME certified-personnel population a different way, so rows from different axes must never be summed together. Renamed from the confusing bronze DATA_CATEGORY family names: bronze `Certified Personnel` -> `certification_status`, bronze `Personnel` -> `employment_status`; the other three are direct snake_case recodes. The axis is functionally determined by `staff_attribute` (17 valid pairs, enforced by a quality check).
5 allowed values
  • certificate_level
  • certification_status
  • employment_status
  • gender
  • race_ethnicity
staff_attributeStaff AttributestringnoThe specific attribute value within the chosen axis (e.g. 5_yr_masters, professional, female, full_time, black).
Full description
Specific attribute value within the axis. Snake_case recode of bronze DATA_SUB_CATEGORY — e.g. `5_yr_masters` (axis `certificate_level`), `professional` (axis `certification_status`), `full_time` (axis `employment_status`). `other` is the fifth CERTIFICATE LEVEL bucket (bronze `Other *`; the asterisk flags a source footnote), not a race value. Gender and race values reuse the canonical demographic vocabulary but describe STAFF — there is no `demographic` column and no join to the demographics dimension. `asian_pacific_islander` is the bronze staff-race label `Asian`: the source publishes only 6 race buckets with no separate Pacific Islander label in any year, and state-level race-bucket sums equal the gender-bucket sums (same population, residuals under 0.04% in both directions) — the pre-1997 OMB combined Asian + Pacific Islander bucket per data-cleaning-standards §5b. Certification status caveat: two source-defect windows on this axis are masked to NULL (see num_staff) — the whole axis in 2017 and the provisional bucket in 2020.
17 allowed values
  • 4_yr_bachelors
  • 5_yr_masters
  • 6_yr_specialists
  • 7_yr_doctoral
  • asian_pacific_islander
  • black
  • female
  • full_time
  • hispanic
  • male
  • multiracial
  • native_american
  • other
  • part_time
  • professional
  • provisional
  • white
num_staffNumber StaffintegercountyesWhole-person headcount of staff in the employee group with the given attribute value.
Full description
Whole-person headcount of certified personnel in the employee group carrying the row's staff-attribute value. All 17 labels are verified-integral counts; the source has no suppression (zeros are real). Each staff_attribute_category axis partitions the same population, so only sum num_staff across rows WITHIN one axis (one staff_attribute_category value) — never across axes. Do not sum school rows to rebuild district or state headcounts (staff serving multiple schools are counted once per school assignment but deduplicated at higher levels). Two known source-defect windows on the certification_status axis are masked to NULL per §4b (the certification-axis staff sums otherwise match the gender-axis sums within ~0.3% — the internal test both windows fail): the ENTIRE axis in the 2016-17 file (captured ~3% of staff at every level, e.g. state professional PK-12 teachers 2,689 vs ~110,000 in adjacent years) and the provisional bucket in the 2019-20 file (state teachers 900 vs 4,745/4,716 neighbors; 102 of 214 districts at zero; professional passes the axis-sum test and is served). The bad values are recorded in the transform manifest and remain in bronze; they are not served.

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
employee_typecategoricaladministratorspk_12_teacherssupport_personnelmulti-value, enum-enforced, pick one
staff_attribute_categorycategoricalcertificate_levelcertification_statusemployment_statusgenderrace_ethnicitymulti-value, enum-enforced, pick one
staff_attributecategorical
17 allowed values
  • 4_yr_bachelors
  • 5_yr_masters
  • 6_yr_specialists
  • 7_yr_doctoral
  • asian_pacific_islander
  • black
  • female
  • full_time
  • hispanic
  • male
  • multiracial
  • native_american
  • other
  • part_time
  • professional
  • provisional
  • white
multi-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/certified_personnel_composition"

schools data for 2024

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

Filtered to employee_type = administrators for 2024

curl "https://georgiacivicdata.org/api/v1/education/certified_personnel_composition?year=2024&employee_type=administrators"

One district (code 644), 2024

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

Download 2024 as CSV

curl "https://georgiacivicdata.org/api/v1/education/certified_personnel_composition?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); zero counts are published as real `0` values. num_staff is NULL only on the two masked source-defect windows described below. The five staff_attribute_category axes each partition the SAME certified-personnel population a different way — sum num_staff only across rows within a single axis, never across axes (the total would multiply-count every person). staff_attribute_category is functionally determined by staff_attribute (17 valid pairs). Gender and race/ethnicity values reuse the canonical demographic vocabulary but describe STAFF, not the student demographic axis — there is no `demographic` column and these rows do not join the demographics dimension. The race_ethnicity axis uses the pre-1997 OMB combined `asian_pacific_islander` bucket (no separate Pacific Islander label exists in the source). Two known source-defect windows on the certification_status axis are MASKED to NULL rather than served (§4b known-source-defect rule; both fail the internal certification-vs-gender axis-sum test that every other year passes within ~0.3%): the entire axis in the 2016-17 file (captured ~3% of staff at every level) and the provisional bucket in the 2019-20 file (~19% of adjacent years; 102 of 214 districts at zero; professional passes the test and is served). The published defect values remain in bronze and in the transform manifest's mask ledger. School rows must not be summed to rebuild district or state headcounts: staff serving multiple schools are counted once per school assignment but deduplicated at higher levels, so a district count can even be smaller than a single school's count (observed only in employment_status/part_time; 1,811 cells). State rows have NULL district_code and school_code; district rows have NULL school_code. Experience and compensation/salary measures from the same GOSA source live in the sibling topics `certified_personnel_experience` and `certified_personnel_compensation`.