Insider Trading Data from SEC Form 3, 4, 5 Filings
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 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.
1
{
2
"accessionNo": "0000921895-24-002825",
3
"filedAt": "2024-11-26T19:53:45-05:00",
4
"documentType": "3",
5
"periodOfReport": "2024-11-22",
6
"notSubjectToSection16": false,
7
"issuer": {
8
"cik": "813298",
9
"name": "DESTINATION XL GROUP, INC.",
10
"tradingSymbol": "DXLG"
11
},
12
"reportingOwner": {
13
"cik": "1959730",
14
"name": "Fund 1 Investments, LLC",
15
"address": { ... },
16
"relationship": {
17
"isDirector": false,
18
"isOfficer": false,
19
"isTenPercentOwner": true,
20
"isOther": false
21
}
22
},
23
"nonDerivativeTable": {
24
"holdings": [
25
{
26
"securityTitle": "Common Stock, par value $0.01 per share",
27
"postTransactionAmounts": {
28
"sharesOwnedFollowingTransaction": 5720548
29
},
30
"ownershipNature": {
31
"directOrIndirectOwnership": "I",
32
"natureOfOwnership": "See Footnotes",
33
"natureOfOwnershipFootnoteId": [ "F1", "F2" ]
34
}
35
}
36
// ... more non derivative holdings
37
]
38
},
39
"derivativeTable": {
40
"holdings": [
41
{
42
"securityTitle": "Cash-Settled Total Return Swap",
43
"securityTitleFootnoteId": [ "F4" ],
44
"conversionOrExercisePriceFootnoteId": [ "F4" ],
45
"exerciseDateFootnoteId": [ "F4" ],
46
"expirationDate": "2026-02-24",
47
"expirationDateFootnoteId": [ "F5" ],
48
"underlyingSecurity": {
49
"title": "Common Stock, par value $0.01 per share",
50
"shares": 5763573
51
},
52
"ownershipNature": {
53
"directOrIndirectOwnership": "I",
54
"natureOfOwnership": "See Footnotes",
55
"natureOfOwnershipFootnoteId": [ "F1", "F2" ]
56
}
57
}
58
]
59
},
60
"footnotes": [
61
{
62
"id": "F1",
63
"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."
64
},
65
{
66
"id": "F2",
67
"text": "Securities held for the account of the PL Fund."
68
},
69
{
70
"id": "F3",
71
"text": "Securities held for the account of an unaffiliated private fund for which PLP serves as investment adviser."
72
},
73
{
74
"id": "F4",
75
"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."
76
},
77
{
78
"id": "F5",
79
"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."
80
}
81
]
82
}
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.
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:
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 | Gzip-compressed JSONL file containing all Form 3 data for the specified year and month. | GET | jsonl.gz |
| /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 | Gzip-compressed JSONL file containing all Form 4 data for the specified year and month. | GET | jsonl.gz |
| /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 | Gzip-compressed JSONL file containing all Form 5 data for the specified year and month. | GET | jsonl.gz |
| /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_KEYhttps://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
Authorizationheader. For instance, before sending aPOSTrequest tohttps://api.sec-api.io/insider-trading, ensure the header is set as follows:Authorization: YOUR_API_KEY. Do not include any prefix likeBearer. - Query Parameter: Alternatively, append your API key directly to the URL as a query parameter. For example, when making
POSTrequests, use the URLhttps://api.sec-api.io/insider-trading?token=YOUR_API_KEYinstead of the base endpoint.
Request Parameters
All insider transaction properties are searchable. Refer to the complete list of properties in the Response Structure section below. You can send a search query as JSON formatted payload to the API using the structure below.
Request parameters:
query(string) - Thequerystring 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. Let's look at some examples:- The query
reportingOwner.relationship.isDirector:True AND issuer.tradingSymbol:AMZNreturns 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.
- The query
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 perquery. To paginate through results, increment thefromvalue accordingly - for instance, settingfromto 50 retrieves results from the 51st to the 100th transaction, assuming asizeparameter 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 theperiodOfReportfield, such asperiodOfReport:[2021-01-01 TO 2021-01-31], to paginate through all results for January 2021 by progressively increasing thefromvalue (0, 50, 100, etc.). For subsequent months like February 2021, update yourquerytoperiodOfReport:[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 thefiledAtfield in descending order, starting with the most recent:[{ "filedAt": { "order": "desc" } }]. Thesortparameter is an array of sort definitions. Each array item defines the sort order for the result. Set theorderproperty toascfor ascending order ordescfor descending order. The field property specifies the field by which the results are sorted. For example, to sort the results by theperiodOfReportfield 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.
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 is available below.
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.
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:00documentType(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-DDdateOfOriginalSubmission(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 informationcik(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) -Trueif the reporting person is a director.Falseotherwise.isOfficer(boolean) -Trueif the reporting person is an officer.Falseotherwise. IfTrue, thenofficerTitlebecomes mandatory.officerTitle(string) - Officer title ifisOfficerisTrue.isTenPercentOwner(boolean) -Trueif the reporting person owns 10% of the issuer.Falseotherwise.isOther(boolean) -Trueif the reporting person has a different relationship.Falseotherwise. IfTrue, then theotherTextproperty becomes mandatory.otherText(string) - Explanation ifisOtherisTrue.
address(object) - Address of reporting entity.street1(string)street2(string)ciy(string)zipCode(string)stateDescription(string)
nonDerivativeTable(object) - Table I - Non-Derivative Securitiestransactions(array) - Non-derivative transactionssecurityTitle(string, with footnote) - Title of securitytransactionDate(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 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 Securitiestransactions(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 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 securityacquiredDisposedCode(string, with footnote) - Valid values: A = acquired, D = disposed.
exerciseDate(date, with footnote) - Date exercisable and expiration dateexpirationDate(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 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) - IDtext(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.
1
{
2
"total": {
3
"value": 489,
4
"relation": "eq"
5
},
6
"transactions": [
7
{
8
"id": "026dc8fd804de46ef08b5bad594998c5",
9
"accessionNo": "0000899243-22-028189",
10
"filedAt": "2022-08-09T21:23:00-04:00",
11
"schemaVersion": "X0306",
12
"documentType": "4",
13
"periodOfReport": "2022-08-09",
14
"notSubjectToSection16": false,
15
"issuer": {
16
"cik": "1318605",
17
"name": "Tesla, Inc.",
18
"tradingSymbol": "TSLA"
19
},
20
"reportingOwner": {
21
"cik": "1494730",
22
"name": "Musk Elon",
23
"address": {
24
"street1": "C/O TESLA, INC.",
25
"street2": "1 TESLA ROAD",
26
"city": "AUSTIN",
27
"state": "TX",
28
"zipCode": "78725"
29
},
30
"relationship": {
31
"isDirector": true,
32
"isOfficer": true,
33
"officerTitle": "CEO",
34
"isTenPercentOwner": true,
35
"isOther": false
36
}
37
},
38
"nonDerivativeTable": {
39
"transactions": [
40
{
41
"securityTitle": "Common Stock",
42
"transactionDate": "2022-08-09",
43
"coding": {
44
"formType": "4",
45
"code": "S",
46
"equitySwapInvolved": false
47
},
48
"amounts": {
49
"shares": 435,
50
"pricePerShare": 872.469,
51
"pricePerShareFootnoteId": [
52
"F1"
53
],
54
"acquiredDisposedCode": "D"
55
},
56
"postTransactionAmounts": {
57
"sharesOwnedFollowingTransaction": 155058484
58
},
59
"ownershipNature": {
60
"directOrIndirectOwnership": "I",
61
"natureOfOwnership": "by Trust",
62
"natureOfOwnershipFootnoteId": [
63
"F2"
64
]
65
}
66
},
67
{
68
"securityTitle": "Common Stock",
69
"transactionDate": "2022-08-09",
70
"coding": {
71
"formType": "4",
72
"code": "S",
73
"equitySwapInvolved": false
74
},
75
"amounts": {
76
"shares": 13292,
77
"pricePerShare": 874.286,
78
"pricePerShareFootnoteId": [
79
"F3"
80
],
81
"acquiredDisposedCode": "D"
82
},
83
"postTransactionAmounts": {
84
"sharesOwnedFollowingTransaction": 155045192
85
},
86
"ownershipNature": {
87
"directOrIndirectOwnership": "I",
88
"natureOfOwnership": "by Trust",
89
"natureOfOwnershipFootnoteId": [
90
"F2"
91
]
92
}
93
},
94
{
95
"securityTitle": "Common Stock",
96
"transactionDate": "2022-08-09",
97
"coding": {
98
"formType": "4",
99
"code": "S",
100
"equitySwapInvolved": false
101
},
102
"amounts": {
103
"shares": 6048,
104
"pricePerShare": 876.629,
105
"pricePerShareFootnoteId": [
106
"F4"
107
],
108
"acquiredDisposedCode": "D"
109
},
110
"postTransactionAmounts": {
111
"sharesOwnedFollowingTransaction": 155039144
112
},
113
"ownershipNature": {
114
"directOrIndirectOwnership": "I",
115
"natureOfOwnership": "by Trust",
116
"natureOfOwnershipFootnoteId": [
117
"F2"
118
]
119
}
120
}
121
]
122
},
123
"footnotes": [
124
{
125
"id": "F1",
126
"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."
127
},
128
{
129
"id": "F2",
130
"text": "The Elon Musk Revocable Trust dated July 22, 2003, for which the reporting person is trustee."
131
},
132
{
133
"id": "F3",
134
"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."
135
},
136
{
137
"id": "F4",
138
"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."
139
}
140
],
141
"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.",
142
"ownerSignatureName": "By: Aaron Beckman by Power of Attorney For: Elon Musk",
143
"ownerSignatureNameDate": "2022-08-09"
144
}
145
]
146
}
Response Structure of Bulk Download Endpoints
/bulk/form-3/YEAR/YEAR-MONTH.jsonl.gz
1
{"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"}
2
{ ... }
3
{ ... }
/bulk/form-3/index.json
1
[
2
{
3
"key": "2025/2025-04.jsonl.gz",
4
"updatedAt": "2025-04-09T05:00:06.000Z",
5
"size": 74929
6
},
7
{
8
"key": "2025/2025-03.jsonl.gz",
9
"updatedAt": "2025-04-08T11:00:53.000Z",
10
"size": 227586
11
}
12
// ... more files
13
]
/bulk/form-4/YEAR/YEAR-MONTH.jsonl.gz
1
{"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"}
2
{ ... }
3
{ ... }
/bulk/form-4/index.json
1
[
2
{
3
"key": "2025/2025-04.jsonl.gz",
4
"updatedAt": "2025-04-09T05:00:08.000Z",
5
"size": 1675134
6
},
7
{
8
"key": "2025/2025-03.jsonl.gz",
9
"updatedAt": "2025-04-08T10:59:20.000Z",
10
"size": 6142697
11
}
12
// ... more files
13
]
/bulk/form-5/YEAR/YEAR-MONTH.jsonl.gz
1
{"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"}
2
{ ... }
3
{ ... }
/bulk/form-5/index.json
1
[
2
{
3
"key": "2025/2025-04.jsonl.gz",
4
"updatedAt": "2025-04-09T05:00:06.000Z",
5
"size": 4456349
6
},
7
{
8
"key": "2025/2025-03.jsonl.gz",
9
"updatedAt": "2025-04-01T05:00:07.000Z",
10
"size": 106764954
11
},
12
// ... more files
13
]
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.
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.
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.
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.
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.
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.
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.
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.
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).
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.
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.
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.
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.
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.
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.
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.
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.
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).
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
References
For more information about Form 3, 4 and 5 visit the SEC websites here:
- Form 3 EDGAR PDF Template
- Form 4 EDGAR PDF Template
- Form 5 EDGAR PDF Template
- Form 4 Filing Instructions
- Form 5 Filing Instructions
- Form 3, 4 and 5 Overview
- Form 3, 4 and 5 XML Technical Specifications
Regulations
- § 240.10b5-1 Trading “on the basis of” material nonpublic information in insider trading cases
- § 240.16a-3 Reporting transactions and holdings
Research Papers
- SEC Rule 10b5-1 and insiders' strategic trade
- Offensive Disclosure: How Voluntary Disclosure Can Increase Returns from Insider Trading
- Decoding Inside Information
- Do SEC's 10b5-1 Safe Harbor Rules Need To Be Rewritten?
- SEC Rule 10b5-1 Plans and Strategic Trade around Earnings Announcements
- Insider sales based on short-term earnings information