Congressional Trading Signals — STOCK Act Intelligence
Pricing
from $2.00 / 1,000 trade fetcheds
Congressional Trading Signals — STOCK Act Intelligence
Turn US congressional STOCK Act disclosures into signals. Parses House filings into trades, then detects late disclosures, buying clusters, new positions, committee activity, behaviour changes, and consensus scores. Official House & Senate data — no AI, no third-party sources.
Pricing
from $2.00 / 1,000 trade fetcheds
Rating
0.0
(0)
Developer
Ryan Clinton
Maintained by CommunityActor stats
1
Bookmarked
40
Total users
8
Monthly active users
9 days ago
Last modified
Categories
Share

The fastest way to discover unusual congressional trading activity from official STOCK Act disclosures. This actor doesn't just return filings — it parses the House PDFs into individual transactions and turns them into signals: clusters, late disclosures, new positions, committee-linked activity, behaviour changes, and emerging congressional consensus. Official House and Senate data only. No AI, no third-party datasets.
Under the STOCK Act of 2012, every member of Congress must publicly disclose stock transactions over $1,000 within 45 days. This actor collects, extracts, and analyses those filings so you get the signal, not 300 PDFs.
Detect signals like
Congressional accumulation — "PLTR accumulated: 9 purchases vs 1 sale across 6 members"
Trade cluster — "4 members bought NVDA within 12 days"
New position — "Jane Doe opened a new position in NVDA"
Behaviour change — "David Taylor made 12 trades in the last 30 days vs a ~1.8/month baseline"
Late disclosure — "AMZN disclosed 436 days after the transaction date"
Each is a structured, deterministic record your dashboard or automation can branch on — no prose parsing. The examples above are real signals generated from actual House filings.
Congressional Consensus Score
A deterministic 0-100 measure of congressional interest in a stock:
0 = little congressional activity50 = moderate interest100 = broad congressional accumulation
Derived from unique buyers, buy/sell ratio, new positions, and activity velocity — no market data required. It rides on every tickerSummary record (includeAggregates: true), which the actor sorts highest-consensus first.
{ "ticker": "NVDA", "consensusScore": 92, "purchaseCount": 9, "saleCount": 1, "memberCount": 6 }
Example investigation
Input: { "tickers": ["NVDA"], "includeAggregates": true, "includeEvents": true }Output:tickerSummary NVDA — 9 purchases, 0 sales, 6 members, consensusScore 92event trade_cluster — 4 members bought NVDA within 12 daysevent new_position — 2 members opened a first-time NVDA position→ Congressional accumulation signal generated.
Questions this actor answers
Can I detect unusual congressional trading activity before it becomes a headline?
Yes — set includeEvents: true and watch for trade_cluster, congressional_accumulation, behavior_change, and new_position.
Can I detect when Congress starts accumulating a stock?
Yes — filter eventType = congressional_accumulation, or read tickerSummary.consensusScore.
Can I identify unusually late disclosures?
Yes — set lateFilingsOnly: true, or read complianceStatus / the severely_late_filing event.
Can I find committee members trading companies in their oversight area?
Yes — supply a committeeData map and enable committee_activity events.
Can I detect when a member opens a brand-new position?
Yes — run in watchlist mode (watchlistName) with includeEvents: true; watch for new_position / position_exit.
Can I spot a member whose trading suddenly spikes?
Yes — the behavior_change event fires when a member's recent rate runs well above their baseline.
Can I rank members by disclosure timeliness, or stocks by congressional interest?
Yes — includeAggregates: true gives memberSummary.lateFilingRate and tickerSummary.consensusScore / momentum.
Why people switch
A raw congressional-trades CSV leaves you to download filings → parse PDFs → normalize amounts → calculate compliance → detect patterns → build alerts yourself. This actor already did that. You get trade, event, and summary records — not a folder of PDFs.
Why this is different

