# US Stock Trades — House STOCK Act Disclosures (`khadinakbar/us-stock-trades-scraper`) Actor

Extract disclosed US House stock trades from official STOCK Act Periodic Transaction Reports. Returns member, ticker, buy/sell, amount range, dates, delay, and the source PTR PDF. $0.005 per trade.

- **URL**: https://apify.com/khadinakbar/us-stock-trades-scraper.md
- **Developed by:** [Khadin Akbar](https://apify.com/khadinakbar) (community)
- **Categories:** News, Automation, MCP servers
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 house stock act trades

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

## US Stock Trades — House STOCK Act Disclosures

Turn a ticker, House member name, or recent filing window into **one disclosed trade row each**. This Actor reads the official Clerk of the House yearly index and e-filed Periodic Transaction Reports (PTRs) required by the STOCK Act. Each row includes the member, ticker when the filing lists one, buy/sell/exchange, amount range, dates, disclosure delay, and the source PDF.

Use it when you already know you want **public House disclosures**. For live quotes, start with [Stock Price Tracker](https://apify.com/khadinakbar/stock-price-tracker).

### Best fit for this Actor

- Track recently disclosed House equity, ETF, or other reportable transactions from the official PTR PDFs.
- Filter a member such as `Alford` or a ticker such as `AAPL` without maintaining your own Clerk ZIP parser.
- Feed MCP or research workflows with a predictable row plus a `sourceUrl` back to the filing.

When you need SEC Form 4 company-insider filings, continue with [SEC EDGAR All-in-One Scraper](https://apify.com/khadinakbar/sec-edgar-all-in-one-scraper). When you need live quotes after a ticker list, start with [Stock Price Tracker](https://apify.com/khadinakbar/stock-price-tracker).

### Practical scenario

A political-risk analyst wants the newest House disclosures that mention `AAPL`. They leave `filingYears` at `2026`, set `tickers` to `["AAPL"]`, keep `maxFilings` at `12`, and cap `maxResults` at `10`. The Actor downloads the Clerk ZIP, opens the newest e-filed PTRs, and returns matching rows with `transactionType`, `amountRange`, `disclosureDelayDays`, and the PTR PDF. A ticker that does not appear in that filing window finishes `SUCCEEDED` with `VALID_EMPTY` and no `trade-disclosed` charge.

### Quick start input

```json
{
  "filingYears": [2026],
  "maxFilings": 2,
  "maxResults": 8
}
```

That prefill opens the two newest 2026 House PTRs and returns up to eight disclosed trades. Add `lastName` or `tickers` when you already know the member or symbol.

### Input reference

| Field | Type | What it controls |
|---|---|---|
| `tickers` | array | Optional symbols such as `AAPL`. Empty means every extractable trade in the opened filings. |
| `lastName` / `firstName` | string | Optional Clerk index name filters. Senate names are out of contract. |
| `filingYears` | array | Clerk ZIP years. Default current year. Range 2018–current. |
| `startDate` / `endDate` | string | Inclusive `YYYY-MM-DD` bounds on filing and transaction dates. |
| `transactionType` | enum | `all`, `purchase`, `sale`, or `exchange`. Partial codes stay inside purchase/sale. |
| `maxFilings` | integer | Newest matching PTR PDFs to open. Default 4, max 40. |
| `maxResults` | integer | Billed row cap. Default 10, max 200. |

### What data you receive

One dataset item is one disclosed STOCK Act transaction from an e-filed House PTR.

```json
{
  "recordId": "20034945:INTU:2026-06-10:sale:0",
  "chamber": "House",
  "memberName": "Richard W. Allen",
  "lastName": "Allen",
  "firstName": "Richard W.",
  "stateDistrict": "GA12",
  "ownerCode": "SP",
  "ticker": "INTU",
  "assetName": "Intuit Inc. - Common Stock (INTU)",
  "assetType": "ST",
  "transactionType": "sale",
  "transactionDate": "2026-06-10",
  "notificationDate": "2026-07-07",
  "filingDate": "2026-07-15",
  "amountRange": "$15,001 - $50,000",
  "amountMinUsd": 15001,
  "amountMaxUsd": 50000,
  "amountMidUsd": 32501,
  "disclosureDelayDays": 27,
  "lateFiling": false,
  "sourceUrl": "https://disclosures-clerk.house.gov/public_disc/ptr-pdfs/2026/20034945.pdf",
  "source": "house-clerk-ptr",
  "scrapedAt": "2026-09-10T12:00:00.000Z"
}
```

| Field | Meaning |
|---|---|
| `ticker` + `assetName` | Symbol when listed, plus the PTR asset description |
| `transactionType` | `purchase`, `partial-purchase`, `sale`, `partial-sale`, or `exchange` |
| `amountRange` | STOCK Act band, not an exact fill price |
| `disclosureDelayDays` | Days from transaction date to notification date |
| `sourceUrl` | Official PTR PDF on disclosures-clerk.house.gov |

`OUTPUT` and `RUN_SUMMARY` in the default key-value store hold `outcome`, `itemsPushed`, and `chargedEventCounts`.

### Use through the API

```bash
curl -X POST "https://api.apify.com/v2/acts/khadinakbar~us-stock-trades-scraper/runs" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"filingYears":[2026],"maxFilings":2,"maxResults":8}'
```

Download rows as JSON, CSV, Excel, or HTML from the Dataset tab.

### Use with AI agents through Apify MCP

> Get the newest US House STOCK Act stock trades from official PTR filings for 2026. Return memberName, ticker, transactionType, transactionDate, amountRange, and sourceUrl. Stay on House disclosures only.

Connect via <https://mcp.apify.com>. Read `OUTPUT.outcome` before retrying an empty dataset. Cost signal: `$0.005` per saved trade plus platform usage. Senate eFD and live tape are out of scope.

### Connect the workflow

- For company-insider Form 4 filings, continue with [SEC EDGAR All-in-One Scraper](https://apify.com/khadinakbar/sec-edgar-all-in-one-scraper).
- For current US quotes after you have a ticker list, start with [Stock Price Tracker](https://apify.com/khadinakbar/stock-price-tracker).
- For ticker news context, pair with [Google Finance Stock News Scraper](https://apify.com/khadinakbar/google-finance-stock-news-scraper).

### Pricing

This Actor uses Pay per event plus Apify platform usage. The live Pricing tab is the current source of truth for billing details.

- `apify-actor-start`: $0.00005 at start
- `trade-disclosed`: **$0.005** per saved House PTR trade row

A two-filing prefill that returns eight trades is about `$0.04` in result events plus a short House Clerk HTTP run. Empty matches and invalid input have no `trade-disclosed` charge.

### How it works

- Load the Clerk yearly `{year}FD.zip` index and keep `FilingType=P` Periodic Transaction Reports.
- Open the newest matching e-filed PTR PDFs, bounded by `maxFilings`.
- Parse transaction tables for ticker, type, dates, and amount range.
- Charge `trade-disclosed` only after a validated row is ready, then write the dataset item.

### Best results

- Leave `tickers` empty when you want the latest disclosures; add a symbol only after you can accept a `VALID_EMPTY` miss in a small filing window.
- Keep `maxFilings` small for MCP calls. Each PDF is a separate House Clerk download.
- Scanned paper PTRs have no text layer and are skipped rather than OCR'd.
- Amounts are statutory ranges. `amountMidUsd` is a convenience midpoint, not a fill price.

### Builder's note

I found the Clerk ZIP is only an index: it names who filed a PTR and the document id. The trade rows live in the PDF. In my testing, e-filed reports have a text layer that `pdf-parse` can read, so the supported path stays House Clerk HTTP plus those e-filed packets. Scanned paper filings stay skipped rather than OCR'd.

### Legal and responsible use

House STOCK Act filings are public legislative records. The US House and Clerk of the House are official names of the United States government. This independent Actor is not affiliated with, associated with, or endorsed by the US House or the Clerk of the House. Output is delayed disclosure data for journalism, compliance, and research. Follow applicable law and your own compliance review.

Issues and feature requests: use the Actor Issues tab on Apify.

# Actor input Schema

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

Optional US ticker filters such as AAPL or BRK.B. The Actor still opens the newest PTR PDFs in the selected years, then keeps matching symbols. Leave empty to return every extractable disclosed trade in those filings. This is not a company-name or live tape search.

## `lastName` (type: `string`):

Optional House member last name, for example Alford or Kelly. Case-insensitive contains match against the Clerk index. Leave blank to scan the newest PTR filings from any member. This is not a Senate last-name search.

## `firstName` (type: `string`):

Optional House member first name, for example Mark. Use with lastName to disambiguate common surnames. Leave blank when lastName is enough. This is not a nickname or party filter.

## `filingYears` (type: `array`):

Calendar years of House Clerk disclosure ZIPs to read, for example 2026. Defaults to the current year. Allowed range is 2018 through the current year. This is the year the PTR was filed, not the trade date.

## `startDate` (type: `string`):

Inclusive lower bound as YYYY-MM-DD. Filters PTR filing dates in the Clerk index and transaction dates inside parsed PDFs. Example: 2026-01-01. Leave blank for no lower bound. This is not a market session or settlement date.

## `endDate` (type: `string`):

Inclusive upper bound as YYYY-MM-DD. Pair with startDate. Example: 2026-09-10. Leave blank for no upper bound. Filing dates come from the Clerk index; trade dates come from the PTR PDF.

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

Keep purchases, sales, exchanges, or all STOCK Act transaction codes. Default all. Partial sales and partial purchases stay inside purchase or sale. This is the PTR P/S/E code, not a broker order type.

## `maxFilings` (type: `integer`):

How many newest matching Periodic Transaction Report PDFs to open. Default 4, maximum 40. Each filing can contain many trades. Lower this to bound runtime. This is a filing cap, not the billed trade-row cap.

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

Hard cap on billed dataset rows. Default 10, maximum 200. Each saved trade costs $0.005. Use this to bound spend. This is not the number of PTR PDFs opened.

## Actor input object example

```json
{
  "filingYears": [
    2026
  ],
  "transactionType": "all",
  "maxFilings": 2,
  "maxResults": 8
}
```

# Actor output Schema

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

Dataset items with member, ticker, transaction type, amount range, dates, and PTR PDF URL.

## `summary` (type: `string`):

Compact OUTPUT record with outcome, itemsPushed, warnings, and chargedEventCounts.

## `runSummary` (type: `string`):

Detailed RUN\_SUMMARY record for integrations that read RUN\_SUMMARY directly.

# 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 = {
    "filingYears": [
        2026
    ],
    "transactionType": "all",
    "maxFilings": 2,
    "maxResults": 8
};

// Run the Actor and wait for it to finish
const run = await client.actor("khadinakbar/us-stock-trades-scraper").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 = {
    "filingYears": [2026],
    "transactionType": "all",
    "maxFilings": 2,
    "maxResults": 8,
}

# Run the Actor and wait for it to finish
run = client.actor("khadinakbar/us-stock-trades-scraper").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 '{
  "filingYears": [
    2026
  ],
  "transactionType": "all",
  "maxFilings": 2,
  "maxResults": 8
}' |
apify call khadinakbar/us-stock-trades-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,khadinakbar/us-stock-trades-scraper"
        }
    }
}
```

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/ZE47b9Ge9I8gHcZM6/builds/KCSMQlL2TeTBhKaJm/openapi.json
