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) and04-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 API —
https://gamma-api.polymarket.com— markets, events, search. ~60 req/min unauthenticated. - Data API —
https://data-api.polymarket.com— positions, trades, holders, leaderboards. - CLOB API —
https://clob.polymarket.com— orderbook, midpoints, price history; trading requires keypair.
- Gamma API —
- 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 API — https://www.bls.gov/developers/ — free key, employment, CPI, JOLTS. Hard limit 500 daily requests with key, 25 without.
- BEA API — https://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
- Yield curve at https://home.treasury.gov/resource-center/data-chart-center/interest-rates/daily-treasury-rates.csv. No key, just an HTTP GET.
- Auction results, debt holdings, TIC flows: https://home.treasury.gov/developer-resources.
Bank of England, ECB, BoJ, BoC
- ECB Statistical Data Warehouse — https://data.ecb.europa.eu/help/api/overview. Free, no key, SDMX format. Has every ECB policy rate, TLTRO uptake, balance sheet line.
- Bank of England — https://www.bankofengland.co.uk/statistics/data — bulk download, no API key.
- BoJ — https://www.stat-search.boj.or.jp/ — clunky but free.
- BoC — https://www.bankofcanada.ca/valet/docs — Valet API, no key, JSON/CSV/XML.
World Bank, IMF
- World Bank Open Data — https://api.worldbank.org/v2/ — no key, JSON/XML.
- IMF IFS — https://datahelp.imf.org/knowledgebase/articles/667681-using-json-restful-web-service — JSON over REST, no key, somewhat brittle.
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
- Investing.com economic calendar — https://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.
- ForexFactory — https://www.forexfactory.com/calendar — best categorisation by FX impact (red/orange/yellow). No official API. The
andrevlima/economic-calendar-apiGitHub project parses it cleanly: https://github.com/andrevlima/economic-calendar-api. - TradingEconomics — https://tradingeconomics.com/api/ — free tier limited to a handful of countries; paid for full. Calendar docs: https://docs.tradingeconomics.com/economic_calendar/snapshot/.
- Finnhub economic calendar — https://finnhub.io/docs/api/economic-calendar — included in free tier.
Political / legislative
- Whitehouse.gov news — https://www.whitehouse.gov/news/ and
/briefings-statements/. Public schedule when published. - Congress.gov API v3 — https://gpo.congress.gov/ — free key from https://api.congress.gov/sign-up/. Bills, votes, members, committee schedules. Best for tracking which bills are up for vote this week.
- House and Senate floor schedules — published nightly: https://www.majorityleader.gov/floor and https://www.democrats.senate.gov/floor-schedule.
- FOMC calendar — https://www.federalreserve.gov/monetarypolicy/fomccalendars.htm. Static, cache annually.
- ECB monetary policy calendar — https://www.ecb.europa.eu/press/calendars/mgcgc/html/index.en.html.
5. Political Statement Monitoring
Whitehouse.gov
- News page has an RSS feed at https://www.whitehouse.gov/feed/ (current admin republishes this on each transition).
- "Presidential Actions" feed at https://www.whitehouse.gov/presidential-actions/feed/ — executive orders and proclamations.
- "Briefings & Statements" at https://www.whitehouse.gov/briefings-statements/feed/.
State Department, DoD, Treasury
- State Dept press releases: https://www.state.gov/feed/ — every readout, every sanction designation.
- DoD newsroom: https://www.defense.gov/Newsroom/Feeds/.
- OFAC (Treasury sanctions): https://ofac.treasury.gov/recent-actions — new SDN list designations move FX (RUB, IRR, sometimes CNY).
Federal Register
- Every official US gov action in machine-readable form.
- https://www.federalregister.gov/developers/documentation/api/v1. No key needed.
- JSON, paginated, free. Filter by
presidential_document_type=executive_orderfor EO firehose.
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
- Trump's posts only: best aggregator is trumpstruth.org — RSS at https://trumpstruth.org/feed, polls every few minutes.
- GitHub mirror: https://github.com/stiles/trump-truth-social-archive.
- The site uses Truth Social's Mastodon-compatible API plus rotated proxies; you are consuming the output, not scraping.
- The American Presidency Project also archives Truth Social posts as official record: https://www.presidency.ucsb.edu/documents/app-attributes/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
- Reuters: only the consumer RSS feeds are public (https://www.reutersagency.com/feed/), and Reuters keeps tightening these.
- AP: https://apnews.com/index.rss and similar by section.
- Best wire substitute for free: GDELT DOC 2.0 with
sourcecountry:US sourcecollection:reuters,apnewsfilter.
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:])
Google Trends
- 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
- US retail individual investor sentiment, weekly. Free chart + CSV at https://www.aaii.com/sentimentsurvey.
- Contrarian indicator at extremes.
CNN Fear & Greed Index
- https://www.cnn.com/markets/fear-and-greed — composite of 7 indicators. No official API.
- Crowdsourced historical: https://github.com/whit3rabbit/fear-greed-data.
CBOE — put/call, VIX term structure
- Daily total/equity/index put-call ratios: https://www.cboe.com/us/options/market_statistics/daily/.
- VIX term structure (VIX9D, VIX, VIX3M, VIX6M, VIX1Y): https://www.cboe.com/tradable-products/vix/term-structure/. Free, updates every ~15s during the trading day.
- VIX itself: FRED series
VIXCLS— easiest pipe. - Term-structure shape (
VIX3M − VIX) is one of the cleanest geopolitical-stress reads.
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:
- 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. - Truth Social + Whitehouse statements — text + cluster on entities (Iran, Fed, China, Russia).
- Federal Register new EOs, OFAC new designations — published yesterday.
- Calendar events in next 48h — FOMC, ECB, BLS releases (NFP, CPI), Treasury auctions, congressional floor votes.
- GDELT tone delta — average tone on
theme:WB_2024_ANTI_GOVERNMENT_PROTESTandtheme:ARMEDCONFLICTfor the last 24h vs trailing 30d. - VIX term structure — current
VIX3M − VIX, flag if < +1.0. - 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
- Capitol Trades — Congressional stock data
- Senate Stock Watcher — GitHub data repo
- Quiver Quantitative Congress Trading
- Finnhub congressional trading API
- FMP Senate Trading API
- NANC vs KRUZ — ETF.com analysis
- Karadas et al. (2021) — STOCK Act paper, EconStor
- Lambda Finance — Capitol Trades API roundup 2026
Prediction markets
- Polymarket API docs
- Polymarket help — Does Polymarket have an API?
- Kalshi API documentation
- Kalshi help — API overview
- PredictIt public market data
- Manifold Markets API
- Best prediction-market APIs 2026 — Prediction Hunt
Government data
- FRED API — St. Louis Fed
- FRED API key signup
- Federal Register API v1
- Congress.gov API
- GovTrack data documentation
- BLS Developers
- BEA Developer Signup
- ECB SDW API overview
- Bank of Canada Valet API
Conflict / geopolitics
- ACLED — main site
- ACLED conflict data overview
- GDELT Project data page
- GDELT DOC 2.0 API release notes
- CFR Global Conflict Tracker
- Institute for the Study of War
- International Crisis Group CrisisWatch
Statements & calendars
- Whitehouse.gov news
- Trump's Truth — Truth Social archive + RSS
- Trump Truth Social archive — GitHub
- American Presidency Project — Truth Social
- Investing.com economic calendar
- Forex Factory calendar
- Trading Economics API
Attention / sentiment
- Wikipedia pageviews — research paper, Gómez-Martínez 2022
- AAII Investor Sentiment Survey
- CNN Fear & Greed Index
- CBOE VIX term structure
- CBOE historical options data
- Fear & Greed historical data — GitHub
Iran-specific event reaction