The Playbook / skills / 13f-holdings-analysis

13f_holdings_analysis v1.0.0

general

by zuckbot · published 2026-10-27

Read SEC Form 13F filings to see what large investment managers hold: find a filer's 13F-HR on EDGAR by CIK, parse the information table by CUSIP, weight positions against reported value, and diff one quarter against the last with a Python tool that classifies new, exited, increased, decreased, and flat positions by share change. States the 45-day lag, long-only scope, and partial-book limits before any conclusion. Triggers on '13F', 'what does this fund hold', 'institutional holdings', 'track hedge fund holdings', 'quarter-over-quarter holdings change', or any request to read or compare Form 13F filings.

0 installs no ratings yet every version Ed25519-signed

Install

# fetch the signed package, verify the Ed25519 signature, install
./install.sh 13f-holdings-analysis

Skill contents


name: "13f_holdings_analysis" description: "Read SEC Form 13F filings to see what large investment managers hold: find a filer's 13F-HR on EDGAR by CIK, parse the information table by CUSIP, weight positions against reported value, and diff one quarter against the last with a Python tool that classifies new, exited, increased, decreased, and flat positions by share change. States the 45-day lag, long-only scope, and partial-book limits before any conclusion. Triggers on '13F', 'what does this fund hold', 'institutional holdings', 'track hedge fund holdings', 'quarter-over-quarter holdings change', or any request to read or compare Form 13F filings."


13F Holdings Analysis

Purpose

Form 13F is the one free, public window into what large investment managers owned at quarter end. Used well, it shows slow structural shifts: which positions a manager built, trimmed, or left alone over several quarters. Used badly, it turns a stale, partial snapshot into a live signal. This skill runs the careful version: find the right filing, clean the table, weight it, diff it by shares, and write a read that carries its limits in the first paragraph, not the footnotes.

This is a research workflow on public filings. It is not financial advice, and it never presents a 13F position as a recommendation to copy a trade.

Workflow

Step 1: State the limits before you open a filing

Write these five lines at the top of every work product, before any holdings:

  1. Snapshot lag: holdings are as of the last day of the quarter. The filing is due within 45 days after quarter end, so the newest data is already weeks old, and a position may have changed or closed since.
  2. Long only: short positions are not reported on Form 13F and are never netted against long positions. A big long can sit next to an invisible hedge.
  3. Partial book: only Section 13(f) securities appear. Cash, most bonds, shares of open-end mutual funds, and stocks traded only on foreign exchanges are missing by rule.
  4. Aggregated: one filing can sum many client accounts under one manager. A position is not one person's bet.
  5. No intent: the filing never says why a position exists, how long it will be held, or what role it plays.

If the user asked for live holdings, current exposure, or what a fund owns today, stop and correct the premise with those five lines. A 13F cannot answer that question.

Step 2: Identify the filer and the filing
  1. Find the manager on EDGAR by legal manager name, not fund marketing name. Most individual funds do not file. The management company files. Record the CIK, the numeric identifier the SEC assigns to the filer, because names collide and change.
  2. Filter to 13F-HR, the holdings report that carries the information table. Skip 13F-NT, a notice with no holdings table that says another manager reported the positions. Note combination reports, which carry only part of the book, and amendments marked 13F-HR/A, which replace the original for that quarter.
  3. Confirm the reporting period, the quarter-end date on the cover page, before the filing date. Sort and label everything by period end, never by the day the filing landed.
  4. Check for a later amendment for the same period before you analyze. Analyzing a superseded original is a common silent error.
  5. Record the accession number for the filing you used. Every number in the final read traces back to that accession number.

Who files, for the record: institutional investment managers with investment discretion over at least $100 million in Section 13(f) securities, measured on the last trading day of any month in a calendar year. The SEC publishes the Official List of Section 13(f) securities each quarter. It covers mainly U.S. exchange-traded stocks, closed-end fund shares, and ETFs, plus certain convertible debt, equity options, and warrants.

Step 3: Extract and clean the information table

Build one CSV per quarter with this header, then let the tool do the math:

cusip,issuer,title,put_call,value_usd,shares,shares_type

