Interactive · Planning model

Planning scenarios: what next year's paid-search plan buys

Set spend by channel and the assumptions around it. The model returns sessions, conversion, AOV, and sales by fiscal period, with each channel on its own response curve, a hard ceiling on brand search, and the spillovers between channels switched on or off. How the model works is below the tool.

Synthetic data · real model structure

Sales by fiscal period

Scenario vs. last year, with the finance forecast as a reference line

Response curve

Sessions vs. spend for one channel; the dot is where the scenario sits

Why sales moved

Last year to scenario, one step at a time. The steps add up to the total change.

Marginal return by channel

What the next dollar buys at the scenario's operating point

By period

scenario, with change vs. last year and the gap to the finance forecast

How the model works

The production version of this tool is a scenario model for the annual planning cycle: one full-year paid-search spend number, a handful of assumptions, and the sessions, conversion, AOV, and sales that land by fiscal period, next to the finance forecast so the gap can be socialized early. It is deliberately simple where the data cannot support more. This replica keeps that structure and plugs in two pieces that exist as research but are not in the production tool: per-channel response curves and cross-channel spillovers. Each section says which is which.

1. Structure

Sessions are built bottom-up from three buckets and rolled to twelve fiscal periods on a 4-4-5 calendar. Paid search is modeled from spend. Organic and the earned bucket (direct, email, affiliates, referral, organic social) are last year's sessions times an assumed change; the tool calls that an assumed contribution, and it is shown as a lever rather than hidden. Sales are sessions times conversion times AOV. Every ratio on the page is recomputed from summed totals, never averaged.

sessions = paid(spend) + organic×(1+gorg) + earned×(1+gearn) + spillovers
sales = sessions × conversion × AOV

2. Spend to sessions, by channel

In production: one aggregate spend number with unit pass-through, so 10% more spend buys 10% more paid sessions at last year's cost per session. That was a choice, not an oversight. A Hill curve was fitted (sessions = α·spendβ/(Kβ+spendβ), R² 0.74 on base weeks, local elasticity near 0.5) and rejected because it failed the second-half sanity check against the year's actuals, where spend fell 19.6% and paid sessions fell 18.9%, cost per session flat. The simple version matched reality; the sophisticated one did not.

In this replica: each channel gets its own curve from the sibling traffic engine, which models cost per click instead of sessions directly:

CPCc = CPCLY,c × (1 + drift) × (spendc / spendLY,c)εc
clicksc = spendc / CPCc      sessionsc = clicksc × click-to-sessionc

The elasticity εc is how fast the auction price rises as you push more money in. It is estimated per channel by regressing log CPC change on log spend change over weekly year-over-year pairs, and kept only where the fit is convincing (R² at or above 0.7, which holds for brand and non-brand search at about 0.9). Shopping and local inventory do not clear that bar; they fall back to a fixed CPC ratio. Holiday weeks carry their own CPC premiums (brand about 1.27x). Backtest: 8.0% mean absolute error on quarterly traffic, against 10.5% for the Hill curve.

ChannelCPC elasticity to spendSessions per extra dollarBasis
Brand search0.85near zero past the ceilingFitted; plus the impression-share ceiling below
Non-brand search0.35falls as spend risesFitted, R² about 0.9
Shopping0.25falls slowlyFit too weak; fixed CPC ratio in production
Local inventory0.30falls slowlyFit too weak; fixed CPC ratio in production

The brand ceiling. Brand search cannot be bought past the searches that exist. Budget-lost impression share sat between 0.0% and 0.4% for twelve straight months; the core campaign already held 96% of its available impressions. A 6,000 campaign-day panel with campaign fixed effects and a demand control put the elasticity of clicks to CPC at +0.08 with a standard error of 0.11, which is zero. The naive regression on the same data reads +0.79, which is the number that makes "fund it back up" feel right. In the replica, brand sessions cap at last year's level plus the remaining impression share, and spend past that point buys a higher CPC and nothing else. The tool flags it.

3. Conversion and AOV

Conversion is not a constant. It falls when paid spend rises, because incremental paid traffic is lower intent than the base, and it falls when AOV rises, because pricier baskets convert less often. Both are fitted on weekly data:

log(conversion) = a + εspend·log(spend) + εAOV·log(AOV)    →    εspend = −0.17,  εAOV = −0.48

Split by week type, the holiday coefficients differ (−0.66 and −1.01 pre-holiday), but the planning tool uses the base values everywhere, calibrated with a single constant from the median of actual over predicted. Backtest forecasting the year from the prior year: 5.4% mean absolute error, bias about zero. AOV is a lever here; in the production tool the second planning year uses a plateau model, a target AOV times a growth rate times last year's per-period seasonal index. A target row in production back-solves any lever from a typed full-year total; conversion solves in closed form, AOV by bisection because it feeds back into conversion.

4. Halo and cannibalization

Not in production. The production tool assumes spillover away and says so. The evidence exists, though, and this replica applies it as a matrix: a change in one channel's paid sessions moves other buckets by a fixed share. Where a value comes from a holdout it is solid; where it comes from a correlation model it is a placeholder with the right sign.

EffectShare appliedEvidence
Brand search → organic brand−0.35Geo holdout: brand paid cut 61% in test markets, organic brand rose 9%. About 35% of brand paid clicks substitute for organic; 65% are incremental.
Brand search → direct+0.25Same holdout: direct fell 25 points where brand paid was cut. Complementary, the opposite of the cannibalization story.
Non-brand search → organic and direct+0.06 / +0.04Later brand demand created by non-brand exposure. Correlation and Granger evidence only; small and treated as such.
Shopping → organic−0.06Product ads displace organic product results on the same page. Directional.
Brand search → other paid channels0Holdout difference-in-differences on shopping, local, and non-brand: no movement (p 0.63 to 0.86).
Display & video → organic and directsessions per $1MImpression-based coefficients from the mix model. Flagged for possible reverse causality (retargeting follows visits). Lowest confidence on the page.

The method stack behind those values: a full channel correlation matrix on daily sessions, first-difference and partial correlations to strip shared seasonality, Granger tests as a gate before any relationship is used, a mix model with autoregressive errors and a reduced set of controls, and holdouts overriding everything else when they exist. The toggle above lets you see how much the spillover layer changes the answer. For a typical scenario it is a few percent of sales, concentrated in brand search, which is exactly where the planning debates happen.

5. Calibration and what the model does not claim

All figures on this page are synthetic: last-year anchors, seasonality, elasticities, and spillover shares are perturbed from the real work or set to illustrative values in the ranges the research supports. The model structure, the estimation methods, the rejected alternatives, and the ceiling logic are real.