SEC 13F Holdings Diff — Quarterly Fund Position Changes Monitor avatar

SEC 13F Holdings Diff — Quarterly Fund Position Changes Monitor

Pricing

from $3.50 / 1,000 position change detecteds

Go to Apify Store
SEC 13F Holdings Diff — Quarterly Fund Position Changes Monitor

SEC 13F Holdings Diff — Quarterly Fund Position Changes Monitor

Quarter-over-quarter position changes for any institutional fund, straight from SEC 13F-HR information tables: new positions, exits, buys and sells with share counts and USD values before and after.

Pricing

from $3.50 / 1,000 position change detecteds

Rating

0.0

(0)

Developer

Daniel Matthee

Daniel Matthee

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

SEC 13F Holdings Diff — Quarterly Fund Position Changes

What changed in a fund's portfolio last quarter, as a clean feed of rows. Point it at any institutional manager — Berkshire Hathaway, Bridgewater, Citadel, Duquesne, a boutique you follow — and it diffs their two most recent Form 13F-HR information tables straight from SEC EDGAR, emitting one row per portfolio action: new position, exited, increased, decreased, with share counts and USD values on both sides and a ticker attached.

No API key. No third-party data vendor. Just EDGAR, parsed properly.

Read this first: 13F is quarterly, and late. US managers file Form 13F within 45 days of quarter end, so a "new position" you see here may already be up to four months old. This is a portfolio-change feed, not a trade tape, and nothing can make 13F timely — the delay is the regulation. Run this on a weekly schedule: it costs almost nothing on the ~51 weeks a fund has nothing new, and fires the moment their filing lands (mid-February, mid-May, mid-August, mid-November).

Example output

One real row, from Berkshire Hathaway's Q2 2026 filing:

{
"cik": "0001067983",
"fundName": "BERKSHIRE HATHAWAY INC",
"accessionNumber": "0001193125-26-352200",
"reportPeriod": "2026-06-30",
"previousAccessionNumber": "0001193125-26-226661",
"previousReportPeriod": "2026-03-31",
"changeType": "increased",
"issuerName": "ALPHABET INC",
"titleOfClass": "CAP STK CL A",
"cusip": "02079K305",
"ticker": "GOOGL",
"sharesBefore": 54249798,
"sharesAfter": 78791167,
"sharesChange": 24541369,
"amountType": "SH",
"valueBefore": 15600071913,
"valueAfter": 28157599351,
"valueChange": 12557527438,
"putCall": null,
"filedAt": "2026-08-14",
"filingUrl": "https://www.sec.gov/Archives/edgar/data/1067983/000119312526352200/0001193125-26-352200-index.htm",
"detectedAt": "2026-08-31T10:59:19Z"
}

Every row names both filings it was derived from, so any number in it can be checked against the source in two clicks.

Fields

FieldMeaning
cikThe manager's SEC CIK, zero-padded to 10 digits
fundNameManager name as EDGAR publishes it
accessionNumber / reportPeriodThe newer filing and the quarter it covers
previousAccessionNumber / previousReportPeriodThe filing it was diffed against (null on an opening snapshot)
changeTypenew-position, exited, increased or decreased
issuerName / titleOfClass / cusipThe security, as the filer reported it
tickerResolved from SEC's public data; null when unresolvable, never guessed
sharesBefore / sharesAfter / sharesChangePosition size on each side (null on the absent side)
amountTypeSH for a share count, PRN for a principal amount
valueBefore / valueAfter / valueChangePosition value in plain USD
putCallPut, Call, or null for the underlying security
filedAt / filingUrlFiling date and EDGAR filing-index page
detectedAtWhen this monitor first saw the change

Input options

InputDefaultWhat it does
ciksCIK numbers of the managers to watch, any zero-padding. The exact, unambiguous way to name a fund.
fundNamesManager names resolved via EDGAR company search. Every match is logged with its CIK and real name, and all matches are processed.
changeTypesall fournew-position, exited, increased, decreased.
minPositionValue0USD floor on the larger of the two values — cuts a fund's long tail.
maxItems1000Cap per run; biggest positions first, the rest carry over to the next run.
resolveTickerstrueAdds tickers from SEC's public data. Off = faster run, all tickers null.
emitInitialSnapshotfalseOnly affects a fund with exactly one 13F ever filed (nothing to diff against).
userAgentplaceholderSet this to your own contact. SEC's fair-access policy requires it.

At least one of ciks / fundNames is required. There is no whole-market default: a 13F diff is per-manager, and thousands of managers file.

Three ways buyers use it

"Tell me what Berkshire bought and sold this quarter, the day it's public." Put a handful of famous CIKs in ciks, schedule it weekly, and pipe the dataset into Slack or a spreadsheet. You get the story before the write-ups do, with the filing URL to cite.

"Track 40 managers and show me only the moves that matter." Set minPositionValue to your threshold and changeTypes to new-position, exited for a conviction feed, or leave all four on for a full delta table. Nothing repeats between runs, so the dataset appends cleanly into a warehouse keyed on accessionNumber + cusip.

