Endpoints
/v1/insider-trading
https://secfeedapi.com/v1/insider-tradingForms 3, 4, 5: every transaction and holding with owners, roles, prices, footnotes, 10b5-1 flag.
| Parameter | Type | Description | Example |
|---|---|---|---|
ticker | string | Issuer ticker. Case-insensitive. | NVDA |
cik | integer | Issuer CIK. Use this instead of ticker for companies without a ticker. | 320193 |
owner | string | Matches any part of the reporting owner block (name, CIK, title), case-insensitive substring. | Huang |
code | string | One or more transaction codes, comma separated. See the code list below. | P,S |
minValue | number | Minimum transaction value in dollars (shares times price). | 100000 |
startDate | string | Earliest filing date, YYYY-MM-DD. Filters on the date the form was filed, not the trade date. | 2026-10-01 |
endDate | string | Latest filing date, YYYY-MM-DD. | 2026-10-09 |
formType | string | 3, 4 or 5, or an amendment such as 4/A. | 4 |
table | string | nonDerivative (common stock) or derivative (options, RSUs, warrants). | derivative |
from | integer | Offset for paging. Default 0. | 50 |
size | integer | Rows per page, up to 200. Default 50. | 50 |
- Rows are sorted by filing date, newest first, then by dollar value.
- total is exact up to 10,000. Above that it reads 10000 and totalRelation is gte; narrow the query with dates to count precisely.
- Market wide code filters without a ticker or date first look at the last 60 days, then the last 400, so the newest matches come back quickly.
/v1/form-144
https://secfeedapi.com/v1/form-144Proposed sales of restricted and control securities: flat fields (seller, relationship, shares, market value, broker, sale date, past 3 months of sales).
| Parameter | Type | Description | Example |
|---|---|---|---|
cik | integer | CIK of the filer, which on Form 144 is usually the person selling, not the issuer. | 1870974 |
startDate | string | Earliest filing date, YYYY-MM-DD. | 2026-10-01 |
endDate | string | Latest filing date, YYYY-MM-DD. | 2026-10-09 |
formType | string | 144 or 144/A. | 144 |
flat.<field> | string or number | Exact match on a flat field, or flat.<field>__gte / __lte for numeric ranges. | flat.aggregateMarketValue__gte=1000000 |
data.<path> | string | Exact match on any value in the original XML, by dotted path. | data.primary_doc.formData.issuerInfo.issuerCik=0001045810 |
fields | string | Set to flat to drop the full XML and return only the flat fields. | flat |
from | integer | Offset for paging. Default 0. | 20 |
size | integer | Filings per page, up to 100. Default 20. | 20 |
- To filter by issuer, use data.primary_doc.formData.issuerInfo.issuerCik with the 10 digit zero padded CIK, or flat.issuerName with the exact name.
Request examples
Every response below is real output from the API, trimmed to the first records.
Recent open market sales at one company
Each row is one sale line. Check aff10b5one to see whether it was made under a 10b5-1 plan, and owners for who sold.
curl -H "Authorization: Bearer $SECFEED_KEY" \ "https://secfeedapi.com/v1/insider-trading?ticker=NVDA&code=S&size=2"
import os, requests
r = requests.get(
"https://secfeedapi.com/v1/insider-trading",
params={'ticker': 'NVDA', 'code': 'S', 'size': '2'},
headers={"Authorization": f"Bearer {os.environ['SECFEED_KEY']}"},
timeout=60,
)
r.raise_for_status()
print(r.json()){
"total": 2704,
"totalRelation": "eq",
"transactions": [
{
"accession": "0001696841-26-000014",
"seq": 1,
"tbl": "nonDerivative",
"kind": "transaction",
"security": "Common Stock",
"tx_date": "2026-09-21",
"code": "S",
"equity_swap": 0,
"shares": 13478.0,
"price": 223.05,
"acq_disp": "D",
"owned_after": 2692159.0,
"direct_indirect": "I",
"nature": "By Trust",
"conv_price": null,
"exercise_date": null,
"expiration_date": null,
"underlying": null,
"underlying_shares": null,
"value": 3006267.9,
"form": "4",
"filed": "2026-09-23",
"period": "2026-09-21",
"issuer_cik": 1045810,
"issuer_name": "NVIDIA CORP",
"ticker": "NVDA",
"owners": [
{
"cik": "1696841",
"name": "Teter Timothy S.",
"isDirector": false,
"isOfficer": true,
"isTenPercentOwner": false,
"isOther": false,
"officerTitle": "EVP, General Counsel and Sec",
"otherText": null,
"address": {
"rptOwnerStreet1": "C/O NVIDIA CORPORATION",
"rptOwnerCity": "SANTA CLARA",
"rptOwnerState": "CA",
"rptOwnerZipCode": "95051"
}
}
],
"aff10b5one": true,
"remarks": null,
"footnotes": {
"F1": "The reported transaction was effected pursuant to a Rule 10b5-1 trading plan adopted by the Reporting Person on May 22, 2026.",
"F4": "Shares held by the Trust.",
"F5": "Represents weighted average sales price. The shares were sold at prices ranging from $222.59 to $223.58. The Reporting Person will provide upon request, to the SEC, the Issuer or security holder of the Issuer, full information regarding the number of shares sold at each separate..."
},
"codeDescription": "Open market or private sale"
},
{
"accession": "0001696841-26-000014",
...Purchases over $100,000 filed this month
A market wide screen for insider buying. value is shares times price, so very large prices from filer typos are worth checking.
curl -H "Authorization: Bearer $SECFEED_KEY" \ "https://secfeedapi.com/v1/insider-trading?code=P&startDate=2026-10-01&minValue=100000&size=2"
import os, requests
r = requests.get(
"https://secfeedapi.com/v1/insider-trading",
params={'code': 'P', 'startDate': '2026-10-01', 'minValue': '100000', 'size': '2'},
headers={"Authorization": f"Bearer {os.environ['SECFEED_KEY']}"},
timeout=60,
)
r.raise_for_status()
print(r.json()){
"total": 46,
"totalRelation": "eq",
"transactions": [
{
"accession": "0001628280-26-065603",
"seq": 0,
"tbl": "nonDerivative",
"kind": "transaction",
"security": "Common Shares",
"tx_date": "2026-10-09",
"code": "P",
"equity_swap": 0,
"shares": 2500000.0,
"price": 4.7374,
"acq_disp": "A",
"owned_after": 37285941.0,
"direct_indirect": "I",
"nature": "By Drew Holdings Ltd.",
"conv_price": null,
"exercise_date": null,
"expiration_date": null,
"underlying": null,
"underlying_shares": null,
"value": 11843500.0,
"form": "4",
"filed": "2026-10-13",
"period": "2026-10-09",
"issuer_cik": 1715497,
"issuer_name": "Borr Drilling Ltd",
"ticker": "BORR",
"owners": [
{
"cik": "0001709630",
"name": "Troim Tor Olav",
"isDirector": true,
"isOfficer": false,
"isTenPercentOwner": false,
"isOther": false,
"officerTitle": null,
"otherText": null,
"address": {
"rptOwnerStreet1": "C/O BORR DRILLING LIMITED",
"rptOwnerCity": "HAMILTON",
"rptOwnerState": null,
"rptOwnerZipCode": "D0 HM11"
}
}
],
"aff10b5one": false,
"remarks": null,
"footnotes": {
"F1": "Drew Holdings Ltd. is wholly owned by Drew Trust, a non-discretionary trust in which the reporting person is the beneficiary."
},
"codeDescription": "Open market or private purchase"
},
{
"accession": "0001654954-26-008905",
"seq": 0,
"tbl": "nonDerivative",
...Form 144 notices for sales over $1 million
Form 144 is filed before a planned sale. flat.salesPast3Months lists what the same seller sold in the prior three months.
curl -H "Authorization: Bearer $SECFEED_KEY" \ "https://secfeedapi.com/v1/form-144?flat.aggregateMarketValue__gte=1000000&fields=flat&size=2"
import os, requests
r = requests.get(
"https://secfeedapi.com/v1/form-144",
params={'flat.aggregateMarketValue__gte': '1000000', 'fields': 'flat', 'size': '2'},
headers={"Authorization": f"Bearer {os.environ['SECFEED_KEY']}"},
timeout=60,
)
r.raise_for_status()
print(r.json()){
"total": 858,
"filings": [
{
"accessionNo": "0001921094-26-001084",
"formType": "144",
"filedAt": "2026-10-13",
"cik": 1564475,
"companyName": "Olivan Javier",
"flat": {
"issuerCik": "1326801",
"issuerName": "Meta Platforms, Inc.",
"seller": "Olivan Javier",
"relationship": [
"Officer"
],
"securityClass": "Class A Common Shares",
"broker": "Charles Schwab & Co., Inc.",
"sharesToSell": 1575.0,
"aggregateMarketValue": 1146757.0,
"sharesOutstanding": 2205128509.0,
"approxSaleDate": "10/12/2026",
"exchange": "NASDAQ",
"acquiredDate": "02/15/2017",
"natureOfAcquisition": "Restricted Stock Unit Lapse",
"acquiredFrom": "Meta Platforms, Inc.",
"isGift": false,
"salesPast3Months": [
{
"seller": "JAVIER OLIVAN",
"saleDate": "07/13/2026",
"shares": 2163.0,
"grossProceeds": 1429787.0
},
{
"seller": "JAVIER OLIVAN",
"saleDate": "07/20/2026",
"shares": 1466.0,
"grossProceeds": 946816.0
}
],
"planAdoptionDates": [
"11/17/2025"
]
}
},
{
"accessionNo": "0001958244-26-000656",
"formType": "144",
"filedAt": "2026-10-13",
"cik": 1754844,
"companyName": "CMXI B.V.",
"flat": {
"issuerCik": "1707753",
"issuerName": "Elastic N.V.",
"seller": "CMXI B.V.",
"relationship": [
"Director"
],
"securityClass": "Ordinary",
...Response fields
| Field | Type | Meaning |
|---|---|---|
total | integer | Matching rows, capped at 10000. |
totalRelation | string | eq when total is exact, gte when the cap was reached. |
transactions[].accession | string | Accession number of the filing the row comes from. |
transactions[].seq | integer | Position of the row inside the filing. |
transactions[].tbl | string | nonDerivative or derivative table. |
transactions[].kind | string | transaction for a reported trade, holding for a position reported without a trade. |
transactions[].security | string | Security title as written in the filing. |
transactions[].tx_date | string | Transaction date, YYYY-MM-DD. |
transactions[].code | string | SEC transaction code. |
transactions[].codeDescription | string | Plain English meaning of the code. |
transactions[].equity_swap | integer | 1 when the filer marked the trade as part of an equity swap. |
transactions[].shares | number | Shares or units in the transaction. |
transactions[].price | number | Price per share. Often a weighted average, see footnotes. |
transactions[].value | number | shares times price. |
transactions[].acq_disp | string | A for acquired, D for disposed. |
transactions[].owned_after | number | Shares held after the transaction. |
transactions[].direct_indirect | string | D for direct ownership, I for indirect. |
transactions[].nature | string | How indirect holdings are held, for example By Trust. |
transactions[].conv_price | number | Exercise or conversion price (derivative rows). |
transactions[].exercise_date | string | First exercise date (derivative rows). |
transactions[].expiration_date | string | Expiration date (derivative rows). |
transactions[].underlying | string | Underlying security title (derivative rows). |
transactions[].underlying_shares | number | Underlying shares (derivative rows). |
transactions[].form | string | 3, 4, 5 or an amendment. |
transactions[].filed | string | Filing date. |
transactions[].period | string | Period of report from the filing. |
transactions[].issuer_cik | integer | Issuer CIK. |
transactions[].issuer_name | string | Issuer name. |
transactions[].ticker | string | Issuer trading symbol as reported. |
transactions[].owners[].cik | string | Reporting owner CIK. |
transactions[].owners[].name | string | Reporting owner name. |
transactions[].owners[].isDirector | boolean | Owner is a director. |
transactions[].owners[].isOfficer | boolean | Owner is an officer. |
transactions[].owners[].isTenPercentOwner | boolean | Owner holds more than 10%. |
transactions[].owners[].isOther | boolean | Other relationship, see otherText. |
transactions[].owners[].officerTitle | string | Officer title as written by the filer. |
transactions[].owners[].otherText | string | Description of an other relationship. |
transactions[].owners[].address.rptOwnerStreet1 | string | Owner street address. |
transactions[].owners[].address.rptOwnerCity | string | Owner city. |
transactions[].owners[].address.rptOwnerState | string | Owner state. |
transactions[].owners[].address.rptOwnerZipCode | string | Owner ZIP code. |
transactions[].aff10b5one | boolean | The filer checked the Rule 10b5-1 plan box. |
transactions[].remarks | string | Free text remarks from the filing. |
transactions[].footnotes.<id> | string | Footnotes referenced by this row, keyed F1, F2 and so on. |
filings[].accessionNo | string | Form 144: accession number. |
filings[].formType / filedAt / cik / companyName | string | Form 144: form, filing date, filer CIK and filer name. |
filings[].flat.issuerCik / issuerName | string | Form 144: the company whose stock will be sold. |
filings[].flat.seller / relationship[] | string | Form 144: who is selling and their relationship to the issuer. |
filings[].flat.securityClass / broker / exchange | string | Form 144: class of security, broker handling the sale, exchange. |
filings[].flat.sharesToSell / aggregateMarketValue / sharesOutstanding | number | Form 144: shares to be sold, their market value, issuer shares outstanding. |
filings[].flat.approxSaleDate / acquiredDate | string | Form 144: expected sale date and when the shares were acquired (MM/DD/YYYY). |
filings[].flat.natureOfAcquisition / acquiredFrom / isGift | string | Form 144: how the shares were obtained. |
filings[].flat.salesPast3Months[] | array | Form 144: seller, saleDate, shares and grossProceeds of sales in the prior three months. |
filings[].flat.planAdoptionDates[] | array | Form 144: 10b5-1 plan adoption dates, when given. |
filings[].data.primary_doc | object | Form 144: the complete filing as JSON (omitted with fields=flat). |
Transaction codes
| Code | Meaning |
|---|---|
| P | Open market or private purchase |
| S | Open market or private sale |
| A | Grant or award |
| D | Disposition to the issuer |
| F | Payment of exercise price or tax by delivering securities |
| I | Discretionary transaction |
| M | Exercise or conversion of derivative security (exempt) |
| C | Conversion of derivative security |
| E | Expiration of short derivative position |
| H | Expiration or cancellation of long derivative position |
| O | Exercise of out-of-the-money derivative |
| X | Exercise of in-the-money or at-the-money derivative |
| G | Bona fide gift |
| L | Small acquisition |
| W | Acquisition or disposition by will or laws of descent |
| Z | Deposit into or withdrawal from voting trust |
| J | Other acquisition or disposition |
| K | Equity swap or similar |
| U | Disposition due to tender of shares |
How to
How do I get every insider trade at one company?
Filter by ticker (or cik) and page with from and size. Rows come newest first.
curl -H "Authorization: Bearer $SECFEED_KEY" \ "https://secfeedapi.com/v1/insider-trading?ticker=AAPL&size=2"
How do I find what one executive traded?
Combine owner with ticker. owner matches any part of the name, so a last name is usually enough.
curl -H "Authorization: Bearer $SECFEED_KEY" \ "https://secfeedapi.com/v1/insider-trading?owner=Huang&ticker=NVDA&size=2"
How do I see option and RSU activity only?
Set table=derivative. Those rows carry conv_price, exercise_date, expiration_date and underlying_shares.
curl -H "Authorization: Bearer $SECFEED_KEY" \ "https://secfeedapi.com/v1/insider-trading?ticker=NVDA&table=derivative&size=2"
How do I list initial ownership statements from new insiders?
Use formType=3. Form 3 rows are usually holdings rather than trades.
curl -H "Authorization: Bearer $SECFEED_KEY" \ "https://secfeedapi.com/v1/insider-trading?ticker=MSFT&formType=3&size=2"
How do I find gifts of stock?
Use code G. Gifts are reported at zero price, so value is usually 0.
curl -H "Authorization: Bearer $SECFEED_KEY" \ "https://secfeedapi.com/v1/insider-trading?code=G&startDate=2026-10-01&size=2"
How do I pull a date range for one issuer by CIK?
Use cik with startDate and endDate. The dates refer to the filing date.
curl -H "Authorization: Bearer $SECFEED_KEY" \ "https://secfeedapi.com/v1/insider-trading?cik=320193&startDate=2026-01-01&endDate=2026-06-30&size=2"
How do I get both buys and sells for a day?
Pass several codes separated by commas and set startDate and endDate to the same day.
curl -H "Authorization: Bearer $SECFEED_KEY" \ "https://secfeedapi.com/v1/insider-trading?code=P,S&startDate=2026-10-09&endDate=2026-10-09&size=1"
How do I page past the first results?
Use from as the offset. With size=2, from=2 returns rows 3 and 4.
curl -H "Authorization: Bearer $SECFEED_KEY" \ "https://secfeedapi.com/v1/insider-trading?ticker=TSLA&code=M&size=2&from=2"
How do I see Form 144 notices for one issuer?
Filter on the issuer CIK inside the XML. It is 10 digits with leading zeros.
curl -H "Authorization: Bearer $SECFEED_KEY" \ "https://secfeedapi.com/v1/form-144?data.primary_doc.formData.issuerInfo.issuerCik=0001045810&fields=flat&size=1"
How do I find Form 144 notices handled by one broker?
Match flat.broker exactly, URL encoded.
curl -H "Authorization: Bearer $SECFEED_KEY" \ "https://secfeedapi.com/v1/form-144?flat.broker=Morgan%2520Stanley%2520Smith%2520Barney%2520LLC&fields=flat&size=1"
How do I find large planned sales by share count?
Use flat.sharesToSell__gte.
curl -H "Authorization: Bearer $SECFEED_KEY" \ "https://secfeedapi.com/v1/form-144?flat.sharesToSell__gte=100000&fields=flat&size=1"
How do I see amended Form 144 notices?
Set formType=144/A.
curl -H "Authorization: Bearer $SECFEED_KEY" \ "https://secfeedapi.com/v1/form-144?formType=144/A&fields=flat&size=1"
Errors
- 401 without a valid key; 429 when the monthly quota is used.
- Form 144 flat filters on numeric looking text (issuerCik) and on true/false fields (isGift) currently match nothing; use data.<path> for those.
See also the error codes every endpoint shares.
Try it with your own key
500 free calls a month.