# Congressional Trading Signals — STOCK Act Intelligence (`ryanclinton/congress-stock-tracker`) Actor

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.

- **URL**: https://apify.com/ryanclinton/congress-stock-tracker.md
- **Developed by:** [Ryan Clinton](https://apify.com/ryanclinton) (community)
- **Categories:** Developer tools
- **Stats:** 40 total users, 8 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 trade fetcheds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Congressional Trading Signals — STOCK Act Intelligence

![Congressional Trading Signals — turn STOCK Act disclosures into trading signals](https://apifyforge.com/readme-assets/ryanclinton-congress-stock-tracker/hero.png)

**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:

```text
0   = little congressional activity
50  = moderate interest
100 = 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.

```json
{ "ticker": "NVDA", "consensusScore": 92, "purchaseCount": 9, "saleCount": 1, "memberCount": 6 }
```

***

### Example investigation

```text
Input:  { "tickers": ["NVDA"], "includeAggregates": true, "includeEvents": true }

Output:
  tickerSummary  NVDA — 9 purchases, 0 sales, 6 members, consensusScore 92
  event          trade_cluster — 4 members bought NVDA within 12 days
  event          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

![What you also get — why-it-matters signals, STOCK Act compliance, congressional consensus, automation-ready](https://apifyforge.com/readme-assets/ryanclinton-congress-stock-tracker/feature-callouts.png)

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_accumulation` events.
- **Find late disclosures** — `lateFilingsOnly: true`, `severely_late_filing` events, `memberSummary.lateFilingRate`.
- **Monitor congressional accumulation** — sort `tickerSummary` by `consensusScore`.
- **Track committee-linked trading** — supply `committeeData`, enable `committee_activity` events.
- **Build automated alerts** — branch on `eventType` / `alertPriority` / `complianceStatus` in Slack, Dify, Zapier, or Make.
- **Research congressional trading trends** — `trend` records + 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 `compliance` block: days between the trade and its disclosure, the 45-day deadline, and a `status` of `on-time`, `late`, or `severely-late`. Late filings are the headline finding for journalists and watchdogs.
- **Estimated dollar volume.** Amount ranges are parsed to `amountMin` / `amountMax` / `amountMidpoint` so 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`), an `alertPriority` of `high` / `medium` / `low`, and an `importanceScore` (0-100, sortable; filter with `minImportanceScore`) — branch on them in Slack/Zapier/Dify without parsing prose.
- **Aggregate & trend records (opt-in).** Turn on `includeAggregates` for one `tickerSummary` per ticker (buyers, sellers, buy/sell ratio, volume, a 0-100 `consensusScore`, and `momentum`/velocity) and one `memberSummary` per 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 on `includeTrends` for per-ticker weekly/monthly `trend` records.
- **Event records — "why it matters" (opt-in).** Turn on `includeEvents` for deterministic `event` records: `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` (with `committeeData`), and `behavior_change` (a member's trading rate spiking above their baseline). Each carries a plain-English `reason`. This is the layer most trackers don't expose.
- **Story records (opt-in).** Turn on `includeStories` for 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`/`industry` from a curated map (NVDA → Technology / Semiconductors), and `committeeMemberships` when you supply a `committeeData` map — so you can ask "Energy Committee members buying oil stocks?" `null`/empty when not covered — never guessed.
- **Audit-grade provenance.** Every record carries a `provenance` block: source system, retrieval timestamp, parser version, parse confidence, and the SHA-256 hash of the source PDF.
- **Cross-run monitoring.** Set a `watchlistName` and each record is tagged `NEW` or `UNCHANGED` versus 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-late` status 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.gov` and `efdsearch.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`/`toDate` on 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 a `newOnly` alert filter

***

### How to use

#### Using Apify Console

1. Open [Congressional Trading Signals](https://apify.com/ryanclinton/congress-stock-tracker) on the Apify Store.
2. Click **Try for free**.
3. Configure the input — or leave the defaults to pull the latest 90 days of House trades.
4. Click **Start**.
5. 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

```bash
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](https://console.apify.com/account/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

```json
{
  "tickers": ["NVDA", "MSFT"],
  "chamber": "house",
  "transactionType": "purchase",
  "minAmountMidpoint": 50000,
  "daysBack": 365,
  "maxResults": 200
}
```

***

### Output

![Sample output — member, ticker, side, amount, compliance status, and importance score per disclosed trade](https://apifyforge.com/readme-assets/ryanclinton-congress-stock-tracker/output-table.png)

Each `trade` record is a single disclosed transaction. Example (House):

```json
{
  "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):

```json
{
  "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:

```json
{ "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:

```json
{ "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):

```json
{ "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:

```json
{ "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

![Intelligence stack — official filings through PDF extraction, compliance, signal tagging, pattern detection, consensus scoring, to alert-ready records](https://apifyforge.com/readme-assets/ryanclinton-congress-stock-tracker/intelligence-layers.png)

1. **House filing index** — download the House Clerk annual XML feed and select PTR filings (types P and X) in your window.
2. **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`.
3. **Senate filings** — query the Senate EFD portal and return filing-level metadata + a link to each report.
4. **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.
5. **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](https://docs.apify.com/platform/integrations/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):

```json
{
  "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 by `eventType` (e.g. `trade_cluster` → notify); `recordType == "summary"` → read the run aggregate; `recordType == "error"` → alert.
- `compliance.status == "late"` OR `compliance.status == "severely-late"` → STOCK Act late-filing alert.
- `transactionSide == "PURCHASE"` → buy-signal branch; `transactionSide == "SALE"` → sell-signal branch.
- `importanceScore >= 75` OR `alertPriority == "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 `filing` record (`extractionStatus: scanned-no-text`) with the PDF link rather than parsed transactions.
- **Party affiliation** is not published in either source feed; the `party` field 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](https://apify.com/ryanclinton/sec-insider-trading) actor tracks SEC Form 4 filings by corporate insiders — different people, different framework.

***

### Related actors

| Actor | Description |
|-------|-------------|
| [SEC Insider Trading](https://apify.com/ryanclinton/sec-insider-trading) | SEC Form 4 trades by corporate officers, directors, and major shareholders. |
| [SEC EDGAR Filing Analyzer](https://apify.com/ryanclinton/sec-edgar-filing-analyzer) | Search and analyze SEC EDGAR filings (10-K, 10-Q, 8-K, and more). |
| [Congress Bill Search](https://apify.com/ryanclinton/congress-bill-search) | Search U.S. Congress bills by keyword, sponsor, or status. |
| [FEC Campaign Finance Search](https://apify.com/ryanclinton/fec-campaign-finance) | Federal Election Commission contributions, expenditures, and committee filings. |
| [Federal Register Search](https://apify.com/ryanclinton/federal-register-search) | Proposed rules, final rules, executive orders, and agency notices. |

# Actor input Schema

## `members` (type: `array`):

Congress members to search (e.g. \["Pelosi", "Tuberville"]). Partial match. Empty = all members.

## `tickers` (type: `array`):

Filter House trades by extracted ticker (e.g. \["NVDA", "AAPL"]). Empty = all tickers.

## `states` (type: `array`):

Two-letter state codes to filter by (e.g. \["CA", "TX"]). Applies to House records.

## `chamber` (type: `string`):

Filter by congressional chamber.

## `transactionType` (type: `string`):

Filter by transaction side, matched against the real extracted buy/sell/exchange code on House trades.

## `daysBack` (type: `integer`):

How many days back to fetch filings.

## `fromDate` (type: `string`):

Lower bound (YYYY-MM-DD) applied to the date basis below. Refines the daysBack window.

## `toDate` (type: `string`):

Upper bound (YYYY-MM-DD) applied to the date basis below.

## `dateBasis` (type: `string`):

Which date the From/To range filters on. Transaction date = when the trade happened; disclosure date = when it was filed.

## `minAmountMidpoint` (type: `integer`):

Only return trades whose disclosed amount midpoint is at least this value. 0 = no minimum.

## `minImportanceScore` (type: `integer`):

Only return trades with importanceScore (0-100) at least this value. Importance = size + lateness + asset/owner flags + recency. 0 = no minimum.

## `lateFilingsOnly` (type: `boolean`):

Return only trades disclosed outside the STOCK Act 45-day window (late or severely-late).

## `newOnly` (type: `boolean`):

Watchlist mode only: emit only filings not seen in prior runs on the same watchlist. Ideal for scheduled alerts.

## `watchlistName` (type: `string`):

Set a name to enable cross-run monitoring. Records are tagged changeFlag NEW or UNCHANGED versus prior runs.

## `maxResults` (type: `integer`):

Maximum records returned. House PTR PDFs are parsed newest-first; higher values parse more filings.

## `outputProfile` (type: `string`):

full = every field; minimal = headline trade columns; dashboard = member/ticker/side/amountMidpoint/compliance/importance (BI tools); monitoring = ids + signalTags/alertPriority/changeFlag (automations).

## `includeAggregates` (type: `boolean`):

Emit one tickerSummary record per ticker and one memberSummary record per member (buy/sell counts, volume, late-filing rate). Not charged.

## `includeTrends` (type: `boolean`):

Emit per-ticker time-bucketed trend records (purchase/sale counts + volume per period). Not charged.

## `includeEvents` (type: `boolean`):

Emit deterministic 'why it matters' event records: large\_purchase / large\_sale, late\_filing / severely\_late\_filing, trade\_cluster (3+ members buying one ticker within 30 days), congressional\_accumulation, plus new\_position / position\_exit (watchlist mode) and committee\_activity (when committeeData supplied). Not charged.

## `includeStories` (type: `boolean`):

Emit templated journalist 'story' records (headline + category) composed from the strongest events — committee clusters, buyer clusters, accumulation, severe late filings. Not charged.

## `committeeData` (type: `object`):

Your own member -> committees map for committee enrichment, e.g. {"Pelosi": \["Intelligence"], "Walberg": \["Energy and Commerce"]}. Keys match member names loosely (last name OK). Enables committeeMemberships on trades + committee\_activity events. The actor never bundles a roster — you supply authoritative data.

## `trendBucket` (type: `string`):

Time bucket for trend records.

## `saveSourcePdfs` (type: `boolean`):

Store each parsed House PTR PDF to the key-value store and add sourcePdfKey to the record. Useful for audit / journalism.

## `saveRawText` (type: `boolean`):

Store the extracted PTR text to the key-value store and add rawTextKey to the record.

## `member` (type: `string`):

Legacy alias for a single entry in Member Names. Prefer the members list.

## `ticker` (type: `string`):

Legacy alias for a single entry in Stock Tickers. Prefer the tickers list.

## `proxyConfiguration` (type: `object`):

The Senate EFD portal restricts automated access from shared IPs. To include Senate data reliably, enable a residential proxy. House data needs no proxy.

## Actor input object example

```json
{
  "chamber": "both",
  "transactionType": "both",
  "daysBack": 90,
  "dateBasis": "disclosureDate",
  "minAmountMidpoint": 0,
  "minImportanceScore": 0,
  "lateFilingsOnly": false,
  "newOnly": false,
  "maxResults": 50,
  "outputProfile": "full",
  "includeAggregates": false,
  "includeTrends": false,
  "includeEvents": false,
  "includeStories": false,
  "trendBucket": "week",
  "saveSourcePdfs": false,
  "saveRawText": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("ryanclinton/congress-stock-tracker").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    } }

# Run the Actor and wait for it to finish
run = client.actor("ryanclinton/congress-stock-tracker").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call ryanclinton/congress-stock-tracker --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=ryanclinton/congress-stock-tracker",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Congressional Trading Signals — STOCK Act Intelligence",
        "description": "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.",
        "version": "2.0",
        "x-build-id": "a8FXMyaeBWscOqX75"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/ryanclinton~congress-stock-tracker/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-ryanclinton-congress-stock-tracker",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/ryanclinton~congress-stock-tracker/runs": {
            "post": {
                "operationId": "runs-sync-ryanclinton-congress-stock-tracker",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/ryanclinton~congress-stock-tracker/run-sync": {
            "post": {
                "operationId": "run-sync-ryanclinton-congress-stock-tracker",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "members": {
                        "title": "Member Names",
                        "maxItems": 50,
                        "type": "array",
                        "description": "Congress members to search (e.g. [\"Pelosi\", \"Tuberville\"]). Partial match. Empty = all members.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "tickers": {
                        "title": "Stock Tickers",
                        "maxItems": 100,
                        "type": "array",
                        "description": "Filter House trades by extracted ticker (e.g. [\"NVDA\", \"AAPL\"]). Empty = all tickers.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "states": {
                        "title": "States",
                        "maxItems": 56,
                        "type": "array",
                        "description": "Two-letter state codes to filter by (e.g. [\"CA\", \"TX\"]). Applies to House records.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "chamber": {
                        "title": "Chamber",
                        "enum": [
                            "both",
                            "house",
                            "senate"
                        ],
                        "type": "string",
                        "description": "Filter by congressional chamber.",
                        "default": "both"
                    },
                    "transactionType": {
                        "title": "Transaction Side",
                        "enum": [
                            "both",
                            "purchase",
                            "sale",
                            "exchange"
                        ],
                        "type": "string",
                        "description": "Filter by transaction side, matched against the real extracted buy/sell/exchange code on House trades.",
                        "default": "both"
                    },
                    "daysBack": {
                        "title": "Days Back",
                        "minimum": 1,
                        "maximum": 730,
                        "type": "integer",
                        "description": "How many days back to fetch filings.",
                        "default": 90
                    },
                    "fromDate": {
                        "title": "From Date (optional)",
                        "type": "string",
                        "description": "Lower bound (YYYY-MM-DD) applied to the date basis below. Refines the daysBack window."
                    },
                    "toDate": {
                        "title": "To Date (optional)",
                        "type": "string",
                        "description": "Upper bound (YYYY-MM-DD) applied to the date basis below."
                    },
                    "dateBasis": {
                        "title": "Date Basis",
                        "enum": [
                            "disclosureDate",
                            "transactionDate"
                        ],
                        "type": "string",
                        "description": "Which date the From/To range filters on. Transaction date = when the trade happened; disclosure date = when it was filed.",
                        "default": "disclosureDate"
                    },
                    "minAmountMidpoint": {
                        "title": "Minimum Trade Size (USD)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Only return trades whose disclosed amount midpoint is at least this value. 0 = no minimum.",
                        "default": 0
                    },
                    "minImportanceScore": {
                        "title": "Minimum Importance Score",
                        "minimum": 0,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Only return trades with importanceScore (0-100) at least this value. Importance = size + lateness + asset/owner flags + recency. 0 = no minimum.",
                        "default": 0
                    },
                    "lateFilingsOnly": {
                        "title": "Late Filings Only",
                        "type": "boolean",
                        "description": "Return only trades disclosed outside the STOCK Act 45-day window (late or severely-late).",
                        "default": false
                    },
                    "newOnly": {
                        "title": "New Trades Only",
                        "type": "boolean",
                        "description": "Watchlist mode only: emit only filings not seen in prior runs on the same watchlist. Ideal for scheduled alerts.",
                        "default": false
                    },
                    "watchlistName": {
                        "title": "Watchlist Name (optional)",
                        "type": "string",
                        "description": "Set a name to enable cross-run monitoring. Records are tagged changeFlag NEW or UNCHANGED versus prior runs."
                    },
                    "maxResults": {
                        "title": "Max Results",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Maximum records returned. House PTR PDFs are parsed newest-first; higher values parse more filings.",
                        "default": 50
                    },
                    "outputProfile": {
                        "title": "Output Profile",
                        "enum": [
                            "full",
                            "minimal",
                            "dashboard",
                            "monitoring"
                        ],
                        "type": "string",
                        "description": "full = every field; minimal = headline trade columns; dashboard = member/ticker/side/amountMidpoint/compliance/importance (BI tools); monitoring = ids + signalTags/alertPriority/changeFlag (automations).",
                        "default": "full"
                    },
                    "includeAggregates": {
                        "title": "Include Aggregate Records",
                        "type": "boolean",
                        "description": "Emit one tickerSummary record per ticker and one memberSummary record per member (buy/sell counts, volume, late-filing rate). Not charged.",
                        "default": false
                    },
                    "includeTrends": {
                        "title": "Include Trend Records",
                        "type": "boolean",
                        "description": "Emit per-ticker time-bucketed trend records (purchase/sale counts + volume per period). Not charged.",
                        "default": false
                    },
                    "includeEvents": {
                        "title": "Include Event Records",
                        "type": "boolean",
                        "description": "Emit deterministic 'why it matters' event records: large_purchase / large_sale, late_filing / severely_late_filing, trade_cluster (3+ members buying one ticker within 30 days), congressional_accumulation, plus new_position / position_exit (watchlist mode) and committee_activity (when committeeData supplied). Not charged.",
                        "default": false
                    },
                    "includeStories": {
                        "title": "Include Story Records",
                        "type": "boolean",
                        "description": "Emit templated journalist 'story' records (headline + category) composed from the strongest events — committee clusters, buyer clusters, accumulation, severe late filings. Not charged.",
                        "default": false
                    },
                    "committeeData": {
                        "title": "Committee Data (optional)",
                        "type": "object",
                        "description": "Your own member -> committees map for committee enrichment, e.g. {\"Pelosi\": [\"Intelligence\"], \"Walberg\": [\"Energy and Commerce\"]}. Keys match member names loosely (last name OK). Enables committeeMemberships on trades + committee_activity events. The actor never bundles a roster — you supply authoritative data."
                    },
                    "trendBucket": {
                        "title": "Trend Bucket",
                        "enum": [
                            "week",
                            "month"
                        ],
                        "type": "string",
                        "description": "Time bucket for trend records.",
                        "default": "week"
                    },
                    "saveSourcePdfs": {
                        "title": "Save Source PDFs",
                        "type": "boolean",
                        "description": "Store each parsed House PTR PDF to the key-value store and add sourcePdfKey to the record. Useful for audit / journalism.",
                        "default": false
                    },
                    "saveRawText": {
                        "title": "Save Raw Filing Text",
                        "type": "boolean",
                        "description": "Store the extracted PTR text to the key-value store and add rawTextKey to the record.",
                        "default": false
                    },
                    "member": {
                        "title": "Member Name (legacy alias)",
                        "type": "string",
                        "description": "Legacy alias for a single entry in Member Names. Prefer the members list."
                    },
                    "ticker": {
                        "title": "Stock Ticker (legacy alias)",
                        "type": "string",
                        "description": "Legacy alias for a single entry in Stock Tickers. Prefer the tickers list."
                    },
                    "proxyConfiguration": {
                        "title": "Proxy (for Senate EFD)",
                        "type": "object",
                        "description": "The Senate EFD portal restricts automated access from shared IPs. To include Senate data reliably, enable a residential proxy. House data needs no proxy."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
