1. Your orders export
Shopify admin → Orders → Export → all orders or a date range → CSV for Excel, Numbers, or other spreadsheet programs. Needs Name, Total (or Subtotal) and Discount Code or Discount Amount; Email, Created at, Refunded Amount, Cancelled at and Financial Status are used when present. One row per line item is handled: each order is counted once. Cancelled and voided orders are left out.
Choose a file or paste export text, then click Analyze.
Result
By discount code
“New sales needed” is the share of a code's orders that must come from customers who would not otherwise have bought. Lower is safer; “never” means the discount is deeper than your margin.
| Code | Orders | Discount given | Avg. discount | Avg. order | Refund rate | New sales needed |
|---|
By discount depth
| Depth | Orders | Discount given | Share of discounts | Avg. order | Refund rate |
|---|
Discount value by customer type
| Customer | Discounted orders | Discount given | Share |
|---|
The model, and what it leaves out
- List price is the order subtotal plus the discount. The discount rate of a code is discount given divided by list price on its orders.
- Reconciles. Discount given across depth bands and customer types each add up to the headline discount total. An order that stacks two codes appears under each, so the code table can exceed the total, and the page says so.
- New sales needed is d × (1 − fee rate) ÷ m, where d is the code's discount rate and m is 1 − product cost − fee rate. It is the share of the code's orders that must come from customers who would not otherwise have bought, for the discount to earn back what it gave to the ones who would have.
- Lost money counts an order when list price minus discount, product cost, payment fees and refunds comes to less than zero, before shipping and advertising.
- Repeat buyers are matched by email within this file only, so the repeat share is a lower bound. Emails are never displayed or stored.
- Not modelled: whether a customer would have bought anyway, shipping and ad cost, per-item product cost, lifetime value, and orders outside the export.
Common questions
How do I find out which Shopify discount codes are losing money?
Export your orders from Shopify (Orders, Export, CSV) and drop the file here. For each code the tool totals the discount given and the orders that used it, then works out the share of those orders that must be new sales, customers who would not otherwise have bought, for the discount to pay for itself. Add your product cost percentage to get that figure; without it the tool still shows discount given, average order value and refund rate per code.
How is the break-even share calculated?
With margin m per dollar of list price (1 minus your product cost and payment fee rates), a discount of d costs d times (1 minus the fee rate) on every order. A new customer's order earns m minus that cost; a customer who would have bought anyway loses that cost. The two balance when the new-sales share equals d times (1 minus the fee rate) divided by m. If d is bigger than m, the code loses money on every order, however many are new.
Does the tool upload my orders or customer emails?
No. The file is read in your browser tab and never leaves your device. Customer emails are used only to tell whether a buyer had already ordered earlier in the same file, and are never displayed, stored or sent. There are no accounts and no store access is needed.
What does the tool not see?
Whether a given customer would really have bought without the code, shipping and advertising cost, product cost that varies by item, orders outside the export's date range, and what a discount does to lifetime value. Repeat buyers are recognised only within the file, so the repeat share is a lower bound. Treat the output as leads to review, not as a verdict on a code.
Is this financial or business advice?
No. It applies arithmetic to the file you provide and does not replace your own judgement or a qualified adviser. It is independent of Shopify and is not affiliated with or endorsed by it.