Off the wire

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.

fieldmeaning
resultsThe 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.
countHow many rows this response carries. A page count, not a universe count; the coverage block states the universe.
pagination.afterKeyset cursor for the next page. Opaque; pass it back as the "after" parameter. Absent when the page is the last one.
coverageWhat 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_boundariesThe 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.

fieldmeaning
measureThe registry key naming the formula that produced the value.
versionThe formula's version. Changing a formula is a version bump; stored values pin the version that computed them.
valueThe computed figure, in the measure's declared unit. Null is an attested refusal to compute, never a zero.
numeratorThe formula's numerator, served so the arithmetic is checkable.
denominatorThe formula's denominator, same purpose.
peer_groupThe mechanical peer set the percentile ranks within, for example an FEC committee type or a chamber.
percentileStanding within the peer group, 0 to 1. Null means the entity fell below the measure's stated ranking floor.
cycleThe 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.

fieldmeaning
15Contribution from an individual, partnership, or LLC.
15CContribution from a candidate.
15EEarmarked contribution passed through a conduit; the conduit also reports it, so summing across both rows double counts.
22YContribution refund to an individual, partnership, or LLC.
24AIndependent expenditure opposing the named candidate. Spending about a candidate, never a gift to one.
24CCoordinated party expenditure.
24EIndependent expenditure advocating election of the named candidate. Spending about a candidate, never a gift to one.
24KContribution made to a nonaffiliated committee.
18GTransfer in from an affiliated committee. The trail reads it as money from that committee (funded_rules.yaml transfer_codes).
18KContribution received from a registered filer; the trail follows it.
15ZIn-kind contribution received from a registered filer; the trail follows it.
19Electioneering communication donation received; the trail follows it.
18UContribution received from an unregistered committee: no id to follow, so the trail carries it as unknown.
18JMemo: the filer's share of a contribution to a joint fundraising committee, reported again by that committee. Never summed.
15JMemo: the same joint fundraising share seen from the other side. Never summed.
22ZRefund of a contribution to a candidate or committee; money going back, not arriving.
24NCommunication cost against the named candidate.
24FCommunication cost for the named candidate.
memo_cdThe 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.

fieldmeaning
amount_rangeThe sworn transaction bracket on a STOCK Act row, for example "$1,001 - $15,000", verbatim.
value_bracketThe sworn value bracket of a disclosed asset, verbatim.
income_bracketThe sworn income bracket a disclosed asset produced, verbatim.
date_implausibleA 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.

fieldmeaning
cand_idFEC candidate id, stable across cycles. First letter is the office (H, S, P).
cmte_idFEC committee id, stable across cycles and renames.
cycleThe 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_idFEC's unique row id within a bulk itemization file.
file_numThe 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.

fieldmeaning
platformgoogle or snap, the library the ad came from.
ad_idThe platform's own ad id, verbatim.
versionThe registry version that made the reading. A registry bump clears and rereads every row.
age_verbatimThe 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_bandsThe house's age bands the verbatim reads to. A Snap bracket reads to every band it overlaps by at least one year.
age_unreadThe tokens of the verbatim the registry does not read, kept verbatim and counted as unread; never a guess.
gender_verbatimThe gender targeting as published (Google gender_targeting, Snap gender). Null means none was declared.
gender_bandsWomen, men, or the platform's own unknown-gender bucket.
geo_verbatimGoogle: geo_included as published. Snap: each filled geography column as "column: value", joined by " | ", the country column last.
geo_kindsThe 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_groupsSnap only: the audience groups the advertiser declared in advanced_demographics (education, occupation, household income, parents, interests).
shareOn 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_shareOn 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.

fieldmeaning
genderOn 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.
birthdayOn 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.
ageWhole years from the listed birthday to the day the page or the response was made, which is stated beside it. Never stored.
age_bandOn /v2/congress/composition: the ten-year band of that age ("40 to 49"), or "no birthday listed".
gender_listedOn /v2/congress/composition: the roster's gender value as listed, or "not listed".
membersOn /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.

fieldmeaning
census_acs_cells.estimateOne 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.moeThe 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.nameThe 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.valueA 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.moeThe 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.reliableWhether 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_rankThe 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_versionThe 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.

fieldmeaning
census_profilesOne 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.
placedItemized 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.
itemizedThe entity's itemized individual dollars from the state rollup (sched_a_agg), memo rows included; the denominator every share is taken over.
q1 to q5Shares 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_zipItemized dollars in the zip rollup whose zip has no ZCTA or no reliable income cell: PO-box zips, filed junk, small places.
_outside_rollupItemized 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.
ratioOn 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.

fieldmeaning
bandThe 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 / hiThe 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_classA 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_versionThe version of occupation_classes.yaml the class was read with.
unitemizedThe 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.