Strasmore Research
Learn Matt ConnorBy Matt Connor · data as of October 16, 2026 · refreshed weekly

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.

  1. 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.
  2. 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.
  3. Open the information table inside the filing. It runs one line per reported position, and it is the entire substance of the form.
  4. 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.
  5. 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.

QueryOne filer's reported Apple position, quarter by quarter
22 rows (showing 20)
datequartershares_millionsreported_on
2021-03-31Mar 2021887.1May 17, 2021
2021-06-30Jun 2021887.1Aug 16, 2021
2021-09-30Sep 2021887.1Nov 15, 2021
2021-12-31Dec 2021887.1Feb 14, 2022
2022-03-31Mar 2022890.9May 16, 2022
2022-06-30Jun 2022894.8Aug 15, 2022
2022-09-30Sep 2022894.8Nov 14, 2022
2022-12-31Dec 2022895.1Feb 14, 2023
2023-03-31Mar 2023915.6May 15, 2023
2023-06-30Jun 20231831.1Aug 14, 2023
2023-09-30Sep 20231831.1Nov 14, 2023
2023-12-31Dec 20231811.1Feb 14, 2024
2024-03-31Mar 20241578.7May 15, 2024
2024-06-30Jun 2024800Aug 14, 2024
2024-09-30Sep 2024600Nov 14, 2024
2024-12-31Dec 2024600Feb 14, 2025
2025-03-31Mar 2025600May 15, 2025
2025-06-30Jun 2025560Aug 14, 2025
2025-09-30Sep 2025476.4Nov 14, 2025
2025-12-31Dec 2025455.8Feb 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_end
Run this yourself

The 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.

QueryWhat kind of position every 13F line actually reports
position_typelines_reportedpct_of_lines
Shares3.31 million96.1
Call option63.01 thousand1.83
Put option56.64 thousand1.64
Principal amount of debt14.51 thousand0.42
Other or unlabelled1.000
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 DESC
Run this yourself

Shares 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.

QueryDays between a quarter end and the 13F-HR that reports it
22 rows (showing 20)
datequarter_labelfilings_countmedian_lag_daysfiled_by_deadline_pct
2021-03-31Mar 202159874274.3
2021-06-30Jun 202160014174.8
2021-09-30Sep 202159934170.1
2021-12-31Dec 202168384190.7
2022-03-31Mar 202268214172.5
2022-06-30Jun 202268104073.3
2022-09-30Sep 202267974094.8
2022-12-31Dec 202270454193.8
2023-03-31Mar 202369644095.3
2023-06-30Jun 202370123994.9
2023-09-30Sep 202370403994.9
2023-12-31Dec 202374234093.6
2024-03-31Mar 202474233995.5
2024-06-30Jun 202474433994.9
2024-09-30Sep 202474883895.4
2024-12-31Dec 202481954194.4
2025-03-31Mar 202581653895.9
2025-06-30Jun 202582033895.5
2025-09-30Sep 202582083895.2
2025-12-31Dec 202589284176.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_end
Run this yourself

For 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.

QueryHow old the newest available 13F snapshot is, day by day
91 rows (showing 20)
datedays_of_staleness
2026-04-19109
2026-04-21111
2026-04-23113
2026-04-25115
2026-04-27117
2026-04-29119
2026-05-01121
2026-05-03123
2026-05-05125
2026-05-07127
2026-05-09129
2026-05-11131
2026-05-13133
2026-05-1545
2026-05-1747
2026-05-1949
2026-05-2151
2026-05-2353
2026-05-2555
2026-05-2757
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.day
Run this yourself

Today, 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.

#13f#sec filings#institutional ownership#disclosure lag#fund holdings