Most congressional-trading tools return filings. This actor returns:
- ✓ Parsed transactions (ticker, side, amount, dates) — not PDF links
- ✓ STOCK Act compliance analysis (on-time / late / severely-late)
- ✓ Alert-ready signals + importance scores
- ✓ Trading clusters & congressional consensus scores
- ✓ New-position / position-exit detection (cross-run)
- ✓ Committee-linked activity (your roster)
- ✓ Behaviour-change & momentum detection
- ✓ Journalist-ready headlines
No AI required. No third-party datasets required. Only official government disclosures.
| Capability | Generic tracker | This actor |
|---|---|---|
| Filing links | ✓ | ✓ |
| Parsed transactions | sometimes | ✓ |
| STOCK Act compliance scoring | rare | ✓ |
| New-position / exit detection | ✗ | ✓ |
| Trade clusters | ✗ | ✓ |
| Congressional consensus score | ✗ | ✓ |
| Behaviour-change detection | ✗ | ✓ |
| Committee-activity detection | ✗ | ✓ |
| Automation-ready event types | partial | ✓ |
Common use cases
- Detect unusual congressional trading activity —
behavior_change,trade_cluster,congressional_accumulationevents. - Find late disclosures —
lateFilingsOnly: true,severely_late_filingevents,memberSummary.lateFilingRate. - Monitor congressional accumulation — sort
tickerSummarybyconsensusScore. - Track committee-linked trading — supply
committeeData, enablecommittee_activityevents. - Build automated alerts — branch on
eventType/alertPriority/complianceStatusin Slack, Dify, Zapier, or Make. - Research congressional trading trends —
trendrecords + structured per-transaction history.
What you get from one call
- Real transactions, not just filing links. Each House PTR PDF is parsed into its individual trades — ticker, asset name, asset type, purchase/sale/exchange, transaction date, amount range, and owner.
- STOCK Act compliance signal. Every trade carries a
complianceblock: days between the trade and its disclosure, the 45-day deadline, and astatusofon-time,late, orseverely-late. Late filings are the headline finding for journalists and watchdogs. - Estimated dollar volume. Amount ranges are parsed to
amountMin/amountMax/amountMidpointso you can sort, sum, and rank by size. - Run-level summary record. A single aggregate row (also mirrored to the key-value store
SUMMARY) with total trades, buys vs sells, estimated volume, late-filing rate, top tickers, and most-active members. - Filterable signal tags + alert priority + importance score. Each trade carries deterministic
signalTags(late-filing,large-trade,spouse-trade,stock/option/etf/crypto-related,new-trade), analertPriorityofhigh/medium/low, and animportanceScore(0-100, sortable; filter withminImportanceScore) — branch on them in Slack/Zapier/Dify without parsing prose. - Aggregate & trend records (opt-in). Turn on
includeAggregatesfor onetickerSummaryper ticker (buyers, sellers, buy/sell ratio, volume, a 0-100consensusScore, andmomentum/velocity) and onememberSummaryper member (trade count, late-filing rate, average size, trading style, favorite tickers & sectors) — the "favorite stocks" and "most active members" answers as flat BI rows. Turn onincludeTrendsfor per-ticker weekly/monthlytrendrecords. - Event records — "why it matters" (opt-in). Turn on
includeEventsfor deterministiceventrecords:large_purchase/large_sale,late_filing/severely_late_filing,trade_cluster(3+ members buying one ticker within 30 days),congressional_accumulation,new_position/position_exit(watchlist mode),committee_activity(withcommitteeData), andbehavior_change(a member's trading rate spiking above their baseline). Each carries a plain-Englishreason. This is the layer most trackers don't expose. - Story records (opt-in). Turn on
includeStoriesfor templated journalist headlines composed from the strongest events — "4 Energy Committee members traded XOM," "Tim Walberg disclosed an AMZN trade 436 days late." Deterministic templates, no LLM, paste-ready. - Sector classification + committee enrichment. Trades carry
sector/industryfrom a curated map (NVDA → Technology / Semiconductors), andcommitteeMembershipswhen you supply acommitteeDatamap — so you can ask "Energy Committee members buying oil stocks?"null/empty when not covered — never guessed. - Audit-grade provenance. Every record carries a
provenanceblock: source system, retrieval timestamp, parser version, parse confidence, and the SHA-256 hash of the source PDF. - Cross-run monitoring. Set a
watchlistNameand each record is taggedNEWorUNCHANGEDversus prior runs — ideal for scheduled daily or weekly tracking.
Key features
- Per-transaction House extraction — parses the official PTR PDFs (digitally filed reports) into structured trades, not placeholder rows
- STOCK Act timeliness scoring — deterministic
on-time/late/severely-latestatus per trade from the disclosed dates - Signal tags & alert priority — deterministic, filterable flags derived only from the disclosed data (no market interpretation)
- Dual-chamber coverage — House and Senate disclosures in a single run
- Official government sources only —
disclosures-clerk.house.govandefdsearch.senate.gov, no third-party intermediaries - Precise multi-value filters — filter by lists of tickers, members, or states; by side; by minimum trade size; or by late filings only
- Date-range control —
fromDate/toDateon either the transaction date or the disclosure date - Provenance & audit artifacts — parse confidence + PDF hash on every record; optional original-PDF / raw-text storage
- Aggregate intelligence — top tickers, most-active members, estimated volume, late-filing rate, and large-trade count per run
- Watchlist mode — opt-in cross-run change detection (
NEW/UNCHANGED) for scheduled monitoring, with anewOnlyalert filter
How to use
Using Apify Console
- Open Congressional Trading Signals on the Apify Store.
- Click Try for free.
- Configure the input — or leave the defaults to pull the latest 90 days of House trades.
- Click Start.
- View results in the Dataset tab (the Trades view leads with the buy/sell side and ticker). Export as JSON, CSV, Excel, or push to Google Sheets.
Using the API
curl "https://api.apify.com/v2/acts/CkxfuZrYkYFMctI4R/runs" \-X POST \-H "Content-Type: application/json" \-H "Authorization: Bearer YOUR_API_TOKEN" \-d '{"member": "Gottheimer","chamber": "house","daysBack": 120,"maxResults": 100}'
Replace YOUR_API_TOKEN with your token from the Integrations page.
Input parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
members | Array | (empty) | Congress members to search (e.g. ["Pelosi", "Tuberville"]). Partial match. Empty = all. |
tickers | Array | (empty) | Filter House trades by extracted ticker (e.g. ["NVDA", "AAPL"]). |
states | Array | (empty) | Two-letter state codes to filter by (House records). |
chamber | String | both | both, house, or senate. |
transactionType | String | both | both, purchase, sale, or exchange — matched against the real extracted side. |
daysBack | Integer | 90 | How many days back to fetch filings. 1–730. |
fromDate / toDate | String | (empty) | Optional YYYY-MM-DD bounds applied to dateBasis. |
dateBasis | String | disclosureDate | Which date fromDate/toDate filter on: disclosureDate or transactionDate. |
minAmountMidpoint | Integer | 0 | Only return trades whose disclosed amount midpoint is at least this value. |
minImportanceScore | Integer | 0 | Only return trades with importanceScore (0-100) at least this value. |
lateFilingsOnly | Boolean | false | Return only trades disclosed outside the STOCK Act 45-day window. |
newOnly | Boolean | false | Watchlist mode only: emit only filings not seen in prior runs. |
watchlistName | String | (empty) | Set to enable cross-run NEW / UNCHANGED tagging (+ firstSeenAt/lastSeenAt). |
includeAggregates | Boolean | false | Emit tickerSummary + memberSummary records. Not charged. |
includeTrends | Boolean | false | Emit per-ticker trend records. Not charged. |
includeEvents | Boolean | false | Emit event records (large/late/cluster/accumulation/new-position/committee). Not charged. |
includeStories | Boolean | false | Emit templated journalist story records. Not charged. |
committeeData | Object | (empty) | Your member→committees map for committeeMemberships + committee_activity events. |
trendBucket | String | week | week (ISO) or month for trend records. |
maxResults | Integer | 50 | Max records returned. House PDFs are parsed newest-first; higher values parse more filings. |
outputProfile | String | full | full, minimal, dashboard (BI columns), or monitoring (automation columns). |
saveSourcePdfs / saveRawText | Boolean | false | Store the source PDF / extracted text to the key-value store for audit. |
proxyConfiguration | Object | (residential prefill) | Enable a residential proxy to include Senate data reliably. House needs no proxy. |
member / ticker | String | (empty) | Legacy single-value aliases for members / tickers. |
Example input
{"tickers": ["NVDA", "MSFT"],"chamber": "house","transactionType": "purchase","minAmountMidpoint": 50000,"daysBack": 365,"maxResults": 200}
Output

Each trade record is a single disclosed transaction. Example (House):
{"recordType": "trade","schemaVersion": "2.5.0","eventId": "txn_87720b12d1dd9271","member": "Lloyd Doggett","chamber": "House","state": "TX","district": "37","ticker": "PG","assetDescription": "Procter & Gamble Company","assetType": "ST","transactionSide": "PURCHASE","transactionDate": "05/15/2026","disclosureDate": "6/4/2026","amount": "$1,001 - $15,000","amountMin": 1001,"amountMax": 15000,"amountMidpoint": 8001,"owner": "","compliance": { "daysToDisclose": 20, "filingDeadlineDays": 45, "status": "on-time", "daysLate": 0 },"complianceStatus": "on-time","complianceDaysLate": 0,"signalTags": ["stock"],"alertPriority": "low","importanceScore": 42,"filingUrl": "https://disclosures-clerk.house.gov/public_disc/ptr-pdfs/2026/20034712.pdf","docId": "20034712","extractionStatus": "parsed","provenance": { "sourceSystem": "house_clerk", "retrievedAt": "2026-06-06T16:34:05Z", "parserVersion": "2.1.0", "parseConfidence": 1, "pdfSha256": "13b3a8..." },"summary": "Lloyd Doggett (House) bought PG ($1,001 - $15,000) on 05/15/2026; disclosed 6/4/2026."}
The final record of every run is a summary (also pinned to the SUMMARY key-value store record):
{"recordType": "summary","totalTrades": 14,"purchases": 11,"sales": 3,"totalEstimatedVolumeUsd": 2330014,"lateFilingCount": 0,"lateFilingRate": 0,"topTickers": [{ "ticker": "MSFT", "count": 4, "estimatedVolumeUsd": 2250004 }],"mostActiveMembers": [{ "member": "Josh Gottheimer", "chamber": "House", "count": 12 }],"summary": "14 congressional trades (11 buys, 3 sells) worth ~$2,330,014 estimated; 0 disclosed late."}
With includeAggregates: true you also get one tickerSummary per ticker and one memberSummary per member:
{ "recordType": "tickerSummary", "ticker": "NVDA", "purchaseCount": 9, "saleCount": 1, "memberCount": 6, "buySellRatio": 9, "consensusScore": 84, "momentum": { "last30dPurchases": 7, "prior30dPurchases": 2, "changePct": 250, "velocityRatio": 4.3 }, "estimatedVolumeUsd": 1250000, "lateFilingCount": 0 }{ "recordType": "memberSummary", "member": "Tim Walberg", "tradeCount": 15, "purchaseCount": 13, "saleCount": 2, "lateFilingRate": 0.93, "tradingStyle": "active", "favoriteTickers": ["FSSL"], "favoriteSectors": ["Financials"], "topTicker": "FSSL" }
With includeTrends: true, per-ticker time buckets:
{ "recordType": "trend", "ticker": "AAPL", "period": "2025-02", "bucket": "month", "purchaseCount": 1, "saleCount": 0, "tradeCount": 1, "estimatedVolumeUsd": 32501 }
With includeEvents: true, deterministic "why it matters" records (10 eventType values; a representative few):
{ "recordType": "event", "eventType": "congressional_accumulation", "ticker": "PLTR", "purchaseCount": 9, "saleCount": 1, "buySellRatio": 9, "reason": "PLTR accumulated: 9 purchases vs 1 sales across 6 members" }{ "recordType": "event", "eventType": "new_position", "ticker": "NVDA", "member": "Jane Doe", "reason": "Jane Doe opened a new position in NVDA" }{ "recordType": "event", "eventType": "committee_activity", "committee": "Energy and Commerce", "ticker": "XOM", "memberCount": 4, "reason": "4 Energy and Commerce Committee members traded XOM" }{ "recordType": "event", "eventType": "behavior_change", "member": "David J. Taylor", "purchaseCount": 12, "reason": "David J. Taylor made 12 trades in the last 30 days vs a ~1.8/month baseline" }
With includeStories: true, one templated journalist headline per top event:
{ "recordType": "story", "headline": "4 Energy and Commerce Committee members traded XOM", "category": "committee-cluster", "ticker": "XOM", "committee": "Energy and Commerce", "memberCount": 4 }
Output fields
| Field | Description |
|---|---|
recordType | trade, filing, tickerSummary, memberSummary, trend, event, story, summary, or error. |
eventId | Stable hash identifying the transaction across runs (for dedup / watchlists). |
member / chamber / state / district | Who filed and where. |
ticker | Extracted stock ticker (House trades). |
assetDescription / assetType | Asset name and the House asset-type code (e.g. ST = stock). |
transactionSide | PURCHASE, SALE, PARTIAL_SALE, EXCHANGE, or UNKNOWN. |
transactionDate | Date the trade occurred. |
disclosureDate | Date the filing was submitted. |
amount / amountMin / amountMax / amountMidpoint | Disclosed dollar range, parsed to numbers. |
owner | Spouse / Dependent Child / Joint when disclosed (blank = the member). |
sector / industry | Curated classification for the ticker (e.g. Technology / Semiconductors). null when not in the curated map. |
committeeMemberships | Member's committees (when committeeData supplied; empty array otherwise). |
compliance | { daysToDisclose, filingDeadlineDays: 45, status, daysLate } — STOCK Act timeliness. |
complianceStatus / complianceDaysLate | Flattened compliance fields for spreadsheet filtering. |
signalTags | Deterministic tags: late-filing, large-trade, spouse-trade, family-trade, stock, option, etf, crypto-related, new-trade. |
alertPriority | high (large AND late, or severely-late) / medium / low. |
importanceScore | Deterministic 0-100 from size + lateness + asset/owner flags + recency. Sortable; filter with minImportanceScore. |
provenance | { sourceSystem, retrievedAt, parserVersion, parseConfidence (0-1), pdfSha256 }. |
filingUrl / docId | Link to the original PDF/report and its document ID. |
extractionStatus | parsed, parsed-no-transactions, scanned-no-text, or metadata-only. |
sourcePdfKey / rawTextKey | KV keys for the stored source PDF / text (when saveSourcePdfs / saveRawText enabled). |
summary | One-line plain-English description of the trade. |
changeFlag | NEW / UNCHANGED (watchlist mode only). |
How it works

- House filing index — download the House Clerk annual XML feed and select PTR filings (types P and X) in your window.
- Per-transaction extraction — fetch each PTR PDF, read its text layer, and parse the individual transactions (ticker, side, dates, amount, owner). Newest filings are parsed first; the parse count scales with
maxResults. - Senate filings — query the Senate EFD portal and return filing-level metadata + a link to each report.
- Compliance + amounts + signals — compute days-to-disclose against the 45-day deadline, parse each dollar range to min/max/midpoint, and derive the signal tags + alert priority.
- Filter, sort, summarize — apply the member/ticker/state/side/amount/date filters, stream newest-first, and emit a run-level aggregate
summary.
Use in Dify
Drop this actor into Dify workflows via the Apify plugin's Run Actor node. Each trade returns parsed, classified, and compliance-scored as structured JSON — transactionSide (PURCHASE / SALE / EXCHANGE) and compliance.status (on-time / late / severely-late) plus the recordType discriminator your downstream node branches on. A generic scraper pointed at the disclosure portals returns PDF links; this returns decisions.
- Actor ID:
ryanclinton/congress-stock-tracker - Sample input (monitor a member's recent purchases for late filings):
{"member": "Gottheimer","chamber": "house","transactionType": "purchase","daysBack": 90,"watchlistName": "gottheimer-watch"}
A Dify if/else node branches cleanly on the stable enums — no prose parsing:
recordType == "trade"→ process the transaction;recordType == "event"→ route the signal byeventType(e.g.trade_cluster→ notify);recordType == "summary"→ read the run aggregate;recordType == "error"→ alert.compliance.status == "late"ORcompliance.status == "severely-late"→ STOCK Act late-filing alert.transactionSide == "PURCHASE"→ buy-signal branch;transactionSide == "SALE"→ sell-signal branch.importanceScore >= 75ORalertPriority == "high"→ high-priority queue.- In watchlist mode,
changeFlag == "NEW"→ act only on filings not seen in prior runs.
The run-level summary record (top tickers, most-active members, estimated volume, late-filing rate) is usable verbatim in a notification or digest node — no LLM rewriting needed.
Limitations
- Senate is filing-level. The Senate EFD portal restricts automated access and gates per-transaction detail behind a session. Senate records return filing metadata plus a link to the official report; enable
proxyConfiguration(residential) to reach the portal reliably. - Scanned House filings. A small number of older PTRs are scanned images with no text layer. These return a
filingrecord (extractionStatus: scanned-no-text) with the PDF link rather than parsed transactions. - Party affiliation is not published in either source feed; the
partyfield is reserved. - Disclosure lag. Filings appear in government systems 1–2 business days after submission; this actor returns whatever is published at run time.
Responsible use
- Public government data. All filings are legally required public disclosures under the STOCK Act. No private data is collected.
- Respect government servers. Daily or hourly scheduling is reasonable; avoid per-minute runs.
- Not investment advice. Congressional disclosure data is informational. The actor reports trades and disclosure timeliness; it does not predict prices or recommend positions.
- Verify before publishing. Always check findings against the original filing linked in each record.
FAQ
Q: Does this return the actual trades or just links? A: Actual trades for the House — each PTR PDF is parsed into individual transactions with ticker, side, amount, and dates. Senate records are filing-level (metadata + report link) because the Senate portal gates transaction detail behind a session.
Q: What is the compliance block?
A: The STOCK Act requires disclosure within 45 days of a trade. compliance reports daysToDisclose and a status of on-time, late, or severely-late, computed deterministically from the disclosed dates.
Q: How does the ticker filter work now?
A: It matches the real extracted ticker on House trades, so ticker: "AAPL" returns only Apple transactions. Senate filing-level rows (which carry no extracted ticker) are kept so you don't lose Senate coverage.
Q: Why are some records filing instead of trade?
A: When a PTR is a scanned image with no text layer, or a Senate report, the actor returns a filing record with the link instead of fabricating transaction detail. The extractionStatus field tells you why.
Q: How do I monitor new trades over time?
A: Set a watchlistName and schedule the actor. Each record is tagged NEW or UNCHANGED versus prior runs on that watchlist, so you only act on genuinely new filings.
Q: What is the STOCK Act? A: The Stop Trading on Congressional Knowledge Act of 2012 requires members of Congress to publicly disclose financial transactions over $1,000 within 45 days.
Q: How is this different from the SEC Insider Trading actor? A: This tracks trades by members of Congress (STOCK Act PTRs). The SEC Insider Trading actor tracks SEC Form 4 filings by corporate insiders — different people, different framework.
Related actors
| Actor | Description |
|---|---|
| SEC Insider Trading | SEC Form 4 trades by corporate officers, directors, and major shareholders. |
| SEC EDGAR Filing Analyzer | Search and analyze SEC EDGAR filings (10-K, 10-Q, 8-K, and more). |
| Congress Bill Search | Search U.S. Congress bills by keyword, sponsor, or status. |
| FEC Campaign Finance Search | Federal Election Commission contributions, expenditures, and committee filings. |
| Federal Register Search | Proposed rules, final rules, executive orders, and agency notices. |