The data dictionary
This page explains what the served fields mean, drawing on the files they came from. The definitions live in one versioned data file. Filed values are served as filed: these entries explain them and never replace them.
The response envelope
Every v2 response carries its honesty devices in band, so a body saved to disk still says what it covers and what it cannot claim.
| field | meaning |
|---|---|
| results | The rows, verbatim as filed unless a field's own definition states a derivation. Row order is the documented sort of the lane that served them. |
| count | How many rows this response carries. A page count, not a universe count; the coverage block states the universe. |
| pagination.after | Keyset cursor for the next page. Opaque; pass it back as the "after" parameter. Absent when the page is the last one. |
| coverage | What the lane's store actually holds: row counts, date spans, and per-source notes. Absence of data is stated here so it is never mistaken for absence of activity. |
| claim_boundaries | The legal and structural walls around what these rows can prove, resolved from the boundary registry by id. A response that touches a boundary serves its text in band. |
Measure rows
Every published figure that is not a verbatim filed value rides the measures registry: formula, version, numerator, denominator, and peer percentile travel with the number (hard rule 3, no naked numbers). The registry itself is served at /measures.
| field | meaning |
|---|---|
| measure | The registry key naming the formula that produced the value. |
| version | The formula's version. Changing a formula is a version bump; stored values pin the version that computed them. |
| value | The computed figure, in the measure's declared unit. Null is an attested refusal to compute, never a zero. |
| numerator | The formula's numerator, served so the arithmetic is checkable. |
| denominator | The formula's denominator, same purpose. |
| peer_group | The mechanical peer set the percentile ranks within, for example an FEC committee type or a chamber. |
| percentile | Standing within the peer group, 0 to 1. Null means the entity fell below the measure's stated ranking floor. |
| cycle | The two-year FEC election cycle the value was computed over. |
FEC transaction type codes
The transaction_tp column on itemized FEC rows is the FEC's own transaction type code, served verbatim. These are the codes the served lanes key on, with the FEC's meanings; the full code list is the FEC's transaction type documentation. An unlisted code on a row is still the filed truth of that row.
| field | meaning |
|---|---|
| 15 | Contribution from an individual, partnership, or LLC. |
| 15C | Contribution from a candidate. |
| 15E | Earmarked contribution passed through a conduit; the conduit also reports it, so summing across both rows double counts. |
| 22Y | Contribution refund to an individual, partnership, or LLC. |
| 24A | Independent expenditure opposing the named candidate. Spending about a candidate, never a gift to one. |
| 24C | Coordinated party expenditure. |
| 24E | Independent expenditure advocating election of the named candidate. Spending about a candidate, never a gift to one. |
| 24K | Contribution made to a nonaffiliated committee. |
| 18G | Transfer in from an affiliated committee. The trail reads it as money from that committee (funded_rules.yaml transfer_codes). |
| 18K | Contribution received from a registered filer; the trail follows it. |
| 15Z | In-kind contribution received from a registered filer; the trail follows it. |
| 19 | Electioneering communication donation received; the trail follows it. |
| 18U | Contribution received from an unregistered committee: no id to follow, so the trail carries it as unknown. |
| 18J | Memo: the filer's share of a contribution to a joint fundraising committee, reported again by that committee. Never summed. |
| 15J | Memo: the same joint fundraising share seen from the other side. Never summed. |
| 22Z | Refund of a contribution to a candidate or committee; money going back, not arriving. |
| 24N | Communication cost against the named candidate. |
| 24F | Communication cost for the named candidate. |
| memo_cd | The filed memo flag. X marks a memo row, typically a sub-itemization of a total reported on another row; lanes that sum exclude memo rows and say so in their formulas. |
Bracket values on sworn disclosures
STOCK Act transactions and annual financial disclosures report amounts in the filer's sworn bracket, not a number. PACrat serves the bracket string exactly as filed and never converts one to a number: a midpoint would invent precision the filing does not contain. That refusal is deliberate and permanent.
| field | meaning |
|---|---|
| amount_range | The sworn transaction bracket on a STOCK Act row, for example "$1,001 - $15,000", verbatim. |
| value_bracket | The sworn value bracket of a disclosed asset, verbatim. |
| income_bracket | The sworn income bracket a disclosed asset produced, verbatim. |
| date_implausible | A derived flag beside the as-filed date: true when the trade date postdates its own report's filing date or predates the STOCK Act. The filed date is never repaired; flagged rows demote in default sorts and stay served. |
Identifiers on FEC rows
The keys that join FEC tables, all assigned by the FEC and served verbatim.
| field | meaning |
|---|---|
| cand_id | FEC candidate id, stable across cycles. First letter is the office (H, S, P). |
| cmte_id | FEC committee id, stable across cycles and renames. |
| cycle | The two-year election cycle whose bulk file carried the row. Bulk files are rewritten to current registrations, so an older cycle's row can preserve a name or designation the current cycle's file no longer shows. |
| sub_id | FEC's unique row id within a bulk itemization file. |
| file_num | The e-filing number of the report a wire row came from. |
Ad targeting readings
One row per Google creative and per Snapchat ad in ad_targeting_readings (sql/270): the targeting the advertiser declared to the platform, stored verbatim, and its reading into the house's bands by the versioned registry ad_targeting.yaml (served at /v2/registries/ad_targeting). What the advertiser told the platform to aim at, never who saw the ad. Served on the race digital ads page, the committee page and /v2/ads/targeting.
| field | meaning |
|---|---|
| platform | google or snap, the library the ad came from. |
| ad_id | The platform's own ad id, verbatim. |
| version | The registry version that made the reading. A registry bump clears and rereads every row. |
| age_verbatim | The age targeting as the platform published it (Google age_targeting, Snap age_bracket). Null means the advertiser declared no age targeting, never that the ad was aimed at every age. |
| age_bands | The house's age bands the verbatim reads to. A Snap bracket reads to every band it overlaps by at least one year. |
| age_unread | The tokens of the verbatim the registry does not read, kept verbatim and counted as unread; never a guess. |
| gender_verbatim | The gender targeting as published (Google gender_targeting, Snap gender). Null means none was declared. |
| gender_bands | Women, men, or the platform's own unknown-gender bucket. |
| geo_verbatim | Google: geo_included as published. Snap: each filled geography column as "column: value", joined by " | ", the country column last. |
| geo_kinds | The kinds of place the declared geography names: the whole country, a state, a media market, a county, an electoral district, a city or smaller place, a zip code, or outside the country. |
| audience_groups | Snap only: the audience groups the advertiser declared in advanced_demographics (education, occupation, household income, parents, interests). |
| share | On a served band row: the measure ads_*_share, the ads whose declared targeting reads to the band over every ad the committee ran on the platform in the cycle window. |
| spend_share | On a served band row: the measure ads_*_spend_share. Google spend is the low end of each ad's published spend range, a floor; Snap spend is exact, in dollars. |
Ages and genders a roster lists
The congressional roster dataset (unitedstates/congress-legislators) lists a birthday and a gender for most members; the Open States dump lists a gender and a birth date for many state legislators. PACrat serves them as listed, names the source beside them, and infers nothing about anyone.
| field | meaning |
|---|---|
| gender | On congress_members: bio.gender exactly as the roster lists it (M or F). Empty when the roster lists none. On a state page: the Open States dump's value as filed, with its reading from data/openstates_gender_map.yaml (Male and M read male, Female and F read female, X stays X) beside it and the map's version. |
| birthday | On congress_members: bio.birthday as a date. A listed value that is not a whole date (a year alone) is left empty and counted on the members receipt as birthdays_unread. |
| age | Whole years from the listed birthday to the day the page or the response was made, which is stated beside it. Never stored. |
| age_band | On /v2/congress/composition: the ten-year band of that age ("40 to 49"), or "no birthday listed". |
| gender_listed | On /v2/congress/composition: the roster's gender value as listed, or "not listed". |
| members | On /v2/congress/composition: the sitting members (latest term ending on or after the day of the count) in one chamber, party, age band and listed gender cell. A count, never a share. |
Who lives here (Census ACS profiles)
The Census Bureau's American Community Survey 5-year tables as the Bureau files them (census_acs_cells, census_geos) and the profile figures read from them through data/acs_profile_map.yaml (census_profiles), served at /v2/geo/{kind}/{id}/profile.
| field | meaning |
|---|---|
| census_acs_cells.estimate | One cell of an ACS table exactly as the Bureau's summary file states it, including its annotation codes (a large negative number such as -666666666 means the estimate could not be computed). Never sum a code: the profile map says how each code reads. |
| census_acs_cells.moe | The cell's margin of error at the Bureau's 90 percent level, as filed. -555555555 means a controlled figure with no sampling error; the other codes mean the Bureau states no margin. |
| census_geos.name | The Bureau's NAME for the geography, verbatim. The derived keys beside it (state, county, zcta, cd, sld) are read from the names file's own columns. |
| census_profiles.value | A profile figure: a cell as filed (population, a median) or a share computed by the map's formula. NULL where the Bureau's figure could not be computed. |
| census_profiles.moe | The figure's margin of error: the cell's own, or a share's by the Census handbook formula the map declares. NULL where the Bureau states none. |
| census_profiles.reliable | Whether the figure passes the map's bar: coefficient of variation (margin / 1.645 / value) at or under 0.30. An unreliable figure still serves its numbers, with the note. |
| census_profiles.pct_rank | The figure's percentile among the reliable figures of the same measure for geographies of the same kind and vintage. NULL for an unreliable figure. |
| census_profiles.map_version | The version of data/acs_profile_map.yaml the figure was computed at. A version bump recomputes every figure. |
Where the money lives
The money-geography measures place each committee's itemized individual dollars, by the zip filed, on the Census ACS profile of the ZCTA with the same five digits, and weight the profile by the dollars. They describe the places the money came from, never the people who gave. Served at /v2/money/geography and on the candidate, committee and race pages; the formulas ride /v2/measures/registry.
| field | meaning |
|---|---|
| census_profiles | One row per (ACS vintage, survey, geography, profile measure): the Census estimate as the profile map computed it, its margin of error, the reliable flag (the map's declared bar), its rank among geographies of the same summary level, and the map version. geo_id is the Census GEO_ID verbatim; sumlevel 860 is a ZCTA and 500 a congressional district. |
| placed | Itemized dollars in a zip whose ZCTA has a reliable cell for the figure in question. A zip row with a net total at or below zero carries no weight. The measures' numerator for the three place figures. |
| itemized | The entity's itemized individual dollars from the state rollup (sched_a_agg), memo rows included; the denominator every share is taken over. |
| q1 to q5 | Shares of itemized dollars from places in each national fifth of ZCTAs by median household income, cut by count among reliable ZCTAs (fifth 1 the poorest). |
| _unplaced_zip | Itemized dollars in the zip rollup whose zip has no ZCTA or no reliable income cell: PO-box zips, filed junk, small places. |
| _outside_rollup | Itemized dollars the zip rollup does not carry for the entity: short or blank zips, memo rows, and zips where it was not one of the top ten recipients. Never dropped; served as its own share. |
| ratio | On the ladder, money_zip_income_vs_district: the dollar-weighted median income of the money's places over the district's own median household income. Above 1, richer places than the district; below 1, poorer. |
The donor base
Two per-committee rollups of the itemized individual rows, one row per committee per cycle per band or class, and the card and door that serve them (/v2/committees/{cmte_id}/donor-base). Every share is a measures-registry row; the filed amounts and occupations stay exactly as filed in the itemized table.
| field | meaning |
|---|---|
| band | The size band of one itemized row's filed amount (sched_a_agg_bands), never a giver's total: under_200_itemized, 200_499, 500_999, 1000_under_limit, at_limit (the cycle's per-election individual-to-candidate limit and above, from contribution_limits.yaml), or 1000_and_up_no_limit_on_file in a cycle with no limit on file. Negative rows are refund_or_negative and in no share. |
| lo / hi | The band's bounds as the row was read: lo inclusive, hi exclusive, empty for an open end. The limit a cycle's rows were read against is written here. |
| occ_class | A versioned reading of the filed occupation string (sched_a_agg_occ_class, occupation_classes.yaml): a SOC 2018 major group code such as 23-0000, one of the filed statuses RETIRED, HOMEMAKER, STUDENT, NOT EMPLOYED and SELF-EMPLOYED, or unmapped for a string the map does not read (a blank included). The filed strings that read into a class are served beside it. |
| map_version | The version of occupation_classes.yaml the class was read with. |
| unitemized | The donor_band_shares row for money the committee did not itemize: line 11(a)(ii) over lines 11(a)(i) and 11(a)(ii) of its own report covers for the cycle, one filing per coverage window. It is in no band. |
Dictionary v1, updated 2026-08-13. This list is partial: fields and codes not listed here are still served, and a value missing from this page is not invalid. Machine-readable: /v2/dictionary · the file itself, for diffing: raw · the mapping files behind each version number: /v2/registries.