> ## Documentation Index
> Fetch the complete documentation index at: https://docs.financialdatapi.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Insider trades

> SEC Forms 3, 4, and 5 insider transactions per company — who traded, when, and at what price — with signed transaction values and full provenance, by ticker or CIK.

Financial Data API serves insider transaction activity for any company in the [scored universe](/apis/companies), assembled from public SEC Section 16 filings (Forms 3, 4, and 5). One call returns a company's insider trades newest first: who traded, their relationship to the issuer, the transaction date and code, shares and price, and a signed transaction value — with every row traceable to the filing it came from.

<Info>
  All insider trades are derived from public SEC Forms 3, 4, and 5, so values are official-source and redistribution-safe. The insider-trades endpoint requires the `data:read` scope.
</Info>

## What data is available

`GET /companies/{idOrLookup}/insider-trades` returns one row per reported transaction, newest first by transaction date. All 15 SEC transaction codes are covered, and every row carries a human-readable `transaction_code_label` so you can render without a lookup table.

<Columns cols={3}>
  <Card title="Who" icon="user-tie">
    `insider_name`, `insider_cik`, `is_director`, `is_officer`, `is_ten_percent_owner`, `officer_title`.
  </Card>

  <Card title="What" icon="right-left">
    `transaction_date`, `transaction_code`, `transaction_code_label`, `security_title`, `shares`, `price_per_share`, `value`, `acquired_disposed`, `shares_owned_following`, `direct_or_indirect`, `is_derivative`.
  </Card>

  <Card title="Provenance" icon="route">
    `form`, `filed_at`, `accession_number`, `filing_url`, `source_id`, `attribution`, plus `observation_id` for the full provenance chain.
  </Card>
</Columns>

<Note>
  `value` is signed USD: positive when shares were acquired, negative when shares were disposed. `acquired_disposed` carries the SEC's own `A`/`D` flag, so you can branch on either.
</Note>

## Authentication

Send your key as `x-api-key` (or `Authorization: Bearer`) with the `data:read` scope. See [Authentication](/authentication).

## Look up by ticker, CIK, or entity id

The `idOrLookup` path segment accepts a Financial Data API entity id, a ticker, or a CIK — the same resolution as the [financials endpoint](/apis/financial-statements). There is no separate resolve step required:

<Columns cols={3}>
  <Card title="By ticker" icon="hashtag">
    `GET /companies/AAPL/insider-trades`
  </Card>

  <Card title="By CIK" icon="building">
    `GET /companies/0000320193/insider-trades`
  </Card>

  <Card title="By entity id" icon="fingerprint">
    `GET /companies/ent_aapl/insider-trades`
  </Card>
</Columns>

## Parameters

| Param                | Values                           | Description                                                                                                  |
| -------------------- | -------------------------------- | ------------------------------------------------------------------------------------------------------------ |
| `limit`              | 1 to 500, default 100            | Cap the number of returned trades.                                                                           |
| `start_date`         | `YYYY-MM-DD`                     | Only trades with a **transaction date** on or after this date.                                               |
| `end_date`           | `YYYY-MM-DD`                     | Only trades with a **transaction date** on or before this date.                                              |
| `transaction_code`   | A single SEC code letter         | Filter to one transaction code, for example `P` or `S`. Case-insensitive.                                    |
| `include_derivative` | `true` / `false`, default `true` | Set `false` to drop derivative transactions (options, RSUs, convertibles) and keep only non-derivative rows. |
| `order`              | `asc` / `desc`, default `desc`   | Sort direction by transaction date.                                                                          |

<Warning>
  `start_date` and `end_date` bound the **transaction date**, not the filing date: a late-filed Form 4 surfaces under the date the insider actually traded. As everywhere else, unknown query parameters are rejected with `bad_request`.
</Warning>

## Example: AAPL open-market sales

<CodeGroup>
  ```bash cURL theme={"theme":"css-variables"}
  curl "https://api.financialdatapi.com/companies/AAPL/insider-trades?transaction_code=S&include_derivative=false&limit=2" \
    -H "x-api-key: $FINANCIALDATA_API_KEY"
  ```

  ```typescript TypeScript (@financialdatapi/client) theme={"theme":"css-variables"}
  import { FinancialDataApiClient } from "@financialdatapi/client";

  const client = new FinancialDataApiClient({ apiKey: process.env.FINANCIALDATA_API_KEY! });

  const { data } = await client.request(
    "/companies/AAPL/insider-trades",
    { transaction_code: "S", include_derivative: false, limit: 2 }
  );

  for (const trade of data.insider_trades) {
    console.log(trade.transaction_date, trade.insider_name, trade.shares, trade.value);
  }
  ```
