⚠️   Shopify Scripts will no longer be supported as of June 30, 2026  ⚠️   read the Shopify article 

Shopify Analytics Sales by Discount or Sale Price

Table of Contents

  1. Introduction
  2. The Technical Distinction: Sale Price vs. Discounts
  3. Navigating Shopify Sales Reports
  4. Platform Capabilities and Constraints
  5. Implementing Logic-Based Sales with Nextools
  6. Choosing the Right Tool: A Decision Checklist
  7. Advanced Scenarios: Multi-Currency and Shopify Markets
  8. Measuring Impact and Iterating
  9. The Role of Shopify Functions in Modern Reporting
  10. Safeguarding Your Data: Staging and QA
  11. Nextools Shopify App Suite (Quick Links)
  12. Conclusion
  13. FAQ

Introduction

High-volume Shopify Plus merchants and their development partners often face a significant hurdle when reconciling monthly revenue: the discrepancy between how the platform reports “sale prices” versus “discount codes.” In many cases, a marketing team views a 20% reduction as a single campaign, but in the backend, those numbers are processed through two entirely different logic streams. If you use a “Compare-at price” to show a markdown, it behaves differently in your sales reports than an automatic discount triggered by a Shopify Function.

At Nextools, we specialize in helping Shopify Plus stores navigate these technical complexities. Whether you are managing a high-stakes Script-to-Functions migration or building advanced checkout logic for a multi-market brand, understanding the data architecture behind your revenue is essential. This post is designed for developers, agencies, and e-commerce managers who need to extract precise insights from Shopify analytics regarding sales by discount or sale price.

We will analyze how Shopify categorizes these figures, where the reporting limits lie, and how to use the Nextools Shopify App Suite to implement durable, logic-based discounts that don’t break your data integrity. Our approach follows the engineering-minded Nextools Playbook: clarify your goals and constraints, confirm platform limits, choose a Functions-first solution, implement safely in staging, and measure impact using clean data.

The Technical Distinction: Sale Price vs. Discounts

To accurately track performance, you must first understand that Shopify treats “Sale Prices” (Compare-at prices) and “Discounts” (Codes or Automatic Discounts) as distinct data entities. This distinction affects every report in your Analytics dashboard.

Sale Price (The Compare-at Price)

A sale price is a static attribute of a product variant. When you set a Compare-at price higher than the Price, Shopify displays the original price with a strikethrough. From an analytics perspective:

  • The “Price” field becomes the Gross Sale amount.
  • The original (Compare-at) price is not recorded as a “discount” in your reports; it is simply treated as metadata for display.
  • Gross sales in your reports will reflect the $10 price of a product, even if the Compare-at price was $30.

Discounts (Codes and Functions)

Discounts are dynamic reductions applied at the cart or checkout level. These are powered by Shopify’s discount engine or the newer Shopify Functions API.

  • The “Gross Sale” remains the full price of the item before the discount.
  • The discount amount is tracked in a dedicated Discounts column in your reports.
  • Net Sales is calculated as (Gross Sales – Discounts – Reversals).

This structural difference means that if you want to see “How much revenue did we lose to our summer sale?”, the answer depends entirely on which method you used. If you used Compare-at prices, that “loss” is invisible to the Sales by Discount report.

Navigating Shopify Sales Reports

Shopify provides several native reports to view performance, but they require a granular understanding of the terms used. These reports are updated roughly every minute, providing near real-time visibility for merchants.

Sales by Discount

This is the primary report for tracking the effectiveness of your promotional campaigns. It groups sales by the specific discount code or automatic discount title applied. This report is critical for measuring the ROI of influencer codes or seasonal promotions.

However, a common limitation is that this report does not currently display duties for stores using Shopify Markets with duty collection at checkout. Furthermore, if you are using a third-party app to “hack” prices rather than using the native discount engine, those sales may not appear here at all.

Sales by Product and Variant

If you are running “Compare-at” sales, this is where you must look. Since there is no “Discount” associated with a static price drop, you must compare the performance of specific products during the sale period against their historical baseline.

Total Sales Formula

At Nextools, we always remind merchants of the fundamental Shopify Total Sales formula:

Total Sales = Net Sales + Shipping + Taxes + Duties + Additional Fees + Tips

Because shipping and taxes are included in “Total Sales,” you cannot use this figure alone to judge the success of a discount campaign. You must look at Net Sales to see the actual product revenue generated after the discount has been subtracted.

Platform Capabilities and Constraints

Before implementing advanced discount strategies, it is vital to understand the constraints of the Shopify platform. Not all features are available on all plans, and certain logic can only run in specific environments.

Shopify Plus and Checkout Extensibility

