Earnings Feed Insider API

Track insider trading activity from SEC Forms 3, 4, and 5. Monitor purchases, sales, grants, and other transactions by corporate officers, directors, and 10% owners.

Operations 1

GET /api/v1/insider/transactions List insider transactions #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/earningsfeed-com:earningsfeed-com-insider-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

earningsfeed-com-insider-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Earnings Feed Insider API
  version: 1.0.0
  description: 'Access SEC filings, insider transactions, institutional holdings, and company data.


    ## Authentication


    All API endpoints require authentication via API key. Include your key in the Authorization header:


    ```

    Authorization: Bearer your_api_key

    ```


    ## Rate Limits


    The tier-specific per-minute limits below apply to API-key and MCP requests. Interactive documentation tokens retain a

    fixed limit of 10 requests per minute, regardless of subscription tier:


    | Tier | Requests/minute | Requests/UTC month |

    |------|-----------------|--------------------|

    | Free | 15 | 5,000 |

    | Pro | 60 | 250,000 |

    | Trader | 300 | 2,000,000 |


    The monthly allowance is account-wide and shared across API keys, interactive documentation, and MCP tool calls.


    Authenticated responses that pass the minute throttle include both minute and monthly usage headers:

    - `X-RateLimit-Limit`: Maximum requests per minute

    - `X-RateLimit-Remaining`: Remaining requests in current window

    - `X-RateLimit-Reset`: Unix timestamp when the window resets

    - `X-RateLimit-Monthly-Limit`: Requests included per UTC calendar month

    - `X-RateLimit-Monthly-Remaining`: Remaining requests in the current UTC month

    - `X-RateLimit-Monthly-Reset`: Unix timestamp for the next UTC month

    - `X-RateLimit-Monthly-Policy`: currently `hard` for every tier


    Every tier stops at its account-wide UTC monthly allowance: Free at 5,000 requests, Pro at 250,000, and Trader at

    2,000,000. Usage milestones are recorded at 70%, 90%, and 100% so integrations can upgrade before reaching the cap.


    For a minute throttle, HTTP `429` uses code `RATE_LIMITED`, `X-RateLimit-Scope: minute`, and a `Retry-After`

    header. Wait for that interval, add jitter, and cap retry attempts. A monthly cap uses code

    `MONTHLY_QUOTA_EXCEEDED`, `X-RateLimit-Scope: monthly`, reset timing, upgrade guidance, and an HTTP-date

    `Retry-After` value that points to the monthly reset; do not retry it in a loop.


    ```js

    async function fetchWithBackoff(url, options) {

    for (let attempt = 0; attempt setTimeout(resolve, retryAfter * 1000 + jitterMs));

    }

    }

    ```


    ## Pagination


    List endpoints use cursor-based pagination:

    - `limit`: Number of items per page (1-100, default 25)

    - `cursor`: Opaque cursor from previous response


    Response includes:

    - `items`: Array of results

    - `nextCursor`: Cursor for next page (null if no more)

    - `hasMore`: Whether more items exist'
  contact:
    name: Earnings Feed Support
    url: https://earningsfeed.com/support
    email: support@earningsfeed.com
  license:
    name: Proprietary
    url: https://earningsfeed.com/terms
servers:
- url: https://earningsfeed.com
  description: Production
security:
- bearerAuth: []
tags:
- name: Insider
  description: Track insider trading activity from SEC Forms 3, 4, and 5. Monitor purchases, sales, grants, and other transactions by corporate officers, directors, and 10% owners.
