Channel Mix
Budget allocation for ecommerce teams: compare channels on contribution and marginal return rather than on reported ROAS, then recommend the new split.
Channel budgets get split on reported ROAS, which is the one number every platform supplies and the one number no two platforms compute the same way. Each attributes the same order to itself, so the totals add up to more revenue than the business made, and the channel with the most generous window looks like the best investment. Meanwhile the split ignores that channels reach saturation at different points. This skill compares channels on contribution and on marginal return, then recommends the new split with what moving each dollar is worth.
What It Does
- Reconciles platform-reported revenue against orders the business actually recorded.
- Computes contribution per channel after product cost, returns and fees.
- Estimates where each channel's return curve flattens.
- Separates channels that acquire customers from channels that harvest demand.
- Prices the first and last dollar of each channel's current budget.
- Recommends the new split, with what each move is worth.
Use Cases
- Split budget on contribution instead of on three platforms' own numbers.
- Find the channel that has already saturated at its current spend.
- Separate the channel acquiring customers from the one harvesting them.
- See what moving $10,000 between channels is actually worth.
Example Session
How should we split next month's budget across channels?
The platforms claim 4.3x blended on $82,000. Your own orders say 2.6x.
- Channel | Spend | Platform ROAS | Contribution, reconciled | Marginal return | New split
- Paid search, brand | $18,000 | 9.2x | $41,000 | Saturated | Cut to $12,000
- Paid search, non-brand | $24,000 | 2.8x | $28,600 | $1.90 per $1 | Raise to $33,000
- Paid social, prospecting | $31,000 | 2.1x | $19,400 | $1.60 per $1 | Hold
- Affiliate | $9,000 | 6.4x | $8,100 | Saturated | Cut to $6,000
Weighted by spend the platforms report 4.3x, which would be $355,000 of revenue. Your orders total $213,000, because all four claim the same purchases. Brand search at 9.2x is mostly harvesting demand that already exists, which is why it saturates: the next $6,000 buys clicks from people who were going to find you. Moving the full $9,000 out of brand and affiliate into non-brand returns $1.90 per dollar there against roughly a dollar where it came from, so the reallocation is worth about $8,100 in contribution.
Why This Beats Prompting It Yourself
Reported ROAS vs What Your Books Say: The Hidden Risk
A generic prompt adds up the platform numbers and allocates to the best one. Those numbers double count, because each platform claims the same order under its own attribution window, and the blended 4.3x they produce does not exist in your accounts. Allocating on it moves budget toward whichever platform attributes most aggressively.
When You Still Need Harvesting Told Apart From Acquiring
Brand search returns 9.2x and creates almost no new customers, because it captures people who already decided. Treating it as your best channel and scaling it is the most common allocation error there is. This skill separates the channels that bring new customers from the ones that close existing demand, which is what makes the brand cut defensible.
Known Limitations
Reconciling platform revenue to your own orders reduces double counting but does not establish true incrementality, which needs a holdout test the skill will recommend rather than simulate. Saturation curves need spend variation per channel and are reported with wider bands where the budget has been flat. It recommends the split and does not change budgets in any platform.
Install It
- Download the ZIP.
It is free and there is no account to create. - Unzip it into your agent's skills folder.
Claude Code reads ~/.claude/skills/, which is hidden by default: the command in the folder block opens it. Other agents scan their own directory, so drop the same folder there instead. - Ask your agent to use it.
Restart the agent if it was already running, then it picks the skill up with no config.
skills folder
Copy
~/.claude/skills/channel-mix/
SKILL.md
references/attribution-notes.md
allocations/
# one file per month, with the reconciliation
# macOS: create the folder and open it in Finder
mkdir -p ~/.claude/skills && open ~/.claude/skills
# Windows: paste in the Explorer address bar
%USERPROFILE%\.claude\skills\Frequently asked questions
How is this different from a blended ROAS report?
A blended report sums numbers that each platform computed about itself, which double counts orders. This reconciles them against the orders your business actually recorded, then compares channels on contribution and on what the next dollar returns rather than on the average of the last one.
Which agents does the skill run in?
Any agent that supports the open SKILL.md format: Claude Code, Cursor, Codex CLI, GitHub Copilot, Gemini CLI, Manus, Grok and others load it unmodified. The format is portable, the location is not. Each agent scans its own skills directory, so you drop the same folder into whichever one yours uses. There is no config file to edit and no API key to provision.
What does it need connected to work?
Spend and reported revenue per channel, your own order data, product cost, returns and payment fees. Historical spend variation per channel improves the saturation estimates and is not required.
Why cut a channel returning 9.2x?
Because most of that return is demand that already existed. Brand search intercepts people who typed your name, so scaling it buys clicks you would have had for free. The marginal return, not the average, is what decides whether the next dollar belongs there.
Does this prove incrementality?
No, and it says so. Reconciling against your own orders removes double counting, which is the larger and easier error. Proving incrementality needs a holdout, and where a channel's allocation hinges on it the skill recommends running one.
What is included with the skill?
The skill itself, the attribution notes reference, the allocation format, and the saturation model. It is free and security scanned. We re-publish the ZIP when the model changes, so download it again if your splits start shifting.
Splitting budget on platform ROAS splits it on three different revenues.
Polar reconciles every channel to one definition of net revenue and blended CAC, so the new mix is built on figures that add up.
<script type="application/ld+json">{"@context":"https://schema.org","@type":"FAQPage","mainEntity":[{"@type":"Question","name":"How is this different from a blended ROAS report?","acceptedAnswer":{"@type":"Answer","text":"A blended report sums numbers that each platform computed about itself, which double counts orders. This reconciles them against the orders your business actually recorded, then compares channels on contribution and on what the next dollar returns rather than on the average of the last one."}},{"@type":"Question","name":"Which agents does the skill run in?","acceptedAnswer":{"@type":"Answer","text":"Any agent that supports the open SKILL.md format: Claude Code, Cursor, Codex CLI, GitHub Copilot, Gemini CLI, Manus, Grok and others load it unmodified. The format is portable, the location is not. Each agent scans its own skills directory, so you drop the same folder into whichever one yours uses. There is no config file to edit and no API key to provision."}},{"@type":"Question","name":"What does it need connected to work?","acceptedAnswer":{"@type":"Answer","text":"Spend and reported revenue per channel, your own order data, product cost, returns and payment fees. Historical spend variation per channel improves the saturation estimates and is not required."}},{"@type":"Question","name":"Why cut a channel returning 9.2x?","acceptedAnswer":{"@type":"Answer","text":"Because most of that return is demand that already existed. Brand search intercepts people who typed your name, so scaling it buys clicks you would have had for free. The marginal return, not the average, is what decides whether the next dollar belongs there."}},{"@type":"Question","name":"Does this prove incrementality?","acceptedAnswer":{"@type":"Answer","text":"No, and it says so. Reconciling against your own orders removes double counting, which is the larger and easier error. Proving incrementality needs a holdout, and where a channel's allocation hinges on it the skill recommends running one."}},{"@type":"Question","name":"What is included with the skill?","acceptedAnswer":{"@type":"Answer","text":"The skill itself, the attribution notes reference, the allocation format, and the saturation model. It is free and security scanned. We re-publish the ZIP when the model changes, so download it again if your splits start shifting."}}]}</script>
