Last 12 months · ending Apr 30, 2026
Predictions
Move the per-channel handles. The spider updates the proposed allocation; the horizon cards and 12-month forecast roll up the math live. Hit 'Reset to optimal' to snap to the Lagrangian-allocator solution at your current total.
Monthly budget
301K
current spend
12-mo revenue · projected
8M
no change
Blended ROAS · 12 mo
2.22×
Avg marginal ROAS
1.58×
across active channels
Channels active
10
0 locked
spider · current vs proposed
Drag the per-channel handles on the right. The radar updates the proposed polygon.
Meta
$60,000
—Predicted 97.4KMarginal 0.77×Google Search
$45,000
—Predicted 93.9KMarginal 1.03×YouTube
$25,000
—Predicted 64.6KMarginal 1.43×Google Display
$12,000
—Predicted 22.3KMarginal 1.44×LinkedIn
$80,000
—Predicted 145.9KMarginal 0.88×TikTok
$12,000
—Predicted 20KMarginal 0.99×Reddit
$7,000
—Predicted 15.7KMarginal 1.39×Email
$5,000
—Predicted 32.3KMarginal 4.32×Events
$25,000
—Predicted 85.2KMarginal 1.71×Partnerships
$30,000
—Predicted 90.8KMarginal 1.87×
cumulative revenue at horizon
How the next year plays out at this allocation.
1 month
668.1K
≈ 42 deals · 2.22× blended
3 months
2M
≈ 125 deals · 2.22× blended
6 months
4M
≈ 251 deals · 2.22× blended
12 months
8M
≈ 501 deals · 2.22× blended
forecast · 24 months
Twelve months historical · twelve months forecast.
Solid line · forecast at proposed allocation. Dashed · what would happen if you kept current spend.
response curves · adstock ⊕ hill
Where each channel bends.
α (max revenue)
260K
K (half-saturation)
64K/mo
γ (steepness)
1.10
λ (adstock decay)
0.82
Marker shows the channel's current monthly spend on the fitted curve.
how this works
Real math, on seeded data.
Adstock.Geometric carry-over. When you raise a channel's spend, the new revenue arrives over a few months — quickly for short-decay channels (Email · λ=0.45), slowly for long-decay ones (Events · λ=0.88). The horizon cards apply this ramp explicitly so the 1-month number isn't the same as the 12-month one.
Hill saturation.R = α · S^γ / (K^γ + S^γ). Three numbers describe each channel's curve. α is the ceiling. K is the spend at half-saturation. γ is how sharply the curve bends.
Allocator."Reset to optimal" runs Lagrangian bisection on μ — at the optimum, every active channel hits the same marginal ROAS. The bisection converges in under 50ms. Manual handles let you override any channel.