Sell a product for R150. It cost you R100. That is a 50% markup.
The margin is 33.3%.
If you have ever quoted one number and meant the other, the rest of this post is for you. And so is the Free Profit Margin Calculator.
Where the R150 Actually Goes
A small worked example. The same one most pricing spreadsheets quietly get wrong.
You sell an item online for R150 (VAT inclusive). Your supplier charges R80 ex-VAT. The packaging costs R5. Freight to you is R3 per unit. So far, so simple. Cost is R88 and you tell yourself you are pricing at "about 70% markup".
Now subtract what selling actually costs:
- VAT on the sale: ~R19.57 (15% of R150 inclusive)
- Payment gateway: 2.9% of R150 = R4.35
- Marketplace commission: 10% of R150 = R15
- Return allowance: 5% of R150 = R7.50
R150 inc VAT becomes R130.43 ex VAT. Minus R88 cost, minus R26.85 in variable fees, you keep R15.58 per unit.
That is a 10.4% margin on the net sale, not 70% of anything. And it is before you allocate a single rand of monthly overhead.
This is the kind of arithmetic the free analyzer does in the background on every keystroke. It is also why the first piece of friction it introduces is a side-by-side margin / markup display. You can quote both. You cannot mistake one for the other.
The Minimum Price That Survives Your Own Fees
If you sell through a gateway, a marketplace, or you carry a return allowance, your true floor price is higher than your "cost plus target margin" makes it look.
Worked: cost R88, target margin 25%, variable fees adding to 17.9% of selling price.
A naive minimum is R88 / (1 − 0.25) = R117.33. Wrong floor.
The fee-aware floor is R88 / (1 − 0.25 − 0.179) = R154.12. Almost R37 higher.
The analyzer surfaces this as Min selling (ex tax) and Min selling (inc tax) on the Pricing tab. Discount below that and you are paying customers to take your product. The maximum-safe-discount calculator on the same tab tells you the largest discount you can still survive at your target margin, given your fee load.
Importing? Then There Are Three More Lines
A small importer brings in 100 units from a supplier in China. Unit cost USD 12. Exchange rate 18.50. Freight is rolled into the supplier invoice. Customs duty is 20%. Import VAT is 15% (claimable, because the business is VAT registered) on the duty-inclusive value plus a 10% ATV uplift.
The landed-cost tab walks the chain:
- Supplier in local currency: 100 × USD 12 × 18.50 = R22,200
- Customs duty: 20% of (R22,200 + 10% ATV) = 20% × R24,420 = R4,884
- Import VAT: 15% of (R22,200 + 10% ATV + duty) = 15% × R29,304 = R4,395.60 (claimable, so not a cost)
- Landed total (cost basis): R22,200 + R4,884 = R27,084
- Per unit landed cost: R270.84
If the business were not VAT registered, the R4,395.60 import VAT would flip into the cost column and the per-unit landed cost would jump to R317.80. That is a 17% swing in product cost driven by one checkbox. The calculator handles it; spreadsheets routinely do not.
Break-Even, In Two Numbers
Two inputs: monthly fixed-cost share this product must cover, and expected monthly units. The output is a chart with a red loss zone, a green profit zone, a dashed marker at the break-even unit count, and a blue marker at your expected volume. Plus four numeric tiles: contribution margin per unit, break-even units, break-even revenue, months to break even at expected volume.
If your break-even marker sits to the right of your expected-volume marker, the chart shows that immediately. You do not have to do the subtraction.
Wholesale Tiers, With a Floor
If you run tiered pricing (retail / small wholesale / distributor / bulk), the analyzer recalculates margin per tier and flags any tier that falls below the minimum margin you set. The "I'll just give the distributor 35% off" tier that quietly turns negative on a 22%-margin product? It lights up red before it ships in a price list.
The Competitor Match That Costs You Money
Competitor pricing is one of the most common places small businesses match without doing the maths. Add competitor inc-tax prices in the Competitors tab and you get three columns automatically: your gap in currency, your gap in percent, and your margin if you matched. When matching them would push you negative, the cell turns red and a warning fires on the Warnings tab.
It is not a recommendation to discount or hold price. It is the maths that tells you which of those two options you can afford.
Scenarios: The Five Numbers That Move Your Margin
Pricing is rarely static. Suppliers raise prices. Customers demand discounts. Gateways adjust fees. Exchange rates swing. The scenario simulator runs ten kinds of shift against your current pricing: cost increase %, price decrease %, fee bump, FX swing, target-margin change, freight increase, return-rate increase, marketplace commission change, customs duty change, import-tax change.
For cost-side scenarios there is a freeze toggle: hold the selling price and watch margin compress, or hold the margin and watch the required selling price climb. Both views are useful. The first answers "if I absorb this, what happens?" The second answers "if I refuse to absorb it, what is the new sticker?"
A worked one: supplier raises 12%, you freeze the selling price. The comparison table shows baseline vs scenario for cost, margin %, gross profit per unit, and break-even units, with the deltas. The chart underneath puts the bars next to each other so you can see how much room you actually have.
What Drives the Tool
Six business presets: importer, ecommerce, manufactured, wholesale, service, agency. Each loads sensible default cost lines for that shape of business, so you are editing a starting position rather than building from a blank canvas.
Four tax regions plus a custom one. Switch from South Africa VAT to UK VAT and the rate snaps to 20%, the currency snaps to GBP, the labels change from "VAT" to "VAT" (no change there) and the registration checkbox wording stays the same. Switch to United States and you get "Sales tax rate %" / "Have sales tax permit" / USD. Switch to Australia and you get "GST" / AUD. The maths is identical underneath. Only the labels and defaults move.
A printable A4 report consolidates everything: pricing summary, cost breakdown, landed cost, competitors, wholesale tiers, break-even chart, marketing & CAC (for ecommerce), service rate (for service / agency), warnings, your notes, the disclaimer. Print it. Save it as PDF. Email it to the bookkeeper. It is the analyst's working paper, not a sales sheet.
How the Maths Stays Honest
No AI. The analyzer is a pure formula engine. Every number on screen comes from a function in lib/formulas.js, the same way a spreadsheet would, only with a tested module behind it instead of a cell reference graph. Fifteen rule-based warnings fire when something is off: margin below target, discount below break-even, competitor match at a loss, tier below minimum margin, import tax mishandled given registration status, FX baseline missing, and so on.
You can audit the numbers. You can argue with the numbers. You can change an input and watch every downstream number move. That is the whole point of a calculator that is not a black box.
Where the Data Lives
In your browser. IndexedDB and localStorage. Nothing about your pricing is uploaded. Not your supplier costs, not your margins, not your competitor benchmarks.
The tradeoff is the same one every browser-local tool carries: if you clear browser data, switch devices, or work in private browsing, saved projects can disappear. The Backup tab fixes that. Export your projects as JSON, file them somewhere you control, import them back when you need them. Per-project export, or full backup of everything.
Local storage is not a privacy slogan; it is a design choice with a maintenance cost. The maintenance cost is one JSON export now and again. Worth it for the privacy posture.
When This Tool Is the Right Tool
When you are pricing a single product, a small range of products, or a service quote, on one device, and you want the maths right. When you are setting up a new product line and need a defensible costing before you commit to a supplier. When you are reviewing a tier sheet a wholesaler sent you and want to know whether the third tier loses money. When you are trying to decide whether to absorb a supplier hike or pass it on. When you want to print a clean A4 pricing report for your bookkeeper or your accountant.
For all of that, this is the right tool.
When the Maths Outgrows the Browser
When your pricing has to be approved by more than one person. When you need an audit trail of which prices changed, when, and why. When pricing feeds directly into billing, inventory or accounting and the rate of change makes manual re-entry untenable. When you have a dozen pricing rules that depend on customer, region, channel and contract. When you need someone else on a different device to see the same numbers without sending a JSON file.
That is the point at which a browser-only calculator is no longer the answer, and a custom pricing-to-billing platform is. Either off-the-shelf, or built around the operations you already run.
Use It
The analyzer is here:
It is free. It is not a trial. It will stay free.
If you find a margin error it would have caught for you, that is the proof. Share it with the next operator you know who is quoting markup and meaning margin.
If your pricing has outgrown a browser, get in touch.
A de Villiers, building software in Cape Town since 2011.