← POLIAPI/MOCKUPS/CSV · PARQUET · JSONL
api · mockup
// CSV · Parquet · JSONL

For researchers,
not for round-trips.

Academics, journalists, and campaign analysts don't want a paginated REST crawl — they want a Parquet file. Daily per-state snapshots, columnar formats, DuckDB-ready.

// formats

Pick by tool, not by preference.

CSV
Per-jurisdiction snapshots, one file per object type.
~12 MB / state
tooling
Excel, Sheets, R, Stata
Parquet
Columnar, compressed, schema-typed.
~3 MB / state
tooling
DuckDB, Pandas, Spark, BigQuery
JSONL
Newline-delimited JSON, stream-friendly.
~18 MB / state
tooling
ELT pipelines, S3, jq
// manifest

One file per object type, per state, per day.

Stable S3 paths. Signed URLs for paid tiers; public mirror for free academic tier.

s3://poliapi-exports/2026-02-14/manifest.json
{
  "snapshot_at": "2026-02-14T06:00:00Z",
  "states": {
    "AZ": {
      "candidates":   "s3://poliapi-exports/2026-02-14/az/candidates.parquet",
      "measures":     "s3://poliapi-exports/2026-02-14/az/measures.parquet",
      "officeholders":"s3://poliapi-exports/2026-02-14/az/officeholders.parquet",
      "finance":      "s3://poliapi-exports/2026-02-14/az/finance.parquet",
      "elections":    "s3://poliapi-exports/2026-02-14/az/elections.parquet",
      "districts":    "s3://poliapi-exports/2026-02-14/az/districts.geojson.zst"
    },
    "NC": { ... }
  }
}
// query, no api key

DuckDB straight against the snapshot.

duckdb
-- top 10 best-funded municipal candidates in arizona, 2026 cycle
SELECT c.name, c.office, f.total_raised
FROM 's3://poliapi-exports/2026-02-14/az/candidates.parquet' c
JOIN 's3://poliapi-exports/2026-02-14/az/finance.parquet' f
  USING (candidate_id)
WHERE c.cycle = '2026' AND c.office_level = 'municipal'
ORDER BY f.total_raised DESC
LIMIT 10;