SEC 13F Holdings Changes API – Hedge Fund Buys & Sells
Pricing
from $2.10 / 1,000 position changes
SEC 13F Holdings Changes API – Hedge Fund Buys & Sells
Compare any manager's two latest SEC 13F filings: every position change (NEW, ADDED, TRIMMED, SOLD_OUT) with shares, values & portfolio weight. Follow smart-money moves. Free sample (15 rows, real output): https://drive.google.com/uc?export=download&id=1VagFPzqpEfPshTkamUot8N4DWvKFkDcf
SEC 13F Hedge Fund Holdings Scraper - Quarterly Changes
See what a hedge fund or other institutional manager bought, added to, trimmed and sold between its two latest SEC 13F filings. Give it one or more fund CIKs and get one row per position with shares, values, portfolio weight and a clear change label: NEW, ADDED, TRIMMED, SOLD_OUT or UNCHANGED.
Found a problem or need a field? Open an issue on the Issues tab; we respond quickly.
Free sample
Download a free sample (15 rows, real actor output, CSV): https://drive.google.com/uc?export=download&id=1VagFPzqpEfPshTkamUot8N4DWvKFkDcf — check the columns and data quality before you run anything.
What it does
Institutional investment managers with more than $100 million in US equities file Form 13F-HR with the SEC each quarter. The filing's information table lists every reported position. Raw tables are awkward to compare. One stock is often split across many rows for different sub-managers, file names change from filing to filing, and amendments can either restate a filing or add positions that were previously confidential.
For each fund, this Actor:
- Reads the fund's filing history from SEC EDGAR and picks the two newest quarters with a 13F-HR. 13F-NT notice filings are skipped.
- Finds the information-table XML through the filing index. It is not always named
infotable.xml. - Applies amendments. A
13F-HR/Arestatement replaces the original. A "NEW HOLDINGS" amendment, which discloses positions that were previously confidential, is merged in. - Adds up shares and value per
cusip+putCallacross all sub-managers. - Converts values to whole US dollars. Filings made before January 3, 2023 reported value in thousands and are multiplied by 1,000.
- Returns every position held in either quarter, with its quarter-over-quarter change.
Who it's for
- Investors and analysts tracking what well-known funds bought and sold last quarter.
- Newsletter and alert builders who need clean, structured 13F change data.
- Investor relations teams watching institutional ownership changes in their own stock.
- Researchers building datasets of institutional positioning.
Input
fundCiks(array of strings, required): SEC CIKs of 13F filers. Leading zeros are optional (0001067983or1067983). Up to 50 per run. Default:["0001067983"](Berkshire Hathaway).changeTypes(array): any ofNEW,ADDED,TRIMMED,SOLD_OUT,UNCHANGED. Leave empty to get everything exceptUNCHANGED. Default:[].minPositionValueUsd(integer): keep positions worth at least this much in either quarter. ForSOLD_OUTrows, the prior-quarter value is used. Default:0.includeOptions(boolean): include put and call option positions. Default:true.secUserAgent(string, secret): optional SEC fair-access User-Agent such asYour Company admin@yourcompany.com. Leave blank to use the built-in one. It is never logged.maxItems(integer): maximum rows to return. Default:200.
Example input JSON
{"fundCiks": ["0001067983"],"changeTypes": [],"minPositionValueUsd": 0,"includeOptions": true,"maxItems": 200}
Example run options (default max charge $50)
When you start a run from the Apify API or Console, set a default maximum charge of $50 in the run options:
{"maxTotalChargeUsd": 50}
The Actor stops cleanly when the limit is reached and keeps the rows it already returned. A run that hit the charge limit (or had any other problem) ends with a PARTIAL: status message naming the problem — it never reports a partial result as complete.
Canary (health check)
{"fundCiks": ["0001067983"],"maxItems": 5}
Expected healthy result: the run succeeds in a few seconds, returns 5 rows for Berkshire Hathaway's two latest quarters, and the status message reads Complete: 5 rows (reached maxItems=5). A PARTIAL: status on this input means something upstream needs attention.
Output
Rows are sorted newest first by filingDate, then by valueUsd (largest first). Each fund + quarter + CUSIP + put/call appears once.
| Field | Type | Description |
|---|---|---|
fundCik | string | 10-digit SEC CIK of the filer. |
fundName | string | null | Filer name from SEC EDGAR. |
periodOfReport | string | Quarter-end date of the newest 13F (YYYY-MM-DD). |
priorPeriodOfReport | string | null | Quarter-end date compared against. Null if the fund has only one 13F. |
filingDate | string | Filing date of the filing that reported this position (YYYY-MM-DD). For SOLD_OUT rows it is the current quarter's filing date — the filing that shows the position is gone. |
accessionNumber | string | SEC accession number of that filing (for SOLD_OUT rows, the current quarter's filing). |
issuerName | string | null | Issuer name as reported. |
titleOfClass | string | null | Class of security, e.g. COM, CL A. |
cusip | string | 9-character CUSIP. |
putCall | string | null | PUT or CALL for options; null for shares or principal amounts. |
shares | number | Shares (or principal amount) this quarter. |
priorShares | number | Shares (or principal amount) last quarter. |
shareChange | number | shares - priorShares. |
shareChangePct | number | null | Percent change in shares. Null for NEW. |
changeType | string | NEW, ADDED, TRIMMED, SOLD_OUT or UNCHANGED. |
valueUsd | number | Reported market value this quarter, in US dollars. |
priorValueUsd | number | Reported market value last quarter, in US dollars. |
portfolioWeightPct | number | null | valueUsd as a percent of the fund's total reported 13F value this quarter. |
infoTableUrl | string | Link to the information-table XML on sec.gov. |
Sample output row (synthetic example)
{"fundCik": "0009999999","fundName": "Example Capital Management LP","periodOfReport": "2026-06-30","priorPeriodOfReport": "2026-03-31","filingDate": "2026-08-14","accessionNumber": "0009999999-26-000003","issuerName": "EXAMPLE INDUSTRIES INC","titleOfClass": "COM","cusip": "000000000","putCall": null,"shares": 1250000,"priorShares": 1000000,"shareChange": 250000,"shareChangePct": 25.0,"changeType": "ADDED","valueUsd": 62500000,"priorValueUsd": 45000000,"portfolioWeightPct": 4.1667,"infoTableUrl": "https://www.sec.gov/Archives/edgar/data/9999999/000999999926000003/infotable.xml"}
How pricing works
Pay per result. You only pay for rows returned. The Actor respects your run's maximum charge (recommended default "maxTotalChargeUsd": 50) and stops cleanly when it is reached.
Data source and terms
- Official source: SEC EDGAR submissions API (
data.sec.gov/submissions) and filing archives (sec.gov/Archives). See SEC: Accessing EDGAR Data and the SEC Form 13F FAQ. - Fair access: requests are limited to 6 per second with a descriptive User-Agent, below the SEC's 10-per-second limit.
- Update frequency: managers file 13F-HR up to 45 days after each quarter ends (mid-February, mid-May, mid-August and mid-November). Holdings can therefore be up to 45 days old when filed, plus however long since the filing.
- Not investment advice. This data is for information and research only.
- This Actor is independent and is not affiliated with or endorsed by the U.S. Securities and Exchange Commission (SEC).
- Output contains company and fund data only. No personal contact information is collected.
Limits and FAQ
- Why are different funds on different quarters? Each fund is compared on its own two newest 13F quarters. A fund that hasn't filed the latest quarter yet shows the quarter before.
- What counts as a change? It is based on share count only. A position with the same shares but a different value (price movement) is
UNCHANGED. - Why can options make
portfolioWeightPctlook large? 13F reports options at the value of the underlying shares, not the premium paid, and those values are included in the fund's total. - 13F gaps. 13F covers long positions in "Section 13(f) securities" only. It excludes short positions, most non-US holdings and cash. Positions under confidential treatment appear only once a NEW HOLDINGS amendment is filed.
- Pre-2023 values. The SEC switched value reporting from thousands to whole dollars for filings made on or after January 3, 2023. The Actor converts by filing date, so a Q4 2022 report filed in February 2023 is already in dollars and is not multiplied.
- Only one 13F on file? Every position is marked
NEWandpriorPeriodOfReportis null. - Very old filings (before mid-2013) have no XML information table and can't be parsed.
- How do I find a CIK? Search the manager on EDGAR company search. The CIK is shown next to the name.
Troubleshooting
- The run failed with "no matching 13F positions". Your filters excluded everything. Add
UNCHANGEDtochangeTypes, lowerminPositionValueUsd, turnincludeOptionsback on, or add morefundCiks. - A fund CIK was skipped / the status says
PARTIAL:. One or more requested funds had a problem — for example the CIK is not a 13F filer (operating companies like Apple do not file 13F-HR), EDGAR returned an error, or a filing's amendment type or information table could not be verified. ThePARTIAL:status message names the fund and the exact problem, and the rows from the healthy funds are still returned. The Actor never guesses an amendment type or invents missing table data, so an unverifiable filing is reported, not silently skipped. - The run stopped at the max charge limit. Raise
maxTotalChargeUsdin the run options, or narrow the run (fewer funds, higherminPositionValueUsd, smallermaxItems). Rows already returned are kept. - A value looks 1,000× too large (or too small) for an old quarter. Filings made before January 3, 2023 reported values in thousands of dollars; the Actor converts by filing date. If a specific filing still looks wrong, open an issue with the accession number.
- A position you expected is missing. 13F excludes short positions, most non-US holdings and cash, and positions under confidential treatment appear only after a NEW HOLDINGS amendment. Also check that the fund has actually filed for that quarter — filings can arrive up to 45 days after quarter end.
- SEC EDGAR is slow or returns errors. The Actor retries with backoff and respects the SEC's fair-access limit (6 requests/second, under the 10/second ceiling). If EDGAR is down, rerun later; a run affected by an EDGAR outage ends
PARTIAL:or fails with the failing fund named, never with silently incomplete data.
Changelog
-
v0.2 (2026-10-27): docs: free-sample section + store refresh; no code changes.
-
v0.1 (2026-10-23): Initial release. Two-quarter comparison, restatement and NEW HOLDINGS amendment handling, sub-manager aggregation, value-unit conversion and max-charge stop.