For merchants on Shopify Plus, the shift to Checkout Extensibility and Shopify Functions has changed the landscape of sales reporting. Previously, many stores used Shopify Scripts (Ruby) to create complex discount logic. As Shopify moves toward deprecating Scripts, migrating to Functions is the “simplest durable approach” we recommend at Nextools.

Where Logic Can and Cannot Run

  • Theme/Storefront: You can display Compare-at prices and “Amount Saved” badges. However, logic here is purely cosmetic and does not affect the actual transaction data.
  • Checkout: This is where Shopify Functions (and the Nextools App Suite) operate. Functions allow you to hide, sort, or rename payment and delivery methods, or apply custom discount logic that is processed natively by Shopify’s engine.
  • Post-Purchase: Logic here occurs after the initial transaction, which can complicate reporting if not handled through official APIs.

The Problem with Brittle Theme Hacks

In the past, developers often used “Draft Orders” or “Price Overrides” via custom apps to create tiered pricing. These “hacks” often bypass the native discount engine, meaning the “Sales by Discount” report remains empty. This makes it impossible for marketing teams to track performance accurately without manual spreadsheet reconciliation.

Implementing Logic-Based Sales with Nextools

To get the most out of your Shopify analytics, you need to implement discounts in a way that the platform recognizes. This is where the Nextools Shopify App Suite becomes a strategic asset for Plus merchants.

Using SupaEasy for Functions-First Discounts

SupaEasy is our flagship tool for generating Shopify Functions without writing custom code. If you need to migrate from Shopify Scripts to Functions, SupaEasy provides an AI-assisted wizard to recreate your logic.

  • Scenario: You want to offer a 15% discount only if a customer uses a specific payment method (like a branded credit card) and is in a specific shipping zone (e.g., Italy).
  • Reporting Impact: Because SupaEasy uses native Shopify Functions, this 15% reduction is recorded in the “Discounts” column of your sales reports. You can track the success of this “Payment-Method-Specific” campaign directly in your analytics.

Tiered Discounts with Multiscount

When you need complex “Buy X Get Y” or tiered volume discounts, Multiscount provides a stackable framework.

  • Scenario: A merchant wants to offer 10% off for 2 items, 20% for 5 items, and a free gift for 10 items.
  • Reporting Impact: Multiscount ensures each tier is clearly identified within the order data, allowing you to see which tier is driving the most conversion.

Validating the Cart with Cart Block

Sometimes, the best way to protect your margins is to prevent certain discount combinations. Cart Block allows you to validate the checkout and block orders that meet specific criteria (e.g., using a high-value discount code on already-markdown items). This ensures your “Sales by Discount” reports aren’t skewed by unintended “stacking” of offers.

Choosing the Right Tool: A Decision Checklist

When deciding how to implement a sale and how to track it, use this checklist to choose the right tool from the Nextools suite:

  1. Do you want the discount to appear as a line-item reduction in reports?
    • Yes: Use SupaEasy or Multiscount.
    • No (Marketing display only): Use Compare-at prices in the Shopify Admin.
  2. Is the discount dependent on payment or shipping methods?
    • Yes: Use SupaEasy (Functions) or HidePay/HideShip to control eligibility.
  3. Are you migrating from Ruby Scripts?
    • Yes: Use SupaEasy Advanced/Ultimate for the Scripts Migrator and AI Generator.
  4. Do you need to show the “amount saved” clearly on the checkout page?
    • Yes: Use SupaElements to add dynamic UI components to the checkout.

Advanced Scenarios: Multi-Currency and Shopify Markets

For global brands, reporting on sales by discount becomes significantly more complex due to currency fluctuations and rounding rules.

The Rounding Issue

When a 20% discount is applied to a product priced at €19.99, the result might be €15.992. Shopify Markets handles the rounding based on your store settings. However, in your “Sales by Discount” report, these fractions can sometimes lead to minor discrepancies when converted back to your shop’s functional currency (e.g., USD).

Duty and Tax Considerations

Discounts are always applied before taxes. If you are tracking “Total Sales,” remember that a discount reduces the taxable base. This is why “Total Sales” can fluctuate wildly based on the tax laws of the customer’s region, even if the discount percentage is consistent. For Italian merchants, tools like Fatturify are essential to ensure that these discounted amounts are correctly synced with “Fatture in Cloud” for tax compliance.

Measuring Impact and Iterating

The final step in the Nextools Playbook is measurement. Once your sale is live, you should monitor three specific KPIs beyond just “Total Sales”:

  1. Discount Absorption Rate: What percentage of your total orders are using a discount? If this is too high, you may be training your customers to never pay full price.
  2. AOV (Average Order Value) with vs. without Discount: Does a 10% discount actually lead to a 20% increase in cart size? If not, the discount may be cannibalizing your margins without providing enough volume.
  3. Return Rate by Discount Code: Are customers who use a specific “50% Off” code returning items at a higher rate than full-price customers? This is a common pattern in fashion e-commerce.

