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 will need an EODHD API subscription that includes access to the Fundamental Data feed — available on Fundamentals and All-in-One plans.

Important: API Update

The legacy /api/insider-transactions endpoint is now obsolete. It remains available for backward compatibility with existing integrations and continues to deliver data in the same flat schema you have today — see the Legacy Endpoint section at the bottom of this page.

Note. Historical coverage. As of May 2026, history depth is uneven across issuers and is being expanded continuously. Backfill is processed in priority order: by market capitalization for major U.S. exchanges (NYSE, NASDAQ, NYSE ARCA, NYSE MKT, AMEX, BATS), and by 5-day average trading volume elsewhere. Depth currently ranges from roughly 12 months for recently onboarded issuers up to a decade or more for the largest names (e.g., AAPL Form 4 history reaches back to April 2015). We expect substantially uniform multi-year coverage across the U.S. equities universe by June 2026.

For all new integrations we recommend the new SEC Form 4 endpoint described below. Compared to the legacy endpoint, it provides:

  • Direct SEC EDGAR data — fewer data quality issues.
  • Expected – up to 10+ years of historical filings for major US large-caps, compared to roughly one year on the legacy endpoint.
  • Richer schema: both non-derivative transactions and derivative transactions (stock options, RSUs, warrants), plus the footnotes referenced within each filing.
  • Full SEC transaction code set (15 codes) instead of a binary buy/sell indicator.
  • Reporting owner CIK, relationship flags (director / officer / 10% owner), and post-transaction holdings populated on every row.

API Endpoint

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

Path Parameter

ParameterRequiredDescription
symbolYesUS ticker, e.g. AAPL or AAPL.US. Case-insensitive. The .US suffix is optional. Form 4 is filed by US-listed issuers only

Query Parameters

ParameterRequiredDescription
api_tokenYesYour EODHD API token
page[offset]NoPagination offset, zero-based (default 0)
page[limit]NoPage size, 1 to 100 (default 20)

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

Request Example

URL
cURL
PHP
Python
R
Chat GPT
https://eodhd.com/api/sec-filings/AAPL/form4?api_token=YOUR_TOKEN
curl --location "https://eodhd.com/api/sec-filings/AAPL/form4?api_token=YOUR_TOKEN&fmt=json"
$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();
}
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)
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")
}
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%5Boffset%5D=20&page%5Blimit%5D=20"
  }
}

Filing

Each entry in data 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, etc.). 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
}
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% or greater owner
is_otherbooleanTrue if the insider has another relationship
officer_titlestring or nullOfficer title, e.g. 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, e.g. 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 (acquired) or D (disposed)
shares_amountnumberNumber of shares transacted
price_per_sharenumber or nullUSD price per share. May be null when not applicable, e.g. 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

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"
}
FieldTypeDescription
reporting_owner_cikstringSEC CIK of the insider
reporting_owner_namestringFull name of the insider
security_titlestringDerivative security name, e.g. 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 (acquired) or D (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, e.g. 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

{
  "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, e.g. 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 our SEC Form 4 dataset (non-US issuer, ticker typo, or unknown share class).
422Validation error — 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, KO, and GME have 5 to 11 years of history. Smaller mid-caps, newly added tickers, and foreign private issuers (ADRs) may currently expose less, with backfill continuing on a weekly schedule.
  • Daily refresh. Data is refreshed daily from SEC EDGAR. Filings submitted to SEC 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 — 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.

The Insider Transactions Data API is a part of the Fundamental Data feed. Each request consumes 10 API calls.

URL
cURL
PHP
Python
R
Chat GPT
https://eodhd.com/api/insider-transactions?api_token=YOUR_TOKEN&fmt=json
curl --location "https://eodhd.com/api/insider-transactions?api_token=YOUR_TOKEN&fmt=json"
$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();
}
import requests

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

print(data)
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")
}
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, e.g. 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.

Sign up & Get Data