Your spend and revenue
Margin sets the break-even: a channel needs a marginal return of 100 divided by your margin, so 1.67 per dollar at 60%. A promotion week (Black Friday, a sale) sells more than its spend explains and tilts the curve, so list those dates as ranges and the fit ignores them while the carry-over still counts their spend. Daily rows are added up into Monday weeks. Use one currency, and the revenue you credit to each channel.
Upload or paste your data, then click Fit the curves.
Result
Channels: today versus the recommended split
| Channel | Weekly spend now | Average ROAS | Marginal ROAS now | Range (10th-90th) | Of ceiling | Recommended spend | Change |
|---|
What if you spend more or less in total?
Each row is the best split of that weekly total on the fitted curves, against spreading the same total in proportion to today's spend. Marginal ROAS is what the last dollar of that total earns; contribution is margin times revenue minus spend. Totals the per-channel limits cannot reach are left out.
| Weekly total | Change | Revenue (best split) | Gain over pro rata | Marginal ROAS | Contribution |
|---|
Fitted curves
Dots: your weeksLine: fitted curveRing: spend nowDiamond: recommended spend
Back-test: predicted vs actual revenue in your last weeks
| Channel | Predicted (curve) | Predicted (flat ROAS) | Actual | Typical weekly error, curve | Flat ROAS |
|---|
Fitted models
How it is calculated
Curves: each channel's weekly points (spend, revenue) are fitted by least squares with two shapes: a saturating exponential, a(1 - e^(-s/k)), and an S-shaped Hill curve, a s^h / (k^h + s^h), where the first dollars do less than the later ones. The S-shape is used only when it improves small-sample AIC by more than 2. Marginal return is the slope of the curve at the average of the last eight weeks' spend. Best split: an exact dynamic programme over a 400-step grid of the same total, so S-shaped curves are handled correctly; each channel stays between 0.25x and 2x its current spend and under 1.25x its highest week. Ranges: 100 seeded resamples of your own weeks. Profit view: margin times fitted revenue minus spend, along the fitted frontier.
Not modelled: carry-over beyond one decay rate per channel (a single geometric rate is fitted when it clearly helps), seasonality, promotions and price changes, overlap or halo between channels, attribution error (revenue is whatever your file credits to a channel, often platform-reported and overstated), incrementality, and any channel with under eight weeks or almost constant spend, which is left where it is. The resampled ranges cover noise in the fit, not a wrong curve shape. Unverified: checked against simulated data with known curves, an analytic optimum and a brute-force search in unit tests, not against a published marketing dataset.
Common questions
What is marginal ROAS and why does it matter more than average ROAS?
Average ROAS is total revenue divided by total spend. Marginal ROAS is what the next dollar earns. Because ad channels saturate, the marginal figure is always lower than the average and is the one that tells you where to put more money. A channel with a 3.0 average ROAS can have a marginal ROAS under 1.0 if it is already spending near its ceiling.
How does the tool find the best split of my budget?
For each channel it fits a diminishing-returns curve to your own weekly spend and revenue, then searches every split of the same total budget with an exact dynamic programme and keeps the one with the highest total fitted revenue. Each channel is limited to between a quarter and double its current spend, and never beyond 1.25 times its highest week, so the advice stays near spend you have actually tried.
What data do I need?
One row per date and channel with the date, the channel name, the spend and the revenue credited to that channel. Daily or weekly rows both work; daily rows are added up into weeks. Each channel needs at least eight weeks, and spend has to have varied. A channel whose spend never changed cannot show what happens when it does.
How accurate is it?
The tool tests itself. It refits on your data up to some weeks before the end, predicts revenue in the final weeks from the spend that really happened, and compares that with a flat ROAS line. If the curve does not beat the flat line, or the error is large, something other than spend, such as seasonality or promotions, is driving your revenue and the split should be tried on a small share of budget first. The resampled ranges show noise in the fit, not whether the curve shape is right.
What is it not good at?
It models carry-over from one week to the next as a single decay rate, and ignores seasonality, promotions, price changes, overlap between channels and brand effects. It uses whatever revenue your file credits to each channel, which is often platform-reported and overstated and is not proof that the ad caused the sale. It cannot see what happens at spend levels you have never run.
What does the profit view mean?
You enter your gross margin. Contribution is margin times fitted revenue minus ad spend. The tool reports the weekly total where that peaks along the fitted curves. It ignores everything except attributed revenue and ad spend, and the peak is usually flat, so treat it as a range to test rather than a target.
Is my data uploaded anywhere?
No. The file is read and analyzed in this browser tab. Nothing is sent to a server, there are no accounts or cookies, and the tool never stores your spend or revenue. A snapshot you save holds only the answers (spend, marginal return and recommendation per channel), in a file you keep.