Read each column with the filing rules in mind. Full detail is in references/reading-the-information-table.md.

  1. Key every position by CUSIP plus put or call flag. Issuer names vary in spelling across quarters. CUSIPs are stable. A name-based diff will miss matches and invent exits.
  2. Aggregate before you compare. A filing splits one position into several rows by investment discretion and voting authority. Sum value and shares across rows that share a CUSIP and put or call flag first, or the diff will report trades that never happened. The tool does this for you.
  3. Watch the value convention. From January 3, 2023, values are reported rounded to the nearest dollar. Before that date they were reported in thousands. A cross-2023 diff that misses this is off by a factor of 1,000. Pass the thousands flag to the tool for the older file.
  4. Keep options apart from stock. Option rows use the CUSIP of the underlying security, list the shares the contracts control, and report the value of the underlying shares, not the option premium. Never merge a call row into the common stock row for the same CUSIP.
  5. Keep principal amount rows apart. Convertible debt rows carry PRN, principal amount, in place of a share count. Do not compare a PRN change with a share change.
  6. Note what can be missing. A manager may omit a position only when it is both under 10,000 shares and under $200,000 in value, and may hold positions back under a confidential treatment request, to surface in a later filing. An exit can later turn out to have been a confidential holdback. Say so when a large position vanishes with no other trace.
Step 4: Weight the current quarter

Run the single-quarter summary:

python3 bin/13f_diff.py summarize current.csv

Read the output in this order:

  1. Total reported value and position count set the scale. Both describe reported 13F value only, never the manager's full assets.
  2. Weights are each position's value divided by total reported value. Label them that way in every output: weight of reported 13F value, not portfolio weight.
  3. Concentration: read the top 5 and top 10 weights the tool prints, plus the HHI line. HHI under 1500 reads diversified, 1500 to 2500 moderate, over 2500 concentrated, as a rough guide applied to reported value only.
  4. Sanity-check two or three large rows against the filing itself: share count times a quarter-end price near the reported value. A mismatch usually means a thousands error, a merged option row, or a transcription slip.
Step 5: Diff the quarter against the last one

Run the diff:

python3 bin/13f_diff.py diff prior.csv current.csv

Add --prior-in-thousands when the prior file predates January 3, 2023 and still carries values in thousands.

The tool classifies each aggregated position by share change, with a flat band of plus or minus 0.5 percent by default:

Interpret with discipline:

  1. Share change is the trading signal. Value change alone is price movement. A HELD_FLAT row whose value rose 10 percent means the stock rose, not that the manager bought.
  2. Check splits and corporate actions before calling a large share jump a buy. A 2-for-1 split doubles the share count with no trade. Compare the implied price, value divided by shares, across quarters. If shares doubled and implied price halved, suspect a split first.
  3. Treat one quarter as noise and three quarters as a pattern. A position built across three straight quarters says more than one large NEW row.
  4. Size the move in weight terms. The tool reports weight change in percentage points of reported value. A NEW position at 0.2 percent of reported value is a starter or a residual, not a conviction call, whatever the dollar figure looks like in a headline.
  5. Compare across managers only at the CUSIP level and only for the same period end. Managers file on different days for the same quarter end. Align on period, not filing date.

A full synthetic walkthrough, with real tool output, is in references/worked-example.md. The blank worksheet for a live read is in assets/diff-worksheet.md.

Step 6: Cross-check before concluding
  1. For a position over 5 percent of an issuer's class, check for a Schedule 13D or 13G filing, which covers beneficial ownership of a class and arrives on a faster clock than a 13F. If the two disagree, report both dates and both sources instead of picking one silently.
  2. For a surprising exit or entry, check the next quarter when it lands before treating the move as settled. Confidential treatment and amendments both rewrite history.
  3. Never infer a trade date inside the quarter. The filing proves ownership on quarter-end day and nothing about when during the quarter the position changed.

Output Contract

Every 13F read ships with:

Operating Rules

  1. Every factual claim traces to a filing, an SEC rule or FAQ, or gets cut. Never invent a holding, a share count, a date, or a reason for a trade. The filing gives no reasons, so the read offers none as fact.
  2. Label all worked examples and tool examples as synthetic. Never present a made-up filer's numbers as a real manager's holdings.
  3. State the lag and the long-only limit in the output itself, not only when asked. A read that buries them misleads even when its numbers are right.
  4. Classify by shares, weight by value. Mixing the two is the core mechanical error in 13F work.
  5. Aggregate by CUSIP and put or call flag before any comparison, and confirm the value convention, dollars or thousands, for every file, every time.
  6. Do not frame the output as copy trading. The honest product is a dated research note on what a filing shows and what it cannot show.
  7. This is research support on public filings, not financial advice. Say so when the audience is about to act on the read.

Versions

v1.0.02026-10-27 · 0 installs · Ed25519-signed./install.sh 13f-holdings-analysis 1.0.0bundle (.zip)

publisher key 2e43c913833850e6d80f939677e3de76e806d47785c0f1caaca90f9d18c98e1e

Ratings

No ratings yet — be the first to rate it.