</CodeGroup>

```json Response theme={"theme":"css-variables"}
{
  "data": {
    "entity_id": "ent_aapl",
    "ticker": "AAPL",
    "cik": "0000320193",
    "insider_trades": [
      {
        "observation_id": "obs_insider_aapl_0001234567_2026-04-02_s_1",
        "insider_name": "DOE JANE",
        "insider_cik": "0001234567",
        "is_director": false,
        "is_officer": true,
        "is_ten_percent_owner": false,
        "officer_title": "Chief Operating Officer",
        "transaction_date": "2026-04-02",
        "filed_at": "2026-04-03T18:31:12.000Z",
        "transaction_code": "S",
        "transaction_code_label": "Open market or private sale",
        "security_title": "Common Stock",
        "shares": 25000,
        "price_per_share": 245.1,
        "value": -6127500,
        "acquired_disposed": "D",
        "shares_owned_following": 412000,
        "direct_or_indirect": "D",
        "is_derivative": false,
        "form": "4",
        "accession_number": "0000320193-26-000045",
        "filing_url": "https://www.sec.gov/Archives/edgar/data/320193/000032019326000045/0000320193-26-000045-index.htm",
        "source_id": "src_sec_form345",
        "attribution": "U.S. Securities and Exchange Commission"
      }
    ]
  },
  "meta": { "api_version": "v1" },
  "requestId": "..."
}
```

<Note>
  Example rows above are illustrative, with a placeholder insider. Pull live trades from the endpoint.
</Note>

## Transaction codes

The SEC's Section 16 code table has 15 transaction codes, and all of them are served. The most common:

| Code | Label                                                      |
| ---- | ---------------------------------------------------------- |
| `P`  | Open market or private purchase                            |
| `S`  | Open market or private sale                                |
| `A`  | Grant, award, or other acquisition                         |
| `D`  | Disposition to the issuer                                  |
| `F`  | Payment of exercise price or tax liability with securities |
| `M`  | Exercise or conversion of a derivative security            |
| `C`  | Conversion of a derivative security                        |
| `G`  | Bona fide gift                                             |

The remaining codes are served the same way; every row's `transaction_code_label` carries the human-readable label, and the `transaction_code` filter accepts any of the 15 letters, case-insensitively.

<Tip>
  For "real" conviction signals, most workflows start from `transaction_code=P` (open-market purchases) with `include_derivative=false` — grants, tax withholding, and option exercises are routine compensation mechanics rather than discretionary trades.
</Tip>

## Notes and caveats

<AccordionGroup>
  <Accordion title="Where the data comes from">
    Rows are parsed from public SEC Forms 3 (initial ownership), 4 (changes), and 5 (annual). Each row keeps the `form`, `accession_number`, and `filing_url` of the filing it came from, and `observation_id` feeds `GET /provenance/observations/{id}` for the named source and ingestion run.
  </Accordion>

  <Accordion title="Derivative vs. non-derivative rows">
    Derivative transactions (options, RSUs, convertible securities) are included by default and flagged with `is_derivative: true`. Set `include_derivative=false` to keep only non-derivative rows. Derivative rows may omit `price_per_share` where the filing does not report one.
  </Accordion>

  <Accordion title="History depth by plan">
    Free-plan keys see the most recent 2 years of insider-trade history; the window is clamped server-side, not errored. Paid plans read the full history.
  </Accordion>

  <Accordion title="Agent access">
    The [MCP server](/ai-agents/mcp-server) exposes this endpoint as the `insider_trades` tool, so agents can pull the same rows conversationally.
  </Accordion>
</AccordionGroup>

## Related

<CardGroup cols={2}>
  <Card title="Institutional ownership" icon="landmark" href="/apis/institutional-ownership">
    Quarterly SEC 13F holdings for 25 headline institutional filers.
  </Card>

  <Card title="Companies" icon="building" href="/apis/companies">
    The scored universe and entity resolution by ticker or CIK.
  </Card>

  <Card title="Financial statements" icon="building-columns" href="/apis/financial-statements">
    Structured statements for the same companies, from SEC XBRL filings.
  </Card>

  <Card title="Provenance" icon="route" href="/concepts/provenance">
    Trace any trade back to its named SEC filing and ingestion run.
  </Card>
</CardGroup>
