Ownership · US only
Insider holdings and transactions
- Coverage
- US
- Billing
- 20 cr / thousand calls
Query insiders' initial holdings and transactions for a company. Each row represents one Form 3 initial holding or one Form 4 / Form 5 transaction, including amended filings.
US only, covering ingested filings from the last 5 years. from / to filter the filing date, filing_date, rather than the transaction date; omit the dates to retrieve records within this coverage window.
Quick example
curl -H "X-API-KEY: $DRILLR_API_KEY" \
"https://gateway.drillr.ai/api/v2/insider-trades?ticker=AAPL&from=2026-07-01&to=2026-08-31&transaction_type=sell&is_amendment=false"Query parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| ticker | string | required | A single ticker. |
| from | date | optional | Start of the filing date (filing_date) range in YYYY-MM-DD format, inclusive; set from = to for a single day. |
| to | date | optional | End of the filing date range in YYYY-MM-DD format, inclusive. |
| record_type | stringenum | optional | initial_holding | transaction, comma-separated multi-select. Default: all. |
| form_type | stringenum | optional | 3 | 3/A | 4 | 4/A | 5 | 5/A, comma-separated multi-select. Default: all. |
| transaction_type | stringenum | optional | buy | sell | award | exercise | tax_withholding | other, multiple values allowed, comma-separated. Default: all. |
| is_amendment | bool | optional | true returns amended filings only; false returns original filings only; omit it to return both. Default: all. |
| limit | int | optional | Maximum 500. Default: 50. |
| page | int | optional | Starts at 1. Default: 1. |
Sort order: filing_date desc, accession_number desc; row order within one filing is not guaranteed. Paged with limit and page (pages start at 1); fewer rows than limit means the last page.
Response fields
| Field | Type | Description |
|---|---|---|
| ticker | string | Canonical ticker |
| insider_name | string | Name of the reporting person (uppercase, as in the as-filed document) |
| insider_title | string | Reporting person’s title, as filed; null when not disclosed |
| is_director | bool | Director status as checked on the filed form |
| is_officer | bool | Officer status as checked on the filed form |
| record_type | stringenum | initial_holding (Form 3 initial holding) | transaction (Form 4 or Form 5 transaction) |
| transaction_type | stringenum | Normalized enum: buy (P, open-market or private purchase) / sell (S, open-market or private sale) / award (A, award) / exercise (M, shares acquired on the exercise or conversion of options or derivative securities) / tax_withholding (F, shares disposed of for tax withholding at vesting, a reduction in holdings) / other (G gift, C conversion, D returned to the issuer, J other, and so on) |
| transaction_code | string | Original SEC transaction code; null for an initial-holding row |
| transaction_date | date | Transaction date; null for an initial-holding row |
| security_title | string | Security name (Common Stock / RSU / Option, and so on) |
| ownership_type | stringenum | direct | indirect |
| shares | number | Initial holding quantity or transaction quantity, distinguished by record_type; sales also use non-negative quantities |
| price_per_share | number | Transaction price; null for initial holdings and transactions with no reported price |
| total_value | number | shares × price_per_share; null when price_per_share is null |
| shares_owned_after | number | Initial holding quantity or shares owned after the transaction |
| form_type | stringenum | SEC form name: 3 / 3/A / 4 / 4/A / 5 / 5/A |
| is_amendment | bool | Whether this is an amended filing; amendments remain separate rows and do not overwrite the original filing |
| original_filing_date | date | Original filing date stated on the amendment; null for original filings or when the date is not supplied |
| accession_number | string | SEC accession number (e.g. 0000320193-25-000123) identifying this filing |
| filing_url | string | Deep link to the filing on SEC EDGAR; opens directly |
| filing_date | date | Filing date: the date the filing became public on EDGAR |
Common queries
- Purchases and sales from original filings:
ticker=AAPL&transaction_type=buy,sell&is_amendment=false. Includes open-market and private transactions; excluding amendments does not produce a corrected final transaction list. - Initial holdings:
ticker=AAPL&record_type=initial_holding. Returnsrecord_type=initial_holding, withtransaction_type,transaction_code,transaction_date,price_per_shareandtotal_valueset tonull;sharesis the initial holding quantity. - Amendments:
ticker=AAPL&is_amendment=true.form_typeis3/A,4/Aor5/A;original_filing_dateis returned when the form supplies that date, otherwisenull.
Data notes
- Dates use
YYYY-MM-DD;from/toare inclusive. Setfrom=tofor a single day.filing_dateis the public disclosure date andtransaction_dateis the transaction date; they can differ. - Original and amended filings retain separate
accession_numbervalues and are not automatically replaced or merged. Review corrections before totaling transactions; do not add originals and amendments together.original_filing_dateis not a unique linking key. - Quantities are returned as reported; sales do not use negative quantities. Use
transaction_typeandtransaction_codeto interpret the activity; summing allsharesdoes not give net purchases. - The response example illustrates field structure, not a verified transaction. Its abbreviated filing link is a placeholder; use the actual returned
filing_urlto check the SEC document. The endpoint restates disclosed facts without profiling or assessing the reporting person.
Pagination
- Start with
limit=50&page=1, then requestlimit=50&page=2with the same filters. Stop whendatacontains fewer than 50 rows; exactly 50 rows still requires another request. - New filings may change results while paging.
accession_numberidentifies a filing, not a row; a filing can contain multiple rows, so do not deduplicate by this field alone.
No key yet? Create one under API Keys — it is shown once, so store it where your shell can read it. Connecting an agent over MCP instead? That signs in through the browser and needs no key at all.
Authentication, conventions, rate limits and error shapes are the same for every endpoint — they live on REST API.