# Congress Trading Tracker API: House & Senate Stock Trades (`sentisense/congress-trading-tracker-api`) Actor

House and Senate STOCK Act stock trades, one row per trade: look up a ticker, a member by name, or the newest disclosures across Congress. Updated daily.

- **URL**: https://apify.com/sentisense/congress-trading-tracker-api.md
- **Developed by:** [SentiSense](https://apify.com/sentisense) (community)
- **Categories:** Business, AI, Agents
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$50.00 / 1,000 up to 100 trades

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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Congress Trading Tracker API: House & Senate Stock Trades

Stock trades U.S. Senators and Representatives disclose under the STOCK Act, one flat row per trade. Look up a ticker to see which members traded it, look up a member by name to see what they
traded, or leave both empty for the newest disclosures across all of Congress. Up to 25 tickers and 10
members in one run, from official House and Senate filings, updated daily.

**Who it is for**

- Traders who watch congressional buying in a name as one more smart-money signal next to insiders
  and institutions, and want it as rows, not PDFs.
- Journalists, researchers and compliance teams who need a member's disclosed trades in a spreadsheet
  instead of reading two chambers' filing systems one disclosure at a time.
- AI agents answering "did anyone in Congress buy this stock" or "what has this Senator been trading"
  with typed rows instead of a search session.

**What you get per trade**

- **Who traded**: member name, chamber, party, state, the official Congressional Bioguide id and a
  member slug you can pass back as a `politicians` input.
- **What was traded**: ticker, asset description, asset type (Stock, ETF or Stock Option), and for
  options the type, strike and expiration.
- **The trade itself**: PURCHASE, SALE, EXCHANGE or OTHER, the trade date, the disclosure date, and how
  many days the filing trailed the trade.
- **The amount**: the STOCK Act range exactly as filed, such as "$15,001 - $50,000", plus the parsed
  `amountMin` and `amountMax` so ranges sort and sum.
- **Whose account**: Self, Spouse, Child or Joint, whenever the filing says.

Built by SentiSense, which ingests news, social media, filings and market data all day and distills it
with AI. For a few congressional and insider rows next to sentiment, quote and analyst data, use the
companion actor `stock-research-report`.

Data by [SentiSense](https://sentisense.ai). API docs: [sentisense.ai/docs/api](https://sentisense.ai/docs/api/).

### Input

| Field | Type | Default | Notes |
|---|---|---|---|
| `tickers` | string\[] | `[]` | US stock or ETF symbols, e.g. `["NVDA", "TSLA"]`. Up to 25 per run, case-insensitive, duplicates removed. Each returns the members who disclosed a trade in it. |
| `politicians` | string\[] | `[]` | Full or partial member names, e.g. `["Nancy Pelosi"]` or `["pelosi"]`. Up to 10 per run, resolved against the tracked directory, which includes former members. |
| `lookbackDays` | integer | `90` | Trailing window, 1 to 365, applied to the disclosure date, since a disclosure can trail the trade by up to 45 days. |
| `chamber` | enum | `ANY` | `ANY`, `HOUSE` or `SENATE`. Filters every lookup. |
| `maxTradesPerLookup` | integer | `100` | Most trades returned per ticker, per member, or for the latest feed, 1 to 500. Newest disclosure first. Billed per block of up to 100 rows. |

Leave both `tickers` and `politicians` empty to get the latest disclosures across Congress.

### Output

One dataset row per disclosed trade, flat and CSV-friendly. Illustrative rows, every value invented.
A ticker lookup row:

```json
{
  "lookupType": "ticker", "lookup": "NVDA",
  "politicianName": "Example Member", "chamber": "HOUSE", "party": "Democrat", "state": "CA",
  "bioguideId": "X000001", "memberSlug": "Example-Member",
  "ticker": "NVDA", "assetDescription": "NVIDIA Corp Common Stock", "assetType": "Stock",
  "optionType": null, "optionStrike": null, "optionExpiration": null,
  "transactionType": "PURCHASE", "transactionDate": "2025-10-15", "disclosureDate": "2025-11-01",
  "disclosureDelayDays": 17,
  "amountRange": "$15,001 - $50,000", "amountMin": 15001, "amountMax": 50000,
  "owner": "Spouse"
}
```

A member lookup row for an options trade:

```json
{
  "lookupType": "member", "lookup": "Example Senator",
  "politicianName": "Example Senator", "chamber": "SENATE", "party": "Republican", "state": "TX",
  "bioguideId": "X000002", "memberSlug": "Example-Senator",
  "ticker": "AAPL", "assetDescription": "Apple Inc Call Option", "assetType": "Stock Option",
  "optionType": "CALL", "optionStrike": 250, "optionExpiration": "2025-12-19",
  "transactionType": "SALE", "transactionDate": "2025-09-30", "disclosureDate": "2025-10-28",
  "disclosureDelayDays": 28,
  "amountRange": "$1,001 - $15,000", "amountMin": 1001, "amountMax": 15000,
  "owner": "Self"
}
```

Reading the fields:

- `lookupType` and `lookup` say which input produced the row: `ticker` with the symbol, `member` with
  the member's display name, or `latest` with the literal `"latest"` when both inputs were empty. Rows
  are newest disclosure first within each lookup.
- Amounts are ranges by law. A STOCK Act filing reports a band, never a dollar figure, so `amountRange`
  is the band as filed and `amountMin` / `amountMax` are its parsed edges. Do not read `amountMax` as
  what was spent.
- `disclosureDate` is what the window filters on, and `disclosureDelayDays` is the gap between the
  trade and its filing. The law allows up to 45 days, so a 90-day window on disclosures can carry trades
  from more than four months back.
- `transactionType` is `PURCHASE`, `SALE`, `EXCHANGE` or `OTHER`. `assetType` is `Stock`, `ETF` or
  `Stock Option`. The three `option*` fields are set only on option rows whose filing states the
  type, strike and expiration; many option filings do not, so expect `null` there too.
- `owner` is `Self`, `Spouse`, `Child` or `Joint`, or `null` when the filing leaves it blank. `chamber`
  is `HOUSE` or `SENATE`. `bioguideId` is the official Congressional Bioguide identifier, so the same
  person matches across spellings of the name.
- Uncharged marker rows: a ticker with nothing disclosed in the window returns
  `{"lookupType": "ticker", "lookup": "XYZ", "error": "no_trades"}`, which is normal for most stocks. A
  name that matches nobody returns `member_not_found`; a name that fits several members (for example
  "Kelly") returns `member_ambiguous` with a `candidates` array of up to 5 names to pick from. Failed
  requests return `request_failed` or `http_<status>`. None of these is charged.

### Pricing

$0.05 per block of up to 100 trades a lookup returns, rounded up. A ticker or member lookup with 1 to
100 trades costs $0.05, one with 101 to 200 costs $0.10, and a full 500-trade latest feed costs $0.25.
Lookups with no trades, unknown or ambiguous names and failed requests cost nothing. Five tickers and two
members, each with between 1 and 100 trades, cost $0.35.

### FAQ

**How fresh is the data?** Updated daily from official House and Senate STOCK Act disclosures. The lag
that matters is the law's: a member has up to 45 days to disclose a trade, so the newest rows describe
trades from days to weeks ago. `disclosureDelayDays` tells you each row's gap.

**Why does my ticker come back with `no_trades`?** Because nobody in Congress disclosed a trade in it
during the window, which is the normal case. Several thousand trades a year are disclosed across all of
Congress; a heavily traded mega cap can show dozens in a year, while many stocks show none. Widen `lookbackDays` to 365 for a quieter stock. The row is free.

**How do I look up a member?** Pass the name, full or partial, in `politicians`: `"Nancy Pelosi"` and
`"pelosi"` resolve to the same member. An exact name match wins outright. If a partial name fits several
members, you get an uncharged `member_ambiguous` row listing up to five candidates; pass one of those
names back. Former members are in the directory too.

**What does the latest feed give me?** Leave `tickers` and `politicians` empty and you get the newest
disclosures across all of Congress, newest first, up to `maxTradesPerLookup` rows, filtered by `chamber`
and `lookbackDays` like any other lookup, and priced the same way: the default 100 rows cost $0.05 and the
500-row maximum costs $0.25.

**Can I get exact dollar amounts?** No, nobody can from these filings. The STOCK Act asks members to
report a range, so `amountRange` is the most precise figure that exists. `amountMin` and `amountMax`
make the ranges sortable and summable.

**Does it cover options and ETFs?** Yes. `assetType` is `Stock`, `ETF` or `Stock Option`, and option
rows carry the type, strike and expiration when the filing states them (often it does not). A ticker lookup on an ETF symbol
returns the members who disclosed trading that fund.

**How often should I run it?** Once a day is enough: filings are processed daily and a trade can take
weeks to be disclosed, so there is nothing intraday to catch. A daily run with the latest feed plus your
watchlist tickers covers both angles.

Educational and informational use only. Not investment advice.

# Actor input Schema

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

Stock tickers to check for congressional trades, e.g. NVDA, MSFT. Up to 25 per run, case-insensitive, duplicates removed. Leave tickers and politicians both empty to get the latest disclosures across Congress.

## `politicians` (type: `array`):

Senators or Representatives by full or partial name, e.g. Nancy Pelosi or pelosi. Up to 10 per run. Former members are included. A name that matches several members returns their names instead of trades.

## `lookbackDays` (type: `integer`):

Trailing window applied to the disclosure date. Disclosures can trail the trade by up to 45 days.

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

Keep trades from one chamber only.

## `maxTradesPerLookup` (type: `integer`):

Most recent trades returned for each ticker, member, or the latest-disclosures feed. Billed per block of up to 100 rows, rounded up.

## Actor input object example

```json
{
  "tickers": [
    "NVDA"
  ],
  "politicians": [
    "Nancy Pelosi"
  ],
  "lookbackDays": 90,
  "chamber": "ANY",
  "maxTradesPerLookup": 100
}
```

# Actor output Schema

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

One row per disclosed trade, plus one uncharged row per lookup that returned no trades.

# 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 = {
    "tickers": [
        "NVDA"
    ],
    "politicians": [
        "Nancy Pelosi"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("sentisense/congress-trading-tracker-api").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 = {
    "tickers": ["NVDA"],
    "politicians": ["Nancy Pelosi"],
}

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

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

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

```

## CLI example

```bash
echo '{
  "tickers": [
    "NVDA"
  ],
  "politicians": [
    "Nancy Pelosi"
  ]
}' |
apify call sentisense/congress-trading-tracker-api --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,sentisense/congress-trading-tracker-api"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/FSo3IVQJOZ8ilR1zC/builds/j0aq4tnMr772hMVGH/openapi.json