"Build a 13F product without paying a data vendor." Every row is derived from the primary source with the traps handled (see below), so you can join it to prices on ticker or to any other EDGAR dataset on accessionNumber / cik without a reconciliation project.

What makes this correct (and why that is not automatic)

These are all real behaviours of real filings, verified live, that a straightforward 13F parser gets wrong:

  • One position is reported on many rows. Filers split a holding across their sub-managers. Berkshire reports its Ally Financial stake on six separate rows; one large quant fund filed 16,127 rows for 7,166 unique CUSIPs. Positions here are aggregated per (cusip, amountType, putCall) before diffing, so you see the whole holding, not a fragment of it.
  • A value change is not a portfolio change. If a fund holds exactly the same share count and the price moved, that is the market, not the manager — and emitting it would bury every real trade. Change types are decided on share counts. Berkshire's Apple stake was flat at 227,917,808 shares across Q1 and Q2 2026 while its reported value rose $8bn: no row. valueBefore/valueAfter are still on every row you do get, so you can compute price effects yourself.
  • The value column is sometimes thousands, sometimes dollars. SEC required whole dollars from 3 January 2023, but filers still report thousands — measured on a real 2026 filing showing 336,300 Alphabet shares at a value of 120,184. The scale is detected per filing, so valueBefore/valueAfter are always plain USD.
  • The holdings document has no fixed filename. Real filings call it infotable.xml, form13fInfoTable.xml, form13f_20260630.xml, 56757.xml or renaissance13Fq22026_holding.xml. It is discovered from the filing directory, not guessed.
  • Puts, calls and the underlying are separate positions, and PRN principal amounts never get mixed into SH share counts.
  • Same-quarter double filings are collapsed before the diff, so a fund is never diffed against itself and handed you an all-zero quarter.

Update frequency & how the monitor behaves

  • Run it weekly. On a week with no new filing, the run does one small JSON fetch per fund, emits nothing, and exits successfully — a zero-row run is a successful run, and the normal state of things outside filing season.
  • State is the last-diffed accession number per fund, so adding a fund to the watch-list never re-emits another fund's history, and a fund that fails one run retries on the next.
  • The first run on a fund with two or more filings gives you a real quarter-over-quarter diff immediately. A fund with exactly one filing ever has nothing to diff — off by default, opt in with emitInitialSnapshot.
  • maxItems overflow carries over losslessly: a 1,314-change three-fund backfill split 1,000 / 314 across two runs with zero duplicates.

Honest limitations

  • Quarterly and up to 45 days late. Restated above because it matters.
  • 13F covers only 13(f)-listed long positions. No short positions, no cash, no bonds, no non-US-listed holdings, no derivatives beyond the listed puts and calls. A 13F is not a fund's whole book and never was.
  • Amendments (13F-HR/A) are ignored by default, so a restated quarter does not arrive looking like fresh trading.
  • ticker is best-effort. It comes from SEC's own public data at roughly 98% coverage on listed US equities; unlisted issuers, foreign lines and obscure classes come back null. It is never inferred from the issuer name.
  • Numbers are the filer's own. Share counts and values are reported as filed, aggregated but never recomputed or price-adjusted. If a manager filed a mistake, you get the mistake — and the filingUrl to prove it.
  • Fund names can be ambiguous. A name matching several 13F filers is logged with every candidate CIK and real name, and all of them are processed, because fund families genuinely file under more than one CIK. Use ciks when you need certainty.

Reliability

  • Talks only to data.sec.gov and www.sec.gov. No proxies, no third-party data source, no login.
  • Identifies itself to SEC with the userAgent you set, paces requests well under SEC's limit, and backs off on rate limits. A rejected User-Agent fails the run with a message telling you exactly what to set.
  • A malformed row logs a clear warning naming the missing field and is skipped; the rest of the filing still parses. A filing that parses to zero rows fails that fund rather than reporting the whole portfolio as sold — the run still completes for your other funds.
  • If every watched fund fails, the run fails rather than reporting a quiet quarter.
  • Schema checked against live filings before each release.

Pricing (pay per event)

EventPrice (USD)Charged
Actor start$0.005Flat, per run
Position change detected$0.005 / $0.003 / $0.002Per emitted change — first 500 in a run, then 501-2000, then beyond
Fund checked$0.002Per watched fund whose latest filing was checked, emitted or not

A 20-fund weekly schedule costs about $0.045 per quiet run — roughly $2.30 a year of quiet weeks — and pays out four real quarterly diffs. The volume tiering exists so that one quant fund's 1,200-change quarter does not cost more than your subscription.

Changelog

0.2maxItems is now shared fairly between the funds in a run, so a small cap no longer fills up with the first fund you listed and leaves the others silent until next run. Anything over the cap still carries over and is emitted next run, once, in value order.

0.1 — First release. Per-fund quarter-over-quarter diff of 13F-HR information tables; four change types on share-count semantics; multi-row position aggregation; per-filing value-scale detection; keyless CUSIP→ticker resolution; fund lookup by CIK or name; changeTypes / minPositionValue / maxItems filters; per-CIK accession state for weekly monitoring.