Introduction
Introduction
Civoren models U.S. governance as one connected graph of regions, authorities, offices, contests, candidates, parties and results, with a citation behind every assertion. You reach it through whichever layer fits how you build.
- 51,821
- Candidacies
- 116,647
- Offices
- 64,072
- Mapped boundaries
- 51,371
- Authorities
- 18,237
- Contests
- 1,203,442
- Provenance rows
Measured from the production graph on 20 August 2026.
What makes this different
Most election data ships as a flat export of candidates and races, which leaves you reconstructing the relationships yourself. Civoren keeps those relationships intact, so a question that would be several uncertain joins elsewhere is a single traversal here.
- Depth where others stop. The graph reaches down to county, municipal, school district and judicial races, which are precisely the tiers competitors sample or skip entirely.
- Every fact is cited. Provenance rows point at source documents, each stored with a content hash and with the raw value the source gave us alongside the value we normalised it to. You can ask why the graph believes something and get a URL back.
- Confidence is a real field, not a footnote. Curated data, official feeds and machine research carry distinct scores on an envelope that every node and edge shares, so you set your own quality floor with a single filter rather than trusting ours.
- Geography is built in. One coordinate returns every jurisdiction that touches it, at any date in history, without a third-party district service in the path.
- Data straight from candidates. Bios, images, contact channels and stated positions come from the campaigns themselves rather than from scraped approximations, and the position text is searchable by meaning as well as by keyword.
Three stores, one source of truth
Postgres holds the graph and is the only store anything writes to. Two read models are rebuilt from it rather than edited directly, so a traversal, a spatial query and a semantic search are all views of the same committed state instead of three datasets quietly drifting apart.
| Store | Role | What it holds |
|---|---|---|
| Postgres and PostGIS | Source of truth | Nodes, typed edges, the full history envelope, every provenance row, and boundary geometry behind a spatial index |
| Neo4j | Derived, for traversal | A mirror with alias-aware full-text search, reconciled nightly and projected without personal data by construction |
| Qdrant | Derived, for meaning | Embeddings of candidate position text, with indexed metadata so a search can be narrowed before it runs |
Both read models rebuild fully from Postgres and reconcile on a schedule, each run producing a field-level change record for human audit.
What you can call today
The documentation ships ahead of the APIs it describes, and each page says plainly where it stands. Data maturity and endpoint maturity are rated separately because those answers currently differ: the graph holds a great deal that is not yet exposed over HTTP.
| Capability | Status |
|---|---|
| Geospatial | Data LiveAPI Planned |
| Cypher | Data LiveAPI Planned |
| Semantic search | Data BetaAPI Planned |
| GraphQL | Data LiveAPI Planned |
| REST | Data LiveAPI Planned |
| Agents and MCP | Data LiveAPI Planned |
| Webhooks | Data PlannedAPI Planned |
| Bulk export | Data LiveAPI Planned |
An endpoint is only marked live when a customer holding a key can call it. It never turns green because a capability works internally. If you are evaluating Civoren now, the honest summary is that the data is real and the gateway is being built, and we would rather you read that here than discover it after signing.