Options Data for US Stocks: End-of-Day and Historical Learn more

Insider Transactions API (SEC “Form 4”)

The EODHD Insider Transactions API provides Form 4 filings — the public disclosure of stock transactions by directors, officers, and 10% owners of US-listed companies as required by Section 16 of the Securities Exchange Act. Each filing exposes non-derivative transactions (common stock), derivative transactions (stock options, RSUs, warrants), and the footnotes referenced from each row. Data is sourced directly from SEC EDGAR and refreshed on a daily schedule.

Coverage is limited to US-listed issuers that file Form 4 with the SEC.

You can try this endpoint without an account using the demo API token (api_token=demo). For SEC filings the demo token is limited to three tickers: AAPL.US, TSLA.US, and AMZN.US.

The legacy /api/insider-transactions endpoint is obsolete. It remains available for backward compatibility and still returns the same flat schema (see the Legacy Endpoint section at the end of this page). For all new integrations, use the SEC Form 4 endpoint described below.

Coverage

Form 4 filings are sourced from SEC EDGAR and refreshed daily, with history reaching back to 2000.

MetricValue
Filings1,470,000+
Issuers4,800+
History2000 to present
Non-derivative transactions2.4 million+
Derivative transactions889,000+

Nearly all filings, about 99.6 percent, include at least one transaction. The small remainder are holdings-only or amendment filings, which is normal. Depth per issuer varies: major US large-caps have a decade or more of history, while recently listed names have less.

Compared with the legacy endpoint, the SEC Form 4 endpoint provides direct SEC EDGAR data with fewer data-quality issues, up to a decade or more of history for major issuers, both non-derivative and derivative transactions with footnotes, the full SEC transaction code set, and reporting-owner CIK, relationship flags, and post-transaction holdings on every row.

API Endpoint

GET https://eodhd.com/api/sec-filings/{symbol}/form4

Path Parameter

symbol string required
US ticker, for example AAPL or AAPL.US. Case-insensitive, and the .US suffix is optional. Form 4 is filed by US-listed issuers only.

Query Parameters

api_token string required
Your EODHD API token
page[offset] integer optional
Pagination offset, zero-based (Default: 0)
page[limit] integer optional
Page size (Default: 20, Range: 1-100)

Transaction Codes

The transaction_code field uses the SEC Section 16 reporting codes. Both non-derivative and derivative transactions share the same code set:

CodeDescription
POpen-market or private purchase of non-derivative or derivative security
SOpen-market or private sale of non-derivative or derivative security
AGrant, award, or other acquisition under an equity-based compensation plan
DDisposition to the issuer of securities under an equity-based compensation plan
FPayment of exercise price or tax liability by delivering or withholding shares
MExercise or conversion of derivative security received under an equity-based compensation plan
GBona fide gift
VVoluntarily reported transaction otherwise not required to be reported
JOther acquisition or disposition (described in a footnote)
LSmall acquisition under SEC Rule 16a-6
CConversion of derivative security
EExpiration of short derivative position
HExpiration of long derivative position with value received
OExercise of out-of-the-money derivative security
XExercise of in-the-money or at-the-money derivative security
IDiscretionary transaction under Rule 16b-3(f) resulting in an acquisition or disposition of issuer securities
UDisposition pursuant to a tender of shares in a change-of-control transaction
WAcquisition or disposition by will or the laws of descent and distribution
ZDeposit into or withdrawal from a voting trust
KTransaction in an equity swap or instrument with similar characteristics

Sign up & Get Data

Request Example

https://eodhd.com/api/sec-filings/AAPL/form4?api_token=YOUR_TOKEN
(Sign up for free to get an API token)
curl --location "https://eodhd.com/api/sec-filings/AAPL/form4?api_token=YOUR_TOKEN&fmt=json"
(Sign up for free to get an API token)
$curl = curl_init();

curl_setopt_array($curl, array(
    CURLOPT_URL => 'https://eodhd.com/api/sec-filings/AAPL/form4?api_token=YOUR_TOKEN&fmt=json',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => '',
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 0,
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => 'GET',
));

$data = curl_exec($curl);
curl_close($curl);

try {
    $data = json_decode($data, true, 512, JSON_THROW_ON_ERROR);
    var_dump($data);
} catch (Exception $e) {
    echo 'Error. '.$e->getMessage();
}
(Sign up for free to get an API token)
import requests

url = f'https://eodhd.com/api/sec-filings/AAPL/form4?api_token=YOUR_TOKEN&fmt=json'
data = requests.get(url).json()

print(data)
(Sign up for free to get an API token)
library(httr)
library(jsonlite)

url <- 'https://eodhd.com/api/sec-filings/AAPL/form4?api_token=YOUR_TOKEN&fmt=json'
response <- GET(url)

