Disclaimer: Data is sourced from official U.S. government public records and is provided for informational and research purposes only. This is not financial advice and should not be used to make investment decisions. Trade disclosures may be delayed up to 45 days per STOCK Act requirements. Redistribution for commercial solicitation or advertising is prohibited per House Clerk usage terms.
Updated every 6 hours · Senate & House

Real-time Congress stock trades API —
freshest public data with webhooks

The moment a member of Congress files a stock disclosure, we pick it up. Query by ticker or politician. Get webhook alerts within hours of filing. Free to start — no credit card, no waitlist.

Try the API live See how we compare
Tickers tracked
Senate tickers
House tickers
365
Days of history
● Live
API status

How we compare

Other services lock congressional trading data behind expensive subscriptions, slow daily refreshes, and UI-only access. Here's the breakdown.

Feature CongressInvests QuiverQuant Unusual Whales Finnhub
Free tier 100 req/day Paid only Paid only ~ Very limited
Pro price $29 / mo $25–75 / mo $40–60 / mo $50+ / mo
Data freshness Every 6 hours ~ Daily ~ Daily ~ Daily
Webhook alerts By ticker or politician
Senate + House Both chambers ~ Partial
REST API access Free & Pro Paid plans UI-first Paid plans
AI trend analysis Pro — cached 24h/ticker
Open source SDK Python + Node.js
Data source Official Senate EFD + House Clerk Official gov sources Official gov sources Third-party aggregator

Competitor details are approximate — verify current pricing on their respective sites. Questions? Contact us.

How it works

1

Scrapes both chambers' official portals

On startup, a background thread fetches Periodic Transaction Reports (PTRs) going back 365 days from two sources: efdsearch.senate.gov (HTML pages, CSRF-authenticated) and disclosures-clerk.house.gov (bulk XML index + per-PTR PDFs).

2

Parses & normalises every trade

Senate PTRs are parsed as HTML tables. House PTRs are downloaded as PDFs and parsed with pdfplumber. From each filing the member name, transaction date, ticker, asset name, trade type (buy/sell), and disclosed dollar range are extracted. Only stocks and stock options are indexed.

3

Indexes by ticker in memory

Trades from both chambers are merged into a single in-memory dictionary keyed by ticker symbol — O(1) per-ticker lookups, no database required. Each trade record carries a chamber field so you can tell Senate from House. Cache auto-refreshes every 24 hours.

4

Serves results via FastAPI

A FastAPI app exposes the data over a simple REST API with CORS enabled for all origins. Deployed on Railway with zero-config auto-scaling.

Endpoints

GET
/health

Liveness check. Returns status: "ok" plus cache readiness, ticker count, and data age in seconds. Good for uptime monitoring.

GET
/trades/{ticker}

All trades for a specific stock ticker, sorted newest-first. Case-insensitive — nvda and NVDA both work. Filter by ?chamber=Senate or ?chamber=House.

GET
/trades/{ticker}/summary AI Pro

Full trade list for the ticker plus an AI-generated trend analysis — sentiment (bullish/bearish/mixed), a 2–3 sentence narrative, and notable member patterns. Cached for 24 hours per ticker, so all Pro subscribers get instant results after the first call of the day. Requires a valid X-Api-Key header. Grounded strictly in the disclosed filing data.

GET
/trades?limit=N

All cached trades across every ticker, newest-first. Default limit is 200; pass ?limit=500 to get more. Useful for a global feed or bulk analysis.

GET
/cache/status

Returns cache metadata: whether data is ready, whether a reload is in progress, total ticker count, and when the cache was last loaded.

POST
/cache/refresh

Force a full cache reload. Requires the X-Api-Key header. Useful after the Senate publishes a batch of new PTRs and you don't want to wait for the 24-hour cycle.

Example request

bash
curl https://congressinfor-production.up.railway.app/trades/NVDA

Example response — GET /trades/NVDA

json
{
  "ticker":                    "NVDA",
  "total":                    15,
  "offset":                   0,
  "limit":                    50,
  "has_more":                 false,
  "data_current":            true,
  "cache_loading":           false,
  "last_updated":            "2026-05-31T10:04:17Z",  // UTC timestamp of last scrape
  "data_lag_minutes":        14,                         // minutes since last refresh
  "next_refresh_in_minutes": 346,                        // minutes until next incremental refresh
  "trades": [
    {
      "member":     "John Boozman",
      "chamber":    "Senate",
      "ticker":     "NVDA",
      "trade_type": "buy",
      "amount":     "$1,001 - $15,000",
      "tx_date":    "2026-03-19",
      "disclosed":  "2026-04-14",
      "asset":      "NVIDIA Corporation - Common Stock",
      "link":       "https://efdsearch.senate.gov/search/view/ptr/..."
    }
  ]
}

Quickstart

100 requests/day free — no account or API key required. Upgrade to Pro for webhooks and higher limits.

Fetch trades for a ticker

bash
curl https://congressinfor-production.up.railway.app/trades/NVDA

