chartgrade
← Library·Positioning·Ch. 15

Political & policy event data — the legal sources

Polymarket, FRED, Capitol Trades, ACLED, GDELT. Trump on Iran without scraping.

18 min read3,633 words63 sections

05 — Political & Policy Event Data Sources

Purpose: A practical reference for a retail systematic trader (NL-based) who wants to monitor what politicians are saying and doing, and turn that into machine-readable signal that anticipates moves in FX, commodities, equities, and gold. All sources are free or have a free tier, legal, and API-accessible (or RSS at minimum). No scraping required.

Companion to: 03-event-driven-fx.md (which markets move on which events) and 04-positioning-and-flows.md (what positioning to read into the move).

Last updated: May 2026.


1. Politicians' Stock Trades (STOCK Act Disclosures)

The 2012 STOCK Act requires every member of Congress to disclose any transaction over $1,000 (their own or spouse's) within 45 days of the trade. Filings are public on efdsearch.senate.gov and disclosures-clerk.house.gov but the raw filings are awful PDFs — every useful tool below is a parser on top.

Capitol Trades — capitoltrades.com

  • The most polished UI. Owned by 2iQ Research.
  • No public REST API — the site has client-side JSON endpoints that change without notice. Avoid scraping; the legal grey area is workable but the bigger risk is silent schema breaks.
  • Best used for research and back-checking, not pipeline ingestion.

House Stock Watcher / Senate Stock Watcher — housestockwatcher.com, senatestockwatcher.com

  • Maintained by Timothy Carambat (solo dev, since 2020).
  • House Stock Watcher S3 bucket has been returning 403 since early 2026. Treat House data from this source as stale; migrate to FMP, Finnhub, or Lambda Finance.
  • Senate Stock Watcher still operational; data on GitHub: https://github.com/timothycarambat/senate-stock-watcher-data — full JSON dump of every disclosure since March 2020. Updates daily.
  • Free, no key, no rate limit (it's just a GitHub repo).

Quiver Quantitative — quiverquant.com

  • Free tier on the website only — visualizations of Pelosi, Tuberville, et al.
  • API is paid: Hobbyist $30/mo (Tier 1), Trader $75/mo (Tier 1+2), Commercial custom.
  • Python client: pip install quiverquant.
  • Best signal-to-cost for a retail trader who wants automated alerts.

Finnhub & Financial Modeling Prep (FMP)

  • Finnhub — free key, congressional trading endpoint is in the basic tier. https://finnhub.io/docs/api/congressional-trading.
  • FMP — Senate Trading and House Trading endpoints in the Starter tier (~$15/mo).
  • Both cover dual-chamber, JSON, real-time after disclosure.

Investable products — NANC and KRUZ

  • NANC (Unusual Whales Subversive Democratic Trading ETF) — tracks Democrat trades. Top holdings: NVDA, MSFT, AMZN. ~$214M AUM, +8.2% trailing year through Mar 2025.
  • KRUZ (Subversive Republican Trading ETF) — Republican trades. Top holdings: oil majors (Shell, COP, CVX). ~$54M AUM, +5.6% trailing year.
  • Holdings rebalance ~weekly off the 45-day-lagged disclosure stream. You can replicate at home for free from the disclosure data — the ETF charges 75 bps for the convenience.

The academic edge

  • Karadas (2019) — "Did Politicians Use Non-Public Macroeconomic Information in Their Stock Trades?" — finds powerful Senate committee members earned short-term abnormal returns 2004–2010 (pre-STOCK Act). https://www.econstor.eu/bitstream/10419/239672/1/1763179915.pdf
  • Karadas et al. (2019) and Belmont et al. (2020) both find the abnormal returns largely disappear post-STOCK Act.
  • Practical takeaway: don't expect to alpha-mine Senator returns directly. The interesting signal is what their disclosure tells you about emerging policy themes (semiconductor concentration, defense buys ahead of a CR vote, etc.).

Python snippet — pull Senator disclosures from the open repo

import requests, pandas as pd

URL = ("https://raw.githubusercontent.com/jeremiak/"
       "senator-filings/main/data/all_transactions.csv")
# Or use Carambat's all_transactions.json:
JSON_URL = ("https://senatestockwatcher.com/api/v2/transactions/all")

df = pd.read_json(JSON_URL)
recent = df[df["transaction_date"] > "2026-04-01"]
print(recent.groupby("ticker")["amount"].sum().sort_values().tail(20))

2. Prediction Markets — Real Money on Political/Policy Events

This is the single highest-signal category for a political-event trader. When Polymarket prices "US strikes Iran by Q3" at 38%, that is real capital with a real settlement, not a poll.

Polymarket — polymarket.com

  • Crypto-collateralised (USDC on Polygon). By far the deepest liquidity on geopolitical contracts: Iran strike timelines, Fed cut probabilities, election outcomes, sovereign default odds.
  • Three APIs, all free, no key for reads:
    • Gamma APIhttps://gamma-api.polymarket.com — markets, events, search. ~60 req/min unauthenticated.
    • Data APIhttps://data-api.polymarket.com — positions, trades, holders, leaderboards.
    • CLOB APIhttps://clob.polymarket.com — orderbook, midpoints, price history; trading requires keypair.
  • Docs: https://docs.polymarket.com.
  • NL legal note: residents of the Netherlands can trade Polymarket via crypto wallet (Polymarket itself geoblocks US retail, not EU). Stay within standard Dutch tax treatment of crypto holdings.

Kalshi — kalshi.com

  • CFTC-regulated US prediction exchange. Fiat USD, no crypto.
  • API free for verified users. Base: https://api.kalshi.com/trade-api/v2. WebSocket + FIX 4.4 also available.
  • Rate limit: 10 req/sec on most endpoints. Currently 0% fees.
  • Strong on Fed funds rate decisions, CPI prints, recession calls, and election micro-contracts.
  • Docs: https://docs.kalshi.com/welcome.
  • NL access: Kalshi requires US KYC. Not directly accessible to NL residents — read-only data is still public.

PredictIt — predictit.org

  • US political prediction market, academic exemption from the CFTC, capped at $850/contract.
  • Free read-only JSON: https://www.predictit.org/api/marketdata/all/. No key.
  • Liquidity has thinned post-2024 but the API is still up and useful for sentiment cross-checks.

Manifold Markets — manifold.markets

  • Play money, but with thousands of users and surprisingly tight markets on niche policy questions.
  • Free public API at https://docs.manifold.markets/api, no key for reads, 500 req/min with key.
  • Use as a breadth-of-opinion check, not for tradeable signal.

Python snippet — fetch live odds on Trump Iran contracts

import requests

# Polymarket Gamma — search for Iran-related markets
r = requests.get(
    "https://gamma-api.polymarket.com/markets",
    params={"q": "Iran", "active": "true", "closed": "false", "limit": 50},
    timeout=10,
)
for m in r.json():
    last = m.get("outcomePrices", ["", ""])[0]
    print(f"{m['question'][:80]:80}  YES={last}  vol=${m.get('volume24hr', 0):,.0f}")

3. Government Data Feeds (Free Official Sources)

This is where you get the ground truth that the prediction markets are pricing against.

FRED — research.stlouisfed.org/fred

  • 844,000 economic time series from 120 sources, all free.
  • Register: https://fredaccount.stlouisfed.org/apikeys. Key is a 32-char hex string.
  • Python: pip install fredapi. ~120 req/min comfortable.
  • Includes: every Fed funds rate, every Treasury yield, every BLS series, VIXCLS, DXY, oil (DCOILBRENTEU, DCOILWTICO), DJIA, every FX cross.
from fredapi import Fred
fred = Fred(api_key="YOUR_KEY")
ten_y = fred.get_series("DGS10")           # 10-year Treasury yield
brent = fred.get_series("DCOILBRENTEU")    # Brent crude $/bbl
vix   = fred.get_series("VIXCLS")          # VIX close

BEA, BLS

  • BLS APIhttps://www.bls.gov/developers/ — free key, employment, CPI, JOLTS. Hard limit 500 daily requests with key, 25 without.
  • BEA APIhttps://apps.bea.gov/api/signup/ — GDP, personal income, trade balance.
  • Both publish on schedule (BLS 08:30 ET monthly) — you can pre-cache and run a diff against consensus to fade or fade-fade the release.

Treasury Direct

Bank of England, ECB, BoJ, BoC

World Bank, IMF

Why this matters for political trading

A Trump statement on Iran is a shock; the FRED data is the state. The reaction depends on where Fed funds, real yields, and oil are when the shock hits. Cache the state nightly; you only need the streaming for shocks.


4. Political Event Calendars

Free, ranked by usefulness

  1. Investing.com economic calendarhttps://www.investing.com/economic-calendar/ — has unofficial JSON endpoint and is the de facto industry standard for FX. Scrape-friendly HTML; no rate-limit issues at sub-minute polling.
  2. ForexFactoryhttps://www.forexfactory.com/calendar — best categorisation by FX impact (red/orange/yellow). No official API. The andrevlima/economic-calendar-api GitHub project parses it cleanly: https://github.com/andrevlima/economic-calendar-api.
  3. TradingEconomicshttps://tradingeconomics.com/api/ — free tier limited to a handful of countries; paid for full. Calendar docs: https://docs.tradingeconomics.com/economic_calendar/snapshot/.
  4. Finnhub economic calendarhttps://finnhub.io/docs/api/economic-calendar — included in free tier.

Political / legislative


5. Political Statement Monitoring

Whitehouse.gov

State Department, DoD, Treasury

Federal Register

import requests
r = requests.get(
  "https://www.federalregister.gov/api/v1/documents.json",
  params={
    "conditions[presidential_document_type][]": "executive_order",
    "conditions[publication_date][gte]": "2026-01-01",
    "per_page": 100,
  }, timeout=10
)
for doc in r.json()["results"]:
    print(doc["publication_date"], doc["title"])

C-SPAN

  • Transcripts via the C-SPAN Video Library: https://www.c-span.org/video/ — no formal API; download MP4s and transcribe locally with faster-whisper.

GovTrack — govtrack.us

  • Wraps Congress.gov plus the unitedstates/congress scrapers.
  • Free, no key. Bulk data: https://www.govtrack.us/developers/data.
  • Better metadata on vote ideology and committee membership than raw Congress.gov.

Truth Social

Senators and reps' official feeds

  • Most members publish RSS on their Senate/House sites. The GovTrack pages link to them.
  • Twitter/X API is now paid; ignore unless you have $5K/mo budget.

Python snippet — unified statement firehose

import feedparser, datetime as dt
FEEDS = {
  "WH news":      "https://www.whitehouse.gov/feed/",
  "WH actions":   "https://www.whitehouse.gov/presidential-actions/feed/",
  "State Dept":   "https://www.state.gov/feed/",
  "Trump TS":     "https://trumpstruth.org/feed",
  "Fed press":    "https://www.federalreserve.gov/feeds/press_all.xml",
  "ECB press":    "https://www.ecb.europa.eu/rss/press.html",
}
for src, url in FEEDS.items():
    f = feedparser.parse(url)
    for e in f.entries[:5]:
        print(f"[{src}] {e.get('published','')} — {e.title[:90]}")

6. War / Geopolitical Event Tracking

ACLED — acleddata.com

  • The gold standard for armed-conflict event data. Coded by human analysts within ~1 week of event.
  • Free with registered account; researcher API key. Bulk CSV + REST.
  • Covers Africa, MENA, S/SE Asia, Latin America, Europe, increasingly N. America.
  • Docs: https://acleddata.com/data-export-tool/api-user-guide/.
import requests, os
r = requests.get(
  "https://api.acleddata.com/acled/read",
  params={
    "key": os.getenv("ACLED_KEY"),
    "email": "you@example.com",
    "country": "Iran|Israel|Yemen",
    "event_date": "2026-01-01|2026-12-31",
    "event_date_where": "BETWEEN",
    "limit": 0,
  }, timeout=30
)
data = r.json()["data"]

GDELT — gdeltproject.org

  • Machine-coded global event database, every 15 min, free, machine-readable.
  • Higher noise than ACLED (it's NLP off newswires) but massively more comprehensive — 100+ languages, 1979 to now.
  • DOC 2.0 API for full-text article search: https://blog.gdeltproject.org/gdelt-doc-2-0-api-debuts/.
  • Best path: query via Google BigQuery (free quota covers a hobbyist). Dataset gdelt-bq.gdeltv2.events.
  • Python client: pip install gdelt.

CFR Global Conflict Tracker — cfr.org/global-conflict-tracker

  • Editorial summaries, no API. Useful for context layer behind a quant signal.
  • Categorises conflicts by US-interest impact (critical / significant / limited).

ISW — understandingwar.org

  • Daily campaign assessments on Ukraine and Middle East with annotated maps.
  • No API — RSS at https://www.understandingwar.org/rss.xml.
  • The maps are PNGs; if you want georeferenced front-line data, scrape the daily assessments and pair with ACLED battle events.

Reuters, AP wire feeds

CrisisWatch — crisisgroup.org/crisiswatch

  • Monthly conflict risk briefing by ICG. Email subscription, no API; valuable as a monthly calibration check for whether your signal is missing entire regions.

7. Attention / Sentiment — Legitimate Alternatives to Social Scraping

Twitter/X data is essentially paywalled. Reddit's API is rate-limited and increasingly hostile. The free, defensible substitutes:

Wikipedia Pageviews API

  • https://wikitech.wikimedia.org/wiki/Analytics/AQS/Pageviews — no key, no rate limit, daily and hourly granularity since 2015.
  • Use case: spike in pageviews for "Strait of Hormuz" or "JCPOA" is a leading attention indicator. Research finds explanatory power for index moves but limited predictive outperformance (Gómez-Martínez 2022).
import requests
r = requests.get(
  "https://wikimedia.org/api/rest_v1/metrics/pageviews/per-article/"
  "en.wikipedia/all-access/all-agents/"
  "Strait_of_Hormuz/daily/20260101/20260525",
  headers={"User-Agent": "pol-event-research/0.1"}, timeout=10
)
print(r.json()["items"][-5:])
  • No official free API since 2025. pytrends (pip install pytrends) still works against the unofficial endpoint but is brittle and rate-limited.
  • Use sparingly; expect 429s. Cache aggressively.

AAII Sentiment Survey

CNN Fear & Greed Index

CBOE — put/call, VIX term structure


8. The "Trump on Iran" Playbook

This is the canonical example because it has the cleanest signature: a single political actor can move oil, USD, gold, and equities in seconds with one Truth Social post.

What typically moves, and in which direction

Statement type Brent / WTI USD (DXY) Gold S&P 500 Defense stocks (LMT, RTX)
Escalation / strike imminent +5–13% + safe haven bid +1–3% −0.5 to −2% +2–5%
De-escalation / talks resume −3–10% mild − mild − +0.5–1.5% −1–3%
New sanctions on Iran +1–3% + flat flat mild +
JCPOA-type deal hint −2–5% flat flat mild + mild −

Historical precedents — the calibration set

  • 8 May 2018 — JCPOA withdrawal: Brent +3% over the announcement day, USD/IRR collapsed (informal market), Lockheed +1.5%. The market had already priced ~70% probability of withdrawal in the week before.
  • 3 January 2020 — Soleimani strike: Brent +3–4% on the day, gold +1.3% to $1,547, S&P −0.7%, DXY mild safe-haven bid. Markets fully retraced within 5 trading days as Iranian retaliation (Al Asad missiles, no US fatalities) was below escalation threshold.
  • 23 March 2026 — Iran strike postponement (the "$580M short-oil bet"): Brent fell from ~$110 to ~$108 on the announcement; an FT investigation flagged $580M in short oil futures placed 15 minutes before Trump posted the statement. Implication: there is a pre-announcement signal somewhere, possibly Polymarket order flow, possibly a leak. (Axios coverage).

Where to monitor in real time

Source Latency What it gives you
Trump's Truth — trumpstruth.org/feed ~2 min after post The statement itself
Whitehouse.gov briefings RSS ~5–15 min Official follow-up
State Dept RSS minutes Sanctions designations
Polymarket "Iran strike by date" markets seconds Crowd probability shift
Kalshi Iran contracts (read-only NL) seconds US regulated odds
GDELT 15-min update ≤15 min Confirmed media wave
ACLED ~7 days Ground-truth event coding

The Polymarket / Kalshi contracts to bookmark

  • "Will the US strike Iran in 2026?" — perpetual, repriced daily.
  • "Will Iran block the Strait of Hormuz before [date]?" — quarterly.
  • "Fed cut at next meeting" — for the second-order rate impact.
  • Search via Polymarket Gamma API with q=Iran, q=Hormuz, q=Israel.

Strategy notes

  • Trade the second move, not the first. The post-statement spike is almost always overshooting; the fade-back over 1–5 days is a higher-conviction trade.
  • Use VIX term structure as filter. If VIX3M − VIX < 0 (backwardation) at the time of the statement, expect bigger and longer-lasting moves. If contango is still 3+ vol points, the market is treating it as noise.
  • Watch open interest on Brent puts the morning of a known FOMC + Iran cluster. Suspicious flows show up there before the public price moves.

9. Implementation — Building a Political-Event Ingestion Pipeline

Architecture

                    ┌──────────────────────────────┐
                    │   Schedulers (cron / Airflow)│
                    └──────────────────────────────┘
                          │            │            │
            ┌─────────────┘            │            └──────────────┐
            ▼                          ▼                           ▼
  ┌──────────────────┐      ┌──────────────────┐       ┌──────────────────┐
  │   POLLED RSS     │      │   PRED MARKETS   │       │   GOV DATA       │
  │ trumpstruth, WH, │      │ Polymarket Gamma │       │ FRED, BLS, ECB   │
  │ State, Fed, ECB  │      │ Kalshi, PredictIt│       │ Federal Register │
  │ 60s polling      │      │ 30s polling      │       │ Daily at 23:00   │
  └────────┬─────────┘      └────────┬─────────┘       └────────┬─────────┘
           │                         │                          │
           └──────────────┬──────────┴──────────────────────────┘
                          ▼
              ┌────────────────────────┐
              │  Postgres / DuckDB     │
              │  (events, prices,      │
              │  series, contracts)    │
              └───────────┬────────────┘
                          ▼
              ┌────────────────────────┐
              │  Nightly "Political    │
              │  Pulse" brief (LLM     │
              │  over delta of events) │
              └────────────────────────┘

Source-by-source ingestion table

Source Free? Endpoint / URL Cadence Auth
Polymarket Gamma Y gamma-api.polymarket.com/markets 30s None
Polymarket CLOB Y clob.polymarket.com WS Keypair (for trade)
Kalshi Y api.kalshi.com/trade-api/v2 WS KYC user
PredictIt Y predictit.org/api/marketdata/all/ 1m None
Manifold Y manifold.markets/api/v0 1m Optional
FRED Y api.stlouisfed.org/fred/ Daily Key
Federal Register Y federalregister.gov/api/v1/ Hourly None
Congress.gov Y api.congress.gov/v3/ Hourly Key
BLS Y api.bls.gov/publicAPI/v2/ On release Key
ECB SDW Y data-api.ecb.europa.eu/service/data/ Daily None
ACLED Y (registered) api.acleddata.com/acled/read Weekly Key + email
GDELT DOC 2.0 Y api.gdeltproject.org/api/v2/doc/doc 15m None
GDELT BigQuery Y (within quota) gdelt-bq.gdeltv2.events 15m GCP creds
Trump's Truth RSS Y trumpstruth.org/feed 2m None
Whitehouse RSS Y whitehouse.gov/feed/ 5m None
State Dept RSS Y state.gov/feed/ 15m None
Wikipedia Pageviews Y wikimedia.org/api/rest_v1/metrics/pageviews/ Daily UA only
FRED VIXCLS Y series id VIXCLS Daily Key
Senate Stock Watcher Y GitHub raw Daily None

Daily "political pulse" brief — assembly recipe

Each morning at 06:00 NL time, assemble:

  1. Last 24h prediction-market deltas — Polymarket markets whose YES price moved >5pp on >$10K volume. These are real-money repricings; rank descending by |delta| × volume.
  2. Truth Social + Whitehouse statements — text + cluster on entities (Iran, Fed, China, Russia).
  3. Federal Register new EOs, OFAC new designations — published yesterday.
  4. Calendar events in next 48h — FOMC, ECB, BLS releases (NFP, CPI), Treasury auctions, congressional floor votes.
  5. GDELT tone delta — average tone on theme:WB_2024_ANTI_GOVERNMENT_PROTEST and theme:ARMEDCONFLICT for the last 24h vs trailing 30d.
  6. VIX term structure — current VIX3M − VIX, flag if < +1.0.
  7. Politicians' new disclosures — Senate Stock Watcher repo diff.

LLM the seven inputs into a 300-word brief with two charts (prediction-market deltas, term-structure spread). Total cost: ~$0.02/day with Haiku on the summarisation.


10. Three Sources Worth Wiring FIRST

Ranked by (expected signal × ease of implementation) ÷ cost.

1. Polymarket (Gamma API)

  • Signal: real money on Iran, Fed cuts, recession, elections. The most informationally efficient public source on political probabilities.
  • Implementation: 30 lines of Python; no auth; in production in an hour. Stream key markets every 30s into Postgres; alert on >5pp moves.
  • Why first: it embeds everyone else's signal — including the leaks. The 23 March 2026 Iran short-oil incident shows that pre-announcement information shows up somewhere on the chain.

2. FRED

  • Signal: every macro series that defines the state in which a political shock lands. 10y, 2y, real yields, VIX, DXY, Brent, WTI, gold — all in one place.
  • Implementation: fredapi + a cron. One day of work to cache the 30 series you actually need.
  • Why second: every other signal in the pipeline is interpreted against FRED state. Without it you cannot tell whether Trump's Iran post lands in a contango VIX market (fade it) or a backwardated one (chase it).

3. ACLED + GDELT (paired)

  • Signal: actual ground-truth conflict events (ACLED) cross-checked against media volume (GDELT). When the two diverge — GDELT spikes but ACLED doesn't confirm — you're seeing narrative without substance, which is exactly the noise that fades within 3 days.
  • Implementation: ACLED weekly bulk pull + GDELT BigQuery query nightly. ~one day of work, mostly schema mapping.
  • Why third: this is the de-noiser. Most "war news" is GDELT noise; the small fraction that ACLED confirms is the part that actually moves USD/oil persistently.

Stretch picks for later

  • Senate Stock Watcher — interesting more for theme-mapping than for direct alpha post-STOCK Act.
  • Federal Register EO feed — high signal on tariff and sanctions days; otherwise quiet.
  • Truth Social RSS — clean implementation, but Polymarket gets there faster on big statements.

Sources

Politicians' trades & ETFs

Prediction markets

Government data

Conflict / geopolitics

Statements & calendars

Attention / sentiment

Iran-specific event reaction

Pro feature
Trading Bible — full chapter

The 3 Plain-English chapters are free. The rest of the library unlocks with Pro — start a 7-day trial, cancel anytime.

Unlock with Pro · €79/mo
Cancel anytime · 7-day trial
← Previous
Positioning & flows — what real money is doing
COT reports, ETF flows, options skew, the legal alternative to scraping.
Next →
Brokers & regulation — choosing where to trade
EU/NL broker guide, MiFID II, what to avoid offshore.