if (http_type(response) == "application/json") {
    content <- content(response, "text", encoding = "UTF-8")
    cat(content)
} else {
    cat("Error while receiving data\n")
}
(Sign up for free to get an API token)
New to coding? Our ChatGPT assistant can generate code in any language tailored to our API. Simply describe how you want to use our data, and get a working piece of code. Don’t forget to replace the API token with your own.

Try it now (it's free)!

How to use it (YouTube)

Response Format

The response envelope contains a data array of Form 4 filings sorted by filed_at in descending order, a meta object with pagination info, and a links object for forward navigation. Only links.next is exposed; clients walk pages forward until it becomes null.

{
  "data": [ /* Form 4 filings */ ],
  "meta": {
    "total": 594,
    "page": { "offset": 0, "limit": 20 }
  },
  "links": {
    "next": "https://eodhd.com/api/sec-filings/AAPL.US/form4?page[offset]=20&page[limit]=20"
  }
}

Filing

Each entry in the data array represents one Form 4 submission:

{
  "accession_number": "0001104659-26-062860",
  "filed_at": "2026-05-15",
  "period_of_report": "2026-05-13",
  "non_derivative": [ /* non-derivative transactions */ ],
  "derivative": [ /* derivative transactions */ ],
  "footnotes": [ /* footnotes referenced from transaction rows */ ]
}
FieldTypeDescription
accession_numberstringSEC accession number, unique identifier of the filing
filed_atstring (date)Date the filing was submitted to SEC, YYYY-MM-DD
period_of_reportstring (date)Reporting period, YYYY-MM-DD
non_derivativearrayDirect stock transactions (Common Stock, Class A/B/C, and similar). May be empty when the filing reports only derivative activity
derivativearrayDerivative transactions (stock options, RSUs, warrants)
footnotesarrayFootnotes referenced from transaction rows

Non-Derivative Transaction

{
  "reporting_owner_cik": "0001771340",
  "reporting_owner_name": "Taneja Vaibhav",
  "is_director": false,
  "is_officer": true,
  "is_ten_percent_owner": false,
  "is_other": false,
  "officer_title": "Chief Financial Officer",
  "other_text": null,
  "security_title": "Common Stock",
  "transaction_date": "2026-05-13T00:00:00+00:00",
  "transaction_code": "S",
  "acquired_or_disposed": "D",
  "shares_amount": 3000,
  "price_per_share": 450,
  "shares_owned_after": 18106.5,
  "total_value": 1350000,
  "footnote_ids": ["F1"],
  "footnote_refs": { "shares_owned_after": ["F1"] }
}
FieldTypeDescription
reporting_owner_cikstringSEC CIK of the insider
reporting_owner_namestringFull name of the insider
is_directorbooleanTrue if the insider is a board director
is_officerbooleanTrue if the insider is a company officer
is_ten_percent_ownerbooleanTrue if the insider is a 10 percent or greater owner
is_otherbooleanTrue if the insider has another relationship
officer_titlestring or nullOfficer title, for example Chief Executive Officer. Null when is_officer is false
other_textstring or nullDescription of the other relationship, when is_other is true
security_titlestringSecurity name, for example Common Stock, Class A Common Stock
transaction_datestring (datetime)ISO 8601 datetime of the transaction
transaction_codestringSEC transaction code (see Transaction Codes section above)
acquired_or_disposedstringA for acquired or D for disposed
shares_amountnumberNumber of shares transacted
price_per_sharenumber or nullUSD price per share. May be null when not applicable, for example gifts
shares_owned_afternumberTotal shares owned by this insider after the transaction
total_valuenumber or nullComputed shares times price. Null when price is unavailable or implausible
footnote_idsarrayIdentifiers of all footnotes that apply to this row, for example [“F3”]. Resolve each against the footnotes array. Empty when the row has none
footnote_refsobjectMaps a field name to the footnote ids that annotate that specific field, for example {“security_title”: [“F3”]}

Derivative Transaction

{
  "reporting_owner_cik": "0001771340",
  "reporting_owner_name": "Taneja Vaibhav",
  "security_title": "Non-Qualified Stock Option (right to buy)",
  "conversion_or_exercise_price": 18.44,
  "transaction_date": "2026-05-13T00:00:00+00:00",
  "transaction_code": "M",
  "acquired_or_disposed": "D",
  "shares_amount": 1000,
  "price_per_share": 0,
  "shares_owned_after": 2390,
  "underlying_security_title": "Common Stock",
  "underlying_shares": 1000,
  "exercise_date": null,
  "expiration_date": "2028-10-16T00:00:00+00:00",
  "footnote_ids": ["F1"],
  "footnote_refs": { "conversion_or_exercise_price": ["F1"] }
}
FieldTypeDescription
reporting_owner_cikstringSEC CIK of the insider
reporting_owner_namestringFull name of the insider
security_titlestringDerivative security name, for example Non-Qualified Stock Option
conversion_or_exercise_pricenumber or nullExercise or conversion price, USD
transaction_datestring (datetime)ISO 8601 datetime of the transaction
transaction_codestringSEC transaction code
acquired_or_disposedstringA for acquired or D for disposed
shares_amountnumberNumber of derivative units transacted
price_per_sharenumber or nullUSD price per derivative unit
shares_owned_afternumberTotal derivative units held after the transaction
underlying_security_titlestring or nullUnderlying security, for example Common Stock
underlying_sharesnumber or nullNumber of underlying shares the derivative converts to
exercise_datestring (datetime) or nullDate the derivative becomes exercisable
expiration_datestring (datetime) or nullExpiration date of the derivative
footnote_idsarrayIdentifiers of all footnotes that apply to this row, for example [“F1”]. Resolve each against the footnotes array. Empty when the row has none
footnote_refsobjectMaps a field name to the footnote ids that annotate that specific field, for example {“conversion_or_exercise_price”: [“F1”]}

Footnote

{
  "footnote_id": "F1",
  "text": "The transactions reported on this Form 4 were effected pursuant to a Rule 10b5-1 trading plan adopted by the reporting person on November 17, 2025."
}
FieldTypeDescription
footnote_idstringIdentifier referenced from transaction rows, for example F1, F2
textstringFootnote text

Response Codes

CodeMeaning
200Success. Response includes data, meta, and links
401Missing or invalid api_token
403Plan does not include access to this endpoint
404Symbol not found in the SEC Form 4 dataset (non-US issuer, ticker typo, or unknown share class)
422Validation error, for example page[limit] greater than 100, page[offset] negative, or page passed as a scalar instead of an array
429Rate limit exceeded

Known Limitations

  • US-only. Form 4 is filed by US-listed issuers. Non-US issuers without US listings return 404.
  • History depth varies by ticker. Major US large-caps such as AAPL, MSFT, NVDA, and KO have a decade or more of history back to 2000. Recently listed names and smaller issuers may expose less.
  • Daily refresh. Data is refreshed daily from SEC EDGAR. Filings submitted during the current trading day appear in the API on the same or next day.
  • Earnings-driven activity. Insider transactions cluster around earnings releases. The absence of new filings during the 4 to 6 weeks before each earnings report is expected, as insiders are typically subject to blackout periods under their company’s trading policy.
  • Forward-only pagination. The API exposes only links.next. To reach a specific page, increment page[offset] directly using the value from meta.total.

Legacy Endpoint (Obsolete)

/api/insider-transactions — flat-schema legacy endpoint, kept for backward compatibility

This endpoint is maintained for backward compatibility with existing integrations. For new integrations we recommend the SEC Form 4 endpoint described above.

https://eodhd.com/api/insider-transactions?api_token=YOUR_TOKEN&fmt=json
(Sign up for free to get an API token)
curl --location "https://eodhd.com/api/insider-transactions?api_token=YOUR_TOKEN&fmt=json"
(Sign up for free to get an API token)
$curl = curl_init();

curl_setopt_array($curl, array(
    CURLOPT_URL => 'https://eodhd.com/api/insider-transactions?api_token=YOUR_TOKEN&fmt=json',
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => '',
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 0,
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => 'GET',
));

$data = curl_exec($curl);
curl_close($curl);

try {
    $data = json_decode($data, true, 512, JSON_THROW_ON_ERROR);
    var_dump($data);
} catch (Exception $e) {
    echo 'Error. '.$e->getMessage();
}
(Sign up for free to get an API token)
import requests

url = f'https://eodhd.com/api/insider-transactions?api_token=YOUR_TOKEN&fmt=json'
data = requests.get(url).json()

print(data)
(Sign up for free to get an API token)
library(httr)
library(jsonlite)

url <- 'https://eodhd.com/api/insider-transactions?api_token=YOUR_TOKEN&fmt=json'
response <- GET(url)

if (http_type(response) == "application/json") {
    content <- content(response, "text", encoding = "UTF-8")
    cat(content)
} else {
    cat("Error while receiving data\n")
}
(Sign up for free to get an API token)
New to coding? Our ChatGPT assistant can generate code in any language tailored to our API. Simply describe how you want to use our data, and get a working piece of code. Don’t forget to replace the API token with your own.

Try it now (it's free)!

How to use it (YouTube)

Parameters

ParameterRequiredDescription
api_tokenYesYour EODHD API token
codeNoTicker, for example AAPL or AAPL.US. By default, all symbols are returned
fromNoStart date, YYYY-MM-DD. Default: one year ago
toNoEnd date, YYYY-MM-DD. Default: current date
limitNoNumber of entries per result, 1 to 1000. Default 100
fmtNoResponse format. json is supported

Example

An example of past insider transactions for AAPL:

Insider Transactions API

The legacy endpoint exposes two transaction codes: P for purchase of securities on an exchange or from another person, and S for sale of securities on an exchange or to another person.

Compare plans and find your fit
Free and paid plans for individual and commercial use
Go to Pricing
Chat