SEC Ownership API: 13F Holdings, 13D/13G Stakes, Form 144
Coming soon to the StoreWho owns a stock and who is about to sell it, from official SEC filings: what a fund such as Berkshire Hathaway holds (13F, with changes vs the previous quarter), which funds hold a ticker, who filed a 5%+ stake (13D activist, 13G passive), and which insiders filed to sell (Form 144). For investors, analysts and AI agents.
Pricing (pay per event): $0.0018 per row ($1.80 per 1,000), no start fee.
Questions agents ask
- “What did Berkshire Hathaway buy and sell last quarter?”
- “Which funds hold the most Nvidia stock?”
- “Has anyone filed an activist 13D on Peraso?”
- “Which insiders filed to sell more than $1 million of stock this week?”
Example
Input
{"mode": "holdings13f", "filer": "Berkshire Hathaway"}Output
{
"record_type": "holding",
"filer_name": "BERKSHIRE HATHAWAY INC",
"filer_cik": "0001067983",
"period_of_report": "2026-06-30",
"form": "13F-HR",
"filing_date": "2026-08-14",
"issuer_name": "ALPHABET INC",
"title_of_class": "CAP STK CL A",
"cusip": "02079K305",
"ticker": "GOOGL",
"ticker_candidates": [],
"put_call": null,
"shares": 78791167,
"share_type": "SH",
"value_usd": 28157599351,
"portfolio_pct": 9.41,
"previous_period": "2026-03-31",
"previous_shares": 54249798,
"previous_value_usd": 15600071913,
"shares_change": 24541369,
"shares_change_pct": 45.24,
"change": "increased",
"filing_url": "https://www.sec.gov/Archives/edgar/data/1067983/000119312526352200/0001193125-26-352200-index.htm",
"source": "edgar-13f",
"source_url": "https://www.sec.gov/Archives/edgar/data/1067983/000119312526352200/56757.xml"
}What you get
| Field | Type | Meaning |
|---|---|---|
schema_version | string | Output schema version. |
record_type | string | holding = a position in one 13F filer's portfolio; holder = one 13F filer holding the asked stock (SEC Form 13F data set); stake = one Schedule 13D/13G filing; form144 = one Form 144 notice. |
form | string | Form as filed: 13F-HR or 13F-HR/A; 13D, 13D/A, 13G or 13G/A (Schedule); 144 or 144/A. |
filer_name | string | null | holding/holder: the 13F manager. stake: the first reporting person on the filing. |
filer_cik | string | null | SEC CIK (10 digits) of the 13F manager, of the 13D/13G filer, or of the person filing the Form 144. |
period_of_report | string | 13F rows: the quarter end the holdings are reported for (YYYY-MM-DD). |
accession_number | string | SEC accession number of the filing the row comes from. |
filing_date | string | Date the SEC received the filing (YYYY-MM-DD). |
issuer_name | string | null | Company whose securities are held, owned or to be sold, as written in the filing (13F names are often abbreviated). |
issuer_cik | string | null | stake/form144: SEC CIK (10 digits) of the issuer. |
title_of_class | string | null | 13F rows: class of the security as filed, e.g. COM, CL A, CAP STK CL C. |
cusip | string | 13F rows: 9-character CUSIP of the security. |
cusips | array | stake: the issuer CUSIP(s) on the cover page. |
ticker | string | null | Ticker of this security from the SEC's ticker list: the issuer by CIK or name, the share class by CUSIP or the class in title_of_class (GOOG for Alphabet class C). Null when unknown, or when the issuer has several share classes and the class can't be told (see ticker_candidates). |
ticker_candidates | array | When ticker is null because the issuer has several listed share classes: the issuer's tickers, main first (e.g. ["BRK-B", "BRK-A"]). Empty otherwise. Ticker filters match these too. |
put_call | string | null | 13F rows: PUT or CALL for option positions (value = the underlying), null for shares and bonds. |
shares | number | null | 13F rows: shares (or principal amount when share_type is PRN) held at quarter end, summed over the filing's lines; 0 for a closed position. stake: shares beneficially owned by the reporting person with the highest percent. |
share_type | string | null | 13F rows: SH (shares) or PRN (principal amount). |
value_usd | number | null | 13F rows: market value in US dollars at quarter end as reported (filings before 2023-01-03 reported $1,000s and are multiplied by 1,000). |
portfolio_pct | number | null | holding: value as a percentage of the filing's total reported value. |
previous_period | string | null | holding: the previous quarter end the change is measured against. |
previous_shares | number | null | holding: shares at the previous quarter end (0 = not held then, null = no 13F for that quarter). |
previous_value_usd | number | null | holding: value at the previous quarter end, in US dollars. |
shares_change | number | null | holding: shares minus previous_shares. |
shares_change_pct | number | null | holding: shares_change as a percentage of previous_shares (null when not held before). |
change | string | null | holding: new, increased, decreased, unchanged or closed (sold out) vs the previous quarter; null when unknown. |
stake_type | string | null | stake: activist (Schedule 13D: may seek to influence control) or passive (Schedule 13G). |
amendment_no | integer | null | stake: amendment number on the cover page (null for an original filing). |
security_class | string | null | stake/form144: class of securities as filed, e.g. Common Stock. |
percent_of_class | number | null | stake: percent of the class beneficially owned, the highest among the reporting persons (group members usually report the same aggregate). |
reporting_persons | array | stake: every reporting person on the cover pages: name, cik (null if none), percent_of_class, shares, person_type (SEC codes like IA, IN, PN, CO). |
event_date | string | null | stake: date of the event that required the filing (YYYY-MM-DD). |
seller_name | string | null | form144: the person for whose account the securities are to be sold, as filed. |
relationships | array | form144: relationship to the issuer as filed, e.g. Director, Officer, 10% Securityholder. |
shares_to_be_sold | number | null | form144: number of shares (units) to be sold, summed over the notice's lines. |
aggregate_market_value_usd | number | null | form144: aggregate market value of the shares to be sold, in US dollars, as filed. |
shares_outstanding | number | null | form144: shares of the class outstanding, as filed. |
approx_sale_date | string | null | form144: approximate date of sale (YYYY-MM-DD; the earliest if several). |
exchanges | array | form144: exchange(s) where the shares are to be sold. |
broker_names | array | form144: broker(s) or market maker(s) handling the sale. |
plan_adoption_dates | array | form144: adoption dates of the Rule 10b5-1 trading plan, if the sale is under one (YYYY-MM-DD). |
notice_date | string | null | form144: date of the notice (YYYY-MM-DD). |
filing_url | string | EDGAR index page of the filing. |
source | string | edgar-13f (the filing's information table), sec-13f-data-set (SEC Form 13F data set) or edgar-xml (the filing's XML). |
source_url | string | The exact SEC file the row was read from. |
retrieved_at | string | UTC time the row was produced. |
Use with AI agents (MCP)
Add this URL to your MCP client (Claude, Cursor, VS Code, ...) to load the Actor as a tool through the Apify hosted MCP server. It signs you in with OAuth or accepts Authorization: Bearer <APIFY_TOKEN>. It works once the Actor is live on the Apify Store.
https://mcp.apify.com?tools=bosco_labs/sec-ownership
For “What did Berkshire Hathaway buy and sell last quarter?” the agent passes:
{"mode": "holdings13f", "filer": "Berkshire Hathaway"}
small, typed JSON, one row per position, holder or filing, with schema_version, a source_url pointing to the exact SEC file and a filing_url for the filing, so the agent can cite its source. Bad input fails within seconds with a status message that says what to fix and shows a valid input.
Or call the Apify API: POST https://api.apify.com/v2/acts/bosco_labs~sec-ownership/run-sync-get-dataset-items with the input as JSON body. Cost: $0.0018 per row.
Input fields
| Field | Type | Meaning |
|---|---|---|
mode | string | holdings13f = Form 13F: pass filer for a fund manager's holdings (with changes vs the previous quarter), or ticker/cusip for the funds holding a stock. stakes13dg = Schedule 13D/13G filings about ticker, or new 13D filings market-wide. planned144 = Form 144 notices of planned insider sales for ticker, or market-wide. Default holdings13f. |
filer | string | holdings13f only: the fund manager's name or SEC CIK, e.g. "Berkshire Hathaway" or "1067983". A name is matched with EDGAR's company search (the first match that files 13F reports); a CIK is exact. Empty = look up the holders of ticker/cusip instead. |
ticker | string | The company the shares are in, as a current US ticker, e.g. "AAPL". holdings13f: the funds holding it (or, with filer, only that position). stakes13dg / planned144: filings about it. Empty = whole market (stakes13dg, planned144). |
issuerCik | string | Instead of ticker: the company's SEC CIK as digits, e.g. "320193" for Apple. Use for delisted or renamed companies. Empty = use ticker. |
cusip | string | holdings13f only: the 9-character CUSIP of one share class, e.g. "037833100" (Apple common stock). Most precise way to ask which funds hold a security. Empty = CUSIPs found in the company's recent Schedule 13D/13G filings (all its share classes). |
quarter | string | holdings13f only: the quarter of the holdings, as "2026Q2" or the quarter end "2026-06-30". Empty = the newest: the filer's latest 13F, or for holders of a stock the newest quarter in the SEC's Form 13F data sets (13F reports are due 45 days after quarter end). |
stakeForms | array | stakes13dg only: which forms, e.g. ["13D"] for new activist stakes only. Empty = all four for a ticker; 13D and 13D/A for the whole market (activist alerts). |
minValueUsd | integer | Minimum value in US dollars, e.g. 1000000. planned144: the notice's aggregate market value; holdings13f: the position value. Default 0 = no minimum. Not used by stakes13dg. |
dateFrom | string | stakes13dg / planned144: earliest filing date, YYYY-MM-DD, e.g. "2026-10-01". Structured 13D/13G start 2024-12-18. Empty = lookbackDays before today. |
dateTo | string | stakes13dg / planned144: latest filing date, YYYY-MM-DD, e.g. "2026-10-31". Empty = today, including today's filings from the EDGAR live feed. |
lookbackDays | integer | stakes13dg / planned144, used when dateFrom is empty: filings from this many days back until today, e.g. 30. Empty = 365 days for a ticker's 13D/13G, 90 for a ticker's Form 144, 7 for the whole market. |
maxResults | integer | Maximum rows (one charged event each), e.g. 200. Default 50: a fund's largest positions, a stock's largest holders, or the newest filings. |
Sources, licence and limits
How current is 13F data? 13F reports are quarterly and due 45 days after quarter end, so holdings are up to 4.5 months old when they appear. Positions are what the manager reported: long US-listed equities, options and convertibles on the SEC's 13(f) list; no shorts, no non-US holdings, no cash.
Values? As reported, in US dollars at quarter end (reports filed before 2023 used $1,000s and are converted). Amendments are applied: a restatement replaces the original report, a "new holdings" amendment adds to it.
Tickers? 13F filings carry CUSIPs, not tickers, and the SEC publishes no CUSIP-to-ticker list. The company is found by its CIK or, on 13F rows, its name in the SEC's ticker list (renamed or oddly abbreviated names stay null). The share class comes from the CUSIP (Alphabet class C 02079K107 is GOOG, class A 02079K305 is GOOGL; likewise Fox, News Corp, Under Armour, Zillow and the Liberty tracking stocks) or from the class in title_of_class when the ticker names it (BRK-A / BRK-B, LEN / LEN-B, HEI / HEI-A). When a company has several listed classes and the row doesn't say which, ticker is null and ticker_candidates lists the company's tickers; a ticker filter matches those too. cusip is always the exact security.
Which funds hold a ticker: which CUSIP? The ticker's CUSIPs are read from the company's recent Schedule 13D/13G filings, which can cover several share classes; CUSIPs of another class (GOOGL when you ask for GOOG) are left out and named in the status message. Pass cusip for one exact security, or when the company has no recent 13D/13G.
A name matched the wrong fund? Names go through EDGAR's company search; the status message lists the other matches. Pass the CIK as filer to be exact.
Older 13D/13G? Only filings since 2024-12-18, when Schedule 13D/13G became structured XML. For older ones, use our SEC EDGAR Filings Actor for the filing links.
13D vs 13G? A 13D is filed by a holder of more than 5% who may seek to influence the company (activist); a 13G by passive holders and institutions. percent_of_class is the highest among the filing's reporting persons; all of them are in reporting_persons.
Form 144? A notice by an insider or affiliate of a planned sale of restricted or control stock, filed when the order is placed. It is not proof that the sale happened (Form 4 reports that: see our SEC Insider Trading Actor). Not every Form 144 is followed by a sale.
Legal basis? SEC filings are US government public records; see LEGAL.md. This is data, not investment advice.