What the Price Already Assumes: Building a Reverse DCF That Refuses to Guess
September 2026 Β· 7 min read Β· By Javier Audibert
A normal DCF asks you to predict the future. You pick a growth rate, a cost of capital and a terminal value, and the model produces a target price that β conveniently β almost always confirms what you already thought. A reverse DCF turns it around: it takes today's price as given and solves backwards. It doesn't ask what the company is worth. It asks what has to be true for the current price to make sense.
It is a far more honest question, because you cannot cheat at it. The answer doesn't depend on your optimism β it is arithmetic on the cash the business generates today and what the market is paying for it. And it is very much Howard Marks: second-level thinking isn't deciding whether a business is good, it is asking whether that is already in the price.
This article describes how a model works; it is not investment advice. The figures below are outputs of an automated model over public data, with all the limitations set out further down.
The first version was broken
I added the reverse DCF to my screeners and it seemed to work first time. It took the companies that passed the screen, solved for the implied growth, compared it with historical growth and wrote a commentary. Clean.
Then I looked at Newmont, a gold miner. The model said it was worth $8,335 a share. It traded at $128. An upside of +6,407%.
The bug wasn't in the DCF. It was in the growth rate I had fed it. Newmont's free cash flow over the four years I had was $1,089M β $97M β $2,961M β $7,299M. The endpoint-to-endpoint CAGR is 88.5% a year β and it is arithmetically correct. What it describes is not the business: it describes the fact that the starting year was a $97M trough. Projecting a cyclical recovery ten years forward isn't a valuation, it is an artefact.
CAGR always gives you a number
That is the underlying problem. CAGR only looks at the first and last year. Everything in between β collapses, spikes, recoveries β is invisible to it. And it never warns you: it always returns a respectable-looking percentage, whether the series is a trend or noise.
The example that convinced me was Incyte, a biotech. Its free cash flow CAGR was +14.2%. That sounds like a compounder. The actual series was $892M β $449M β $235M β $1,330M: it fell to a quarter and then quintupled. The 14.2% exists only because the first and last points happen to sit where they do.
The fix was to stop asking only what is the growth rate and start asking whether this company has a growth rate at all. Instead of joining the endpoints, I fit a least-squares line through log cash flow using every point, and keep the RΒ²: how much of the movement that line actually explains.
Same data, two readings
- Incyte β CAGR +14.2%, RΒ² 0.01. The line explains 1% of the movement.
- Newmont β CAGR +88.5%, RΒ² 0.05 over 17 years. There is no trend.
- Adobe β CAGR +10.0%, RΒ² 0.93 over 17 years. This is a trend.
Below an RΒ² of 0.50 the model projects nothing. It doesn't trim the number or publish it with a footnote: it declines, and says why. In a typical week that means four of the five companies that pass the screen get no valuation at all.
Four years is not enough
The second weakness was more uncomfortable: the free data source I was using gave four annual statements. Four points is three growth observations. Any probability built on three observations is a coin toss with statistical decoration, and a four-year window on a cyclical company can land entirely inside a trough or a peak.
The fix turned out to be free and in plain sight: the SEC's XBRL API. It is public, needs no key, and returns everything a company has ever filed for a given line item. For Adobe that is 17 years instead of 4. Three observations become sixteen.
The change didn't just add data, it changed the answers. Ulta fitted an RΒ² of 0.32 on four years β no trend β and 0.84 on fourteen. The short window wasn't merely imprecise: it said something different.
And then the opposite problem
With fourteen years comes a risk that four never had: an excellent fit describing a different company. Ulta compounds at 28% a year over fourteen years, with an RΒ² of 0.84. Impeccable. But over the last five years it grows at 1.8%.
Both figures are correct and describe different periods. Projecting 28% would be reading the wrong decade. The model now fits both windows and projects whichever is lower: Ulta is valued on 1.8%, and Adobe on the 8.1% of its recent window rather than the 18% of its long-run trend. Adobe's upside fell from +80% to +28% on that one change.
What is left: a model that stays quiet
The current version withholds more than it publishes. If cash flow has no trend shape, there is no valuation. If growth volatility is too high, the probability is not shown β because a "52.3%" with a warning beside it still reads as 52.3%: in a table, the number always beats the caveat. And when it does publish a probability, it gives a range, never a single figure, because it rests on few observations.
One thing always survives: the implied growth rate. It needs no history, no trend and no projection β only current cash flow and market cap. However chaotic the company, the price is always assuming something, and that can always be solved for. Which is, in the end, the only figure that really mattered.
Limits remain, and they are published next to the table: terminal growth is a single 2.5% applied to a gold miner, a biotech and a cosmetics retailer alike; the model sees cash flow but never the reason behind it, so a one-off settlement and a genuine change in trend look identical to it; and the long history only exists for SEC filers, meaning the IBEX 35 screener works with less data than the S&P 500 one.
If I take one thing from building it, it is this: most of the time went not into making the model smarter, but into teaching it to recognise when it doesn't know. A model that always answers isn't more useful β it is just harder to argue with.
Share this article