paths:
  /api/v1/insider/transactions:
    get:
      tags:
      - Insider
      summary: List insider transactions
      description: 'Retrieve a paginated feed of SEC insider trading transactions from Forms 3, 4, and 5.


        ## Data Source


        This endpoint returns transactions reported by corporate insiders (officers, directors, and 10% owners) to the SEC. Each transaction represents a buy, sell, grant, gift, or other transfer of company securities.


        ## Transaction Codes


        The `transactionCode` field indicates the type of transaction:


        | Code | Description | Common Usage |

        |------|-------------|--------------|

        | **P** | Open market purchase | Most common buy signal |

        | **S** | Open market sale | Most common sell signal |

        | **A** | Award/grant | Stock compensation |

        | **M** | Exercise of derivative | Options/warrants exercise |

        | **G** | Gift | Transfer to family/charity |

        | **F** | Tax payment | Shares sold for tax withholding |

        | **X** | Exercise in-the-money | Options exercise |


        ## Filtering Tips


        - Use `direction=buy` to see only acquisitions (bullish signals)

        - Use `direction=sell` to see only dispositions

        - Use `codes=P,S` to see open market trades only (excludes awards, gifts)

        - Use `derivative=false` to see only equity transactions

        - Use `minValue=100000` to see only large transactions


        ## Understanding the Data


        - **shares**: Number of securities in the transaction

        - **pricePerShare**: Price per share (null for gifts, awards, etc.)

        - **transactionValue**: Computed total value (shares × price)

        - **sharesAfter**: Insider''s total holdings after this transaction

        - **directIndirect**: D=Direct ownership, I=Indirect (through trust, etc.)

        - **isDerivative**: true=Options/warrants, false=Common stock


        ## Example Use Cases


        1. **Track CEO purchases**: Filter by `insiderCik` + `direction=buy`

        2. **Monitor large sales**: Filter by `direction=sell` + `minValue=1000000`

        3. **Company insider activity**: Filter by `ticker=AAPL`

        4. **Recent trades by all insiders**: No filters, sorted by date'
      security:
      - bearerAuth: []
      parameters:
      - schema:
          type: integer
          minimum: 1
          maximum: 100
          default: 25
          description: Number of items to return (1-100)
          example: 25
        required: false
        description: Number of items to return (1-100)
        name: limit
        in: query
      - schema:
          type: string
          description: Cursor for pagination (opaque string from previous response)
          example: eyJzb3J0IjoiMjAyNC0xMS0wMVQxMjozMDowMC4wMDBaIiwiaWQiOjEyMzQ1fQ
        required: false
        description: Cursor for pagination (opaque string from previous response)
        name: cursor
        in: query
      - schema:
          type: integer
          exclusiveMinimum: 0
          description: Filter by company CIK (issuer)
          example: 320193
        required: false
        description: Filter by company CIK (issuer)
        name: cik
        in: query
      - schema:
          type: string
          minLength: 1
          maxLength: 10
          description: Filter by company stock ticker
          example: AAPL
        required: false
        description: Filter by company stock ticker
        name: ticker
        in: query
      - schema:
          type: integer
          exclusiveMinimum: 0
          description: Filter by insider CIK (reporting person)
          example: 320193
        required: false
        description: Filter by insider CIK (reporting person)
        name: insiderCik
        in: query
      - schema:
          anyOf:
          - type: string
          - type: array
            items:
              type: string
          description: Filter by transaction codes (comma-separated). E.g., 'P,S' for purchases/sales.
          example: P,S
        required: false
        description: Filter by transaction codes (comma-separated). E.g., 'P,S' for purchases/sales.
        name: codes
        in: query
      - schema:
          type: string
          enum:
          - buy
          - sell
          - all
          default: all
          description: 'Filter by transaction direction:

            - **buy** = Acquisitions only (transaction codes P, A, M, X, etc. with acquiredDisposed=A)

            - **sell** = Dispositions only (transaction codes S, F, D, etc. with acquiredDisposed=D)

            - **all** = All transactions'
          example: buy
        required: false
        description: 'Filter by transaction direction:

          - **buy** = Acquisitions only (transaction codes P, A, M, X, etc. with acquiredDisposed=A)

          - **sell** = Dispositions only (transaction codes S, F, D, etc. with acquiredDisposed=D)

          - **all** = All transactions'
        name: direction
        in: query
      - schema:
          type: string
          enum:
          - 'true'
          - 'false'
          - all
          default: all
          description: Filter by security type. 'true' for derivatives only, 'false' for equity only.
        required: false
        description: Filter by security type. 'true' for derivatives only, 'false' for equity only.
        name: derivative
        in: query
      - schema:
          type: string
          pattern: ^\d{4}-\d{2}-\d{2}$
          description: Filter transactions on or after this date (YYYY-MM-DD)
          example: '2024-01-01'
        required: false
        description: Filter transactions on or after this date (YYYY-MM-DD)
        name: startDate
        in: query
      - schema:
          type: string
          pattern: ^\d{4}-\d{2}-\d{2}$
          description: Filter transactions on or before this date (YYYY-MM-DD)
          example: '2024-12-31'
        required: false
        description: Filter transactions on or before this date (YYYY-MM-DD)
        name: endDate
        in: query
      - schema:
          type: number
          exclusiveMinimum: 0
          description: Minimum transaction value (shares * price) in USD
          example: 100000
        required: false
        description: Minimum transaction value (shares * price) in USD
        name: minValue
        in: query
      - schema:
          type: number
          exclusiveMinimum: 0
          description: Maximum transaction value in USD
          example: 10000000
        required: false
        description: Maximum transaction value in USD
        name: maxValue
        in: query
      - schema:
          type: string
          maxLength: 500
          description: Search query for company name, insider name, or ticker
          example: Apple
        required: false
        description: Search query for company name, insider name, or ticker
        name: q
        in: query
      responses:
        '200':
          description: Paginated list of insider transactions
          headers:
            X-RateLimit-Limit:
              description: Maximum requests allowed per minute for this authentication path
              schema:
                type: string
                example: '15'
            X-RateLimit-Remaining:
              description: Remaining requests in the current minute window
              schema:
                type: string
                example: '14'
            X-RateLimit-Reset:
              description: Unix timestamp when the current minute window resets
              schema:
                type: string
                example: '1699012345'
            X-RateLimit-Monthly-Limit:
              description: Requests included for the account in a UTC calendar month
              schema:
                type: string
                example: '5000'
            X-RateLimit-Monthly-Remaining:
              description: Remaining requests in the account's current UTC calendar month
              schema:
                type: string
                example: '4999'
            X-RateLimit-Monthly-Reset:
              description: Unix timestamp when the next UTC calendar month begins
              schema:
                type: string
                example: '1785542400'
            X-RateLimit-Monthly-Policy:
              description: Monthly allowance policy. All current tiers use hard caps.
              schema:
                type: string
                enum:
                - hard
                example: hard
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InsiderTransactionsResponse'
        '400':
          description: Invalid query parameters
          headers:
            X-RateLimit-Limit:
              description: Maximum requests allowed per minute for this authentication path
              schema:
                type: string
                example: '15'
            X-RateLimit-Remaining:
              description: Remaining requests in the current minute window
              schema:
                type: string
                example: '14'
            X-RateLimit-Reset:
              description: Unix timestamp when the current minute window resets
              schema:
                type: string
                example: '1699012345'
            X-RateLimit-Monthly-Limit:
              description: Requests included for the account in a UTC calendar month
              schema:
                type: string
                example: '5000'
            X-RateLimit-Monthly-Remaining:
              description: Remaining requests in the account's current UTC calendar month
              schema:
                type: string
                example: '4999'
            X-RateLimit-Monthly-Reset:
              description: Unix timestamp when the next UTC calendar month begins
              schema:
                type: string
                example: '1785542400'
            X-RateLimit-Monthly-Policy:
              description: Monthly allowance policy. All current tiers use hard caps.
              schema:
                type: string
                enum:
                - hard
                example: hard
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Unauthorized - API key required
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '429':
          description: Minute rate limit or tier monthly quota exceeded. Retry-After points to the relevant minute or monthly reset.
          headers:
            X-RateLimit-Limit:
              description: Maximum requests allowed per minute for this authentication path
              schema:
                type: string
                example: '15'
            X-RateLimit-Remaining:
              description: Remaining requests in the current minute window
              schema:
                type: string
                example: '14'
            X-RateLimit-Reset:
              description: Unix timestamp when the current minute window resets
              schema:
                type: string
                example: '1699012345'
            X-RateLimit-Monthly-Limit:
              description: Requests included for the account in a UTC calendar month
              schema:
                type: string
                example: '5000'
            X-RateLimit-Monthly-Remaining:
              description: Remaining requests in the account's current UTC calendar month
              schema:
                type: string
                example: '4999'
            X-RateLimit-Monthly-Reset:
              description: Unix timestamp when the next UTC calendar month begins
              schema:
                type: string
                example: '1785542400'
            X-RateLimit-Monthly-Policy:
              description: Monthly allowance policy. All current tiers use hard caps.
              schema:
                type: string
                enum:
                - hard
                example: hard
            X-RateLimit-Scope:
              description: Which limit caused this response
              schema:
                type: string
                enum:
                - minute
                - monthly
                example: minute
            Retry-After:
              description: Whole seconds for minute limits, or an HTTP-date for monthly limits
              schema:
                type: string
                example: '42'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal server error
          headers:
            X-RateLimit-Limit:
              description: Maximum requests allowed per minute for this authentication path
              schema:
                type: string
                example: '15'
            X-RateLimit-Remaining:
              description: Remaining requests in the current minute window
              schema:
                type: string
                example: '14'
            X-RateLimit-Reset:
              description: Unix timestamp when the current minute window resets
              schema:
                type: string
                example: '1699012345'
            X-RateLimit-Monthly-Limit:
              description: Requests included for the account in a UTC calendar month
              schema:
                type: string
                example: '5000'
            X-RateLimit-Monthly-Remaining:
              description: Remaining requests in the account's current UTC calendar month
              schema:
                type: string
                example: '4999'
            X-RateLimit-Monthly-Reset:
              description: Unix timestamp when the next UTC calendar month begins
              schema:
                type: string
                example: '1785542400'
            X-RateLimit-Monthly-Policy:
              description: Monthly allowance policy. All current tiers use hard caps.
              schema:
                type: string
                enum:
                - hard
                example: hard
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
      operationId: getApiV1InsiderTransactions
      x-operation-id-source: derived