AI trend analysis for a ticker Pro — cached 24h, instant after first call

bash
curl -H "X-Api-Key: YOUR_PRO_KEY" \
     https://congressinfor-production.up.railway.app/trades/NVDA/summary

Response includes the full trade list plus an ai_analysis object:

json — ai_analysis portion
{
  "ai_analysis": {
    "sentiment":         "bullish",
    "summary":           "Congressional trading in NVDA is skewed toward buying, with 31 buys (62%) vs 19 sells (38%)...",
    "notable_patterns":  "Cleo Fields is responsible for 27% of all trades, with a concentrated buying campaign...",
    "cached":            true,  // false on the first call of the day; true after that
    "stats": {
      "total_trades":    50,
      "buys":           31,
      "sells":          19,
      "unique_members": 16,
      "date_range": {
        "earliest": "2025-06-24",
        "latest":   "2026-04-24"
      }
    }
  }
}

Most recent trades across all members

bash
curl "https://congressinfor-production.up.railway.app/trades/recent?limit=25&days=30"

Authenticated request (Pro)

bash
curl -H "X-Api-Key: YOUR_KEY" \
     "https://congressinfor-production.up.railway.app/trades/recent?limit=500"

Webhook setup Pro

Get notified within hours of a new filing — no polling required.

1. Subscribe to a ticker or politician

bash
curl -X POST https://congressinfor-production.up.railway.app/webhooks/subscribe \
  -H "X-Api-Key: YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"webhook_url": "https://your-server.com/hook", "ticker": "NVDA", "events": ["any"]}'

2. Handle the payload on your server

python — Flask receiver
from flask import Flask, request, jsonify
app = Flask(__name__)

@app.route("/hook", methods=["POST"])
def hook():
    trade = request.get_json()
    print(f"🔔 {trade['politician']} {trade['trade_type']} {trade['ticker']} — {trade['amount']}")
    return jsonify({"ok": True})

Payload delivered to your URL

{
  "event":            "new_trade",
  "ticker":           "NVDA",
  "politician":       "Nancy Pelosi",
  "trade_type":       "Purchase",
  "amount":           "$1,000,001 - $5,000,000",
  "filing_date":      "2026-05-30",
  "transaction_date": "2026-05-15",
  "source":           "House",
  "api_url":          "https://congressinfor-production.up.railway.app/trades/NVDA"
}

More examples in the congressinvests-api SDK repo ↗ · Full webhook API docs ↗

Interactive API tester

Live data pulled from the production API. No key required for the free tier.

Chamber:
NVDA AAPL MSFT TSLA AMZN META GOOGL AMD
Select a ticker above or switch to Recent Trades to try the API live.

Pricing

Start for free. Upgrade as your usage grows. No credit card required to get started.

Free
$0 / month

Everything you need to explore congressional trading data.


  • 100 requests / day
  • Ticker lookup /trades/{ticker}
  • Global feed /trades
  • Both Senate & House data
  • 365-day history
  • API key & higher limits
  • Webhook notifications
  • Priority cache refresh
  • Email support
Start using the API
Enterprise
Custom

For newsrooms, fintechs, and teams that need guaranteed uptime and custom data.


  • Unlimited requests
  • All Pro tier features
  • Dedicated Railway instance
  • SLA & uptime guarantee
  • Custom lookback window
  • White-label / embedding rights
  • Priority cache (configurable)
  • Slack / phone support
Contact us

All plans subject to House Clerk and Senate EFD fair-use terms. Prices in USD. Cancel any time.

Already a Pro subscriber? Manage or cancel your subscription.

Real-Time Trade Alerts

Get notified the moment a new disclosure hits — before most people even know it exists.

On disclosure timing: We can't show you trades the day they happen — nobody can, by law. What we can do is notify you within minutes or hours of when the disclosure becomes public. That's often the moment the broader market starts reacting.
🎯

Subscribe by ticker

Watch NVDA, AAPL, or any symbol. Get a webhook the instant a member files a trade on it.

👤

Subscribe by politician

Follow specific members of Congress across every ticker they trade — Senate or House.

Minutes after filing

Our incremental refresh runs every 6 hours. Webhooks fire the moment new PTRs are detected.

🔁

Reliable delivery

Automatic retries with exponential back-off. Every delivery attempt is logged.

Webhook payload delivered to your URL on every new trade:

{
  "event":            "new_trade",
  "ticker":           "NVDA",
  "politician":       "Nancy Pelosi",
  "trade_type":       "Purchase",
  "amount":           "$1,000,001 - $5,000,000",
  "filing_date":      "2026-05-30",
  "transaction_date": "2026-05-15",
  "source":           "House",
  "api_url":          "https://congressinfor-production.up.railway.app/trades/NVDA"
}

Webhook alerts are a Pro tier feature. View API docs ↗

Get in touch

Interested in Pro or Enterprise access, have a question, or want to report an issue? Send a message and we'll get back to you.