# Insider Trading Data from SEC Form 3, 4, 5 Filings > Search and list all insider trades reported in SEC form 3, 4, and 5. Find out how many shares executives and 10% owners sold and bought. Access XML ownership documents converted to JSON format. Source: https://sec-api.io/docs/insider-ownership-trading-api The Insider Trading Data API allows you to search and list all insider buy and sell transactions of all publicly listed companies on US stock exchanges. Insider activities of company directors, officers, 10% owners and other executives are fully searchable. The insider trading database includes information about the CIK and name of the insider, her/his relationship to the company, the number of shares and securities purchased or sold, the purchase or selling price, the date of the transaction, the amount of securities held before and after the transaction occured, any footnotes such as the effect of Rule 10b-18 or 10b5-1 stock purchase plans and more. The [full list of all data points](#response-format) is available below. Insider trades are reported to the SEC in Form 3, 4 and 5 filings. Our system converts the XML data in SEC Form 3, 4, and 5 into a standardized JSON format, indexes the information into our database and makes the data searchable through the Insider Trading Data API. New insider transactions are added to the database in real-time as soon as the corresponding filing is published on SEC EDGAR. Example: Form 3 in JSON Format ```json { "accessionNo": "0000921895-24-002825", "filedAt": "2024-11-26T19:53:45-05:00", "documentType": "3", "periodOfReport": "2024-11-22", "notSubjectToSection16": false, "issuer": { "cik": "813298", "name": "DESTINATION XL GROUP, INC.", "tradingSymbol": "DXLG" }, "reportingOwner": { "cik": "1959730", "name": "Fund 1 Investments, LLC", "address": { ... }, "relationship": { "isDirector": false, "isOfficer": false, "isTenPercentOwner": true, "isOther": false } }, "nonDerivativeTable": { "holdings": [ { "securityTitle": "Common Stock, par value $0.01 per share", "postTransactionAmounts": { "sharesOwnedFollowingTransaction": 5720548 }, "ownershipNature": { "directOrIndirectOwnership": "I", "natureOfOwnership": "See Footnotes", "natureOfOwnershipFootnoteId": [ "F1", "F2" ] } } // ... more non derivative holdings ] }, "derivativeTable": { "holdings": [ { "securityTitle": "Cash-Settled Total Return Swap", "securityTitleFootnoteId": [ "F4" ], "conversionOrExercisePriceFootnoteId": [ "F4" ], "exerciseDateFootnoteId": [ "F4" ], "expirationDate": "2026-02-24", "expirationDateFootnoteId": [ "F5" ], "underlyingSecurity": { "title": "Common Stock, par value $0.01 per share", "shares": 5763573 }, "ownershipNature": { "directOrIndirectOwnership": "I", "natureOfOwnership": "See Footnotes", "natureOfOwnershipFootnoteId": [ "F1", "F2" ] } } ] }, "footnotes": [ { "id": "F1", "text": "Securities reported herein are held for the benefit of Pleasant Lake Onshore Feeder Fund, LP (the \"PL Fund\") and an additional private investment vehicle for which Pleasant Lake Partners LLC (\"PLP\") serves as investment adviser. Fund 1 Investments, LLC serves as managing member of PLP. Jonathan Lennon serves as managing member of Fund 1 Investments, LLC. Each of the Reporting Persons disclaims beneficial ownership of the securities reported herein except to the extent of its or his pecuniary interest therein." }, { "id": "F2", "text": "Securities held for the account of the PL Fund." }, { "id": "F3", "text": "Securities held for the account of an unaffiliated private fund for which PLP serves as investment adviser." }, { "id": "F4", "text": "PL Fund has entered into certain cash-settled total return swap agreeements (the \"Swap Agreements\") with an unaffiliated third party financial institution, which provides PL Fund with economic exposure to an aggregate of 5,763,573 nominal shares of Common Stock. The Swap Agreements provide PL Fund with economic results that are comparable to the economic results of ownership but do not provide PL Fund with the power to vote or direct the voting or dispose of or direct the disposition of the shares of Common Stock that are the subject of the Swaps Agreements (the \"Subject Shares\"). The Reporting Persons expressly disclaim beneficial ownership of the Subject Shares except to the extent of its or his pecuniary interest therein." }, { "id": "F5", "text": "The expiration date of the Swap Agreements will be automatically extended for successive 12 month periods unless one party provides written notice to the other party, at least 30 calendar days prior to the first extension and at least 15 calendar days prior to any subsequent extension, not to so extend the expiration date." } ] } ``` The HTTP POST-based API accepts a search query and returns all matching insider transactions. All data points are searchable. For example, finding all insider trades by the ticker symbol of a company, looking for insider buying acticity in a particular industry or sector or monitoring transactions falling under Rule 10b5-1. The API returns a maximum of 50 insider transactions per query. Increase the `from` parameter by 50 each time you are requesting the next batch of matching transactions. Dataset history: All Form 3, 4 and 5 filings and amended versions filed since 2003 to present. Dataset content: 11.4 million insider transactions — 8.27 million non-derivative and 3.15 million derivative — covering 277K unique insiders and 22.3K issuers. Broken down by form type: 4.48M Form 4 (4.37M + 119K /A), 393K Form 3 (374K + 19K /A), 96K Form 5 (93K + 3.5K /A). Data update frequency: New insider transaction data is extracted, indexed, and made searchable within an average of 300 milliseconds after a new Form 3/4/5 filing is published. Survivorship bias free: Yes. The database includes all insider transactions, including from delisted companies. ## API Endpoint ### Search API Retrieve insider trading data by sending a `POST` HTTP request with the search parameters as the payload to the following endpoint: https://api.sec-api.io/insider-trading Supported HTTP methods: `POST` Request and response content type: `JSON` ### Bulk Download APIs The complete sets of Form 3, 4 and 5 filings are available for bulk download in compressed JSONL (JSON line) files (`.jsonl.gz`). Each line in a `.jsonl.gz` file represents the full content of a single Form 3, 4 or 5 filing in structured JSON format. The dataset is organized by year and month, using the filename format `YYYY-MM.jsonl.gz`, where `YYYY` is the year (e.g., `2024`) and `MM` is the month (e.g., `02` for February). Each `.jsonl.gz` file includes all insider trading filings with a `filedAt` timestamp that falls within the respective year and month. This timestamp reflects when the filing was accepted by the EDGAR system. New filings published during the previous day are added daily to the bulk datasets between 1:00 AM and 4:00 AM ET. An accompanying `index.json` file provides metadata for all available `.jsonl.gz` files, including: - `key` (string) - The file path, e.g. `2025/2025-03.jsonl.gz`. - `updatedAt` (date) - The last update timestamp, e.g. `2025-04-03T14:06:34.000Z`. - `size` (integer) - The file size in bytes, e.g. `106764954`. The `index.json` file is especially useful for programmatic access and automation, allowing to monitor updates and manage downloads at scale. | Endpoint | Description | HTTP Method | Response Format | | --- | --- | --- | --- | | [/bulk/form-3/YEAR/YEAR-MONTH.jsonl.gz](#/bulk/form-3/year/year-month.jsonl.gz) | Gzip-compressed JSONL file containing all Form 3 data for the specified year and month. | GET | jsonl.gz | | [/bulk/form-3/index.json](#/bulk/form-3/index.json) | JSON file containing the paths, file update times and file sizes of all jsonl.gz files of all Form 3 data files. | GET | json | | [/bulk/form-4/YEAR/YEAR-MONTH.jsonl.gz](#/bulk/form-4/year/year-month.jsonl.gz) | Gzip-compressed JSONL file containing all Form 4 data for the specified year and month. | GET | jsonl.gz | | [/bulk/form-4/index.json](#/bulk/form-4/index.json) | JSON file containing the paths, file update times and file sizes of all jsonl.gz files of all Form 4 data files. | GET | json | | [/bulk/form-5/YEAR/YEAR-MONTH.jsonl.gz](#/bulk/form-5/year/year-month.jsonl.gz) | Gzip-compressed JSONL file containing all Form 5 data for the specified year and month. | GET | jsonl.gz | | [/bulk/form-5/index.json](#/bulk/form-5/index.json) | JSON file containing the paths, file update times and file sizes of all jsonl.gz files of all Form 5 data files. | GET | json | #### Bulk Download Endpoint Examples Open the following example URLs in your browser to download all Form 4 filings published in February 2025, or to download the index file containing all available Form 4 bulk dataset files. Replace `YOUR_API_KEY` with your actual API key before using the URLs. - `https://api.sec-api.io/bulk/form-4/2025/2025-02.jsonl.gz?token=YOUR_API_KEY` - `https://api.sec-api.io/bulk/form-4/index.json?token=YOUR_API_KEY` ### Authentication To authenticate API requests, use the API key displayed in your user profile. Utilize the API key in one of two ways. Choose the method that best fits your use case: - **Authorization Header**: Set the API key as an `Authorization` header. For instance, before sending a `POST` request to `https://api.sec-api.io/insider-trading`, ensure the header is set as follows: `Authorization: YOUR_API_KEY`. Do not include any prefix like `Bearer`. - **Query Parameter**: Alternatively, append your API key directly to the URL as a query parameter. For example, when making `POST` requests, use the URL `https://api.sec-api.io/insider-trading?token=YOUR_API_KEY` instead of the base endpoint. ## Request Parameters All insider transaction properties are searchable. Refer to the complete list of properties in the [Response Structure section](#response-format) below. You can send a search query as JSON formatted payload to the API using the structure below. **Request parameters:** - `query` (string) - The `query` string defines the search expression and is written in Lucene syntax. You can specify which insider transaction document fields to search by using the field name followed by a colon `:`. For example, to search for insider transactions disclosed by Tesla executives, you can use the following query: `issuer.tradingSymbol:TSLA`. The query language supports boolean operators (AND, OR, NOT), wildcards (*), range searches across date and number fields, and nested conditions. [More information about the Lucene query syntax can be found in our tutorial here.](https://sec-api.io/resources/lucene-query-syntax-overview)Let's look at some examples: - The query `reportingOwner.relationship.isDirector:True AND issuer.tradingSymbol:AMZN` returns all insider transactions performed by any director at Amazon. - `nonDerivativeTable.transactions.coding.code:A AND periodOfReport:[2021-01-01 TO 2021-06-30]` returns all insider purchase transactions (transaction code "A") reported in the first six months of 2021. - `from` (integer) - Specifies the starting position in the results set for your query, functioning like an array index. Default is 0, with a maximum value of 10,000, which also represents the upper limit of results that can be returned per `query`. To paginate through results, increment the `from` value accordingly - for instance, setting `from` to 50 retrieves results from the 51st to the 100th transaction, assuming a `size` parameter of 50. If your total results exceed 10,000, consider refining your search criteria to reduce the result set. A common method is to use a date range filter on the `periodOfReport` field, such as `periodOfReport:[2021-01-01 TO 2021-01-31]`, to paginate through all results for January 2021 by progressively increasing the `from` value (0, 50, 100, etc.). For subsequent months like February 2021, update your `query` to `periodOfReport:[2021-02-01 TO 2021-02-28]` and repeat the pagination process. - `size` (integer) - The number of transactions to be returned in one response. Default: 50. Max: 50. - `sort` (array) - Specifies the sorting order of the results. The default sort order is by the `filedAt` field in descending order, starting with the most recent: `[{ "filedAt": { "order": "desc" } }]`. The `sort` parameter is an array of sort definitions. Each array item defines the sort order for the result. Set the `order` property to `asc` for ascending order or `desc` for descending order. The field property specifies the field by which the results are sorted. For example, to sort the results by the `periodOfReport` field in ascending order, use the following sort definition: `[{ "periodOfReport": { "order": "asc" } }]`. ### Request Examples #### Find the most recent insider trades reported by Tesla executives The example search query `"query": "issuer.tradingSymbol:TSLA"` returns the most recent insider transactions reported by any officer, director, 10% owner and other insider working at Tesla. The API returns the first 50 matching transactions while the response size is limited to 50 transactions and sorted by the `filedAt` parameter. ```json { "query": "issuer.tradingSymbol:TSLA", "from": "0", "size": "50", "sort": [{"filedAt":{"order":"desc"}}] } ``` #### Response | Company | Insider Name | Director | Officer | 10% Owner | Transaction Codes | Acquired / Disposed | $ Traded (Non-Derivates) | Shares Transacted (Non-Derivates) | Securities Traded ( Non-Derivative ) | Trade Reported At | Trade Perfomed On | Has Footnotes | ... | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | #### Find recent open-market insider purchases with code P The following shows how to find all insider transactions representing open-market purchases of securities by insiders using transaction code "P". The example search query `nonDerivativeTable.transactions.coding.code:P` looks for all non-derivate transactions with transaction code "P", which stands for open market or private purchase of securities. Change the `code` parameter to "S" to find open-market insider sales. The [full list of transaction codes](#transaction-code-list) is available below. ```json { "query": "nonDerivativeTable.transactions.coding.code:P", "from": "0", "size": "50", "sort": [{"filedAt":{"order":"desc"}}] } ``` #### Response | Company | Insider Name | Director | Officer | 10% Owner | Transaction Codes | Acquired / Disposed | $ Traded (Non-Derivates) | Shares Transacted (Non-Derivates) | Securities Traded ( Non-Derivative ) | Trade Reported At | Trade Perfomed On | Has Footnotes | ... | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | #### Find insider trades reported under Rule 10b5-1 The example search query `"query": "footnotes.text:10b5-1"` looks for all insider transactions with footnotes that include the term "10b5-1". The API returns the first 50 matching transactions while the response size is limited to 50 transactions and sorted by the `filedAt` parameter. ```json { "query": "footnotes.text:10b5-1", "from": "0", "size": "50", "sort": [{"filedAt":{"order":"desc"}}] } ``` #### Response | Company | Insider Name | Director | Officer | 10% Owner | Transaction Codes | Acquired / Disposed | $ Traded (Non-Derivates) | Shares Transacted (Non-Derivates) | Securities Traded ( Non-Derivative ) | Trade Reported At | Trade Perfomed On | Has Footnotes | ... | | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | ## Response Structure **Response type:** JSON The `transactions` array includes all XML-to-JSON converted filings. Each array item represents a single SEC form 3, 4 or 5. Many data fields have optional footnotes attached. The "with footnote" mark indicates that the parameter has a footnote. For example, "`securityTitle` (string, with footnote)" indicates that `securityTitle` has footnotes. The corresponding footenote key is `securityTitleFootnoteId`. The ID and footnote content live in the array `footnotes`. - `transactions` (array) - An array of all matching transactions as reported in Form 3, 4 and 5. An array item represents the JSON converted XML data of a matching filing. - `accessionNo` (string) - Accession number of the original filing. - `filedAt` (dateTime) - The date and time when the transaction filing was accepted by SEC EDGAR. Example: `2022-08-09T21:23:00-04:00` - `documentType` (string) - The type of the form: 3, 3/A, 4, 4/A, 5, 5/A. - `periodOfReport` (date) - Meaning in form 3: date of event requiring statement. In form 4: date of earliest transaction. In form 5: statement for issuer's fiscal year end. Format: YYYY-MM-DD - `dateOfOriginalSubmission` (date) - If amended, date of original filed of the format YYYY-MM-DD. Mandatory in form 3/A, 4/A and 5/A. - `aff10b5One` (boolean) - Affirmation that the transaction(s) were made pursuant to a Rule 10b5-1(c) trading plan. Added by SEC's 2023 Rule 10b5-1 amendments (Release No. 33-11138). Present on Form 4 and Form 5 only. - `issuer` (object) - Issuer information - `cik` (string) - CIK of issuer. Leading zeros are removed. - `name` (string) - Issuer name. - `tradingSymbol` (string) - Issuer trading symbol. - `reportingOwner` (object) - Information about the reporting entity. - `cik` (string) - CIK of reporting entity. Leading zeros are removed. - `name` (string) - Name of reporting entity. - `relationship` (object) - Relationship to issuer. - `isDirector` (boolean) - `True` if the reporting person is a director. `False` otherwise. - `isOfficer` (boolean) - `True` if the reporting person is an officer. `False` otherwise. If `True`, then `officerTitle` becomes mandatory. - `officerTitle` (string) - Officer title if `isOfficer` is `True`. - `isTenPercentOwner` (boolean) - `True` if the reporting person owns 10% of the issuer. `False` otherwise. - `isOther` (boolean) - `True` if the reporting person has a different relationship. `False` otherwise. If `True`, then the `otherText` property becomes mandatory. - `otherText` (string) - Explanation if `isOther` is `True`. - `address` (object) - Address of reporting entity. - `street1` (string) - `street2` (string) - `ciy` (string) - `zipCode` (string) - `stateDescription` (string) - `nonDerivativeTable` (object) - Table I - Non-Derivative Securities - `transactions` (array) - Non-derivative transactions - `securityTitle` (string, with footnote) - Title of security - `transactionDate` (date, with footnote) - Transaction date of the format YYYY-MM-DD. - `deemedExecutionDate` (date, with footnote) - Deemed execution date of the format YYYY-MM-DD. - `coding` (object) - Transaction code properties. - `formType` (string) - Valid values: 3, 3/A, 4, 4/A, 5, 5/A. - `code` (string) - See [Code List](#transaction-code-list) for a list of possible values. - `equitySwapInvolved` (boolean) - `footnoteId` (string) - `timeliness` (string, with footnote) - Valid values: E = early, L = late, empty = on-time. - `amounts` (object) - `shares` (decimal, with footnote) - `pricePerShare` (decimal, with footnote) - `acquiredDisposedCode` (string, with footnote) - Valid values: A = acquired, D = disposed. - `postTransactionAmounts` (object) - Amount owned following reported transaction. - `sharesOwnedFollowingTransaction` (decimal, with footnote) - `valueOwnedFollowingTransaction` (decimal, with footnote) - `ownershipNature` (object) - `directOrIndirectOwnership` (string, with footnote) - Valid values: I = indirect, D = direct. - `natureOfOwnership` (string, with footnote) - `holdings` (array) - `securityTitle` (string, with footnote) - `coding` (object) - `formType` (string) - `footnoteId` (string) - `postTransactionAmounts` (object) - Amount owned following reported transaction. - `sharesOwnedFollowingTransaction` (decimal, with footnote) - `valueOwnedFollowingTransaction` (decimal, with footnote) - `ownershipNature` (object) - `directOrIndirectOwnership` (string, with footnote) - Valid values: I = indirect, D = direct. - `natureOfOwnership` (string, with footnote) - `derivativeTable` (object) - Table II - Derivative Securities - `transactions` (array) - `securityTitle` (string, with footnote) - `conversionOrExercisePrice` (decimal, with footnote) - `transactionDate` (date, with footnote) - `deemedExecutionDate` (date, with footnote) - `coding` (object) - Transaction code properties. - `formType` (string) - Valid values: 3, 3/A, 4, 4/A, 5, 5/A. - `code` (string) - See [Code List](#transaction-code-list) for a list of possible values. - `equitySwapInvolved` (boolean) - `footnoteId` (string) - `timeliness` (string, with footnote) - Valid values: E = early, L = late, empty = on-time. - `amounts` (object) - `shares` (decimal, with footnote) - Securities acquired (A) or disposed of (D) - `pricePerShare` (decimal, with footnote) - Price of derivative security - `acquiredDisposedCode` (string, with footnote) - Valid values: A = acquired, D = disposed. - `exerciseDate` (date, with footnote) - Date exercisable and expiration date - `expirationDate` (date, with footnote) - `underlyingSecurity` (object) - `title` (string, with footnote) - `shares` (decimal, with footnote) - `value` (decimal, with footnote) - `postTransactionAmounts` (object) - Amount owned following reported transaction. - `sharesOwnedFollowingTransaction` (decimal, with footnote) - `valueOwnedFollowingTransaction` (decimal, with footnote) - `ownershipNature` (object) - `directOrIndirectOwnership` (string, with footnote) - Valid values: I = indirect, D = direct. - `natureOfOwnership` (string, with footnote) - `holdings` (array) - `securityTitle` (string, with footnote) - `conversionOrExercisePrice` (date, with footnote) - `coding` (object) - Transaction code properties. - `formType` (string) - Valid values: 3, 3/A, 4, 4/A, 5, 5/A. - `code` (string) - See [Code List](#transaction-code-list) for a list of possible values. - `equitySwapInvolved` (boolean) - `footnoteId` (string) - `exerciseDate` (date, with footnote) - `expirationDate` (date, with footnote) - `underlyingSecurity` (object) - `title` (string, with footnote) - `shares` (decimal, with footnote) - `value` (decimal, with footnote) - `postTransactionAmounts` (object) - Amount owned following reported transaction. - `sharesOwnedFollowingTransaction` (decimal, with footnote) - `valueOwnedFollowingTransaction` (decimal, with footnote) - `ownershipNature` (object) - `directOrIndirectOwnership` (string, with footnote) - Valid values: I = indirect, D = direct. - `natureOfOwnership` (string, with footnote) - `footnotes` (array) - Array of footnote objects. - `id` (string) - ID - `text` (string) - Footnote - `remarks` (array) - Array of remark objects. - `ownerSignatureName` (string) - `ownerSignatureNameDate` (date) - `total` (object) - An object with two properties "value" and "relation". If "relation" equals "gte" (= greater than or equal), the "value" is always 10,000. It indicates that more than 10,000 filings match the query. In order to retrieve all filings, you have to iterate over the results using the "from" and "size" variables sent to the API. If "relation" equals "eq" (= equal), the "value" represents the exact number of filings matching the query. In this case, "value" is always less than 10,000. We don't calculate the exact number of matching filings for results greater than 10,000. ### Response Examples The example illustrates the response to the search query `"query": "issuer.tradingSymbol:TSLA"` and includes the most recent insider trades executed by Elon Musk at Tesla. JSON ```json { "total": { "value": 489, "relation": "eq" }, "transactions": [ { "id": "026dc8fd804de46ef08b5bad594998c5", "accessionNo": "0000899243-22-028189", "filedAt": "2022-08-09T21:23:00-04:00", "schemaVersion": "X0306", "documentType": "4", "periodOfReport": "2022-08-09", "notSubjectToSection16": false, "issuer": { "cik": "1318605", "name": "Tesla, Inc.", "tradingSymbol": "TSLA" }, "reportingOwner": { "cik": "1494730", "name": "Musk Elon", "address": { "street1": "C/O TESLA, INC.", "street2": "1 TESLA ROAD", "city": "AUSTIN", "state": "TX", "zipCode": "78725" }, "relationship": { "isDirector": true, "isOfficer": true, "officerTitle": "CEO", "isTenPercentOwner": true, "isOther": false } }, "nonDerivativeTable": { "transactions": [ { "securityTitle": "Common Stock", "transactionDate": "2022-08-09", "coding": { "formType": "4", "code": "S", "equitySwapInvolved": false }, "amounts": { "shares": 435, "pricePerShare": 872.469, "pricePerShareFootnoteId": [ "F1" ], "acquiredDisposedCode": "D" }, "postTransactionAmounts": { "sharesOwnedFollowingTransaction": 155058484 }, "ownershipNature": { "directOrIndirectOwnership": "I", "natureOfOwnership": "by Trust", "natureOfOwnershipFootnoteId": [ "F2" ] } }, { "securityTitle": "Common Stock", "transactionDate": "2022-08-09", "coding": { "formType": "4", "code": "S", "equitySwapInvolved": false }, "amounts": { "shares": 13292, "pricePerShare": 874.286, "pricePerShareFootnoteId": [ "F3" ], "acquiredDisposedCode": "D" }, "postTransactionAmounts": { "sharesOwnedFollowingTransaction": 155045192 }, "ownershipNature": { "directOrIndirectOwnership": "I", "natureOfOwnership": "by Trust", "natureOfOwnershipFootnoteId": [ "F2" ] } }, { "securityTitle": "Common Stock", "transactionDate": "2022-08-09", "coding": { "formType": "4", "code": "S", "equitySwapInvolved": false }, "amounts": { "shares": 6048, "pricePerShare": 876.629, "pricePerShareFootnoteId": [ "F4" ], "acquiredDisposedCode": "D" }, "postTransactionAmounts": { "sharesOwnedFollowingTransaction": 155039144 }, "ownershipNature": { "directOrIndirectOwnership": "I", "natureOfOwnership": "by Trust", "natureOfOwnershipFootnoteId": [ "F2" ] } } ] }, "footnotes": [ { "id": "F1", "text": "The price reported in Column 4 is a weighted average price. These shares were sold in multiple transactions at prices ranging from $872.210 to $872.610, inclusive. The reporting person undertakes to provide Tesla, Inc., any security holder of Tesla, Inc. or the staff of the Securities and Exchange Commission, upon request, full information regarding the number of shares sold at each separate price within the range set forth in this footnote." }, { "id": "F2", "text": "The Elon Musk Revocable Trust dated July 22, 2003, for which the reporting person is trustee." }, { "id": "F3", "text": "The price reported in Column 4 is a weighted average price. These shares were sold in multiple transactions at prices ranging from $873.660 to $874.640, inclusive. The reporting person undertakes to provide Tesla, Inc., any security holder of Tesla, Inc. or the staff of the Securities and Exchange Commission, upon request, full information regarding the number of shares sold at each separate price within the range set forth in this footnote." }, { "id": "F4", "text": "The price reported in Column 4 is a weighted average price. These shares were sold in multiple transactions at prices ranging from $876.100 to $876.925, inclusive. The reporting person undertakes to provide Tesla, Inc., any security holder of Tesla, Inc. or the staff of the Securities and Exchange Commission, upon request, full information regarding the number of shares sold at each separate price within the range set forth in this footnote." } ], "remarks": "This Form 4 is the second of two Form 4s being filed by the Reporting Person relating to the same event. The Form 4 has been split into two filings to cover all 33 individual transactions that occurred on the same Transaction Date, because the SEC's EDGAR filing system limits a single Form 4 to a maximum of 30 separate transactions. Each Form 4 will be filed by the Reporting Person.", "ownerSignatureName": "By: Aaron Beckman by Power of Attorney For: Elon Musk", "ownerSignatureNameDate": "2022-08-09" } ] } ``` ### Response Structure of Bulk Download Endpoints #### /bulk/form-3/YEAR/YEAR-MONTH.jsonl.gz Decompressed JSONL Example of Form 3 Filings ```jsonl {"id":"764b5b87fa93363a96475ce55c9754c7","accessionNo":"0000950170-25-048019","filedAt":"2025-03-31T21:30:04-04:00","schemaVersion":"X0206","documentType":"3","periodOfReport":"2025-03-20","notSubjectToSection16":false,"issuer":{"cik":"65270","name":"METHODE ELECTRONICS INC","tradingSymbol":"MEI"},"reportingOwner":{"cik":"2063597","name":"Erwin John Thomas","address":{"street1":"8750 W. BRYN MAWR AVE.","street2":"SUITE 1000","city":"CHICAGO","state":"IL","zipCode":"60631"},"relationship":{"isDirector":false,"isOfficer":true,"officerTitle":"CPO & EHS Officer","isTenPercentOwner":false,"isOther":false}},"nonDerivativeTable":{"holdings":[{"securityTitle":"Common Stock","coding":{},"postTransactionAmounts":{"sharesOwnedFollowingTransaction":33156,"sharesOwnedFollowingTransactionFootnoteId":["F1"]},"ownershipNature":{"directOrIndirectOwnership":"D"}},{"securityTitle":"Common Stock","coding":{},"postTransactionAmounts":{"sharesOwnedFollowingTransaction":1638},"ownershipNature":{"directOrIndirectOwnership":"I","natureOfOwnership":"Held in Methode 401(k) Plan"}}]},"footnotes":[{"id":"F1","text":"Represents Restricted Stock Units ("RSUs") which were previously granted on September 11, 2024 and January 15, 2025. The RSUs granted on September 11, 2024 totaled 32,200, of which 14,400 will vest on September 11, 2025, 14,400 will vest on September 11, 2026 and 3,400 will vest on September 11, 2027. The RSUs granted on January 15, 2025 totaled 956 and will vest ratably over 3 years from the grant date."}],"ownerSignatureName":"/s/ John Thomas Erwin","ownerSignatureNameDate":"2025-03-31"} { ... } { ... } ``` #### /bulk/form-3/index.json index.json Example ```json [ { "key": "2025/2025-04.jsonl.gz", "updatedAt": "2025-04-09T05:00:06.000Z", "size": 74929 }, { "key": "2025/2025-03.jsonl.gz", "updatedAt": "2025-04-08T11:00:53.000Z", "size": 227586 } // ... more files ] ``` #### /bulk/form-4/YEAR/YEAR-MONTH.jsonl.gz Decompressed JSONL Example of Form 4 Filings ```jsonl {"id":"83d6d1d7e910e293aa3cd2a62bd5a46d","accessionNo":"0001104659-25-030101","filedAt":"2025-03-31T21:54:47-04:00","schemaVersion":"X0508","documentType":"4","periodOfReport":"2025-03-31","notSubjectToSection16":false,"issuer":{"cik":"1840502","name":"Taboola.com Ltd.","tradingSymbol":"TBLA"},"reportingOwner":{"cik":"1449433","name":"Apollo Management Holdings GP, LLC","address":{"street1":"9 WEST 57TH STREET, 43RD FLOOR","city":"NEW YORK","state":"NY","zipCode":"10019"},"relationship":{"isDirector":false,"isOfficer":false,"isTenPercentOwner":true,"isOther":false}},"nonDerivativeTable":{"transactions":[{"securityTitle":"Non-Voting Ordinary Shares, No Par Value","transactionDate":"2025-03-31","coding":{"formType":"4","code":"J","equitySwapInvolved":false,"footnoteId":["F1"]},"amounts":{"shares":1185242,"pricePerShare":3.01,"acquiredDisposedCode":"D"},"postTransactionAmounts":{"sharesOwnedFollowingTransaction":40054344},"ownershipNature":{"directOrIndirectOwnership":"I","natureOfOwnership":"See Footnote","natureOfOwnershipFootnoteId":["F2"]}}],"holdings":[{"securityTitle":"Ordinary Shares, No Par Value","coding":{},"postTransactionAmounts":{"sharesOwnedFollowingTransaction":39525691},"ownershipNature":{"directOrIndirectOwnership":"I","natureOfOwnership":"See Footnote","natureOfOwnershipFootnoteId":["F2"]}}]},"footnotes":[{"id":"F1","text":"The reported sales are between the Issuer and College Top Holdings, Inc., as part of the Issuer's share repurchase program and are intended to keep the Reporting Persons' ownership of Taboola's outstanding shares from reaching 25% or more. See Exhibit 99.1 for more information."},{"id":"F2","text":"See Exhibit 99.1."}],"ownerSignatureName":"see signatures attached as Exhibit 99.2","ownerSignatureNameDate":"2025-03-31"} { ... } { ... } ``` #### /bulk/form-4/index.json index.json Example ```json [ { "key": "2025/2025-04.jsonl.gz", "updatedAt": "2025-04-09T05:00:08.000Z", "size": 1675134 }, { "key": "2025/2025-03.jsonl.gz", "updatedAt": "2025-04-08T10:59:20.000Z", "size": 6142697 } // ... more files ] ``` #### /bulk/form-5/YEAR/YEAR-MONTH.jsonl.gz Decompressed JSONL Example of Form 5 Filings ```jsonl {"id":"06d31397a5aa533faf912fe6ee249c80","accessionNo":"0001641172-25-001401","filedAt":"2025-03-28T20:23:39-04:00","schemaVersion":"X0508","documentType":"5","periodOfReport":"2025-02-28","notSubjectToSection16":false,"issuer":{"cik":"788611","name":"NextTrip, Inc.","tradingSymbol":"NTRP"},"reportingOwner":{"cik":"1563607","name":"Monaco Donald P","address":{"street1":"3900 PASEO DEL SOL","city":"SANTA FE","state":"NM","zipCode":"87507"},"relationship":{"isDirector":true,"isOfficer":false,"isTenPercentOwner":false,"isOther":false}},"derivativeTable":{"transactions":[{"securityTitle":"Series L Nonvoting Convertible Preferred Stock","conversionOrExercisePriceFootnoteId":["F1"],"transactionDate":"2024-12-31","coding":{"formType":"4","code":"A","equitySwapInvolved":false,"footnoteId":["F2"]},"timeliness":"L","exerciseDateFootnoteId":["F1"],"expirationDateFootnoteId":["F3"],"underlyingSecurity":{"title":"Common Stock","shares":413907},"amounts":{"shares":413907,"pricePerShare":3.02,"pricePerShareFootnoteId":["F2"],"acquiredDisposedCode":"A"},"postTransactionAmounts":{"sharesOwnedFollowingTransaction":745032},"ownershipNature":{"directOrIndirectOwnership":"I","natureOfOwnership":"By Donald P. Monaco Insurance Trust","natureOfOwnershipFootnoteId":["F4"]}},{"securityTitle":"Series L Nonvoting Convertible Preferred Stock","conversionOrExercisePriceFootnoteId":["F1"],"transactionDate":"2025-02-24","coding":{"formType":"4","code":"A","equitySwapInvolved":false,"footnoteId":["F5"]},"timeliness":"L","exerciseDateFootnoteId":["F1"],"expirationDateFootnoteId":["F3"],"underlyingSecurity":{"title":"Common Stock","shares":331125},"amounts":{"shares":331125,"pricePerShare":3.02,"pricePerShareFootnoteId":["F5"],"acquiredDisposedCode":"A"},"postTransactionAmounts":{"sharesOwnedFollowingTransaction":745032},"ownershipNature":{"directOrIndirectOwnership":"I","natureOfOwnership":"By Donald P. Monaco Insurance Trust","natureOfOwnershipFootnoteId":["F4"]}}]},"footnotes":[{"id":"F1","text":"Shares of Series L Nonvoting Convertible Preferred Stock (Series L Preferred) shall not be convertible into shares of common stock unless and until stockholder approval of the conversion of the Series L Preferred into common stock ("Stockholder Approval") is obtained. Following receipt of Stockholder Approval, each share of Series L Preferred will automatically convert into one share of common stock, subject to certain limitations."},{"id":"F2","text":"On December 31, 2024, the Issuer and the Reporting Person entered into a debt conversion agreement, pursuant to which $1.25 million in existing promissory notes owed to the Reporting Person for monies advanced to the Issuer were converted into 413,907 shares of Series L Preferred at a price of $3.02 per share. The debt conversion agreement and the conversion of the promissory notes into shares of Series L Preferred were approved in advance by the Issuer's board of directors."},{"id":"F3","text":"The shares of Series L Preferred do not expire."},{"id":"F4","text":"The shares of Series L Preferred are beneficially owned by the Donald P. Monaco Insurance Trust (the "Trust"). Mr. Monaco, is the trustee of the Trust. As such, Mr. Monaco is deemed to beneficially own the shares held by the Trust. Mr. Monaco disclaims beneficial ownership of all securities held the Trust in excess of his pecuniary interest, if any, and this report shall not be deemed an admission that he is the beneficial owner of, or has pecuniary interest in, any such excess shares for the purposes of Section 16 of the Securities Exchange Act of 1934, as amended, or for any other purpose."},{"id":"F5","text":"On February 24, 2025, the Issuer and the Reporting Person entered into a debt conversion agreement, pursuant to which $1.00 million in existing promissory notes owed to the Reporting Person for monies advanced to the Issuer were converted into 331,125 shares of Series L Preferred at a price of $3.02 per share. The debt conversion agreement and the conversion of the promissory notes into shares of Series L Preferred were approved in advance by the Issuer's board of directors."}],"ownerSignatureName":"/s/ Donald P. Monaco","ownerSignatureNameDate":"2025-03-28"} { ... } { ... } ``` #### /bulk/form-5/index.json index.json Example ```json [ { "key": "2025/2025-04.jsonl.gz", "updatedAt": "2025-04-09T05:00:06.000Z", "size": 4456349 }, { "key": "2025/2025-03.jsonl.gz", "updatedAt": "2025-04-01T05:00:07.000Z", "size": 106764954 }, // ... more files ] ``` ### Transaction Code List | | | | --- | --- | | Value | Meaning | | A | Grant, award or other acquisition pursuant to Rule 16b-3(d) | | C | Conversion of derivative security | | D | Disposition to the issuer of issuer equity securities pursuant to Rule 16b-3(e) | | E | Expiration of short derivative position | | F | Payment of exercise price or tax liability by delivering or withholding securities incident to the receipt, exercise or vesting of a security issued in accordance with Rule 16b-3 | | G | Bona fide gift | | H | Expiration (or cancellation) of long derivative position with value received | | I | Discretionary transaction in accordance with Rule 16b-3(f) resulting in acquisition or disposition of issuer securities | | J | Other acquisition or disposition (describe transaction) | | L | Small acquisition under Rule 16a-6 | | M | Exercise or conversion of derivative security exempted pursuant to Rule 16b-3 | | O | Exercise of out-of-the-money derivative security | | P | Open market or private purchase of non-derivative or derivative security | | S | Open market or private sale of non-derivative or derivative security | | U | Disposition pursuant to a tender of shares in a change of control transaction | | W | Acquisition or disposition by will or the laws of descent and distribution | | X | Exercise of in-the-money or at-the-money derivative security | | Z | Deposit into or withdrawal from voting trust | ## FAQ Common questions about querying the Insider Trading API, the response shape, and the bulk archives. ### How do I find the most recent insider buy and sell transactions reported at a specific company? To pull recent insider activity for one company, query the `/insider-trading` endpoint by the company's ticker (`issuer.tradingSymbol` should be the ticker, e.g. `TSLA` for Tesla or `APA` for Apache) or by its central index key (`issuer.cik` should be the CIK, e.g. `1318605` for Tesla). The most-recent-first behavior comes from sorting on the filing acceptance timestamp (`filedAt` in descending order), which is also the default sort. Each result in the `transactions` array is a single Form 3, 4 or 5 with the company information on the `issuer` object and the trade details inside `nonDerivativeTable.transactions` or `derivativeTable.transactions`. Paginate with the `from` offset when more than 50 filings exist. ```json { "query": "issuer.tradingSymbol:TSLA", "from": 0, "size": 50, "sort": [{"filedAt":{"order":"desc"}}] } ``` ### How do I look up every insider trade ever filed by a specific person across all the companies they're associated with? To track a single person across issuers, query the `/insider-trading` endpoint by the reporting person's CIK (`reportingOwner.cik` should be the person's CIK, e.g. `1494730` for Elon Musk) or by their name (`reportingOwner.name` should match the recorded name, e.g. `Musk Elon`). The CIK is the more reliable identifier because the same individual sometimes appears under slightly different name spellings across filings. Filings the person is named on will be returned regardless of which company filed them. The issuer for each filing is on the `issuer` object so you can group results by `issuer.cik` or `issuer.tradingSymbol` to see all companies they have insider relationships with. ```json { "query": "reportingOwner.cik:1494730", "from": 0, "size": 50, "sort": [{"filedAt":{"order":"desc"}}] } ``` ### How do I retrieve a single insider filing when I already know its accession number? When you already have an accession number, look it up at the `/insider-trading` endpoint by matching the accession number field (`accessionNo` should equal the accession number you have, for example `0000899243-22-028189`). The accession number uniquely identifies a single SEC submission, so the result will contain at most one entry in the `transactions` array. The full document content — issuer, reporting owner, every non-derivative and derivative transaction or holding, every footnote and the remarks — is returned in that one record. ```json { "query": "accessionNo:\"0000899243-22-028189\"", "from": 0, "size": 50, "sort": [{"filedAt":{"order":"desc"}}] } ``` ### How do I pull all insider transactions reported during a specific date range, such as a calendar quarter? To restrict by date, query the `/insider-trading` endpoint and constrain either the date of the reported event (`periodOfReport` should fall between the start and end of the range, for example between `2024-01-01` and `2024-03-31` for Q1 2024) or the date the form was accepted by EDGAR (`filedAt` should fall in the same range). Use `periodOfReport` when you want trades that actually occurred in the quarter, and `filedAt` when you want filings that were submitted in the quarter. Because the API caps any single query at 10,000 returned records, narrow date ranges are also the standard way to bulk-paginate large universes — for example, iterate one month at a time and page through each month with the `from` offset. ```json { "query": "periodOfReport:[2024-01-01 TO 2024-03-31]", "from": 0, "size": 50, "sort": [{"filedAt":{"order":"desc"}}] } ``` ### How do I separate open-market insider purchases from open-market insider sales so I can track net buying versus selling pressure? Open-market activity is encoded in the transaction code on each non-derivative transaction (`nonDerivativeTable.transactions.coding.code`). To get open-market purchases, query the `/insider-trading` endpoint with that code equal to `P` (open market or private purchase). To get open-market sales, use `S` (open market or private sale). All other codes — grants, gifts, tax withholding, option exercises — fall outside this open-market buy/sell distinction and should be excluded if you only want directional buying versus selling pressure. Each matched transaction also carries the acquired/disposed flag (`nonDerivativeTable.transactions.amounts.acquiredDisposedCode` is `A` for acquired or `D` for disposed), so you can double-check that `P` rows are acquisitions and `S` rows are dispositions when aggregating. ```json { "query": "nonDerivativeTable.transactions.coding.code:P", "from": 0, "size": 50, "sort": [{"filedAt":{"order":"desc"}}] } ``` ### How do I filter for trades made only by company directors versus officers versus 10% owners? The relationship to the issuer is captured by three booleans on the reporting owner (`reportingOwner.relationship.isDirector`, `reportingOwner.relationship.isOfficer`, `reportingOwner.relationship.isTenPercentOwner`). To get only director filings at the `/insider-trading` endpoint, the value of `reportingOwner.relationship.isDirector` should be `true`. For officer-only or 10%-owner-only views, set the corresponding flag to `true`. These are not mutually exclusive — a CEO who also sits on the board will have both `isDirector` and `isOfficer` set to `true`, and a founder may also have `isTenPercentOwner` set to `true`. When the person has some other relationship not covered by those three, the catch-all flag (`reportingOwner.relationship.isOther` should be `true`) is set, and a free-text description appears in `reportingOwner.relationship.otherText`. ```json { "query": "reportingOwner.relationship.isDirector:true", "from": 0, "size": 50, "sort": [{"filedAt":{"order":"desc"}}] } ``` ### How do I find insider trades made under a pre-arranged trading plan that removes discretion around earnings windows? Rule 10b5-1 trading plans are flagged on the filing itself via `aff10b5One`, a top-level boolean added by SEC's 2023 Rule 10b5-1 amendments (Release No. 33-11138). The field is present on Form 4 and Form 5 only — Form 3 has no analog because it reports initial holdings, not transactions. At the `/insider-trading` endpoint, set `aff10b5One` to `true` to return filings where the reporting person affirmed the trade was made pursuant to a Rule 10b5-1(c) plan. Trades pre-scheduled this way are typically open-market sales (`nonDerivativeTable.transactions.coding.code` equal to `S`), so combining `aff10b5One` with the `S` code narrows the result set to discretion-free open-market sales. Filings predating the 2023 amendments do not carry the affirmation field; for historical coverage, also search the footnote text (`footnotes.text` should contain `10b5-1`). Each filing's `footnotes` array carries an `id` plus the explanatory `text`, and the IDs are referenced from the affected fields via `*FootnoteId` properties so you can tie the plan disclosure back to the exact transaction it covers. ```json { "query": "footnotes.text:\"10b5-1\"", "from": 0, "size": 50, "sort": [{"filedAt":{"order":"desc"}}] } ``` ### How do I distinguish initial-ownership filings (when a person first becomes an insider) from ongoing transaction reports and year-end catch-ups? The form type lives on the document-type field (`documentType`). Query the `/insider-trading` endpoint with `documentType` equal to `3` for an initial statement of beneficial ownership, `4` for a current-transaction report (the standard ongoing filing), or `5` for an annual statement that sweeps up transactions exempt from immediate Form 4 reporting. Form 3 filings typically have no transactions and only a `nonDerivativeTable.holdings` block describing initial positions, while Form 4 filings populate `nonDerivativeTable.transactions` or `derivativeTable.transactions`. The `periodOfReport` field also carries different semantics by form: it is the date of the triggering event on Form 3, the date of the earliest transaction on Form 4, and the fiscal year end on Form 5. ```json { "query": "documentType:3", "from": 0, "size": 50, "sort": [{"filedAt":{"order":"desc"}}] } ``` ### How do I find amendments to insider-ownership filings and link each one back to the original filing it corrects? Amendments use the `/A` suffix on the document type (`documentType`). To list them at the `/insider-trading` endpoint, the value of `documentType` should be `3/A`, `4/A`, or `5/A`. Every amendment carries the date of the original submission it corrects (`dateOfOriginalSubmission` is the filing date of the prior submission, in `YYYY-MM-DD` format). There is no direct accession-number back-link, so the practical join is to match the amendment to the original by issuer (`issuer.cik`), reporting person (`reportingOwner.cik`), and the original submission date (`dateOfOriginalSubmission` on the amendment should match `filedAt`'s date on the original). ```json { "query": "documentType:(\"3/A\" OR \"4/A\" OR \"5/A\")", "from": 0, "size": 50, "sort": [{"filedAt":{"order":"desc"}}] } ``` ### How do I exclude tax-withholding share dispositions and option-exercise mechanics so I see only economically meaningful insider buys and sells? Tax-withholding dispositions use code `F` (payment of tax liability by surrendering shares incident to vesting) and option exercises use code `M` (exercise of a derivative security exempted under Rule 16b-3). To strip them from results at the `/insider-trading` endpoint, the value of `nonDerivativeTable.transactions.coding.code` should not be `F` or `M`. Conversely, to keep only economically meaningful open-market activity, restrict that field to `P` (open-market purchase) or `S` (open-market sale). A common pattern in real filings is a same-day pair where an `M` line records an option exercise and an `F` line records the share withholding that funded the tax bill — neither reflects a discretionary buy or sell decision and both should be filtered out when measuring conviction. ```json { "query": "nonDerivativeTable.transactions.coding.code:(P OR S) AND NOT nonDerivativeTable.transactions.coding.code:F AND NOT nonDerivativeTable.transactions.coding.code:M", "from": 0, "size": 50, "sort": [{"filedAt":{"order":"desc"}}] } ``` ### How do I retrieve only the share grants and equity awards an insider received, separate from purchases or sales? Equity awards granted under Rule 16b-3 use code `A` (grant, award or other acquisition). To pull them at the `/insider-trading` endpoint, the value of `nonDerivativeTable.transactions.coding.code` should be `A`. Bona fide gifts use code `G` and can be included or excluded depending on whether you treat them as compensation events. Grant-type transactions usually show a zero price (`nonDerivativeTable.transactions.amounts.pricePerShare` is `0`) and the acquired/disposed flag (`nonDerivativeTable.transactions.amounts.acquiredDisposedCode`) is `A`. Restricted stock unit grants frequently appear in `derivativeTable.transactions` with the same code `A`, in which case the underlying common stock count lives on `derivativeTable.transactions.underlyingSecurity.shares`. ```json { "query": "nonDerivativeTable.transactions.coding.code:A", "from": 0, "size": 50, "sort": [{"filedAt":{"order":"desc"}}] } ``` ### How do I find insiders who acquired shares by exercising stock options or converting derivatives? Derivative exercises and conversions are reported on the derivative table with three distinct codes (`derivativeTable.transactions.coding.code`). To find them at the `/insider-trading` endpoint, that value should be `M` (Rule 16b-3 exempt exercise), `X` (exercise of an in- or at-the-money derivative), or `C` (conversion of a derivative security). The derivative line states the derivative being exercised in `derivativeTable.transactions.securityTitle` (for example `Restricted Stock Unit`, `Phantom Stock Units`, or a `Conditional Grant`), and the common-stock equivalent received is on `derivativeTable.transactions.underlyingSecurity.title` and `derivativeTable.transactions.underlyingSecurity.shares`. A matching non-derivative acquisition typically appears on the same filing under `nonDerivativeTable.transactions` with code `M` and acquired flag `A`. ```json { "query": "derivativeTable.transactions.coding.code:(M OR X OR C)", "from": 0, "size": 50, "sort": [{"filedAt":{"order":"desc"}}] } ``` ### How do I identify insider transactions where a derivative security like an RSU, DSU, or stock option is involved rather than plain common stock? Any filing that touches a derivative carries a `derivativeTable` object alongside (or instead of) the `nonDerivativeTable`. To target these at the `/insider-trading` endpoint, search the derivative security title (`derivativeTable.transactions.securityTitle` should contain a term like `Restricted Stock Unit`, `Deferred Share Units`, `Phantom Stock Units`, or `Option`) or use the underlying-security path (`derivativeTable.transactions.underlyingSecurity.title` is typically `Common Stock` or a similar class label). The derivative entry also exposes its exercise price (`derivativeTable.transactions.conversionOrExercisePrice`), the exercise date (`derivativeTable.transactions.exerciseDate`) and the expiration date (`derivativeTable.transactions.expirationDate`), which together let you separate vested options from unvested grants and time-bound awards from perpetual instruments. ```json { "query": "derivativeTable.transactions.securityTitle:\"Restricted Stock Unit\"", "from": 0, "size": 50, "sort": [{"filedAt":{"order":"desc"}}] } ``` ### How do I filter for insider holdings reported as indirectly owned, for example through a trust, spouse, IRA, or 401(k)? Indirect ownership is flagged on each transaction or holding by an ownership-nature code (`ownershipNature.directOrIndirectOwnership` should be `I` for indirect; `D` means direct). To filter for indirect positions at the `/insider-trading` endpoint, set that field to `I` on the appropriate table — either `nonDerivativeTable.transactions.ownershipNature.directOrIndirectOwnership`, `nonDerivativeTable.holdings.ownershipNature.directOrIndirectOwnership`, or the equivalent paths under `derivativeTable`. The specific arrangement is described in plain text on the same object (`ownershipNature.natureOfOwnership`), with values like `by Trust`, `In 401(k)`, `By Reporting Person's IRA`, `By wife's IRA`, `By Profit Sharing Plan of Reporting Person's Employer`, or `By grantor trust`. Combine the `I` filter with a text match against `natureOfOwnership` to isolate trusts, retirement accounts, or family-held positions. ```json { "query": "nonDerivativeTable.holdings.ownershipNature.directOrIndirectOwnership:I AND nonDerivativeTable.holdings.ownershipNature.natureOfOwnership:Trust", "from": 0, "size": 50, "sort": [{"filedAt":{"order":"desc"}}] } ``` ### How do I find insider trades held through a family member as custodian for a child? Custodial-for-child arrangements show up as indirect holdings whose nature-of-ownership text identifies the custodian and beneficiary in plain English. At the `/insider-trading` endpoint, `nonDerivativeTable.holdings.ownershipNature.directOrIndirectOwnership` should be `I` and `nonDerivativeTable.holdings.ownershipNature.natureOfOwnership` should contain a phrase such as `By wife as custodian for daughter` or `By wife as custodian for son`. These holdings often carry a disclaimer-of-beneficial-ownership footnote attached via `nonDerivativeTable.holdings.ownershipNature.natureOfOwnershipFootnoteId` whose `footnotes.text` clarifies the reporting person's limited interest, which is useful when distinguishing economic ownership from reporting obligation. ```json { "query": "nonDerivativeTable.holdings.ownershipNature.directOrIndirectOwnership:I AND nonDerivativeTable.holdings.ownershipNature.natureOfOwnership:custodian", "from": 0, "size": 50, "sort": [{"filedAt":{"order":"desc"}}] } ``` ### How do I find insider transactions involving cash-settled total return swaps or other equity swap arrangements? Swap involvement is encoded on the transaction's coding object (`coding.equitySwapInvolved` is a boolean). At the `/insider-trading` endpoint, set `nonDerivativeTable.transactions.coding.equitySwapInvolved` or `derivativeTable.transactions.coding.equitySwapInvolved` to `true`. Cash-settled total return swaps are also typically described in the derivative section, so a second route is to search the security title (`derivativeTable.transactions.securityTitle` or `derivativeTable.holdings.securityTitle` should contain `Swap`) or the footnote text (`footnotes.text` should contain `swap` or `Swap Agreement`). The underlying-share economics — for example a notional 5,763,573 shares — appear on `derivativeTable.holdings.underlyingSecurity.shares` even when the position is cash-settled and confers no voting rights. ```json { "query": "derivativeTable.transactions.coding.equitySwapInvolved:true", "from": 0, "size": 50, "sort": [{"filedAt":{"order":"desc"}}] } ``` ### How do I see exactly how many shares an insider held before and after a reported transaction so I can compute the percentage change in their position? The post-trade balance is on each transaction (`nonDerivativeTable.transactions.postTransactionAmounts.sharesOwnedFollowingTransaction`, or the same path under `derivativeTable.transactions`). The pre-trade balance is not stored as its own field; it is the post-trade balance plus or minus the trade size, where the trade size is `nonDerivativeTable.transactions.amounts.shares` and the direction is given by `nonDerivativeTable.transactions.amounts.acquiredDisposedCode` (`A` adds, `D` subtracts). At the `/insider-trading` endpoint, you can sort the resulting trades for a single insider by `periodOfReport` ascending to walk the position forward chronologically and compute percentage changes between the before and after share counts. ```json { "query": "issuer.tradingSymbol:TSLA AND nonDerivativeTable.transactions.coding.code:(P OR S)", "from": 0, "size": 50, "sort": [{"filedAt":{"order":"desc"}}] } ``` ### How do I retrieve the price per share at which each insider transaction took place so I can estimate the dollar value traded? Each non-derivative transaction carries the execution price on `nonDerivativeTable.transactions.amounts.pricePerShare` and the share count on `nonDerivativeTable.transactions.amounts.shares`. To estimate the dollar value of an open-market trade at the `/insider-trading` endpoint, multiply those two values per row. Derivative trades expose the same shape under `derivativeTable.transactions.amounts.pricePerShare` and `derivativeTable.transactions.amounts.shares`. Grant-type transactions (`nonDerivativeTable.transactions.coding.code` equal to `A`) commonly carry a price of `0` because no cash changes hands, and weighted-average pricing is signaled by a footnote ID on the price field (`nonDerivativeTable.transactions.amounts.pricePerShareFootnoteId` references an entry in `footnotes` that gives the executed price range). ```json { "query": "nonDerivativeTable.transactions.coding.code:(P OR S) AND nonDerivativeTable.transactions.amounts.pricePerShare:[0.01 TO *]", "from": 0, "size": 50, "sort": [{"filedAt":{"order":"desc"}}] } ``` ### How do I find late-filed insider transactions where the insider missed the standard two-business-day reporting deadline? Filing timeliness is on the transaction itself (`nonDerivativeTable.transactions.timeliness` and the same path under `derivativeTable.transactions`). At the `/insider-trading` endpoint, the value should be `L` for late, `E` for early, or empty when filed on time. A late marker means the trade was filed past the two-business-day deadline mandated by Section 16. Form 5 amendments and ad-hoc sweep filings often surface late-marked rows when an issuer or insider catches up on prior periods. ```json { "query": "nonDerivativeTable.transactions.timeliness:L", "from": 0, "size": 50, "sort": [{"filedAt":{"order":"desc"}}] } ``` ### How do I retrieve the full text of every footnote attached to a filing and figure out which transaction or field each footnote applies to? Each filing returned by the `/insider-trading` endpoint includes a `footnotes` array, where each item has an identifier (`footnotes.id`, for example `F1`) and the footnote prose (`footnotes.text`). The same IDs are referenced from the fields they explain through `*FootnoteId` arrays — for example `nonDerivativeTable.transactions.amounts.pricePerShareFootnoteId`, `nonDerivativeTable.transactions.amounts.sharesFootnoteId`, `nonDerivativeTable.transactions.securityTitleFootnoteId`, `derivativeTable.transactions.exerciseDateFootnoteId`, `derivativeTable.transactions.expirationDateFootnoteId`, and `ownershipNature.natureOfOwnershipFootnoteId`. To attach a footnote back to the specific field it describes, look at which `*FootnoteId` array contains the footnote's ID. The same footnote can be referenced from multiple fields, for example when one explanation covers both the price-per-share and the security-title columns. ```json { "query": "issuer.tradingSymbol:TSLA AND footnotes.id:F1", "from": 0, "size": 50, "sort": [{"filedAt":{"order":"desc"}}] } ``` ### How do I search the free-text remarks field on an insider filing for things like "power of attorney", "by trust", or other special circumstances? The form-level free-text disclosure lives in `remarks`. At the `/insider-trading` endpoint, search this field for the phrase you care about, for example `remarks` should contain `power of attorney`, `disclaims beneficial ownership`, or any other narrative phrase used by filers. Remarks frequently explain why a Form 4 was split into multiple submissions (for example when more than 30 transactions occurred on the same date and EDGAR's per-filing transaction limit forced a split), or who signed under power of attorney, which you can cross-check against `ownerSignatureName`. ```json { "query": "remarks:\"power of attorney\"", "from": 0, "size": 50, "sort": [{"filedAt":{"order":"desc"}}] } ``` ### How do I find insider transactions tagged as gifts rather than market trades, which I want to exclude from buying/selling totals? Bona fide gifts use code `G` and inheritance/bequest transfers use code `W`. To list them at the `/insider-trading` endpoint, the value of `nonDerivativeTable.transactions.coding.code` should be `G` or `W`. To exclude them from a buy/sell aggregation, require the code to be neither of those two while keeping the open-market codes `P` and `S`. Gifts are typically reported at a price of `0` (`nonDerivativeTable.transactions.amounts.pricePerShare` is `0`) and the acquired/disposed flag (`nonDerivativeTable.transactions.amounts.acquiredDisposedCode`) is `D` from the donor's perspective, so they can otherwise look like a disposition even though no economic sale occurred. ```json { "query": "nonDerivativeTable.transactions.coding.code:G", "from": 0, "size": 50, "sort": [{"filedAt":{"order":"desc"}}] } ``` ### How do I find insider trades that were the result of small acquisitions exempt under SEC rules? Small acquisitions exempt under Rule 16a-6 carry code `L`. At the `/insider-trading` endpoint, `nonDerivativeTable.transactions.coding.code` should be `L`. The Rule 16a-6 exemption applies when the cumulative dollar value over a six-month period stays under a threshold, so individual `L`-coded transactions are typically modest in size. These rows still report shares and price per share on `nonDerivativeTable.transactions.amounts`, so they can be aggregated the same way as other transaction types when you want to roll them up. ```json { "query": "nonDerivativeTable.transactions.coding.code:L", "from": 0, "size": 50, "sort": [{"filedAt":{"order":"desc"}}] } ``` ### How do I find executives at a specific company who hold a particular officer title, such as CFO or General Counsel? Officer titles are stored verbatim on the reporting owner (`reportingOwner.relationship.officerTitle`). At the `/insider-trading` endpoint, restrict the officer flag (`reportingOwner.relationship.isOfficer` should be `true`) and search the title for the role you want — for example `reportingOwner.relationship.officerTitle` should contain `Chief Financial Officer` (also seen as `CFO`, `Sr V.P. and CFO`, or `Chief Financial Officer`) or `General Counsel`. Combine with the issuer (`issuer.tradingSymbol` or `issuer.cik`) to scope the search to a single company. Title strings are free-text as filed by the company, so the same role can appear in several spellings — `President and CEO`, `Exec. Vice President`, `Claims President`. Use partial-string matching to catch all variants. ```json { "query": "reportingOwner.relationship.isOfficer:true AND reportingOwner.relationship.officerTitle:\"Chief Financial Officer\" AND issuer.tradingSymbol:AAPL", "from": 0, "size": 50, "sort": [{"filedAt":{"order":"desc"}}] } ``` ### How do I look up all insider filings for a company by its central registration identifier instead of its ticker, useful when the company is delisted or has changed tickers? Issuer identity is keyed by CIK (`issuer.cik`). At the `/insider-trading` endpoint, set `issuer.cik` to the company's CIK, for example `320193` for Apple, `1318605` for Tesla, or `6769` for Apache. The CIK persists through ticker changes, delistings, mergers and corporate-form conversions, which the ticker (`issuer.tradingSymbol`) does not. Because the database is survivorship-bias free, lookups by CIK return filings even for issuers that no longer trade publicly, which is the right behavior for historical research where the ticker may no longer resolve. ```json { "query": "issuer.cik:320193", "from": 0, "size": 50, "sort": [{"filedAt":{"order":"desc"}}] } ``` ### How do I sort insider filings by the date of the actual transaction rather than the date the form was filed? By default the `/insider-trading` endpoint sorts on the SEC acceptance timestamp (`filedAt`). To order by the date of the underlying trade instead, sort on `periodOfReport`. On Form 4 this is the date of the earliest transaction in the filing, so it is the closest top-level proxy for “when did the trade happen”. For finer granularity, the per-row transaction date (`nonDerivativeTable.transactions.transactionDate` or `derivativeTable.transactions.transactionDate`) carries the exact date for each individual transaction in the same filing. Set the sort order to ascending to walk a person or company's trades forward in time, or descending to start from the most recent. ```json { "query": "issuer.tradingSymbol:TSLA", "from": 0, "size": 50, "sort": [{"periodOfReport":{"order":"desc"}}] } ``` ### How do I paginate through more than 50 matching insider filings when a single query returns thousands of results? Each call to `/insider-trading` returns at most 50 records. To page forward, increase the `from` offset by 50 on each successive call (`0`, then `50`, then `100`, and so on). The maximum reachable offset is `10000`, which caps any one query at 10,000 total records regardless of how many actually match. For result sets larger than 10,000, slice the query along a date dimension — for example restrict `periodOfReport` to one month at a time, page through that month to exhaustion, then advance to the next month. Pair this with a deterministic sort (`filedAt` or `periodOfReport`) so the pagination order is stable across calls. ```json { "query": "periodOfReport:[2021-01-01 TO 2021-01-31]", "from": 50, "size": 50, "sort": [{"filedAt":{"order":"desc"}}] } ``` ### How do I download every Form 4 filing for an entire calendar month in one batch instead of paginating through the search API? Monthly bulk archives are served from a year/month-templated path: `/bulk/form-4/YYYY/YYYY-MM.jsonl.gz` returns a gzip-compressed JSONL file containing every Form 4 with a `filedAt` timestamp inside that calendar month. The same shape applies to Form 3 (`/bulk/form-3/YYYY/YYYY-MM.jsonl.gz`) and Form 5 (`/bulk/form-5/YYYY/YYYY-MM.jsonl.gz`). Each line in the decompressed file is one full Form 3, 4 or 5 record using the same JSON structure returned by the search endpoint — `accessionNo`, `filedAt`, `documentType`, `issuer`, `reportingOwner`, `nonDerivativeTable`, `derivativeTable`, `footnotes`, and so on. New filings from the previous day are appended to the current month's archive between 1:00 AM and 4:00 AM Eastern. ```bash https://api.sec-api.io/bulk/form-4/2025/2025-02.jsonl.gz?token=YOUR_API_KEY ``` ### How do I check which monthly bulk archive files are currently available and when each one was last refreshed? Each form type has an index file: `/bulk/form-3/index.json`, `/bulk/form-4/index.json`, and `/bulk/form-5/index.json`. The index is an array of entries, where each entry has the relative path to the monthly archive (`key`, for example `2025/2025-03.jsonl.gz`), the last refresh timestamp (`updatedAt`), and the file size in bytes (`size`). Polling the relevant index lets a downstream process detect which monthly files have new data and prioritize re-downloads accordingly without scanning every archive. ```bash https://api.sec-api.io/bulk/form-4/index.json?token=YOUR_API_KEY ``` ### How do I count how many insider transactions match my query without retrieving every record, so I know if I need to narrow the search before paginating? Every response from `/insider-trading` includes a count object (`total`). When the count is exact, `total.relation` is `eq` and `total.value` is the precise number of matching records (always less than 10,000). When more than 10,000 records match, `total.relation` is `gte` and `total.value` is `10000`, signaling that the true count is at least that high but not computed. Use this object as a pre-flight check: if `total.relation` is `gte`, narrow the query before paginating — most commonly by tightening the `periodOfReport` date range — until `total.relation` flips to `eq` so the full set is reachable within the 10,000-record cap. ```json { "query": "issuer.tradingSymbol:TSLA", "from": 0, "size": 0, "sort": [{"filedAt":{"order":"desc"}}] } ``` ## References For more information about Form 3, 4 and 5 visit the SEC websites here: - [Form 3 EDGAR PDF Template](https://www.sec.gov/files/form3.pdf) - [Form 4 EDGAR PDF Template](https://www.sec.gov/files/form4.pdf) - [Form 5 EDGAR PDF Template](https://www.sec.gov/files/form5.pdf) - [Form 4 Filing Instructions](https://www.sec.gov/files/form4data%2C0.pdf) - [Form 5 Filing Instructions](https://www.sec.gov/files/form5data0.pdf) - [Form 3, 4 and 5 Overview](https://www.sec.gov/files/forms-3-4-5.pdf) - [Form 3, 4 and 5 XML Technical Specifications](https://www.sec.gov/info/edgar/specifications/ownershipxmltechspec.htm) ### Regulations - [§ 240.10b5-1 Trading “on the basis of” material nonpublic information in insider trading cases](https://www.ecfr.gov/current/title-17/chapter-II/part-240/subpart-A/subject-group-ECFR71e2d22647918b0/section-240.10b5-1#p-240.10b5-1(b)) - [§ 240.16a-3 Reporting transactions and holdings](https://www.ecfr.gov/current/title-17/chapter-II/part-240/subject-group-ECFR4594b28bbb3a5d5/section-240.16a-3) ### Research Papers - [SEC Rule 10b5-1 and insiders' strategic trade](https://bradreese.com/blog/6-28-2012.pdf) - [Offensive Disclosure: How Voluntary Disclosure Can Increase Returns from Insider Trading](https://chicagounbound.uchicago.edu/cgi/viewcontent.cgi?article=12130&context=journal_articles) - [Decoding Inside Information](https://onlinelibrary.wiley.com/doi/abs/10.1111/j.1540-6261.2012.01740.x) - [Do SEC's 10b5-1 Safe Harbor Rules Need To Be Rewritten?](https://journals.library.columbia.edu/index.php/CBLR/article/view/1734) - [SEC Rule 10b5-1 Plans and Strategic Trade around Earnings Announcements](https://papers.ssrn.com/sol3/papers.cfm?abstract_id=2880878) - [Insider sales based on short-term earnings information](https://ideas.repec.org/a/kap/rqfnac/v47y2016i1d10.1007_s11156-014-0496-7.html)