You need daily spend and revenue, ideally one row per day for the last 365 days. The CSV needs four columns:
| Column | What goes in it |
|---|---|
date | YYYY-MM-DD, one row per day |
spend | Total ad spend that day, in dollars (no $ sign, no commas) |
revenue | Attributed revenue from those ads that day |
purchases | Order count. Optional but recommended. Drives the orders/new-customer columns. |
Pull this from wherever you trust your numbers. Meta Ads Manager export, your data warehouse, Triple Whale, Northbeam, a Google Sheet you've been keeping by hand. Doesn't matter. The tool only cares that the columns are right and the dates are sequential.
One channel at a time. If you run Meta and Google, model them separately. They have different curves. Don't add them together.
Drag the CSV onto the upload card or click "Choose CSV file." If you just want to poke around first, hit "Try with demo data". That loads a synthetic 90-day dataset so you can see what a working fit looks like before you bring your own numbers.
Nothing is uploaded anywhere. The fit runs in your browser. Close the tab and the data is gone.
The chart axes:
The lines:
This is the section everyone gets wrong, including the defaults the tool ships with.
The LTV multipliers say: for every $1 a customer spends on their first order, how many dollars total will they spend over the next 3 / 6 / 12 months? A 1.4× three-month LTV means $1 first-order → $1.40 cumulative over 90 days.
The defaults (1.4 / 1.8 / 2.5) are vague mid-tier DTC averages. They're almost certainly wrong for your brand. Specifically:
Pull your real numbers from a cohort tool: Lifetimely, Triple Whale, Polar, a manual cohort export from Shopify. Take 90-day cumulative customer revenue, divide by first-order revenue. That's your 3-month multiplier. Same for 180 and 365 days.
What share of revenue gets eaten by COGS, shipping, payment processing before any margin shows up. Don't include fixed overhead. This is the part that scales with each order. Most DTC brands land between 30% and 45%. Get this from your P&L or your finance person.
Default is 60 days. This says: a day from 60 days ago counts half as much as today in the curve fit. Older days still count, just less.
Use a shorter half-life (30d) if you've recently done something that changed efficiency: new creative, a price change, a structural Meta change you can feel. Use a longer half-life (180d+) if your account has been stable and you want the curve to lean on more data.
Set to 0 to weight every day equally (legacy behavior). This is rarely what you want. Efficiency drifts.
Share of attributed revenue from new customers vs returning customers. If your platform reports this directly, plug it in. Otherwise approximate from your customer count over the same window. Drives the "NC ROAS" and "new customers" columns in the spend ladder.
Yesterday's spend still produces some revenue today. Adstock models that lag. Try 0.3 for Meta. That's the typical carryover. 0 to disable it (lets you sanity-check whether adstock is what's making the optima move).
Manual override on V_max. +10% = "I expect the platform to deliver 10% better than the historical fit." Use this for known forward-looking changes the data hasn't seen yet: a creative refresh you're confident in, a new placement that's testing well.
Auto-calculated from your CSV if you included purchases. Otherwise enter manually. Only affects the orders / new-customer columns in the spend ladder, not the curve or optima.
Pick the goal you actually want to optimize for. The tool computes all goals at the same time (you can see all of them in the tile row at the top), but the goal dropdown picks which one gets the highlighted vertical line on the chart and the highlighted row in the spend ladder.
| Goal | What the optimum is |
|---|---|
| Max CM (today) | Spend that maximizes day-1 contribution margin only. |
| Max 3-month CM | Spend that maximizes CM with 3-month LTV factored in. |
| Max 6-month CM | Same with 6-month LTV. |
| Max 12-month CM | Same with 12-month LTV. |
| Max Revenue | Push spend up. Hill curve is monotone, so this is "as high as we'll model" (5× current). |
| Max NC Revenue | Same logic but counting only new-customer revenue. |
| Target ROAS | Max spend that still hits a ROAS target you set. Inputs appear when you select this goal. |
It's a single-channel observational model. Some things it doesn't account for: