Skip to content

Research project

The Behavior Gap Rebuilt from SEC Data: A Reproducible Investor Return

We rebuilt the behavior gap from 341,049 SEC N-PORT filings. Investors earned 8.97% a year; the famous gap hinges on one hidden share-class assumption.

Preprint Not peer-reviewed · Version 1.0 · 6 September 2026

Philipp Misura · ProfitOwl Research · 6 September 2026

The most quoted number in personal finance can’t be checked. So I rebuilt it.

There’s a number that follows retail investors around like a bad smell. You’ve seen it in seminar slides, sales pitches and year-end recaps: investors earn far less than the very funds they own. Eight and a half percentage points a year, said the most famous version of it for 2024. The moral is always the same: you, dear investor, are your own worst enemy, and you should probably pay someone to protect you from yourself.

I wanted to know whether it’s true.

What is the behavior gap, and why the famous numbers can’t be recomputed

The behavior gap is the difference between two returns on the same fund: the time-weighted return the fund reports, and the money-weighted return its investors actually earned once you account for when their money went in and out. If investors chase performance, buying after good years and selling after bad ones, their money-weighted return lags, and the gap is positive.

Here’s the strange thing I found first: the best-known versions of this number cannot be checked. DALBAR’s Quantitative Analysis of Investor Behavior doesn’t publish its method in reproducible detail; the report is sold, and the headline reaches the public through a press release. Morningstar’s Mind the Gap is far better documented, but it’s computed on licensed, proprietary data no reader can access. Neither of that makes these figures wrong. It makes them unanswerable. A number that can’t be recomputed can’t be checked, extended, corrected or argued with. It can only be repeated or ignored.

So I spent months building the answer from the only place it can be built in the open: the SEC’s own filing system.

The data: 341,049 SEC filings, rebuilt from scratch

Since 2019, every registered US fund must file Form N-PORT every month: net assets, money in, money out, monthly returns. It’s free, public domain, and requires no registration. To my knowledge, after four documented preemption sweeps across SSRN, NBER and the journal databases, nobody had used it to compute a money-weighted investor return. This is the first one that anyone can rebuild.

Methods at a glance:

SourceSEC Form N-PORT + Form N-CEN, re-downloadable from sec.gov
Scope341,049 filings, 27 quarters, every US open-end mutual fund and ETF
Headline universe7,073 funds observable through 2020–2025, $21.4 tn at the start
Measurepooled money-weighted return (IRR) vs. time-weighted benchmark
Reproducibilitydeterministic pipeline, plain Python, byte-for-byte rebuild verified
External anchorsS&P 500 tracker test against filed N-CSR index returns (passes in all six years); class weights hand-extracted from 50 annual reports; every construction choice priced

The result: one gap, three readings

From 2020 through 2025, the investors in those 7,073 funds earned 8.97 % a year. That number is rock solid: however I turn the data, it barely moves.

The famous gap is another story. Under my base case it is 0.36 percentage points a year: the funds beat their own investors, but by a fraction of the numbers in the seminar slides. And depending on one single assumption, that same gap, on the same funds and the same money, lands anywhere between −0.06 and +0.62:

The behavior gap, 2020–2025 · 7,073 US funds · $21.4 trillion

One gap, three readings

Same funds, same money, same flows — only the share class assumed for the yardstick changes.

investors match the fund −0.2 0 +0.2 +0.4 +0.6 +0.8 gap in percentage points per year — positive means the fund beat its investors −0.06 measured against the priciest share class: the investors come out ahead +0.36 — the base case the fund's middle share class stands in for the fund +0.62 measured against the cheapest share class

The spread is 1.9× the headline itself. Nothing about the investors changed between the three readings — only the yardstick did.

Misura (2026), "One Gap, Three Readings". Values −0.0647, +0.3581 and +0.6230 percentage points a year from the published dataset (work/gap_results.csv), every number rebuildable from public SEC N-PORT filings. Redrawn in the site's palette from the figure supplied with the paper; positions and figures unchanged.

That assumption deserves a plain-language explanation, because everything hangs on it.

Most US funds sell the same portfolio in several share classes: same stocks inside, different price tags on the wrapper. An institutional class for pension money, a retail class sold through brokers, sometimes half a dozen more. N-PORT reports returns for every class, but the money, net assets and flows, only for the fund as a whole. And no free structured source anywhere carries net assets per share class. We checked; it doesn’t exist. So anyone computing a behavior gap from public data must pick one class to stand in for the whole fund. That pick is a fee level. Measure investors against the cheapest class and they look sloppy. Measure them against the priciest and they come out ahead. Nothing about the investors changed. Only the yardstick did.

That’s the paper’s central finding, in one picture:

Same funds · same flows · same window — only the share class changes

The investors are steady. The yardstick swings.

How far each side of the gap moves when the assumed share class runs from cheapest to priciest.

What the investors earned money-weighted return, from reported net assets and flows 0.0111 pp — barely reacts. 8.97 % a year under every reading. The yardstick it is judged against time-weighted return of whichever share class stands in for the fund 0.6785 pp — 61× as much

98.66 % of the gap's movement sits on the yardstick side — a property of the measuring stick, not of the investors.

Misura (2026), "One Gap, Three Readings". Investor return 8.9678 to 8.9789 and benchmark 8.9142 to 9.5927 per cent a year across the three class readings, full window 2020–2025. Bars are drawn to scale. Redrawn in the site's palette from the figure supplied with the paper; figures unchanged.

Across the three defensible picks, the investors’ return moves by 0.0111 percentage points. The yardstick moves by 0.6785 — sixty-one times as much. 98.66 % of the gap’s wiggle room is a property of the measuring stick, not of anything anyone did with their money.

