About this template
A 50% markup is a 33% margin
If you add 50% to cost and believe you're running at 50% margin, you're running at 33% — and every pricing decision you've made from that number is off.
margin % = (price − cost) ÷ PRICE
markup % = (price − cost) ÷ COST
Every line of every report says which one it used. It defaults to margin and labels it.
Your cost isn't the invoice
COGS is landed cost, and five things go into it:
- Unit cost from the supplier
- Inbound freight + duty, per unit
- Payment processing — a percentage of price, so it moves when price moves
- Fulfilment / pick-pack and packaging
- Platform or marketplace fees
Anything you don't supply shows as [MISSING: what] and the margin is labelled
INCOMPLETE — never quietly computed on invoice cost alone and presented as
real.
The scenario trap
Percentage fees must be recomputed at each modelled price, not held flat from the current one. Holding processing constant while you model a 10% price rise overstates the gain — and that's how most pricing spreadsheets lie to their owner.
Three scenarios, and the number that matters
Per SKU: your target margin, −10%, +10%. Each shows margin %, gross profit per unit, and the break-even volume change — how many more units you'd have to sell for total gross profit to hold at the lower price.
That last figure is what turns a price idea into a decision.
What comes back
Below target first, then a separate losing money section — anything at or under 0% after landed cost, broken out on its own because it's urgent rather than merely low.
Every margin line prints price, landed cost and the subtraction. A margin you can't check is a number you shouldn't price on.
What you supply
Your own Claude Code login, plus a product export with price and cost (Shopify:
Products export; QuickBooks: Sales by Product with COGS) in ~/margin/exports/.
Add your freight and processing figures to the rules file. And say whether your target is a margin or a markup — if it's ambiguous the agent asks, because getting it backwards inverts every verdict.
No API key. The export is the input, which is also why nothing can change a price.
Where this stops
It computes and models. It does not change prices, update a catalogue, or push to a store.
It won't tell you what to charge — it reports margin against your stated target. It won't estimate price elasticity, because it can't know how demand responds; the break-even volume change is the honest substitute. Tax treatment goes to your CPA.
Verified on build: the skill, the working tree, the NEVER_SET_PRICES guard, the
margin-vs-markup rule, all five landed-cost components and the fees-move-with-price
rule are present on a fresh fork. Running it on your own catalogue is yours to do.