DTC SKU Profit × Inventory Spend Allocator
A formula-driven workbook that combines SKU contribution after ads, allowable CPA and inventory cover to decide where the next ad dollar should go.
A winning ROAS can still drain cash—or sell you out of your best SKU. Protect cash by scaling only products that are profitable and available to sell.
Use this resource when
Download the working file.
This is the complete editable template—not a PDF preview. Add your own account data, owners and decisions.
Set your commercial guardrails
Enter the contribution target, next budget and healthy inventory range that fit your own economics. Every default is illustrative and editable; none is presented as a universal ROAS or CAC benchmark.
Calculate SKU contribution after ads
Separate discounts, returns, COGS, shipping, payment fees and allocated ad spend so blended ROAS cannot hide a weak contribution margin.
Protect against stockout
Combine on-hand units, inbound stock and average daily velocity to estimate days of cover. A profitable SKU below the selected minimum moves to PROTECT instead of receiving more demand.
Allocate the next dollar
The decision board returns SCALE, PROTECT, RECOVER, PAUSE or RECOVER DATA. The allocator weights eligible SKUs and caps the next budget by demand-safe inventory capacity.

Practical questions
Questions that change the decision
Is ROAS used to allocate the budget?
It remains a diagnostic metric, but the allocation is driven by SKU contribution after ads, allowable CPA, inventory health and data quality.
Does the workbook forecast demand?
No. Days of cover and demand-safe extra orders use the velocity and inventory inputs you provide. Treat them as operating estimates and verify them with your inventory system.
What happens when cost or tracking data is missing?
The SKU returns RECOVER DATA rather than a confident allocation, so incomplete inputs cannot silently create a SCALE decision.
Sources and platform documentation
Platform features change. These links point to the primary documentation used for the implementation details above.