Two results I didn’t expect

The people with no choices did fine. For 2,632 funds there is only one share class, so the yardstick problem disappears entirely. On that clean subset the gap is −0.11 percentage points — the investors earned slightly more than their funds report. It’s a control group, not a market estimate (it’s heavy on single-class ETFs), but it’s the one corner of the data where no assumption can push the answer around, and it refuses to tell the horror story.

Automatic saving looked best exactly when the sermon says you fail. Target-date funds, the default vehicles of US retirement plans, built to receive a slice of every paycheck, show the largest gap of any fund group I pre-specified. In the investors’ favour. Mostly in 2022, the one sharply falling year in the window: steady contributions kept buying into falling prices, so the savers’ money-weighted return beat the funds’ reported return by a wide margin. No genius timing involved — just a salary deduction meeting a bad year. Which also means the measure itself reacts to how contributions meet the market, not only to what investors decide. Any behavior gap, mine included, is partly that.

What this means for your money

Three readings of a measurement, none of them investment advice:

  1. The scary versions of the gap are mostly a statement about fees, smuggled in through the choice of yardstick. The cheaper the share class you assume the benchmark was bought at, the worse “behavior” looks.
  2. Boring, automatic, steady investing survived contact with the data. The group built around payroll-deduction contributions came out ahead of its own funds in the worst year; the single-class control sits at roughly zero.
  3. Treat any gap number that ships without data and code as a slogan. That is not cynicism. It is where the line between checkable and unanswerable runs, and now there is a checkable number on the table.

If you want to see what a gap of any size does to a portfolio over a working life, the behaviour gap calculator on this site lets you set the number yourself — including the ones this paper puts on the table.

Check every number

This is the part I care about most. The whole point of building this from public filings is that you don’t have to trust me either:

The pipeline is plain Python with no dependencies, the raw filings re-download from sec.gov without registration, and a rebuild reproduces the published dataset byte for byte. Every number in the paper names the file it comes from. If you find something wrong, I genuinely want to hear it: mail@profit-owl.com.

Because that was the whole idea. Not to replace one unanswerable number with another — but to put a number on the table that anyone can rebuild, check, or build something better on.

FAQ

Do investors really underperform their own funds? By a little, under our base case: 0.36 percentage points a year across all US open-end funds and ETFs, 2020–2025. Whether it’s even positive depends on which share class the benchmark is assumed to hold: the defensible range runs from −0.06 to +0.62. The famous multi-point figures measure against equity indexes with a method that isn’t public.

What’s the difference between money-weighted and time-weighted returns? The time-weighted return is what the fund reports, the growth of one dollar left alone. The money-weighted return (an internal rate of return) weights each period by how much money was actually invested, so it reflects the timing and size of investors’ contributions and withdrawals.

Is the DALBAR study wrong? We don’t claim that. We claim something narrower and more consequential: it cannot be recomputed, because the method isn’t published in reproducible detail and the underlying data isn’t available. Our contribution is a gap that anyone can recompute from public SEC filings.

Can I reproduce these results myself? Yes. That’s the point. Download the code from GitHub or the full dataset from Zenodo; the README contains the complete recipe. Plain Python, no dependencies, raw data free from sec.gov.

Selected references

  • DALBAR (2026). Quantitative Analysis of Investor Behavior, 32nd edition.
  • Ptak, J. (2026). Mind the Gap 2026: US Stock Fund Investors Made History. Morningstar.
  • Fulkerson, J., B. Jordan, T. Riley & Q. Yan (2026). “Bad Timing Does Not Cost Investors 15% of Their Funds’ Returns.” Financial Analysts Journal 82(3).
  • Hsu, J., B. Myers & R. Whitby (2016). “Timing Poorly: A Guide to Generating Poor Returns While Investing in Successful Strategies.” Journal of Portfolio Management 42(2).
  • Dichev, I. (2007). “What Are Stock Investors’ Actual Historical Returns?” American Economic Review 97(1).
  • Li, J. & L. Zheng (2025). “Measuring Mutual Fund Flows.” Financial Analysts Journal 81(3).
  • Madhavan, A. & A. Sobczyk (2019). “Does Trading by ETF and Mutual Fund Investors Hurt Performance?” Journal of Investment Management 17(3).

The full reference list, including the SEC’s own statistical series from the same filings, is in the paper.

Where to find it

This page is the original. Everything below is a copy kept somewhere that outlives a website.

How to cite this

Misura, Philipp (2026). "One Gap, Three Readings: The Share-Class Assumption inside the Behaviour Gap — A Reproducible Investor Return from SEC Form N-PORT, 2020–2025." Working paper, SSRN 7423160. Data: doi.org/10.5281/zenodo.22354019. Licensed CC BY 4.0.

Primary sources

  1. 01One Gap, Three Readings: The Share-Class Assumption inside the Behaviour Gap — the working paper. Submitted 6 September 2026; the SSRN page goes public once the review queue clears, typically within one to three working days — SSRN, abstract 7423160
  2. 02Code and dataset — 303 files, every table and figure input, SHA-256 manifest. Data under CC BY 4.0, code under MIT. Permanent archive — Zenodo, DOI 10.5281/zenodo.22354019, version 1, published 6 September 2026
  3. 03nport-behaviour-gap — the pipeline, documentation and complete rebuild recipe. Plain Python, no dependencies; raw filings re-download from sec.gov without registration — GitHub, release v1.0

Written by Philipp Misura, who is not a researcher by profession — see about. Corrections go on this page, marked and dated, rather than being made quietly.

Share this