Data Sources

Public government, court, statement, and market sources — each with a defined role in the index

PEPIndex combines four kinds of public sources: threat-detection feeds that define each event (Federal Register executive orders/proclamations/presidential memoranda, USTR Section 301 notices, and the CNN Truth Social archive), outcome-resolution sources that determine how a threat actually resolved (USITC applied tariff rates, the federal courts via CourtListener and PACER, Congress.gov bill actions, the eCFR, and a grounded Gemini resolver for non-trade outcomes), and economic-impact measurement sources (BLS, FRED, and Yahoo Finance market data). A small set of static calibration constants is disclosed separately and is not treated as a live input. Threat classification and non-trade outcome reconciliation use AI models (Claude, Gemini), described below. No commercial aggregators, licensed market terminals, or third-party scrapers are used; provenance is tracked per event and exposed in the API.

Source taxonomy

Every source and the specific role it plays in building the index.

SourceTypeRole in the indexCadenceAccess basis
Federal Register APIGovernment publicationThreat detection (EOs, proclamations, presidential memoranda & determinations) + outcome resolutionDaily (incremental)Public API
USTR FR notices (Section 301)Government agency noticeThreat detection (Section 301 actions)Daily (via Federal Register)Public API
CNN Truth Social ArchivePublic archiveThreat detection — primary statement feed; feeds the repetition-pattern dimension5-minute cachePublic archive
USITC DataWebGovernment tariff dataOutcome resolution + economic measurement (statutory↔applied gap drives reversal magnitude)Monthly (rolling)Public, JWT registration
CourtListener / PACER PCLFederal court recordsOutcome resolution (CIT / CAFC / SCOTUS rulings + D.D.C. and the D.C./1st/4th/9th Circuits)6-hourly / on-fallbackPublic API
Congress.gov APIGovernment legislative dataOutcome resolution (bill actions for legislation-linked events)Per bill-linked eventPublic, free key
Gemini (Google Search grounding)AI resolverOutcome resolution for overdue non-trade events (independent reporting weighted above self-reported posts)Per overdue eventAPI key (optional)
eCFRGovernment regulatory textOutcome verification (regulatory diffs compared against each recorded outcome; disagreements flagged for operator review, v1.2.14)Per resolved eventPublic API
Census Bureau imports (duty/value)Government trade dataIndependent applied-rate backstop — monthly cross-check of live USITC rates per country × HS chapter (report-only; publication-lag-aware)Monthly (16th)Public API, key required
BLS Public Data APIGovernment price indicesEconomic-impact measurement (four-group CPI, pass-through)Monthly — three release schedules, reported separatelyPublic, free key
FRED (St. Louis Fed)Government macro seriesEconomic-impact measurement + macro contextDaily / monthlyPublic, free key
Yahoo Finance (yfinance)Market data feedEconomic-impact measurement (market reaction around threat/outcome dates)Every 6h runPublic
Retail pass-through constantsStatic calibrationCalibration only (superseded by live USITC rates each run)Static seedDisclosed constants

Automated pipeline sources

Source ingestion runs every 6 hours. The public composite index is published daily after validation; per-source freshness is exposed live at /api/v1/sources/status (human-readable view: source freshness status). Each source updates on its own official release schedule.

SourceDataAuthOfficial cadence
Federal Register API v1
PUBLIC
Executive Orders, Presidential Proclamations, tariff schedules, presidential memoranda. Primary source for EO event classification. None (public API) Daily (incremental)
CNN Truth Social Archive
PUBLIC
All presidential Truth Social posts with engagement metadata. Used for real-time statement detection and threat classification. None 5-minute cache
USITC DataWeb API v2
PUBLIC
Applied tariff rates at HS-2 × country level (15 countries: CN, MX, CA, JP, KR, VN, TW, DE, GB, FR, IT, BR, IN, TH, TR). Duties collected ÷ customs value = effective applied rate. Core input to Reversal Magnitude scoring. JWT (public registration) Monthly (rolling 3-month window)
BLS Public Data API v2
PUBLIC
Four-group CPI proxies (Apparel, Household Furnishings, Food at Home, Medical Commodities, Services, Core Commodities) — the series behind the tariff pass-through model; PPI final demand (WPUFD4); Import Price Index (EIUIR); manufacturing/retail employment (CEU30, CEU42). Reported as three separate sources because BLS publishes them on different schedules — between roughly the 5th and 18th of a month they legitimately show different reference months. BLS_API_KEY (free registration) Monthly, lookback to 2017. Release dates differ by series: employment first Friday of the following month; CPI 10th–14th; PPI ~13th–15th; import prices ~16th–18th.
FRED API (St. Louis Fed)
PUBLIC
CPI (CPIAUCSL), core CPI (CPILFESL), S&P 500 (SP500), VIX (VIXCLS), goods trade balance (BOPGSTB), imports (IMPGS), PPI all commodities, nominal broad dollar index, 10Y/2Y Treasury yields. FRED_API_KEY (free registration) Daily / monthly (series-specific)
CourtListener API v4
PUBLIC
Federal court rulings affecting tariff validity and executive-order legality, across three layers: the trade courts — U.S. Court of International Trade (CIT) and Court of Appeals for the Federal Circuit (CAFC); the Supreme Court; and the EO-litigation courts — the District of Columbia district court (D.D.C.) and the D.C., First, Fourth and Ninth Circuits, where challenges to executive orders are filed and first enjoined. Primary automated court ingest. COURTLISTENER_API_KEY (free) 6-hourly (within daily budget)
PACER PCL (Case Locator)
PUBLIC
Automated fallback for CIT (citdc) and CAFC (cafc) cases not yet mirrored in CourtListener RECAP. REST API: auth via pacer.login.uscourts.gov/services/cso-authnextGenCSO token; case search via pcl.uscourts.gov/pcl-public-api/rest/cases/find. Triggered automatically when CourtListener raises errors on all courts. PACER_USERNAME + PACER_PASSWORD On CourtListener error (automated fallback)
yfinance (Yahoo Finance)
PUBLIC
SPY, VIX, and sector ETFs (XLP, XLI, XLY, EEM) daily closes around threat/outcome dates. Market impact signal only — not used in behavioral scoring. None Every 6-hour pipeline run
eCFR API v1
PUBLIC
Electronic Code of Federal Regulations — point-in-time snapshots for regulatory outcome verification against resolved events. None Per resolved event (10/run)
Congress.gov API v3
PUBLIC
Authoritative congressional bill actions and enactment status. Reconciles the outcome of monitoring events tied to legislation (e.g. the SAVE Act): bill death → abandoned, passage/enactment → full_implementation. No-ops when the key is unset. CONGRESS_API_KEY (free) Per bill-linked event (10/run)
Gemini API (Google Search grounding)
AI
Foreign-policy / domestic outcome reconciliation (v25). For overdue, still-pending non-trade events the Federal Register / court / Congress resolvers can't reach, determines whether the threatened action was carried out, de-escalated, or abandoned — weighting independent reporting above the president's own posts (records outcome_evidence_source = gemini_websearch vs self_reported). Claude remains the threat classifier. No-ops when the key is unset. GEMINI_API_KEY Per overdue non-trade event (25/run, 7-day attempt cooldown)