By using Nextools apps, you can iterate on these findings. If Cart Block shows that a certain discount is being abused by bots or causing high return rates, you can adjust the validation logic in real-time without redeploying code.

The Role of Shopify Functions in Modern Reporting

Shopify Functions are the future of checkout logic. Unlike the older “all or nothing” approach of custom apps that modified the cart via the Storefront API, Functions are part of the core Shopify backend. This means:

  • Performance: They run in under 10ms, ensuring no drop in conversion rate.
  • Reliability: They work across all sales channels, including POS and Online Store.
  • Analytics Accuracy: Because they are native, every price change made by a Function is perfectly captured in Shopify’s internal analytics database.

For developers, this means no more “missing data” when a customer uses a complex discount. By building or deploying Functions via SupaEasy, you ensure that the marketing team gets the “Sales by Discount” data they expect, while the accounting team gets the “Net Sales” data they need.

Safeguarding Your Data: Staging and QA

Implementation of new discount logic should never happen directly in a live environment. At Nextools, we advocate for a “Safety First” approach:

  1. Development Store Testing: Use the free development plans for apps like SupaEasy or HidePay to build your rules.
  2. Scenario Mapping: Create a spreadsheet of expected outcomes. (e.g., “If Cart > $100 and Country = US and Product = X, then Discount = 15%”).
  3. Edge Case Testing: What happens if a customer applies two different codes? What if they use a gift card? Use Cart Block to set the hierarchy of which rules take precedence.
  4. Rollback Plan: If your “Sales by Discount” report shows unexpected zeros after launch, have a plan to disable the Function immediately and revert to standard Shopify discounts while you troubleshoot.

Nextools Shopify App Suite (Quick Links)

Explore our full suite of tools designed to optimize your Shopify checkout and reporting:

Conclusion

Mastering Shopify analytics for sales by discount or sale price requires moving beyond the surface-level “Total Sales” figure. By understanding the architectural difference between Compare-at prices and line-item discounts, you can build a reporting structure that actually supports your business goals.

The transition to Shopify Functions and Checkout Extensibility is the perfect opportunity to clean up your data. Avoid brittle theme hacks and move your logic into the native Shopify engine where it belongs. This ensures that your marketing, accounting, and operations teams are all looking at the same source of truth.

Actionable Checklist for Shopify Merchants:

  • Audit your current sales: Are you using Compare-at prices or Discount codes?
  • Identify “Invisible Discounts”: Are there price reductions happening that aren’t showing up in the Sales by Discount report?
  • Plan your migration: If you are still using Shopify Scripts, begin moving to Functions with SupaEasy.
  • Validate your stack: Use Cart Block to prevent discount conflicts that skew data.
  • Monitor Net Sales: Ignore Total Sales for a moment and focus on the revenue remaining after all adjustments are made.

If you are ready to take control of your checkout logic and reporting, we invite you to explore the Nextools App Suite hub. Our tools are built to scale with your business, providing the professional-grade customization that Shopify Plus merchants demand.

FAQ

Does Shopify report “Compare-at” price savings in the Sales by Discount report?

No. The “Sales by Discount” report only tracks reductions created through the Shopify discount engine (discount codes or automatic discounts) and Shopify Functions. Savings from “Compare-at” prices are effectively “baked in” to the Gross Sales figure and do not appear as a separate line item for discount reporting.

Can I test these discount analytics in a Shopify Development Store?

Yes. All Nextools apps, including SupaEasy and Multiscount, offer free plans for Development and Shopify Plus sandbox stores. This allows developers to configure complex discount logic and verify how the data appears in the Analytics dashboard before the store goes live.

How do I migrate my existing Ruby Scripts to Shopify Functions?

Shopify is phasing out Scripts in favor of Functions. You can use the SupaEasy Advanced or Ultimate plans, which include a Scripts Migrator and an AI Functions Generator. This tool helps you translate your existing Ruby logic into the Rust-based Functions architecture while ensuring your sales data remains consistent during the transition.

How can I prevent multiple discounts from conflicting in my reports?

To avoid “discount stacking” where multiple offers apply to the same order (and potentially confuse your analytics), you can use Cart Block or SupaEasy to set strict validation rules. You can define which discounts are mutually exclusive, ensuring that your reports accurately reflect the specific campaign you intended to run.

SupaEasy is a product built & designed by Nextools

Company

© [2024] website by Nextools. All Rights Reserved. PIVA: 16711981007