Shopify Discount Code Performance: What Did Your BFCM Discounts Really Cost?

Track Shopify discount code performance in Google Sheets: orders, AOV and discount % of gross per code, line vs order-level discounts, before Black Friday.

The short answer: to measure Shopify discount code performance, count the orders that used each code, then work out each code's net sales, average order value (AOV) and discount as a share of gross sales. A code that brings lots of orders at a low AOV and a high discount % can cost you more than it earns. Check this on your pre-Black Friday promotions now, so you know which codes deserve the spotlight from 27 November.

This guide shows you how to do that in Google Sheets with SyncRange, using the discount fields Shopify already records on every order. If you'd rather not build it yourself, the Discounts tab in our free BFCM reporting template does it for you.

Why "orders per code" isn't enough

Shopify's admin tells you how many times a code was used. That's a start, but it doesn't tell you what the code cost or what kind of order it brought in. For each code you want four numbers:

MetricHow to work it outWhat it tells you
OrdersOrders where the code appearsReach of the offer
Net salesGross sales − discounts − returns on those ordersWhat you actually kept
AOVNet sales ÷ ordersWhether the code pulls basket size up or down
Discount % of grossDiscounts ÷ gross sales on those ordersThe real depth of the offer

Put them side by side and the trade-offs show up. The table below is made-up example data, not real store figures.

Example dataOrdersNet salesAOVDiscount % of gross
BF30 (30% off sitewide)400$24,000$6030%
SPEND150 ($25 off orders over $150)120$19,800$16513%
No code600$48,000$800%

On these example numbers, BF30 brings more orders, but SPEND150 gives away far less per dollar of sales and lifts AOV above the no-code baseline. Neither is automatically "better". The point is that you can only make the call when you see all four numbers together.

Where Shopify records discounts: line level vs order level

Before you build anything, it helps to know that Shopify stores discounts in two places, and SyncRange exports both. Every column below is in the Shopify data reference.

And the totals:

The gotcha: on the Line Items tab, Total Price is the line total after line-level discounts only. Order-level discounts are not subtracted; they sit in Order Discount Amount (the line's prorated share). If you add up line totals for orders that used an order-level code, you'll overstate their sales. Use Sales Metrics or the Orders tab for order totals. Configuring Shopify exports explains how refunds and discounts flow through each tab.

What you need

Step by step: discount code performance in Google Sheets

Step 1: Connect Shopify and your sheet

Connect your Shopify store (Connecting Your Shopify Store), then add your Google Sheet as a destination (see Configuring Google Sheets). If you're using the template, make a copy first and pick that copy.

Step 2: Create the Shopify export

Create a Shopify export to the sheet (Configuring Shopify Exports) and tick these tabs and columns:

Set the date range to a rolling preset such as Last 90 days and data handling to Replace. Run it once, check the tabs fill, then set a schedule. The free plan syncs daily and lets you refresh manually; higher plans can sync more often (see pricing), which helps on Black Friday itself.

Step 3: Build a helper tab

Never add columns inside the tabs SyncRange writes to, because Replace mode rewrites them on every run. Instead, create a tab called calc_Codes that reads from them:

Column letters here are examples. Point them at wherever your columns landed (the template looks columns up by header name, so order doesn't matter there).

Step 4: Count orders and sales per code

List your codes in a summary tab (you can pull the list from the Discount Code column of the Discounts tab, or type the ones you care about). For a code in A2, match it as a whole item in the comma-separated list, so SAVE10 doesn't also count SAVE100:

To limit it to a date window (say the week before Black Friday, or BFCM itself), multiply by (calc_Codes!B2:B>=start)*(calc_Codes!B2:B<=end). If a code contains regex characters such as + or ., escape them or match on exact text instead.

Add a "No code" row (orders where column C is blank) as your baseline AOV.

Step 5: Handle stacked codes honestly

When a customer uses two codes on one order, that order counts under both codes, and the order's Discounts total covers both. That's fine for orders and AOV, but it means the per-code discount figures overlap. If stacking matters for your store:

The template's Discounts tab keeps it simple: stacked codes share the order's total discount, and the tab says so in its notes.

Step 6: Add the catalog details

Join the summary to the Discounts tab on Discount Code to show Discount Value Type, Discount Value, Minimum Value, Status and Ends At next to each code's results. One caution: Code Used Count is the lifetime count for that code, not just the dates you're looking at, so label it that way.

Step 7: Chart it

Three charts tell the story: a bar chart of orders by code, a bar chart of net sales by code, and a scatter of AOV against discount % of gross. Codes towards the top left (high AOV, low discount %) are the ones worth a closer look. The template's Discounts tab already has all three, plus totals for the share of orders with a code, AOV with and without a code, and the discount rate on orders with a code.

Compare codes before Black Friday, not after

Black Friday is Friday 27 November 2026. You have the next ten days to use what's already in your data:

Then, during BFCM, re-sync as often as your plan allows and watch the same table. If one code is pulling AOV well below your baseline, you'll see it while there's still time to change the offer.

Discount codes across several stores or markets

If you run more than one Shopify store, or one store selling into several markets, look at code performance per store as well as overall.

Optional: put ad spend next to your codes

If a code only runs in your Meta ads, its true cost is the discount plus the ad spend behind it. You can add that with a second export:

  1. Connect Meta and export the Insights (Campaigns) tab, which has Spend by campaign (see Configuring Meta exports and the Meta data reference).
  2. In your summary, put each code's net sales next to the spend of the campaign that promotes it.

The BFCM template is Shopify-only, so this goes in a tab you add yourself. For the maths, see how to calculate return on ad spend, or start with the Meta to Google Sheets workflow.

Frequently asked questions

How do I track discount code performance in Shopify? Export your Shopify orders with their discount codes and per-order sales into a spreadsheet, then count orders, net sales, AOV and discount % of gross for each code. In SyncRange, the Orders tab's Discount Codes Applied column and the Sales Metrics tab give you everything you need, and the BFCM template's Discounts tab does the maths.

What's the difference between line-level and order-level discounts? Line-level discounts apply to specific products and are allocated to those lines (Discount Amount on Line Items). Order-level discounts apply to the whole order (Order Level Discount Total on Orders). The Orders tab's Discounts column is the sum of both.

Why don't my line item totals add up to the order total? Line Items Total Price subtracts only line-level discounts. Order-level discounts sit in Order Discount Amount on each line and are not subtracted, so use the Orders or Sales Metrics tab for order totals.

How do I count an order that used two discount codes? Count it under both codes for orders and AOV. For the discount amount, either let the codes share the order's total discount (simple), or use Order Level Discount Amounts (JSON) and Discount Amount Breakdown to split it per code (exact).

Does Code Used Count show how many times a code was used on Black Friday? No. It's the lifetime count for that code. For a specific window, count orders from the Orders tab filtered by Order Date.

Do I need a paid plan? You can start on the free plan, no credit card required. It syncs daily with manual refresh; higher plans can sync more often, which helps if you want to watch codes during BFCM. See the pricing page for details.

Know what your codes cost before Black Friday

You've got about ten days to find out which offers bring in the orders you want. Set it up this week, and on Black Friday you'll be watching numbers you already trust.

More on Shopify reporting: export Shopify orders to Google Sheets, the Shopify to Google Sheets workflow, SyncRange for Shopify and our other Google Sheets templates.

Start syncing your ecommerce data in minutes Start free today. No credit card required.