Sales by Discount Code

Sales by Discount Code shows which discount codes customers used, how many orders each one brought in, and how much each cost you in discounts.

The Sales by Discount Code report, with a table with one row for each discount code and a Type filter

How It’s Calculated

The table has one row for each code, or each combination of codes, used on an order in the date range. The row with the most orders comes first. An order that used no discount of the chosen types is in the row named (no discount).

The columns are:

  • Discount Code: the code, or the title for a discount with no code, in capital letters. An order that used 2 discounts is its own row, such as SPRING10, WELCOME.
  • Type: how the discount was applied, as Promo, Automatic, Manual/Service or Shipping.
  • Orders: the number of orders that used it.
  • Average Order Value: the row’s sales before returns, divided by its orders.
  • Gross Sales: each item’s price times its quantity, before discounts, shipping, tax and returns.
  • Discounts: the total discount on those orders.
  • Total Sales: Gross Sales minus Discounts, plus Shipping and Tax, minus money refunded in the date range.
  • Abandoned Checkouts and Abandoned Value: the number and total price of checkouts that carried the code and were never completed.

Discounts is everything taken off the orders in the row, so it can include other discounts on the same orders that the Type filter hides.

The Type Filter

The Type filter chooses which kinds of discount the report counts:

  • Promo: a code your customer entered.
  • Automatic: a discount that applies by itself, or from a script.
  • Manual/Service: a discount added by editing an order, typically for a replacement or a goodwill credit.
  • Shipping: a discount on shipping.

It starts with Promo, Automatic and Shipping selected, so manual order edits don’t count as marketing. Add Manual/Service to see them. Manual & Service Adjustments lists them on their own.

Orders from before By the Numbers recorded discount types show their codes as Promo.

Abandoned Checkouts

These 2 columns come from Shopify’s record of abandoned checkouts, not from orders. They use only the date range.

Sales Channel, Segment, Filters and Type don’t change them. They count checkouts started in the range, with days counted in UTC.

A row shows them only for a single code that appears in that record. The record is cut to the 200 codes with the most abandoned value, so a code outside them is blank. A row that combines several discounts, or a code with no record, is blank.

What Counts

  • Sales count on the day the order was placed. A refund counts on the day it was made, against the code of the original order. A code with refunds but no orders in the range still appears. Refunds on orders placed more than 2 years before the start of the date range aren’t counted.
  • Orders that were canceled, or whose payment was voided or expired, don’t count.
  • Days follow your store’s time zone, and every amount is in your store’s currency.
  • Sales Channel, Segment and Filters narrow the sales columns. There’s no comparison period.

What Good Looks Like

A good code brings in orders that wouldn’t have happened without it, at a discount you can afford. Compare Discounts with Gross Sales in each row. The result is how much of the sale you gave away.

Compare each code’s Average Order Value with the (no discount) row. A code with a higher average is paying for itself in bigger orders. A code with a lower one is lowering your average.

What to Do About It

  • A code that costs a lot for few orders: end it, or limit it to a product or a customer group.
  • A code that brings in a lot of orders at a low average: raise the minimum order value for it.
  • A code with a lot of abandoned value: customers are trying it and leaving. Check that it works at checkout and that its terms are clear.
  • Which codes make money: open Discount Code Profitability to see gross margin on orders that used each code.

Where to Find It

Still need help? Contact Us Contact Us