1. Paste your orders
2. What it found
By category, worst first
| Category | Orders | Return rate | Returns cost | Margin before → after |
|---|
Every policy, against free returns
| Policy | Profit vs now | Pays when |
|---|
Findings
| Rule | Level | Detail |
|---|
Prefer a CLI, or want a CI check?
Same logic, zero dependencies, one command — reads a file or stdin:
node cli.mjs analyze orders.csv cat orders.csv | node cli.mjs analyze - node cli.mjs analyze orders.csv --margin 45 --out-ship 6.5 --resale 70 --days 90 node cli.mjs analyze orders.csv --deterrence 0.5 --drag 5 --json --fail-on warn
Get cli.mjs and engine.mjs — Node 18+, nothing to install, no network call. More: What a return really costs, and when a return fee pays.
What's recognised
| Input | Handling |
|---|
Deterrence and checkout drop-off are assumptions you set (defaults: a fee worth 10% of the order prevents 10% of its returns; 3% of buyers do not check out when a return fee worth 10% of the order is shown, more for bigger fees); exchanges, store credit, repeat purchases and lifetime value are not modelled; margin is the profit share of merchandise before shipping and fees.
Common questions
Does this connect to my store?
No. It reads the order rows you paste and never contacts Shopify, WooCommerce, Etsy, Amazon or any carrier. Every figure is arithmetic on your numbers plus two behaviours you set, so nothing here is a measurement of your customers.
How do I get the numbers?
Export orders from your store with the product category, the merchandise subtotal and the amount refunded. In Shopify the orders export carries Subtotal and Refunded Amount; the return label cost comes from your carrier report and is optional. Orders that were not returned get a refund of 0.
What counts as the cost of a return?
The outbound shipping you paid and cannot recover, the return label, the time to receive and inspect it, the share of returned goods you cannot resell, and the card fee, which processors generally keep when you refund. The margin on the sale is gone too, so a returned order is usually a loss, not a zero.
Would a return fee or restocking fee pay?
It depends on two things past orders cannot tell you: how many returns the fee talks buyers out of, and how many buyers it scares away at checkout. You set both, and the tool shows the drop-off at which each policy breaks even and the policy that loses least if your guesses are off.
Is my data uploaded anywhere?
No. The browser page runs on the text in your own browser and never sends it anywhere. The CLI reads a local file or stdin and makes no network call.