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

# Insider Ownership

> See what company insiders actually own, from SEC Forms 3 and 5. Initial ownership statements and annual holdings for officers, directors, and 10% owners.

### Overview

The insider ownership API gives you the ownership statements of public company insiders: what CEOs, CFOs, directors, and 10% owners actually **hold**, not just what they traded.

It is sourced from SEC **Form 3** (an insider's initial statement of ownership, filed when they become an insider) and **Form 5** (the annual statement). It complements the [insider trades API](/api/insider-trades), which covers the buys and sells in between: trades are the events, ownership statements are the state.

You can answer questions like:

* What did a new director own on the day they joined the board?
* What positions does an insider report in their annual statement, including options and RSUs?
* Which insiders hold their shares indirectly, through trusts or LLCs?

Positions are returned as reported per filing (point-in-time statements), newest filings first.

To get started, please create an account and grab your <b>API key</b> at [financialdatasets.ai](https://financialdatasets.ai).

You will use the API key to authenticate your API requests.

### Coverage

| Companies | Insiders | History            | Updated |
| --------- | -------- | ------------------ | ------- |
| 6,500+    | 40,000+  | Since January 2021 | Daily   |

### Available Tickers

You can fetch a list of companies with insider ownership statements with a `GET` request to:
[https://api.financialdatasets.ai/insider-ownership/tickers/](https://api.financialdatasets.ai/insider-ownership/tickers/)

### Available Insiders

You can fetch a list of insider names for a given ticker with a `GET` request to:
[https://api.financialdatasets.ai/insider-ownership/names/?ticker=AAPL](https://api.financialdatasets.ai/insider-ownership/names/?ticker=AAPL)

### Getting Started

There are only 3 steps for making a successful API call:

1. Add your API key to the header of the request as `X-API-KEY`.
2. Add query params like `ticker` and `limit` to filter the data.
3. Execute the API request.

### Filtering the Data

You can filter the data by `ticker` (required), plus `name`, `form_type`, `limit`, and `filing_date`.

**Note**: by default, `limit` is `10` (max `1000`), `name` is `null`, and `form_type` is `null`.

The `name` parameter matches insider names (case-insensitive contains). You can get the list of available names for a ticker from the `/names` endpoint above.

The `form_type` parameter filters to `3` (initial ownership statements), `5` (annual statements), or their amendments `3/A` and `5/A`.

The `filing_date` parameter is used to filter by when filings were submitted. For example, you can include filters like `filing_date_lte=2026-06-30` and `filing_date_gte=2026-01-01` to get statements filed in the first half of 2026.

The available `filing_date` operations are:

* `filing_date_lte`
* `filing_date_lt`
* `filing_date_gte`
* `filing_date_gt`
* `filing_date`

### Example

```python Insider Ownership theme={"theme":{"light":"vitesse-light","dark":"vitesse-dark"}}
import requests

# add your API key to the headers
headers = {
    "X-API-KEY": "your_api_key_here"
}

# set your query params
ticker = 'AAPL'     # stock ticker
limit = 50          # number of rows to return

# create the URL
url = (
    f'https://api.financialdatasets.ai/insider-ownership'
    f'?ticker={ticker}'
    f'&limit={limit}'
)

# make API request
response = requests.get(url, headers=headers)

# parse insider_ownership from the response
insider_ownership = response.json().get('insider_ownership')
```

### Example (with name)

```python Insider Ownership theme={"theme":{"light":"vitesse-light","dark":"vitesse-dark"}}
import requests

# add your API key to the headers
headers = {
    "X-API-KEY": "your_api_key_here"
}

# set your query params
ticker = 'AAPL'     # stock ticker
name = 'cook'       # insider name (case-insensitive contains)

# create the URL
url = (
    f'https://api.financialdatasets.ai/insider-ownership'
    f'?ticker={ticker}'
    f'&name={name}'
)

# make API request
response = requests.get(url, headers=headers)

# parse insider_ownership from the response
insider_ownership = response.json().get('insider_ownership')
```

### Example (initial statements only)

```python Insider Ownership theme={"theme":{"light":"vitesse-light","dark":"vitesse-dark"}}
import requests

# add your API key to the headers
headers = {
    "X-API-KEY": "your_api_key_here"
}

# set your query params
ticker = 'AAPL'     # stock ticker
form_type = '3'     # Form 3: what a new insider owned on day one

# create the URL
url = (
    f'https://api.financialdatasets.ai/insider-ownership'
    f'?ticker={ticker}'
    f'&form_type={form_type}'
)

# make API request
response = requests.get(url, headers=headers)

# parse insider_ownership from the response
insider_ownership = response.json().get('insider_ownership')
```


## OpenAPI

````yaml GET /insider-ownership
openapi: 3.0.1
info:
  title: Financial Datasets API
  description: >-
    Stock market API with real-time and historical financial data for 27,000+
    tickers over 30+ years. Financial statements, equity prices, insider trades,
    SEC filings, and more.
  version: 1.0.0
  license:
    name: MIT
    url: https://opensource.org/licenses/MIT
  contact:
    name: API Support
    url: mailto:support@financialdatasets.ai
    email: support@financialdatasets.ai
  termsOfService: https://financialdatasets.ai/terms-of-use
servers:
  - url: https://api.financialdatasets.ai/
    description: Production server
security:
  - X-API-KEY: []
tags:
  - name: Financial Statements
    description: Access to income statements, balance sheets, and cash flow statements
  - name: Market Data
    description: Real-time and historical price data
  - name: Company Information
    description: Company facts like ticker, name, and description
  - name: Earnings
    description: Earnings data and related information
  - name: News
    description: Real-time and historical news articles
  - name: SEC Filings
    description: SEC filings and regulatory documents
  - name: Insider Trades
    description: Insider trading activity and transactions
  - name: Activist Ownership
    description: Activist stakes from SEC Schedule 13D filings, in real time
  - name: Beneficial Ownership
    description: >-
      Holders of more than 5% of a company's shares, from SEC Schedules 13D and
      13G
  - name: Insider Ownership
    description: Insider ownership statements from SEC Forms 3 and 5
  - name: Institutional Holdings
    description: SEC-direct 13F equity holdings of institutional investment managers
  - name: IPOs
    description: >-
      Upcoming IPOs from SEC registration statements (Form S-1), with extracted
      pre-IPO financial statements
  - name: Index Funds
    description: >-
      ETF and index-fund holdings, weights, and the funds that hold a given
      security
  - name: Financial Metrics
    description: Financial ratios, metrics, and key performance indicators
  - name: Macroeconomics
    description: Real-time and historical macroeconomic data like interest rates
  - name: KPIs
    description: Sector-specific operational KPIs extracted from earnings releases.
paths:
  /insider-ownership:
    get:
      tags:
        - Insider Ownership
      summary: Get insider ownership
      description: >-
        Get insider ownership statements from SEC Forms 3 and 5, one row per
        reported holding. Positions are returned as reported per filing
        (point-in-time ownership statements), newest filings first. A Form 3 is
        an insider's initial statement of what they own; a Form 5 is the annual
        statement.
      operationId: getInsiderOwnership
      parameters:
        - name: ticker
          in: query
          description: The ticker symbol of the company.
          required: true
          schema:
            type: string
        - name: name
          in: query
          description: >-
            Filter by insider name (case-insensitive contains). Use the
            /insider-ownership/names endpoint to get available names for a
            ticker.
          required: false
          schema:
            type: string
        - name: form_type
          in: query
          description: >-
            Filter by SEC form type: 3 for initial ownership statements, 5 for
            annual statements (or their amendments 3/A, 5/A).
          required: false
          schema:
            type: string
            enum:
              - '3'
              - 3/A
              - '5'
              - 5/A
        - name: filing_date
          in: query
          description: Filter by exact filing date in YYYY-MM-DD format.
          required: false
          schema:
            type: string
            format: date
        - name: filing_date_gte
          in: query
          description: >-
            Filter by filing date greater than or equal to this date
            (YYYY-MM-DD).
          required: false
          schema:
            type: string
            format: date
        - name: filing_date_lte
          in: query
          description: Filter by filing date less than or equal to this date (YYYY-MM-DD).
          required: false
          schema:
            type: string
            format: date
        - name: filing_date_gt
          in: query
          description: Filter by filing date greater than this date (YYYY-MM-DD).
          required: false
          schema:
            type: string
            format: date
        - name: filing_date_lt
          in: query
          description: Filter by filing date less than this date (YYYY-MM-DD).
          required: false
          schema:
            type: string
            format: date
        - name: limit
          in: query
          description: 'The maximum number of rows to return (default: 10, max: 1000).'
          required: false
          schema:
            type: integer
            default: 10
      responses:
        '200':
          description: Insider ownership response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InsiderOwnershipResponse'
        '400':
          $ref: '#/components/responses/BadRequestError'
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '402':
          $ref: '#/components/responses/PaymentRequiredError'
components:
  schemas:
    InsiderOwnershipResponse:
      type: object
      properties:
        insider_ownership:
          type: array
          items:
            $ref: '#/components/schemas/InsiderOwnership'
    InsiderOwnership:
      type: object
      properties:
        ticker:
          type: string
          description: The ticker symbol of the company.
        issuer:
          type: string
          nullable: true
          description: The name of the issuing company.
        name:
          type: string
          description: The name of the insider.
        title:
          type: string
          nullable: true
          description: The title of the insider.
        is_board_director:
          type: boolean
          description: Whether the insider is a board director.
        is_officer:
          type: boolean
          description: Whether the insider is an officer of the company.
        is_ten_percent_owner:
          type: boolean
          description: Whether the insider owns 10% or more of the company.
        form_type:
          type: string
          description: >-
            The SEC form type: 3 (initial ownership statement) or 5 (annual
            statement), or their amendments 3/A, 5/A.
        filing_date:
          type: string
          format: date
          description: The date the filing was accepted by the SEC.
        as_of_date:
          type: string
          format: date
          nullable: true
          description: The date the position is stated as of.
        accession_number:
          type: string
          description: >-
            The SEC accession number of the filing. All holdings of one filing
            share it.
        holding_type:
          type: string
          enum:
            - common
            - derivative
          description: >-
            Whether the position is a common holding or a derivative (option,
            RSU, etc.). Derivative-only fields are null on common holdings.
        security_title:
          type: string
          nullable: true
          description: The title of the held security.
        shares_owned:
          type: number
          nullable: true
          description: The number of shares (or units) beneficially owned.
        direct_or_indirect:
          type: string
          nullable: true
          description: D when held directly, I when held indirectly.
        nature_of_ownership:
          type: string
          nullable: true
          description: For indirect holdings, the ownership vehicle (e.g. a trust or LLC).
        conversion_or_exercise_price:
          type: number
          nullable: true
          description: 'Derivative only: the conversion or exercise price.'
        exercise_date:
          type: string
          format: date
          nullable: true
          description: 'Derivative only: the date the security is first exercisable.'
        expiration_date:
          type: string
          format: date
          nullable: true
          description: 'Derivative only: the expiration date.'
        underlying_security_title:
          type: string
          nullable: true
          description: 'Derivative only: the title of the underlying security.'
        underlying_security_shares:
          type: number
          nullable: true
          description: 'Derivative only: the number of underlying shares.'
    ErrorResponse:
      type: object
      properties:
        error:
          type: string
          description: A short error message.
        message:
          type: string
          description: A more detailed error message.
  responses:
    BadRequestError:
      description: Bad request
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error: Bad Request
            message: Invalid request parameters
    UnauthorizedError:
      description: Unauthorized
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error: Unauthorized
            message: Invalid API key provided
    PaymentRequiredError:
      description: The request requires a paid subscription
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error: Payment Required
            message: >-
              This endpoint requires a paid subscription. Please upgrade your
              plan.
  securitySchemes:
    X-API-KEY:
      type: apiKey
      name: X-API-KEY
      description: API key for authentication.
      in: header

````