Data vintage and statistical revisions

Government statistical series are revised after publication. PEPI's economic layer therefore tracks latest vintage, not point-in-time: each surface reports the currently published value for a reference period, not the value that was published when we first read it. That is stated here because it determines what a figure means when you cite it.

No revision schedule is assumed. BLS documents typical revision windows, but those are practices rather than guarantees — benchmark and seasonal-factor revisions reach further back than the routine one, corrections land off-cycle, and the calendar itself slips (the 2025 appropriations lapse removed October 2025 from the annual import/export price review). So no fetch window, comparison window, or rebuild trigger is keyed off an expected revision date. The full history is re-fetched every run and every observation compared against the stored value, which means a restatement is caught wherever and whenever it lands. Restatements update automatically on the next cycle; each one is recorded so the change stays auditable afterwards.

What a revision moves is bounded. It updates the price-impact measures and the per-event economic columns derived from them. It does not move any event's composite score — the scorer's only economic inputs are the announced and applied tariff rates, which come from USITC, not BLS — and it does not move the daily index, which reads the economic series only for the day's S&P 500 close. The behavioural index is stable against statistical revision by construction. Full detail is in §6.1a of the methodology whitepaper.

Analysis & classification layer

Two AI models sit between ingestion and scoring. They interpret public-source text into structured events and outcomes; they are not themselves data sources.

ModelRoleNotes
Anthropic Claude Threat classifier. Tags each ingested statement against the four PEPI criteria and as new_threat, action_claim, deescalation, or reiteration; extracts domain, severity, entities, deadline, and statutory authority with a confidence score. Events below 0.70 confidence are flagged for human review before they are confirmed.
Google Gemini (grounded) Non-trade outcome resolver. Reconciles overdue foreign-policy / domestic outcomes the documentary resolvers can't reach, weighting independent reporting above self-reported posts. Added alongside Claude (v25); confidence < 0.70 leaves the event monitoring.

Calibration data (static seed)

These datasets are loaded once during initialization and are not automatically refreshed.

SourceDataUsed for
Retail price pass-through constants Published, freely-citable aggregate constants: retail pass-through (24%), CPI contribution (+0.76pp), consumer incidence (43%). The underlying retail-scanner replication package (≈359,104 products across five major U.S. retailers) was used only to verify methodology alignment — these are disclosed static constants, not a live or proprietary government input. Economic-impact calibration for trade events; superseded by live USITC applied rates each pipeline run.
First-term trade-war rate references First-term trade events: Section 232 (March 2018), Section 301 China tariff lists, Phase One deal terms, Canada/Mexico exemption timeline. Historical event calibration for TACO-2018-* events.

Manual verification references

These sources have no public API. They are used for manual event verification and calibration audits — not for automated ingest.

SourceScopeHow used
Atlantic Council Trump Tariff Tracker Second-term (2025+) tariff events, court ruling timeline, statutory authority (IEEPA, Section 232, Section 301, Section 122) Verify event dates, confirm court rulings, cross-check statutory authority
First-term trade-war rate reference First-term (2018–2021) Section 232/301 events; Phase One deal terms Source authority for first-term calibration events
Federal Register (historical) Full presidential documents since 1994 Manual verification of seed events predating our 2025-01-20 automated ingest start date
USTR Press Releases Official tariff-action announcements; Section 301/232 investigations Cross-check announced rates and dates. The formal USTR actions behind them now auto-ingest as Federal Register notices; the press page remains a manual reference.
Yale Budget Lab — Tariff Tracker Monthly effective tariff rate, customs revenue, PCE goods/durables price deviation Independent cross-validation of our USITC applied rates and BEA PCE series; pass-through range for the economic-impact calibration
PACER (full docket system) All federal court dockets in real time (CIT, CAFC, and others) Manual spot-checks of high-stakes tariff dockets (distinct from the automated PACER PCL case-locator fallback above)

What we do not use