Forecast

What would you have received if nothing had changed?

Every other screen here reports what arrived. This one also draws what would have arrived if you had left everything alone — day by day, behind the clicks you actually got. The gap between the two is not a prediction that came true or failed: it is the measured size of the change you made.

intelligenceads.io/org/acme-dtc

Activity

Observed across every site in this workspace · last 30 days. Platform-reported totals can differ.
Events6-hour volume
01k2k3k4k
Jul 25Jul 29Aug 2Aug 6Aug 11Aug 15Aug 19Aug 23
Paid clicksdaily volume
−427/day
Jul 25 – Aug 22: 1,530 a day observed against 1,957 expected, if nothing had changed.
01k2k3k
Jul 25Jul 29Aug 2Aug 6Aug 11Aug 15Aug 19Aug 23

Thirty days of one workspace, on the curve where this reading lives — there is no Forecast screen, because a counterfactual is a claim about a number rather than a number of its own. The band behind the paid clicks is what the twenty-eight days before this window said these thirty would look like. The curve tracks it for a Saturday and a Sunday, and then a campaign is paused on the Monday; everything after that is the size of the pause, in clicks a day. The last day is today, still running, so it is drawn faded and kept out of the figures.

Demo workspace, fictitious data.

The pair, and the gap between them

The headline is one quantity — the gap, in clicks a day — and both terms it is made of are printed under it: what arrived, and what was expected from the day the window opens. A lone expected figure shows no residual, and the residual is the feature.

When the model declines: what it usually does

If the model refuses to answer, the twenty-eight days it would have been fitted on are still real. The card then draws two dashed hairlines — the tenth and the ninetieth percentile of those days — and states the gap against them instead. Arithmetic over days that actually happened, not a model, so it still holds when the model does not. It never stands beside the band: one reading, one reference.

Where observation stops

The curve’s last day is today, still running, so it is drawn faded and the pointer dates it “so far”. The figures compare whole days only, because a part-day against a whole day’s expectation manufactures a shortfall every morning. And nothing is drawn past today: every expectation on this card has a curve beside it to be checked against.

The refusal

We won’t tell you what next month will be.

The obvious feature is a number for next month, and it would demo well. We can’t make it honestly: this product watches clicks arrive on your site and never sees your spend, your bids or your campaign state, so a figure about the future would be a promise about a budget we cannot see. What we can say is narrower and worth more — what your traffic would have kept doing if you had left it alone. Pause a campaign and the forecast becomes wrong; the wrongness, in clicks a day, is the size of what you did. Read as a prediction that is a failure. Read as a counterfactual it is the measurement, and nothing else in your stack reports it: the platform tells you what you spent, not what the site would have received.

So: nothing at identity grain — no “this visitor will return”, no score on a browser or an address, which is the inferred identity this product exists in order not to sell. No predictive column in a directory: a table cell has no room for an interval, and campaign rows are small enough that the interval would come out wider than the value. No conversion forecast until that series stops narrating our own instrumentation history back to you as your performance. No segments, no propensity scores. And no grade on the result — “below its usual range”, the plausible causes, and you judge.

When it cannot say anything, it says which silence it is. Not enough history yet comes with the day it arrives — from Sep 8, never “soon” — and draws a mark that sits still rather than pulsing, because pulsing means on its way. A month that ran past its event allowance yields nothing at all: fitting on the clamped read would teach the model your billing cliff as if it were a traffic pattern, and fitting on the whole month would draw a band above a clamped curve, which is a paywall telling you exactly what it is holding back. Two silences that looked alike would be worse than either.

Boundaries

What the free plan shows you.

On this screenSolo and up
The two curves, and the window’s totalsShownShown
The counterfactual and its interval—Shown
The usual range, when the model declines—Shown
When there is no reading“Beyond your plan’s window”“Not enough history yet”, with the day it arrives
How far back you can lookSeven daysNinety-two days

A counterfactual is fitted on the twenty-eight days before the window you are looking at, and that fit has to fit inside the window your plan can query. Free reads seven days, so on the free plan this reading never opens: the card draws your paid clicks as usual and says Beyond your plan’s window where the figure would be. Nothing is blurred there, because nothing was computed — a shorter fit would be a worse model wearing the same interval, so it is refused rather than quietly shortened. Solo reads ninety-two days, which holds the fit in front of any window up to sixty-four, every preset in the picker included. That is how far back you can look, not how long we keep it: every event you send is kept on every plan, including the free one.

See where your ad budget really works. Then put more there.

Free plan, no credit card, no trial timer. Install in under 5 minutes — drop a script, load a page, and watch your first observations arrive.

Start free

We observe sessions, not people. No name or email fields at ingest. Hosted in the EU, in Paris.