components:
  schemas:
    InsiderTransactionsResponse:
      type: object
      properties:
        items:
          type: array
          items:
            $ref: '#/components/schemas/InsiderTransaction'
        nextCursor:
          type:
          - string
          - 'null'
          description: Cursor for next page, null if no more pages
        hasMore:
          type: boolean
          description: Whether more items exist beyond this page
      required:
      - items
      - nextCursor
      - hasMore
    ErrorResponse:
      type: object
      properties:
        error:
          type: string
          description: Human-readable error message
          example: Invalid request parameters
        code:
          type: string
          description: Machine-readable error code
          example: VALIDATION_ERROR
        details:
          type: object
          additionalProperties: {}
          description: Additional error details (e.g., field-level validation errors)
      required:
      - error
    InsiderTransaction:
      type: object
      properties:
        accessionNumber:
          type: string
          description: SEC accession number of the source filing
          example: 0001234567-24-000123
        filedAt:
          type: string
          format: date-time
          description: 'SEC filing date. A calendar date encoded as midnight UTC: read only the date part (YYYY-MM-DD) and never convert it to a local time zone. For the moment the SEC accepted the filing, use acceptTs.'
          example: '2024-10-30T00:00:00.000Z'
        formType:
          type: string
          description: Form type (3, 4, 5, or their amendments)
          example: '4'
        personCik:
          type: integer
          exclusiveMinimum: 0
          description: CIK of the reporting insider (person or entity)
          example: 1234567
        personName:
          type: string
          description: Name of the reporting insider
          example: John Doe
        companyCik:
          type: integer
          exclusiveMinimum: 0
          description: CIK of the issuing company
          example: 320193
        companyName:
          type:
          - string
          - 'null'
          description: Name of the issuing company
          example: Apple Inc.
        ticker:
          type:
          - string
          - 'null'
          description: Primary stock ticker of the company
          example: AAPL
        isDirector:
          type: boolean
          description: Whether the insider is a director of the company
        isOfficer:
          type: boolean
          description: Whether the insider is an officer of the company
        isTenPercentOwner:
          type: boolean
          description: Whether the insider owns 10% or more of the company
        isOther:
          type: boolean
          description: Other relationship to the company
        officerTitle:
          type:
          - string
          - 'null'
          description: Officer title if applicable (CEO, CFO, etc.)
          example: Chief Executive Officer
        securityTitle:
          type: string
          description: Title/description of the security traded
          example: Common Stock
        isDerivative:
          type: boolean
          description: Whether this is a derivative security (options, warrants, etc.) vs equity
        transactionDate:
          type: string
          description: Date the transaction occurred (YYYY-MM-DD)
          example: '2024-10-28'
        transactionCode:
          type: string
          description: 'SEC transaction code indicating the type of trade:

            - **P** = Open market or private purchase

            - **S** = Open market or private sale

            - **A** = Grant, award, or other acquisition

            - **M** = Exercise or conversion of derivative security

            - **G** = Gift

            - **F** = Tax payment via delivering securities

            - **C** = Conversion of derivative security

            - **D** = Disposition to the issuer

            - **X** = Exercise of in-the-money derivative

            - **E** = Expiration of short derivative position

            - **H** = Expiration (or cancellation) of long derivative position

            - **I** = Discretionary transaction

            - **J** = Other acquisition or disposition

            - **K** = Transaction in equity swap or similar instrument

            - **L** = Small acquisition under Rule 16a-6

            - **O** = Exercise of out-of-the-money derivative security

            - **U** = Disposition pursuant to a tender of shares

            - **V** = Transaction voluntarily reported earlier than required

            - **W** = Acquisition or disposition by will or laws of descent

            - **Z** = Deposit into or withdrawal from voting trust


            Common codes for tracking: P (purchases), S (sales), A (awards)'
          example: P
        equitySwapInvolved:
          type: boolean
          description: Whether an equity swap was involved in the transaction
        shares:
          type:
          - string
          - 'null'
          description: Number of shares involved in the transaction (as decimal string for precision)
          example: '10000.0000'
        pricePerShare:
          type:
          - string
          - 'null'
          description: Price per share (as decimal string for precision). Null for gifts, awards, etc.
          example: '175.5000'
        acquiredDisposed:
          type: string
          description: 'Direction of the transaction:

            - **A** = Acquired (shares were added to insider''s holdings)

            - **D** = Disposed (shares were removed from insider''s holdings)'
          example: A
        sharesAfter:
          type:
          - string
          - 'null'
          description: Shares owned after the transaction (as decimal string)
          example: '150000.0000'
        directIndirect:
          type: string
          description: 'Type of ownership:

            - **D** = Direct ownership (held in insider''s own name)

            - **I** = Indirect ownership (held through trust, family member, entity, etc.)'
          example: D
        ownershipNature:
          type:
          - string
          - 'null'
          description: Nature of indirect ownership (e.g., 'By Trust', 'By Spouse')
          example: By Trust
        conversionOrExercisePrice:
          type:
          - string
          - 'null'
          description: Exercise price for options/warrants (as decimal string)
          example: '100.0000'
        exerciseDate:
          type:
          - string
          - 'null'
          description: Date the derivative can be exercised
          example: '2025-01-15'
        expirationDate:
          type:
          - string
          - 'null'
          description: Expiration date of the derivative
          example: '2030-01-15'
        underlyingSecurityTitle:
          type:
          - string
          - 'null'
          description: Title of the underlying security for derivatives
          example: Common Stock
        underlyingShares:
          type:
          - string
          - 'null'
          description: Number of underlying shares covered by the derivative
          example: '1000.0000'
        transactionValue:
          type:
          - number
          - 'null'
          description: Total transaction value (shares * pricePerShare). Null if price is unknown.
          example: 1755000
      required:
      - accessionNumber
      - filedAt
      - formType
      - personCik
      - personName
      - companyCik
      - companyName
      - ticker
      - isDirector
      - isOfficer
      - isTenPercentOwner
      - isOther
      - officerTitle
      - securityTitle
      - isDerivative
      - transactionDate
      - transactionCode
      - equitySwapInvolved
      - shares
      - pricePerShare
      - acquiredDisposed
      - sharesAfter
      - directIndirect
      - ownershipNature
      - conversionOrExercisePrice
      - exerciseDate
      - expirationDate
      - underlyingSecurityTitle
      - underlyingShares
      - transactionValue
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: API key sent as Bearer token in Authorization header.