# Congress & Insider Trades API — STOCK Act PTRs + SEC Form 4 (`insight.solutions/congress-insider-trades-api`) Actor

Every disclosed trade by people legally required to disclose one, in one schema: House and Senate periodic transaction reports and SEC Form 4. Ticker, side, parsed amount ranges, party, state, committees, days to disclose and late-filing flags on every row. Primary .gov sources only. No API key.

- **URL**: https://apify.com/insight.solutions/congress-insider-trades-api.md
- **Developed by:** [Insight Solutions](https://apify.com/insight.solutions) (community)
- **Categories:** Business, News, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.30 / 1,000 transaction returneds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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 & Insider Trades API — STOCK Act PTRs + SEC Form 4

Every disclosed stock trade by people who are legally required to disclose one,
in **one schema**: members of the U.S. House and Senate filing periodic
transaction reports under the STOCK Act, and corporate officers, directors and
ten-percent owners filing SEC Form 4. Same columns, same run, same query.

Read straight from the three systems that publish them — the **Clerk of the
House**, the **Senate Office of Public Records** (eFD) and **SEC EDGAR**. No
aggregator sits in the middle.

> **What this is.** Filer-reported, delayed evidence. A periodic transaction
> report is due within 45 days of the trade and appears one to two business days
> after it is submitted; a Form 4 is due within two business days. Congressional
> amounts are **ranges, not exact figures**. Filings are amended.
> This is **not investment advice**, and it is **not a feed of live trades** —
> it is a machine-readable copy of public disclosure documents, with a link to
> each one.

### At a glance

**Input** — this is the Store prefill; paste it and run:

```json
{ "sources": ["house", "senate", "form4"], "dateBasis": "disclosure", "userAgentContact": "Insight Solutions austinhughhillis@gmail.com", "maxTransactions": 300, "maxFilings": 40, "maxHouseFilings": 15, "includeSummary": true }
```

Replace `userAgentContact` with your own organisation and address before you use the Form 4 half for real — the SEC answers HTTP 403 without one.

**Output** — one row per disclosed transaction; the fields you will use most are `filerName`, `ticker`, `side`, `amountRange`, `transactionDate`, `disclosureDate` and `filingUrl` (full list under *Output reference*). Anything that could not be fetched comes back as a free diagnostic row (`ok: false`, `errorType`, `error`) instead of a charge.

**Price** — $0.50 per 1,000 transactions on the FREE tier (+ $0.001 per run); diagnostic rows, scanned filings that could not be read, every summary and cluster row, transactions your filters excluded and a run that returns nothing are all free. Pay-per-event, no API key, no browser, limited permissions — works over the Apify MCP server (`mcp.apify.com`) and with agentic (x402) payments.

**From code** — `client.actor("insight.solutions/congress-insider-trades-api").call(run_input={"tickers": ["NVDA"], "transactionTypes": ["buy"]})` with `apify-client`, or `POST https://api.apify.com/v2/acts/insight.solutions~congress-insider-trades-api/run-sync-get-dataset-items`.

***

### What you get

One row per disclosed transaction. Same columns whoever traded:

```json
{
  "rowType": "transaction",
  "source": "house",
  "insiderType": "congress",
  "chamber": "house",
  "filerName": "Nancy Pelosi",
  "party": "D",
  "state": "CA",
  "district": 11,
  "bioguideId": "P000197",
  "committees": [],
  "owner": "spouse",
  "ticker": "GOOGL",
  "assetName": "Alphabet Inc. - Class A Common Stock (GOOGL) [ST]",
  "assetType": "ST — Stocks (including ADRs)",
  "side": "buy",
  "transactionType": "P",
  "amountMin": 500001,
  "amountMax": 1000000,
  "amountMidpoint": 750000.5,
  "amountRange": "$500,001 - $1,000,000",
  "transactionDate": "2026-01-16",
  "notificationDate": "2026-01-16",
  "disclosureDate": "2026-01-23",
  "daysToDisclose": 7,
  "filingDeadlineDays": 45,
  "complianceStatus": "on-time",
  "daysLate": 0,
  "description": "Purchased 25,000 shares.",
  "filingId": "20033725",
  "filingType": "PTR",
  "filingUrl": "https://disclosures-clerk.house.gov/public_disc/ptr-pdfs/2026/20033725.pdf",
  "parseStatus": "parsed"
}
```

…and the same row for a corporate insider, with the fields that only Form 4 has:

```json
{
  "rowType": "transaction",
  "source": "form4",
  "insiderType": "corporate",
  "filerName": "Taich Adam",
  "reporterRoles": ["officer"],
  "officerTitle": "Chief Financial Officer",
  "issuerName": "10x Genomics, Inc.",
  "issuerCik": "0001770787",
  "ticker": "TXG",
  "side": "sell",
  "transactionCode": "S",
  "transactionCodeLabel": "Open-market or private sale",
  "acquiredDisposed": "D",
  "shares": 31428,
  "pricePerShare": 64.3097,
  "value": 2021125.25,
  "sharesOwnedAfter": 330098,
  "transactionDate": "2026-09-09",
  "disclosureDate": "2026-09-11",
  "daysToDisclose": 2,
  "filingDeadlineDays": 2,
  "complianceStatus": "on-time",
  "filingType": "4",
  "filingUrl": "https://www.sec.gov/Archives/edgar/data/1770787/000161071726000414/0001610717-26-000414-index.htm"
}
```

`ticker`, `side`, `transactionDate`, `disclosureDate` and `daysToDisclose` mean
the same thing on both. That is the whole point: **"everyone required to disclose
who bought NVDA in September" is one query, not two datasets and a join.**

***

### Quick start

Leave everything on its defaults and run it. You get the last 60 days of House
and Senate periodic transaction reports plus the latest market-wide Form 4s.

Some things people actually ask:

| You want | Input |
|---|---|
| Everything Nancy Pelosi disclosed this year | `{ "members": ["Pelosi"], "dateFrom": "2026-01-01" }` |
| Who in Congress bought NVDA | `{ "tickers": ["NVDA"], "transactionTypes": ["buy"], "sources": ["house", "senate"] }` |
| Senate only, last month | `{ "chamber": "senate", "dateFrom": "2026-08-01" }` |
| Energy and Commerce members' energy trades | `{ "committees": ["Energy and Commerce"], "tickers": ["XOM", "CVX"] }` |
| Filings that missed the 45-day deadline | `{ "lateFilingsOnly": true }` |
| NVIDIA insiders, open-market only | `{ "sources": ["form4"], "issuers": ["NVDA"], "transactionCodes": ["P", "S"] }` |
| Trades over $100k in March, by trade date | `{ "minAmount": 100000, "dateFrom": "2026-03-01", "dateTo": "2026-03-31", "dateBasis": "transaction" }` |
| A cheap daily monitor | `{ "incremental": true, "maxTransactions": 0 }` on a schedule |

**Set `userAgentContact` to your own organisation and address** before you use
the Form 4 half for real. The SEC requires every automated request to say who is
making it and how to reach them, and answers HTTP 403 without it. The prefilled
value is the publisher's, so the example run works out of the box.

***

### Use cases

- **Follow one ticker across both halves of the disclosure system** — a single `tickers` query returns the members of Congress and the corporate officers who traded it, in the same columns, instead of two datasets and a join.
- **Watch a member, a committee or a delegation** — `members`, `committees`, `states` and `party` are applied to the index before any document is downloaded, so a narrow question stays a cheap run.
- **Report on late disclosure** — `lateFilingsOnly`, `daysToDisclose`, `complianceStatus` and `daysLate` turn the STOCK Act's 45-day deadline into a column you can sort, with the filing linked on every row.
- **Run a cheap daily monitor** — `incremental: true` on a schedule returns only what has been filed since the last run, and a day with nothing new finishes SUCCEEDED and costs nothing.
- **Look for clustered buying** — free `cluster` rows name every ticker three or more members of Congress bought within 30 days of each other, alongside free per-ticker and per-member summaries.

***

### Input

| Field | Type | Default | What it does |
|---|---|---|---|
| `sources` | array | `["house","senate","form4"]` | Which disclosure systems to read |
| `members` | array | `[]` | `Pelosi`, `Nancy Pelosi` or `Tuberville, Tommy`. Applied to the index **before** any document is downloaded |
| `chamber` | enum | `both` | `both`, `house`, `senate`. Choosing one switches the other's source off |
| `states` | array | `[]` | Two-letter codes, e.g. `["CA","TX"]` |
| `party` | enum | `any` | `any`, `D`, `R`, `I` |
| `committees` | array | `[]` | Substring match on the committee name, e.g. `"Energy and Commerce"` |
| `ownerTypes` | array | `[]` | `self`, `spouse`, `joint`, `dependent` |
| `tickers` | array | `[]` | Applies to both halves |
| `transactionTypes` | array | `[]` | `buy`, `sell`, `exchange`, `other` |
| `dateFrom` / `dateTo` | string | last 60 days / today | ISO dates |
| `dateBasis` | enum | `disclosure` | Which date the window applies to |
| `minAmount` | integer | `0` | USD. Compared to the top of a congressional band, or to a Form 4's reported value |
| `lateFilingsOnly` | boolean | `false` | Only filings past their deadline |
| `issuers` | array | `[]` | Form 4: tickers or CIKs. Empty means the latest market-wide Form 4s |
| `maxFilingsPerIssuer` | integer | `25` | Per issuer, newest first |
| `includeDerivative` | boolean | `true` | Form 4 Table II lines (options, RSUs) |
| `reporterRoles` | array | `[]` | `officer`, `director`, `tenPercentOwner`, `other` |
| `transactionCodes` | array | `[]` | Section 16 codes, e.g. `["P","S"]` |
| `userAgentContact` | string | publisher's | **Required for Form 4.** Your organisation and contact address |
| `incremental` | boolean | `false` | Skip filings already returned by an earlier run |
| `includeSummary` | boolean | `true` | Free per-ticker, per-member and cluster rows |
| `maxTransactions` | integer | `500` | The number you are billed for. 0 = no cap |
| `maxFilings` | integer | `200` | Per source |
| `maxHouseFilings` | integer | `40` | A separate, lower ceiling on the House PDFs |
| `maxConcurrency` | integer | `4` | Filings in flight per source |
| `maxRunSecs` | integer | `240` | Wall-clock budget |
| `proxyConfiguration` | object | US residential | See **Proxy**, below |

***

### Output reference

Every row carries every column, null where it does not apply, so the dataset
exports as one rectangular table. Six saved views come with it: **Transactions**,
**Congress**, **Corporate insiders**, **Late filings**, **Clusters & summaries**
and **Problems**.

**Who** — `insiderType`, `source`, `chamber`, `filerName`, `firstName`,
`lastName`, `bioguideId`, `party`, `state`, `district`, `committees[]`, `owner`,
`reportingOwnerCik`, `reporterRoles[]`, `officerTitle`.

**What** — `issuerName`, `issuerCik`, `ticker`, `assetName`, `assetType`, `side`,
`transactionType`, `transactionCode`, `transactionCodeLabel`, `acquiredDisposed`,
`shares`, `pricePerShare`, `value`, `amountMin`, `amountMax`, `amountMidpoint`,
`amountRange`, `capitalGainsOver200`.

**When** — `transactionDate`, `notificationDate`, `disclosureDate`,
`daysToDisclose`, `filingDeadlineDays`, `complianceStatus`, `daysLate`.

**Where it came from** — `isAmendment`, `filingId`, `filingUrl`, `filingType`,
`parseStatus`, `description`, `comments`, `subholdingOf`, `footnotes[]`,
`sharesOwnedAfter`, `ownershipNature`, `sourceUrl`, `scrapedAt`.

#### Amount ranges

Congressional filings report a band, never an exact figure. All ten are parsed
to numbers:

| Band | `amountMin` | `amountMax` | `amountMidpoint` |
|---|---|---|---|
| `$1,001 - $15,000` | 1001 | 15000 | 8000.5 |
| `$15,001 - $50,000` | 15001 | 50000 | 32500.5 |
| `$50,001 - $100,000` | 50001 | 100000 | 75000.5 |
| `$100,001 - $250,000` | 100001 | 250000 | 175000.5 |
| `$250,001 - $500,000` | 250001 | 500000 | 375000.5 |
| `$500,001 - $1,000,000` | 500001 | 1000000 | 750000.5 |
| `$1,000,001 - $5,000,000` | 1000001 | 5000000 | 3000000.5 |
| `$5,000,001 - $25,000,000` | 5000001 | 25000000 | 15000000.5 |
| `$25,000,001 - $50,000,000` | 25000001 | 50000000 | 37500000.5 |
| `Over $50,000,000` | 50000001 | `null` | `null` |

The open-ended top band has no maximum, so it gets no midpoint. A Form 4 reports
an actual price and share count instead, so it fills `shares`, `pricePerShare`
and `value` and leaves the band columns null.

#### Compliance fields

`daysToDisclose` is the gap between the trade and the filing.
`filingDeadlineDays` is 45 for a congressional periodic report (the STOCK Act
deadline) and 2 for a Form 4. `complianceStatus` grades the gap: `on-time`,
`late`, or `severely-late` for a congressional filing more than 90 days after the
trade. `daysLate` is how far past the deadline it went.

These are arithmetic on two dates printed on the filing. They are not an
allegation, and the filing is linked on every row so you can check them.
Form 4 deadlines are two *business* days and we count *calendar* days, which can
over-report a Form 4 by a weekend; congressional deadlines are calendar days, so
those are exact.

#### Free summary rows

With `includeSummary` on (the default), the run adds rows computed from its own
results and charges for none of them:

- `ticker-summary` — per ticker: `trades`, `buys`, `sells`, `uniqueBuyers`,
  `uniqueSellers`, `firstSeen`, `lastSeen`.
- `member-summary` — per member: `trades`, `buys`, `sells`, `lateFilings`,
  `lateRate` (late filings as a share of their filings in this run).
- `cluster` — where **three or more different members of Congress bought the same
  ticker within 30 days of each other**: `ticker`, `memberCount`, `members[]`,
  `windowDays`, `firstSeen`, `lastSeen`.

A cluster row says those people bought that thing within a month of each other.
It is not a score, a signal or a claim about why.

***

### Coverage, and where it stops

- **House.** The Clerk publishes a yearly index of every financial-disclosure
  filing; the 2026 index holds **385 periodic transaction reports**. Earlier years
  are reachable by setting `dateFrom` — each year is its own index, and the run
  fetches the ones your window touches.
- **Senate.** eFD publishes periodic transaction reports back through the current
  filing system. The run pages the search 100 filings at a time.
- **SEC Form 4.** Either the latest filings market-wide, a specific company's
  filings from `data.sec.gov`, or EDGAR's settled daily index when you ask for a
  date range that has closed.
- **Scanned filings.** Some members file on paper, and those reports are
  published as images with no text in them — roughly **10–15% of House periodic
  reports**, plus a handful of senators who file exclusively on paper. Those come
  back as a free row with `parseStatus: "unparsed"`, `errorType: "unparsed"` and
  the document's URL. **Nothing is guessed at and nothing is charged.** If you
  need those, open the link.
- **Not in this version.** Annual reports, holdings, assets, income and
  liabilities. This Actor returns *transactions* only.

***

### What you are never charged for

- Diagnostic rows of every type: `not-found`, `no-results`, `unparsed`,
  `invalid-input`, `blocked`, `timeout`, `unavailable`.
- Scanned filings that could not be read.
- Every summary and cluster row.
- Transactions your filters excluded — the filters run **before** the charge.
- A run that returns no transaction at all. A run whose sources were usable but
  produced nothing — filters that excluded every transaction, nothing filed in
  your window, a disclosure site that refused us — finishes **SUCCEEDED with zero
  results**, a status message that says so, and a free diagnostic row telling
  you why wherever there is one; nothing is charged, start fee included. A run
  finishes **FAILED** only when there was nothing usable to attempt (no source
  selected), or the Actor itself hit an error.
- An incremental run on a quiet day. When every filing in range was already returned by an earlier run and nothing has been filed since, the run finishes **SUCCEEDED** with "Nothing new" in its status message and no charge — a scheduled monitor should not look broken because Congress took the day off.

***

### Pricing

| Event | FREE | BRONZE | SILVER | GOLD |
|---|---|---|---|---|
| Run started | $0.001 | $0.001 | $0.001 | $0.001 |
| **Transaction returned** | $0.0005 | $0.0005 | $0.0004 | $0.0003 |

That is **$0.50 per 1,000 transactions**, congressional and corporate alike. The
run honours `ACTOR_MAX_TOTAL_CHARGE_USD`: when the budget runs out it stops
fetching rather than handing over rows it cannot bill for, and says so in the run
status.

***

### Proxy

The default is Apify's **US residential** proxy, and it is not a luxury: the
House Clerk's site is behind a bot filter that refuses datacenter addresses, and
Senate eFD is reachable from United States addresses only. **SEC EDGAR requests
always go direct**, whatever you set — EDGAR rate-limits per IP and asks for a
contact address in the User-Agent, so a rotating shared exit buys nothing there.

The run holds itself to 8 requests a second against sec.gov (SEC publishes a
limit of 10) and pauses between successive pages of any one search.

***

### Running it every day

Set `incremental: true` and schedule it. The Actor keeps a record (in a named key-value store, `stateStoreName`, default `congress-insider-trades-state`) of the House
DocIDs, Senate report IDs and EDGAR accession numbers it has already returned,
skips them, and returns only what has been filed since. The indexes are small;
the cost is the documents, and a daily run downloads only the new ones. It is the
single biggest lever on what a scheduled job costs.

***

### Use it from an AI agent, or from code

One JSON object in, one flat array out — the shape agent runtimes want. The Actor runs with **limited permissions**, uses **pay-per-event** pricing and never enters Standby, so it works over the Apify MCP server and with x402 agentic payments. The **Integrations** tab pushes results to Slack, a webhook, Zapier, Make, Google Sheets, Snowflake or BigQuery.

```bash
curl -X POST "https://api.apify.com/v2/acts/insight.solutions~congress-insider-trades-api/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"sources":["house","senate"],"tickers":["NVDA"],"transactionTypes":["buy"],"maxTransactions":100}'
```

```python
## pip install apify-client
from apify_client import ApifyClient

client = ApifyClient("<APIFY_TOKEN>")
run = client.actor("insight.solutions/congress-insider-trades-api").call(run_input={
    "sources": ["house", "senate", "form4"],
    "tickers": ["NVDA", "AMD"],
    "dateFrom": "2026-01-01",
    "minAmount": 50000,
    "maxTransactions": 300,
    "userAgentContact": "Acme Research data@acme.com",
})

for row in client.dataset(run["defaultDatasetId"]).iterate_items():
    if row.get("ok") and row["rowType"] == "transaction":
        print(row["filerName"], row["insiderType"], row["side"], row["ticker"],
              row["amountRange"] or row["value"], row["transactionDate"], row["filingUrl"], sep=" | ")
```

Set `userAgentContact` to your own organisation and address whenever `sources` includes `form4` — the SEC answers HTTP 403 without it. Set `incremental: true` when you want a monitor rather than a backfill: the run returns only filings it has not returned before.

***

### FAQ

**Is this insider trading?**
No. Everything here is a document its filer was legally required to publish. A
periodic transaction report exists precisely so that these trades are public.

**Why is the amount a range?**
Because that is what the law requires members of Congress to disclose. They
report a band, not a figure. `amountMidpoint` is offered for aggregation, and it
is a midpoint of a band, not an estimate of the trade.

**Why do some rows have no ticker?**
Because the filing names an asset that has no exchange symbol — a municipal
bond, a private partnership, a fund share class. The asset name is still there.
Nothing is guessed at from the name.

**Why is `side` "other" on a Form 4 grant?**
Because an award of restricted stock is not somebody spending their own money in
the market, and calling it a buy would put it in the same bucket as one.
`transactionCode`, `transactionCodeLabel` and `acquiredDisposed` are on the row,
so you can treat an `A` as accumulation if that is what you want.

**Why is the disclosure so old?**
A periodic transaction report is due within 45 days of the trade. Some are filed
on day 44. `daysToDisclose` tells you exactly how old each one is.

**Can I use this data?**
Congressional financial disclosure reports are public records. The Ethics in
Government Act places restrictions on how reports obtained under it may be used —
notably for commercial purposes and for determining credit rating or soliciting
money — and you are responsible for using them lawfully. This is a statement of
where the restriction lives, not legal advice; if your use case is commercial,
take your own advice.

**What happens if a source changes its format?**
The upstream documents are not APIs, and their format can change without notice.
When a filing cannot be read the run returns a free diagnostic row naming the
document rather than a wrong number, and the run only finishes successfully if it
returned at least one real transaction.

***

### Limitations

- Congressional amounts are ranges. There is no way to recover an exact figure
  from a filing that does not contain one.
- Roughly 10–15% of House periodic reports are scanned images and come back
  unparsed and free, with a link.
- The House leg is the slow one: each filing is a PDF that must be downloaded and
  its text laid back out. `maxHouseFilings` bounds it separately for that reason.
- Form 4 deadlines are counted in calendar days, which can over-report a weekend.
- Party, state, district and committee membership come from the public
  `congress-legislators` dataset, matched on chamber, surname, state and district.
  A filer who cannot be matched to a sitting member gets nulls in those columns
  rather than a guess. A former member who filed after leaving office will not
  match.
- Cluster detection looks only at the rows *this run* returned. Widen the window
  and you will find more.
- The upstream format may change. See the FAQ.

***

### Our other Actors

Every Insight Solutions Actor is pay-per-result with no browser, no login and no API key, and every one of them returns free diagnostic rows instead of billing for failures. Prices are per 1,000 results.

**Video, audio & social**

- [YouTube Transcript API](https://apify.com/insight.solutions/youtube-transcript-api) — captions as timed segments, text, SRT or VTT, with language fallback and translation.
- [YouTube Comments API](https://apify.com/insight.solutions/youtube-comments-api) — comments and replies with likes, pinned and hearted flags, newest or top sort.
- [YouTube Channel API](https://apify.com/insight.solutions/youtube-channel-api) — a channel's videos, Shorts and live streams, plus YouTube search.
- [Podcast Search, Episodes & Charts API](https://apify.com/insight.solutions/podcast-api) — Apple Podcasts search, charts and full episode feeds.
- [Bluesky Scraper](https://apify.com/insight.solutions/bluesky-scraper) — profiles, posts, followers and follows from the public AT Protocol API.
- [Telegram Channel Scraper](https://apify.com/insight.solutions/telegram-channel-scraper) — posts, views and channel stats from public Telegram channels.
- [Substack Scraper](https://apify.com/insight.solutions/substack-scraper) — posts with full free text, comments and publication profiles.
- [Hacker News API](https://apify.com/insight.solutions/hacker-news-api) — stories, comments, users, front page and a structured "Who is hiring?" parser from the official HN APIs.
- [GitHub Repos, Trending & Releases API](https://apify.com/insight.solutions/github-repos-api) — repository facts, trending lists, releases and search, no token needed for small runs.
- [Discourse Forum API](https://apify.com/insight.solutions/discourse-forum-api) — topics, posts and categories from any Discourse community via its own JSON endpoints, usernames only.

**News, documents & the web**

- [Google News Search, Topics & Real Article URLs](https://apify.com/insight.solutions/google-news-api) — news search and topic feeds with the publisher's real URL decoded.
- [Website to Markdown — Content Extractor for LLMs & RAG](https://apify.com/insight.solutions/website-content-extractor) — any site as clean Markdown, text and heading-aware chunks.
- [WordPress Posts & Pages API](https://apify.com/insight.solutions/wordpress-posts-api) — posts and pages from any WordPress site as clean text or Markdown, with categories, tags and images.
- [Website Metadata API](https://apify.com/insight.solutions/website-metadata-api) — any URL's meta tags, Open Graph, Twitter cards, hreflang, feeds, JSON-LD and microdata, with normalised Product, Article, Event and FAQ entities.
- [Subdomain Finder API](https://apify.com/insight.solutions/subdomain-finder-api) — every subdomain of a domain from certificate-transparency logs, resolved over DNS, with an optional live HTTP check.
- [Internet Archive API](https://apify.com/insight.solutions/internet-archive-api) — archive.org search, item metadata, files and reviews.
- [Wayback Machine Toolkit](https://apify.com/insight.solutions/wayback-toolkit) — archived URL inventories, snapshots and text diffs between dates.
- [Website Technology Detector](https://apify.com/insight.solutions/website-tech-detector) — the tech stack behind any site, with the evidence for each detection.
- [Domain Intelligence API](https://apify.com/insight.solutions/domain-intelligence-api) — DNS, RDAP registration, TLS certificate and HTTP facts in one row per domain.
- [SEO Page Audit](https://apify.com/insight.solutions/seo-page-audit) — sitemap crawl with on-page checks, structured data and broken-link reports.
- [Keyword Suggestions API](https://apify.com/insight.solutions/keyword-suggestions-api) — Google, YouTube, Bing, Amazon and eBay autocomplete with alphabet and question expansions.
- [Website Contact Extractor](https://apify.com/insight.solutions/website-contact-extractor) — emails, phone numbers and social profiles from any list of websites.
- [Web Search Results API](https://apify.com/insight.solutions/web-search-api) — Bing and DuckDuckGo organic results with snippets, no key, no browser.
- [Company Enrichment API](https://apify.com/insight.solutions/company-enrichment-api) — a domain in, a company profile out: firmographics, contacts, tech stack, DNS and hiring signal.
- [Company Dossier API](https://apify.com/insight.solutions/company-dossier-api) — one company in, twelve sections out: profile, tech, contacts, DNS, open roles, news, SEC filings, federal awards, recalls, YC batch and apps.
- [Press Releases API](https://apify.com/insight.solutions/press-releases-api) — GlobeNewswire and PR Newswire releases plus any newsroom feed, by keyword, company, ticker or subject.
- [Federal Register API](https://apify.com/insight.solutions/federal-register-api) — rules, proposed rules, notices and the Public Inspection desk with dockets, comment deadlines and CFR references.
- [Academic Papers Search API](https://apify.com/insight.solutions/academic-papers-api) — OpenAlex, Crossref, arXiv and PubMed in one row per paper: abstract, citations, open-access PDF, authors and venue.
- [RSS & Atom Feed Monitor](https://apify.com/insight.solutions/rss-feed-monitor) — any RSS, Atom or JSON feed (or an OPML file) in, only the new items out, with keyword filters and a webhook.
- [Website Change Monitor](https://apify.com/insight.solutions/website-change-monitor) — watch any pages, diff the text between runs, get change rows with added/removed lines, keyword alerts and a webhook.
- [Wikipedia & Wikidata API](https://apify.com/insight.solutions/wikipedia-api) — article text, search, daily pageviews and Wikidata entity facts, any language edition.

**Business, finance & jobs**

- [Federal Contracts, Grants & Lobbying API](https://apify.com/insight.solutions/federal-contracts-grants-api) — SAM.gov opportunities, USAspending awards, Grants.gov notices and Senate lobbying filings in one schema.
- [SEC EDGAR API](https://apify.com/insight.solutions/sec-edgar-api) — filings, XBRL financials and full-text search by ticker or CIK.
- [Clinical Trials & FDA API](https://apify.com/insight.solutions/clinical-trials-fda-api) — ClinicalTrials.gov studies plus openFDA recalls, labels, approvals, 510(k)s and adverse-event reports.
- [Product & Vehicle Recalls API](https://apify.com/insight.solutions/product-recalls-api) — CPSC, NHTSA, FDA and USDA recalls, vehicle complaints and ratings, plus a VIN decoder.
- [Y Combinator Companies, Batches & Founders](https://apify.com/insight.solutions/yc-companies-directory) — the YC directory with founders and social links, filterable by batch, industry and hiring status.
- [Career Site Jobs API](https://apify.com/insight.solutions/ats-jobs-api) — jobs straight from Greenhouse, Lever, Ashby, Workable and 10+ other ATS career sites.
- [Workday Jobs API](https://apify.com/insight.solutions/workday-jobs-api) — every posting on any Workday career site, with facets, search, posted dates and full descriptions.
- [New Job Postings Monitor](https://apify.com/insight.solutions/job-postings-monitor) — new, closed and changed postings on the career sites you watch.
- [Hiring Signals API — Open Roles & Hiring Surge by Company](https://apify.com/insight.solutions/hiring-signals-api) — one row per company per run: open roles, what opened and closed, department and seniority breakdowns, and a hiring-surge flag.
- [Remote Jobs API](https://apify.com/insight.solutions/remote-jobs-api) — RemoteOK, Remotive, We Work Remotely, Himalayas, Jobicy and more in one schema, deduplicated.
- [Shopify Products API](https://apify.com/insight.solutions/shopify-products-api) — any Shopify store's catalogue, variants, prices and stock signals.
- [WooCommerce Products API](https://apify.com/insight.solutions/woocommerce-products-api) — any WooCommerce store's catalogue, prices, variants and stock through its public Store API.
- [Shopify App Store API](https://apify.com/insight.solutions/shopify-app-store-api) — Shopify App Store listings by category, collection or developer: pricing plans, ratings and merchant reviews.
- [Luma Events API](https://apify.com/insight.solutions/luma-events-api) — upcoming Luma events by city, category or calendar: dates, venue, price, capacity and organiser calendar, no host names.
- [Shopify Store Monitor](https://apify.com/insight.solutions/shopify-store-monitor) — price drops, sales, restocks, sell-outs and new products on any Shopify store, one row per change.
- [Public Tenders API](https://apify.com/insight.solutions/public-tenders-api) — EU TED, UK Find a Tender and Contracts Finder notices by keyword, CPV code, country, stage and deadline.
- [Nonprofit & IRS 990 Lookup API](https://apify.com/insight.solutions/nonprofit-990-api) — search US nonprofits and get EIN, NTEE code and multi-year Form 990 financials.
- [OpenStreetMap Places API](https://apify.com/insight.solutions/osm-places-api) — businesses and points of interest by category and area from OpenStreetMap: name, address, coordinates, website, phone, opening hours.

**Apps & games**

- [App Store & Google Play Reviews API](https://apify.com/insight.solutions/app-reviews-api) — reviews from both stores with ratings, versions and developer replies.
- [App Store Top Charts & App Search API](https://apify.com/insight.solutions/app-charts-api) — Apple top charts by country and genre, plus app search and details.
- [App Store Keyword Rank Tracker](https://apify.com/insight.solutions/app-store-keyword-rank-tracker) — where any app ranks for any keyword on the App Store and Google Play, with rank changes and ASO suggestions.
- [Steam Reviews API](https://apify.com/insight.solutions/steam-reviews-api) — Steam reviews with playtime, helpfulness and game details.
- [Steam Game Data API](https://apify.com/insight.solutions/steam-store-stats-api) — prices, tags, review scores, live player counts and top charts.
- [Sports Scores & Schedules API](https://apify.com/insight.solutions/sports-scores-api) — scores, schedules, standings, teams and headlines for the NFL, NBA, MLB, NHL, soccer and more, no key.
- [App Store Monitor](https://apify.com/insight.solutions/app-store-monitor) — App Store and Google Play listings watched between runs: new versions with release notes, price, rating and listing changes, one row per change.

# Actor input Schema

## `sources` (type: `array`):

Which disclosure systems to read. `house` and `senate` are STOCK Act periodic transaction reports filed by members of Congress; `form4` is the SEC Form 4 filed by corporate officers, directors and ten-percent owners. All three produce the same columns, so a run over all three is one table.

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

Restrict the congressional half to one chamber. Choosing one also switches the other one's source off, so nothing is fetched and then thrown away. Has no effect on Form 4.

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

Which date the window applies to. `disclosure` is the date the filing was submitted — use it for "what was disclosed this week". `transaction` is the date the trade happened — use it for "what was traded in March", remembering that those trades may not have been disclosed until 45 days later.

## `userAgentContact` (type: `string`):

Your organisation and a working contact address, e.g. 'Acme Research data@acme.com'. The SEC requires every automated request to declare who is making it and how to reach them (sec.gov/os/accessing-edgar-data), and answers HTTP 403 without it. The pre-filled value is the publisher's own contact so the example run works out of the box; please replace it with yours for real use, so the SEC reaches you, not us, about your traffic.

## `party` (type: `string`):

Filter members of Congress by party. Party comes from the public `congress-legislators` dataset; a member who cannot be matched to it has no party and is excluded when you set this. Corporate insiders are not affected.

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

Only these members. Write them however you like — `Pelosi`, `Nancy Pelosi` or `Tuberville, Tommy`. Matched case-insensitively on the surname, with the given name as a prefix when you supply one. Leave empty for every member. Applied to the filing index before any document is downloaded, so a narrow list is a fast, cheap run.

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

Only trades in these tickers, e.g. `["NVDA", "AAPL"]`. Applies to both halves of the table. A disclosed asset with no ticker — a bond, a fund, a private holding — cannot match a ticker filter and is excluded when you set one.

## `issuers` (type: `array`):

Companies whose insiders you want, as tickers or CIKs, e.g. `["NVDA", "0000320193"]`. Tickers are resolved through SEC's own `company_tickers.json`; a company name is not guessed at. Leave empty to take the latest Form 4s market-wide instead.

## `dateFrom` (type: `string`):

Start of the window, e.g. `2026-01-01`. Leave empty and the run uses the last 60 days, computed when it starts. Which date this applies to is set by `dateBasis`.

## `dateTo` (type: `string`):

End of the window, e.g. `2026-06-30`. Leave empty for "up to today". Setting an end date in the past switches the market-wide Form 4 half from the live latest-filings feed to EDGAR's settled daily index for those days.

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

Two-letter state codes, e.g. `["CA", "TX"]`. Filters members of Congress by the state they represent. Corporate insiders have no state and are not affected.

## `committees` (type: `array`):

Only members who sit on a committee whose name contains one of these, e.g. `["Energy and Commerce"]`. Case-insensitive substring match on the full committee name; top-level committees only, not subcommittees. Corporate insiders are not affected.

## `ownerTypes` (type: `array`):

Whose account the trade was in: the member (`self`), their `spouse`, a `joint` account or a `dependent` child. Congressional filings only — Form 4 has no equivalent field and is not affected. Leave empty for all four.

## `transactionTypes` (type: `array`):

Filter by side. `buy` is a purchase (House `P`, Senate `Purchase`, Form 4 code `P`); `sell` is a sale; `exchange` is a House/Senate exchange; `other` is everything else, including Form 4 grants, option exercises, gifts and tax withholdings. Leave empty for all.

## `transactionCodes` (type: `array`):

Section 16 transaction codes to keep, e.g. `["P", "S"]` for open-market purchases and sales only. P purchase, S sale, A grant or award, F tax withholding, M option exercise, X exercise, G gift, D disposition to the issuer, C conversion, J other. Leave empty for all.

## `reporterRoles` (type: `array`):

Only Form 4s filed by someone in one of these roles. A filer can hold more than one. Leave empty for all.

## `includeDerivative` (type: `boolean`):

Include Form 4 Table II lines — options, RSUs, convertible securities — alongside the ordinary share transactions in Table I. They carry the underlying security in `assetName` and `derivative` in `assetType`.

## `minAmount` (type: `integer`):

Only trades worth at least this much. Congressional filings report a band, so the comparison is against the top of the band — `50000` keeps a `$15,001 - $50,000` trade, because it may have been fifty thousand dollars. Form 4 reports a real figure and is compared to that; a Form 4 line with no price at all (a grant, a tax withholding) cannot satisfy a minimum and is excluded.

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

Only transactions disclosed after the deadline — more than 45 days after the trade for a member of Congress, more than two days for a Form 4. This is arithmetic on the two dates on the filing, not an allegation.

## `includeSummary` (type: `boolean`):

Add per-ticker and per-member summary rows, plus cluster rows where three or more members bought the same ticker within 30 days of each other. Computed from this run's own rows, and never charged.

## `maxFilingsPerIssuer` (type: `integer`):

How many of each issuer's Form 4 filings to read, newest first. Only used when `issuers` is set.

## `maxTransactions` (type: `integer`):

The most transaction rows this run may return, across every source. This is the number you are billed for. 0 means no cap.

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

The most filings to read from each source. A filing usually carries several transactions, so this is a bound on the work, not on the rows.

## `maxHouseFilings` (type: `integer`):

A separate, lower ceiling on the House leg. Every House filing is a PDF that has to be downloaded and its text laid back out, which is the slowest thing this Actor does — so the House cap is the one to raise deliberately.

## `incremental` (type: `boolean`):

Remember which House DocIDs, Senate report IDs and EDGAR accession numbers this Actor has already returned, and skip them next time. This is the cheap way to run a daily monitor: the first run reads the window, and every run after it returns only what was filed since.

## `stateStoreName` (type: `string`):

Name of the key-value store that keeps the incremental cursor (the House DocIDs, Senate report IDs and Form 4 accession numbers already returned). Only used when "incremental" is on. Use a different name to keep separate monitors apart.

## `maxConcurrency` (type: `integer`):

How many filings to read at once within a source. Each parallel worker keeps its own proxy session, so one blocked exit IP does not burn the others.

## `maxRunSecs` (type: `integer`):

Wall-clock budget for the whole run. When it runs out, the rows already written are kept and a free diagnostic row says where the walk stopped.

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

The House Clerk's site is behind a bot filter that refuses datacenter addresses, and Senate eFD is reachable from United States addresses only — hence the US residential default. SEC EDGAR requests always go direct, whatever you set here: EDGAR rate-limits per IP and asks for a contact address, so a proxy there buys nothing.

## Actor input object example

```json
{
  "sources": [
    "house",
    "senate",
    "form4"
  ],
  "chamber": "both",
  "dateBasis": "disclosure",
  "userAgentContact": "Insight Solutions austinhughhillis@gmail.com",
  "party": "any",
  "members": [],
  "tickers": [],
  "issuers": [],
  "dateFrom": "",
  "dateTo": "",
  "states": [],
  "committees": [],
  "ownerTypes": [],
  "transactionTypes": [],
  "transactionCodes": [],
  "reporterRoles": [],
  "includeDerivative": true,
  "minAmount": 0,
  "lateFilingsOnly": false,
  "includeSummary": true,
  "maxFilingsPerIssuer": 25,
  "maxTransactions": 300,
  "maxFilings": 40,
  "maxHouseFilings": 15,
  "incremental": false,
  "stateStoreName": "congress-insider-trades-state",
  "maxConcurrency": 4,
  "maxRunSecs": 240,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

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

One row per disclosed transaction from the House Clerk, Senate eFD and SEC EDGAR, in one schema, plus free per-ticker, per-member and cluster summary rows. Delivered as JSON items in the default dataset.

# 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 = {
    "sources": [
        "house",
        "senate",
        "form4"
    ],
    "dateBasis": "disclosure",
    "userAgentContact": "Insight Solutions austinhughhillis@gmail.com",
    "members": [],
    "tickers": [],
    "issuers": [],
    "includeSummary": true,
    "maxTransactions": 300,
    "maxFilings": 40,
    "maxHouseFilings": 15,
    "incremental": false,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("insight.solutions/congress-insider-trades-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 = {
    "sources": [
        "house",
        "senate",
        "form4",
    ],
    "dateBasis": "disclosure",
    "userAgentContact": "Insight Solutions austinhughhillis@gmail.com",
    "members": [],
    "tickers": [],
    "issuers": [],
    "includeSummary": True,
    "maxTransactions": 300,
    "maxFilings": 40,
    "maxHouseFilings": 15,
    "incremental": False,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("insight.solutions/congress-insider-trades-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 '{
  "sources": [
    "house",
    "senate",
    "form4"
  ],
  "dateBasis": "disclosure",
  "userAgentContact": "Insight Solutions austinhughhillis@gmail.com",
  "members": [],
  "tickers": [],
  "issuers": [],
  "includeSummary": true,
  "maxTransactions": 300,
  "maxFilings": 40,
  "maxHouseFilings": 15,
  "incremental": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}' |
apify call insight.solutions/congress-insider-trades-api --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,insight.solutions/congress-insider-trades-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/3oeRLFBUSQJ5EU5G1/builds/bqk0aKIgVCvXoKI2M/openapi.json
