Canonical political data

Political data that
stops breaking.

One canonical record for every U.S. race, candidate, and ballot measure. Politify reconciles federal filings, state filings, and every major reference graph — so your team skips the data cleanup and ships the product.

50
States + DC
1,000+
Cities with municipal data
27
States with ballot measures
180K+
Name aliases preserved
Live races tracked
TX U.S. Senate52 candidates
FL Governor52 candidates
TN State Senate SD-52 candidates
NC Supreme Court Seat 16 candidates
CA Governor41 candidates
SC U.S. House CD-122 candidates
FL State House HD-473 candidates
IL U.S. Senate34 candidates
TN Governor21 candidates
CA State Senate SD-403 candidates
GA U.S. Senate22 candidates
MD House of Delegates 2711 candidates
MI U.S. Senate32 candidates
CA Lt. Governor4 candidates
TN State House HD-433 candidates
MT U.S. Senate14 candidates
FL U.S. House CD-2110 candidates
FL State House HD-825 candidates
NC U.S. Senate28 candidates
IN State Rep HD-882 candidates
NH U.S. Senate13 candidates
MD State Senator SD-393 candidates
WA U.S. House CD-68 candidates
LA U.S. Senate21 candidates
Under the hood

Six sources in.
One record out.

FEC, 50 state SOS feeds, city clerk filings, AP, DDHQ, and MEDSL get reconciled into a single canonical graph — with every name variant, every source ID, and every stage of every race preserved underneath. You query one API. The normalization stays out of your way.

FECFederal filingsState SOS50-state filingsAPElections APIDDHQDecision DeskBallotpediaReference graphMEDSLMIT Election LabPolitifyCanonical recordp1:washington:george:va:…
Ingest

Raw filings, preserved verbatim.

Every form from every source is stored exactly as it arrived. Ingestion is append-only — nothing is ever silently edited or deleted.

Resolve

Deterministic canonical IDs.

Race and person identifiers rebuild the same row across cycles, stages, and sources. Nickname and alias normalization happens at ingest time.

Surface

One query, every variant kept.

Canonical answers on top, every source-of-truth ID and name alias one join away. The evidence never disappears.

Try it now

Type anything.
Get the canonical match.

A candidate name, a race description, a state + office — Politify resolves it to the canonical record with a confidence score. This is the live API. No mocks, no canned data.

Type any race, candidate, or ballot measure to see it resolve live.
Coverage

Every state.
Every level.

From U.S. Senate down to city council — Politify normalizes contests at federal, state, and local levels across 1,000+ cities in all 50 states and 27 states with ballot measure coverage. All from primary sources, not aggregators.

50
States + DC
1,000+
Cities tracked
FederalStatewideState legislatureMunicipalBallot measures
What it powers

Ship product instead of
cleaning spreadsheets.

Politify is the data layer underneath the workflows political teams already run — identity, enrichment, media, and reporting — with the cleanup step removed.

01
Identity

Build stable identity into your product.

Map any candidate or race record to a canonical ID that survives the next cycle. Your crosswalks stop breaking. Your ops team stops rebuilding joins.

02
Media intel

Tie ad spend to the contest underneath.

Connect media planning, creative tracking, and ad-library scraping to the actual race and candidate — across Meta, Google, and broadcast data.

03
Enrichment

Fuzzy-match messy inputs with confidence.

Paste a candidate name, a partial district, a date range — get a scored canonical match back with full provenance. No manual reconciliation step.

04
Analysis

Join across cycles without the cleanup.

Compare 2024 to 2026 to 2028 without rewriting match logic every time a new filing source lands in your stack.

The API

One call.
The whole roster.

Pass a race ID. Get back every canonical candidate across every stage, with party affiliation, incumbency, and the full alias graph for downstream fuzzy matching.

  • Partner-scoped API keys with audit logging
  • Versioned /v1/ surface with backward-compat promises
  • Freshness signal per race for stale-detection cron jobs
Get an API key
GET · /v1/races/{id}/candidates
curl https://api.politify.ai/v1/races/g1~US~USPRES~us~1789/candidates \
  -H "X-Politify-Api-Key: pk_live_..."
{
  "contest_group_id": "g1~US~USPRES~us~1789",
  "race_name": "U.S. Presidential Election",
  "candidate_count": 3,
  "candidates": [
    {
      "person_id": "p1:washington:george:va:a1b2c3",
      "full_name": "George Washington",
      "party_code": "IND",
      "is_incumbent": false,
      "aliases": [
        "George Washington",
        "Gen. Washington",
        "G. Washington"
      ],
      "stage_participation": [
        { "stage": "GENERAL", "election_date": "1789-01-07" }
      ]
    }
  ]
}
The primitives

Six types. One graph.

Everything a product team needs to build on political data — race identity, candidate identity, name variants, external ID bridges, stage timelines, freshness — behind one versioned API.

Canonical race IDs

Deterministic identifiers that survive across primaries, runoffs, and generals. Join once, stay joined.

g1~US~USSEN~ga~2026

Canonical person IDs

One record per human, nickname-aware. Abe, Abraham, and A. Lincoln all resolve to the same ID.

p1:lincoln:abraham:il:b4e7

Name alias graph

Every variant of every candidate's name, with full source attribution — drives fuzzy matching everywhere downstream.

"Teddy Roosevelt" ⇄ "Theodore Roosevelt"

Cross-source bridges

Look up any person by FEC, AP, DDHQ, Ballotpedia, or state SOS ID and get the same canonical row back.

FEC S8GA00180 → p1:…

Stage participation

Who appeared on which stage — primary, runoff, general, special — with election dates and ballot order preserved.

3 stages · 2 candidates merged

Freshness signals

Every race exposes a last-updated timestamp. Pull nightly to detect new filings, withdrawals, or roster changes.

GET /v1/races/{id}/updated-at
Promises

Built to be trusted.

Never miss a variant.

Every name, every alias, every source ID is preserved with full provenance. The canonical answer sits on top — the evidence is always one join away.

Stable across cycles.

Deterministic race and person IDs survive cycle rollovers. Crosswalks you build in 2024 still resolve in 2026 without manual fixups.

Every source addressable.

Raw filings are append-only — nothing is ever silently edited or deleted. You always have a path back to the originating record.

Stop cleaning political data.

Request access and plug your product into a canonical source of truth. Invite-only for the current cycle — tell us what you’re building and we’ll reply within 48 hours.