How to Check if a Fund Still Owns a Stock
Does a fund still own a stock? A 13F only proves what it held at a quarter end, filed up to 45 days later. Here is the lookup, and how stale it gets.
Checking whether a fund still owns a stock has one honest answer, and it is a dated one: you can find what the manager held on a specific past date, and that date sits at least 45 days behind today. Institutional managers running more than $100 million in US-listed equities file Form 13F-HR, a quarterly list of their long positions, within 45 days of the quarter the list describes. No filing shows what a manager holds right now, and the 13F rules never asked for one.
How to check if a fund still owns a stock
The lookup is five steps, and the last one matters as much as the first.
- Start with the manager's CIK. The Central Index Key is the identifier the SEC assigns to every filer, and it is the only dependable handle on a manager. Fund brand names get reused across dozens of legal entities, and the entity that actually files is often a holding company nobody markets under.
- Pull that CIK's most recent 13F-HR. Three form types travel together: 13F-HR is a holdings report, 13F-HR/A amends one already filed, and 13F-NT is a notice saying the positions appear on another manager's report instead.
- Open the information table inside the filing. It runs one line per reported position, and it is the entire substance of the form.
- Match the stock on its CUSIP, the nine-character security identifier, rather than on the issuer name. Names are spelled a dozen ways across filers.
- Read the period and the filing date as two separate facts. The period is the "as of" date for every number in the table. The filing date is only the day the table became public.
Below is that lookup run on a single position across five years. Berkshire Hathaway Inc files under CIK 1067983, and its Apple line carries CUSIP 037833100. Each row is one quarter's reported share count from that filer's own 13F-HR, beside the date the filing arrived.
| date | quarter | shares_millions | reported_on |
|---|---|---|---|
| 2021-03-31 | Mar 2021 | 887.1 | May 17, 2021 |
| 2021-06-30 | Jun 2021 | 887.1 | Aug 16, 2021 |
| 2021-09-30 | Sep 2021 | 887.1 | Nov 15, 2021 |
| 2021-12-31 | Dec 2021 | 887.1 | Feb 14, 2022 |
| 2022-03-31 | Mar 2022 | 890.9 | May 16, 2022 |
| 2022-06-30 | Jun 2022 | 894.8 | Aug 15, 2022 |
| 2022-09-30 | Sep 2022 | 894.8 | Nov 14, 2022 |
| 2022-12-31 | Dec 2022 | 895.1 | Feb 14, 2023 |
| 2023-03-31 | Mar 2023 | 915.6 | May 15, 2023 |
| 2023-06-30 | Jun 2023 | 1831.1 | Aug 14, 2023 |
| 2023-09-30 | Sep 2023 | 1831.1 | Nov 14, 2023 |
| 2023-12-31 | Dec 2023 | 1811.1 | Feb 14, 2024 |
| 2024-03-31 | Mar 2024 | 1578.7 | May 15, 2024 |
| 2024-06-30 | Jun 2024 | 800 | Aug 14, 2024 |
| 2024-09-30 | Sep 2024 | 600 | Nov 14, 2024 |
| 2024-12-31 | Dec 2024 | 600 | Feb 14, 2025 |
| 2025-03-31 | Mar 2025 | 600 | May 15, 2025 |
| 2025-06-30 | Jun 2025 | 560 | Aug 14, 2025 |
| 2025-09-30 | Sep 2025 | 476.4 | Nov 14, 2025 |
| 2025-12-31 | Dec 2025 | 455.8 | Feb 17, 2026 |
The exact SQL behind every number
SELECT
period_end AS date,
formatDateTime(period_end, '%b %Y') AS quarter,
round(argMax(acc_shares, (filed, acc)) / 1000000, 1) AS shares_millions,
formatDateTime(max(filed), '%b %e, %Y') AS reported_on
FROM
(
SELECT
toDate(period) AS period_end,
accession_number AS acc,
max(toDate(filing_date)) AS filed,
sum(toFloat64(shares_or_principal_amount)) AS acc_shares
FROM global_markets.stocks_13f_filings
WHERE form_type = '13F-HR'
AND cusip IN ('037833100', '37833100')
AND filer_cik IN ('1067983', '0001067983')
AND toDate(period) >= '2021-01-01'
GROUP BY period_end, acc
)
GROUP BY period_end
ORDER BY period_endThe earliest quarter in view, Mar 2021, carries 887.1 million shares. The most recent line, for Jun 2026, carries 227.9 million, and it reached the public file on Aug 14, 2026. The series ends well below where it begins, and across 22 quarters every step in it became visible only after the quarter in which it happened. Anyone checking this position inside the gap between a quarter end and a filing date was reading a share count the manager had already moved past.
How to read a line in the 13F information table
Every line carries the same fields, and each one changes what the line means.
- Name of issuer and title of class: the company, and which security (common stock, or a class of notes).
- CUSIP: the identifier to match on.
- Value: market value of the position at the quarter end. Current filings state it in whole dollars. Older ones state it in thousands, which is the most common thousandfold error in 13F work.
- Shares or principal amount, with an SH or PRN flag: a share count for equity, a face amount for debt.
- Put or call: blank for stock. A line flagged call is an option position, not ownership of shares.
- Investment discretion and other managers: who decides, and which affiliated filer shares the position.
- Voting authority, split into sole, shared and none: how many shares the manager can actually vote.
That field list doubles as a map of what the form cannot tell you. The panel below takes the entire file for the most recent quarter whose deadline has passed and sorts every reported line by type.
| position_type | lines_reported | pct_of_lines |
|---|---|---|
| Shares | 3.31 million | 96.1 |
| Call option | 63.01 thousand | 1.83 |
| Put option | 56.64 thousand | 1.64 |
| Principal amount of debt | 14.51 thousand | 0.42 |
| Other or unlabelled | 1.00 | 0 |
The exact SQL behind every number
SELECT
position_type,
formatReadableQuantity(lines_count) AS lines_reported,
round(100 * lines_count / sum(lines_count) OVER (), 2) AS pct_of_lines
FROM
(
SELECT
multiIf(
upper(ifNull(toString(put_call), '')) LIKE 'P%', 'Put option',
upper(ifNull(toString(put_call), '')) LIKE 'C%', 'Call option',
upper(ifNull(toString(shares_or_principal_type), '')) = 'PRN', 'Principal amount of debt',
upper(ifNull(toString(shares_or_principal_type), '')) = 'SH', 'Shares',
'Other or unlabelled') AS position_type,
count() AS lines_count
FROM global_markets.stocks_13f_filings
WHERE form_type = '13F-HR'
AND toDate(period) =
(
SELECT max(period_end)
FROM
(
SELECT toDate(period) AS period_end
FROM global_markets.stocks_13f_filings
WHERE form_type = '13F-HR'
AND toDate(period) <= today() - 46
GROUP BY period_end
HAVING countDistinct(accession_number) >= 100
)
)
GROUP BY position_type
)
ORDER BY pct_of_lines DESCShares lines account for 96.1% of everything reported that quarter, across 3.31 million individual lines. The smallest of the 5 categories, Other or unlabelled, holds 0% of them. What appears in none of those categories is the interesting part: short positions have no field on the form, and neither do most bonds and bank debt, physical commodities, cash, currencies, or foreign listings that fall outside section 13(f). A manager can be short a stock, or hold the exposure through a swap, with nothing in the 13F to show it.
What a missing position line does and does not prove
A name present in last quarter's table and absent from this one is evidence of a change, not proof of a sale. Several ordinary mechanics produce the same empty space.
- The manager sold, in whole or in part. This is the common case.
- The position fell under the de minimis line. Holdings of fewer than 10,000 shares worth less than $200,000 can be left out.
- The position moved to an affiliated filer, and now sits in that filer's table under the other-managers field, or behind a 13F-NT notice.
- The manager received confidential treatment for the position, which keeps the line out of the public table for a period, after which it lands in an amendment.
- The filer dropped below the $100 million threshold and stopped filing at all.
- The exposure survived in a form the table does not carry, such as a swap.
The reverse case deserves the same care. A line that is present proves the position existed at the quarter end, and says nothing about the days since.
How late is a 13F, exactly?
Rule 13f-1 sets the deadline at 45 days after the end of the calendar quarter: February 14, May 15, August 14 and November 14 in a normal year, rolling to the next business day when one lands on a weekend or holiday. Managers may file earlier. The panel measures what they do.
| date | quarter_label | filings_count | median_lag_days | filed_by_deadline_pct |
|---|---|---|---|---|
| 2021-03-31 | Mar 2021 | 5987 | 42 | 74.3 |
| 2021-06-30 | Jun 2021 | 6001 | 41 | 74.8 |
| 2021-09-30 | Sep 2021 | 5993 | 41 | 70.1 |
| 2021-12-31 | Dec 2021 | 6838 | 41 | 90.7 |
| 2022-03-31 | Mar 2022 | 6821 | 41 | 72.5 |
| 2022-06-30 | Jun 2022 | 6810 | 40 | 73.3 |
| 2022-09-30 | Sep 2022 | 6797 | 40 | 94.8 |
| 2022-12-31 | Dec 2022 | 7045 | 41 | 93.8 |
| 2023-03-31 | Mar 2023 | 6964 | 40 | 95.3 |
| 2023-06-30 | Jun 2023 | 7012 | 39 | 94.9 |
| 2023-09-30 | Sep 2023 | 7040 | 39 | 94.9 |
| 2023-12-31 | Dec 2023 | 7423 | 40 | 93.6 |
| 2024-03-31 | Mar 2024 | 7423 | 39 | 95.5 |
| 2024-06-30 | Jun 2024 | 7443 | 39 | 94.9 |
| 2024-09-30 | Sep 2024 | 7488 | 38 | 95.4 |
| 2024-12-31 | Dec 2024 | 8195 | 41 | 94.4 |
| 2025-03-31 | Mar 2025 | 8165 | 38 | 95.9 |
| 2025-06-30 | Jun 2025 | 8203 | 38 | 95.5 |
| 2025-09-30 | Sep 2025 | 8208 | 38 | 95.2 |
| 2025-12-31 | Dec 2025 | 8928 | 41 | 76.5 |
The exact SQL behind every number
SELECT
period_end AS date,
formatDateTime(period_end, '%b %Y') AS quarter_label,
count() AS filings_count,
toUInt16(round(quantileDeterministic(0.5)(toFloat64(lag_days), cityHash64(accession_number)), 0)) AS median_lag_days,
round(100 * countIf(lag_days <= 45) / count(), 1) AS filed_by_deadline_pct
FROM
(
SELECT
accession_number,
toDate(period) AS period_end,
dateDiff('day', toDate(period), max(toDate(filing_date))) AS lag_days
FROM global_markets.stocks_13f_filings
WHERE form_type = '13F-HR'
AND toDate(period) >= '2021-01-01'
AND toDate(period) <= today() - 46
GROUP BY accession_number, period_end
HAVING lag_days >= 0 AND lag_days <= 400
)
GROUP BY period_end
HAVING filings_count >= 100
ORDER BY period_endFor Jun 2026, the most recent quarter whose deadline has passed, the median 13F-HR arrived 37 days after the quarter end, across 8910 separate reports. 97.6% of them were in by day 45. Both lines sit almost flat across the 22 quarters charted, so the lag you measure once is a fair guide to the next one.
Amendments sit outside that window entirely. A 13F-HR/A can restate a holding months later, which changes what the public record says about a quarter long finished. A position you confirmed in August can acquire a different share count in November without anyone announcing it.
How stale is a 13F conclusion today?
The age of the freshest available snapshot is not a constant. It grows by a day every day, then drops by about a quarter's length each time a deadline passes. The panel plots that for the past six months, using the quarter ends actually present in the filing record.
| date | days_of_staleness |
|---|---|
| 2026-04-19 | 109 |
| 2026-04-21 | 111 |
| 2026-04-23 | 113 |
| 2026-04-25 | 115 |
| 2026-04-27 | 117 |
| 2026-04-29 | 119 |
| 2026-05-01 | 121 |
| 2026-05-03 | 123 |
| 2026-05-05 | 125 |
| 2026-05-07 | 127 |
| 2026-05-09 | 129 |
| 2026-05-11 | 131 |
| 2026-05-13 | 133 |
| 2026-05-15 | 45 |
| 2026-05-17 | 47 |
| 2026-05-19 | 49 |
| 2026-05-21 | 51 |
| 2026-05-23 | 53 |
| 2026-05-25 | 55 |
| 2026-05-27 | 57 |
The exact SQL behind every number
SELECT
cal.day AS date,
toUInt16(dateDiff('day', max(p.period_end), cal.day)) AS days_of_staleness
FROM
(
SELECT today() - 180 + 2 * arrayJoin(range(91)) AS day
) AS cal
CROSS JOIN
(
SELECT DISTINCT toDate(period) AS period_end
FROM global_markets.stocks_13f_filings
WHERE form_type = '13F-HR'
AND toDate(period) >= '2015-01-01'
AND toDate(period) <= today()
) AS p
WHERE addDays(p.period_end, 45) <= cal.day
GROUP BY cal.day
ORDER BY cal.dayToday, the newest quarter whose deadline has passed ended 108 days ago. At the left edge of the panel, six months back, the figure stood at 109 days. The sawtooth is the whole story: the best case is 45 days of staleness, in the hours after a deadline, and the worst case runs close to four months, in the days before the next one.
The rule of thumb falls straight out of the shape. Take today's date, subtract 45 days, then find the most recent calendar quarter end on or before that. Anything you can learn about a fund's stock positions is as of that date. In the middle of October, for instance, nothing in the public record is newer than June 30.
Which ownership filings move faster than a 13F
Two disclosures report in days rather than quarters, and both are narrower than a 13F.
Schedule 13D and Schedule 13G cover crossing 5% of a voting class. A 13D is filed within five business days of the crossing trade and amended promptly on a material change, which makes it the quickest public window into a large stake. Our Schedule 13D vs 13G breakdown covers which filer uses which, and the amendment triggers that follow.
Form 4 covers officers, directors and holders of more than 10% of a single issuer, filed within two business days of the transaction, and it reports both the trade and the holding after it. When the question is what an insider did last week, that is the form holding the answer, and how to read a Form 4 walks through one line of it. For the wider map of which form carries what, see the most common SEC filings guide, and for the deadline calendar behind these panels, when 13F filings are due.
FAQ
Does a 13F show what a fund owns today?
No. A 13F-HR describes positions as of a calendar quarter end, and it can be filed up to 45 days after that date. The freshest possible 13F view of any manager is 45 days old, and in the weeks before a deadline it is closer to four months old.
What does it mean if a stock disappears from a fund's 13F?
It means the position was not reported for that quarter end. A sale is the likeliest explanation, though a holding that fell under the 10,000 share and $200,000 de minimis line, a move to an affiliated filer, or a granted confidential treatment request all leave the same gap.
How long after the quarter does a 13F come out?
The deadline is 45 days after the quarter end, landing in mid-February, mid-May, mid-August and mid-November. In the most recent completed quarter above, the median report arrived 37 days after the quarter end.
Do 13Fs show short positions?
No. The form covers long positions in section 13(f) securities. Short sales, swaps, most debt, commodities and cash have no field on the information table, so a 13F is never a complete picture of a manager's book.
How do I find a fund's CIK?
Search EDGAR, the SEC's public filing system, for the manager's legal name, then confirm the CIK against a 13F-HR you recognize. The legal filer often differs from the brand name, and that one check prevents years of reading the wrong entity's portfolio.
Every panel here ships with the SQL that produced it, so the lag, the instrument mix and the staleness curve can each be recomputed for a different filer or a different stock. To trace one manager's position in plain English, ask the question on the Strasmore terminal.