> ## Documentation Index
> Fetch the complete documentation index at: https://docs.vortexiq.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Discounts Given Over Time, Shopify

> Discounts Given Over Time for Shopify stores. Tracked live in Vortex IQ Nerve Centre. How to read it, why it matters, and how to act on it.

**Metrics type:** [Supporting Metrics](/nerve-centre/overview#metrics-types-explained)  •  **Category:** [Ecommerce Platform](/nerve-centre/connectors#connectors-by-type)

## At a glance

> Daily timeseries of total discount applied to orders. The promotional health view: when did promotions run, how heavy were they, what was the post-promo recovery shape?

|                               |                                                                                                                                                                |
| ----------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **What it counts**            | `DATE_HISTOGRAM(day, SUM(totalDiscounts))` over the 90-day window. Sum of discount value applied per day, including order-level and line-item-level discounts. |
| **API endpoint**              | `Admin GraphQL. Order.totalDiscounts` plus `Order.discountApplications` for breakdown by source.                                                               |
| **Discount sources included** | Manual codes, automatic discounts, Shopify Functions discounts, buy-X-get-Y, free-shipping discounts (where the discount is recorded as a line).               |
| **VAT / tax treatment**       | Discount values follow store tax setting; VAT-inclusive stores show VAT-inclusive discount amounts.                                                            |
| **Shipping**                  | Free-shipping discounts ARE included in `totalDiscounts`.                                                                                                      |
| **Refunds**                   | Refund-related adjustments NOT separately tracked here; cross-reference [Refund Value](/nerve-centre/kpi-cards/shopify/refund-value).                          |
| **Cancelled / voided orders** | Discounts on cancelled orders still bucket on their order day.                                                                                                 |
| **Currency**                  | Multi-currency arithmetic sum WITHOUT FX conversion. Filter to single currency for accurate stores transacting in multiple.                                    |
| **Channels / sources**        | Online + POS + B2B all contribute. POS price adjustments at the till count as discounts.                                                                       |
| **Time window**               | `90D` (daily buckets)                                                                                                                                          |
| **Alert trigger**             | None on this card directly; pair with [Discount % of Revenue](/nerve-centre/kpi-cards/shopify/discount-of-revenue) for the alerted ratio.                      |
| **Roles**                     | owner, marketing                                                                                                                                               |

## Calculation

```
DATE_HISTOGRAM SUM(totalDiscounts)
  WHERE date BETWEEN [period_start, period_end]
```

## Worked example

A US apparel brand on Shopify Plus. Period: 12 Feb 26 to 12 May 26. Daily total-discount summary:

| Period           | Avg discount / day | Notable peaks                                |
| ---------------- | ------------------ | -------------------------------------------- |
| 12 Feb to 25 Feb | \$850              | Steady (welcome code, base level)            |
| 26 Feb to 04 Mar | \$1,140            | Mild lift, tiered loyalty unlocks            |
| 05 Mar to 09 Mar | **\$8,200**        | Spring promo: SPRING20 / 20% off             |
| 10 Mar to 14 Mar | \$4,180            | Code still live but tapering                 |
| 15 Mar to 24 Mar | \$920              | Returned to baseline                         |
| 25 Mar to 12 Apr | \$880              | Steady                                       |
| 13 Apr to 16 Apr | **\$3,640**        | Easter campaign                              |
| 17 Apr to 25 Apr | \$980              | Recovery to baseline                         |
| 26 Apr to 12 May | \$1,020            | Steady, slight lift from Mid loyalty unlocks |

Five things to notice:

1. **Two clear promo events stand out.** Spring (05-09 Mar peak) and Easter (13-16 Apr). Each shows a clean ramp-up, peak, and return-to-baseline shape.
2. **The Spring tail (10-14 Mar) reveals coupon stacking.** \$4,180 / day for 5 days after the peak suggests the SPRING20 code wasn't fully shut down, or it was extended via influencer codes that overlapped. Pair with [Top Discount Codes](/nerve-centre/kpi-cards/shopify/top-discount-codes) to confirm.
3. **Baseline is informative.** $850 to $1,020 / day is the "always-on" promotional cost: welcome codes for new subscribers, abandoned-cart vouchers, loyalty-tier unlocks. This is structural and rarely worth fighting; the question is whether the promo events are paying back vs the always-on cost.
4. **Promotion-to-recovery shape matters.** Spring's recovery to baseline took 6 days (15-20 Mar); Easter's took 3 days. Faster recovery suggests Easter was driven by genuine seasonal demand; Spring may have pulled forward demand that would have come anyway, hurting margin.
5. **POS discounts contribute the surprise.** A staff training week 26-28 Mar included a 20% off employee discount across 3 retail outlets, contributing \$640 / day in line items. The card sums all sources; bonus categories (employee, wholesale, charity) need filtering at the source-tag level for cleaner promotional analysis.

## Sibling cards merchants should reference together

Discount timeseries needs context. Pair with these:

| Card                                                                                 | Why pair it with Discount Over Time | What the combination tells you                                                                                         |
| ------------------------------------------------------------------------------------ | ----------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
| [Total Discount](/nerve-centre/kpi-cards/shopify/total-discount-used)                | The 30D summary value.              | Trend reveals the shape; total gives the headline.                                                                     |
| [Discount % of Revenue](/nerve-centre/kpi-cards/shopify/discount-of-revenue)         | Discount as a share of revenue.     | A high discount day on a high-revenue day is healthy; a high discount day on a flat-revenue day is margin destruction. |
| [Revenue Over Time](/nerve-centre/kpi-cards/shopify/revenue-over-time)               | Revenue counterpart timeseries.     | Plot together, the lift in revenue on promo days quantifies promotional ROI.                                           |
| [Top Discount Codes](/nerve-centre/kpi-cards/shopify/top-discount-codes)             | Which codes drove the peaks.        | Identifies which coupon caused which spike.                                                                            |
| [AOV](/nerve-centre/kpi-cards/shopify/average-order-value)                           | AOV usually drops during promos.    | The AOV dip during a discount peak quantifies promotional cost in unit-economics terms.                                |
| [Orders Over Time](/nerve-centre/kpi-cards/shopify/orders-over-time)                 | Volume counterpart.                 | Orders × AOV × (1 - discount %) = revenue; the timeseries decomposition of growth.                                     |
| [`google_ads.google_promo_keywords`](/nerve-centre/google_ads/google_promo_keywords) | Ad spend on promo keywords.         | Aligns promo timing with paid-search amplification.                                                                    |

## Reconciling against the vendor's own dashboard

**Where to look in Shopify Admin:**

[Analytics → Reports → "Discounts"](https://admin.shopify.com/reports/discounts) → set the date range and resolution. Shopify's report gives daily / weekly discount totals plus a breakdown by code. The headline number should align with this card to within sync-lag tolerance.

Other Shopify Admin views:

* **Reports → Sales by discount**: same data, different framing.
* **Discounts page**: shows current active codes; not historical.
* **Apps like Lifetimely, Polar Analytics**: build profit-aware discount views by allocating margin per discount; useful complement.

**Why our number may legitimately differ from Shopify Admin:**

| Reason                        | Direction              | Why                                                                                                                         |
| ----------------------------- | ---------------------- | --------------------------------------------------------------------------------------------------------------------------- |
| **Time zone**                 | Boundary days          | Shopify uses store time zone for buckets; Vortex IQ uses store time zone for daily bars but UTC for window edges.           |
| **Discount source**           | Either                 | Shopify can split by discount type or app source; this card aggregates all discount types into one timeseries.              |
| **Refund-attached discounts** | Either                 | Refunds that adjust the discount allocation can move historical buckets in Shopify; the card uses the latest indexed value. |
| **Cancelled orders**          | Both include           | Both Shopify and the card include discounts on cancelled orders.                                                            |
| **Sync lag**                  | Ours lower for "today" | 5 to 15 minute index lag.                                                                                                   |

**Cross-connector reconciliation:**

| Card                                                                                 | Expected relationship                       | What causes legitimate divergence                                                                               |
| ------------------------------------------------------------------------------------ | ------------------------------------------- | --------------------------------------------------------------------------------------------------------------- |
| [`google_ads.google_promo_keywords`](/nerve-centre/google_ads/google_promo_keywords) | Ad spend on promo keywords during peak days | Spend lift should precede the discount-give peak by 0 to 2 days; lag suggests organic / email-driven, not paid. |
| [`klaviyo.klaviyo_campaign_revenue`](/nerve-centre/klaviyo/klaviyo_campaign_revenue) | Email-driven promo days                     | Aligns Klaviyo campaign sends with the discount spikes.                                                         |

***

<details>
  <summary><em>Same-metric documentation cross-reference (for agencies running multiple platforms)</em></summary>

  The same definition lives on other commerce platforms. Cross-platform navigation only.

  * [`bigcommerce.discount_over_time`](/nerve-centre/kpi-cards/bigcommerce/discounts-given-over-time)
  * [`adobe_commerce.discount_over_time`](/nerve-centre/kpi-cards/adobe-commerce/discounts-given-over-time)
</details>

## Known limitations / merchant FAQs

**Why is my baseline discount higher than I expected?**
Always-on promotions add up. Welcome codes, abandoned-cart vouchers, loyalty unlocks, employee discounts, and influencer codes that never expired all contribute to the baseline. Audit your active codes and check what is silently running.

**Why does the spike look smaller than my "20% off everything" promo would suggest?**
Several reasons:

* Not every order used the code; usage rate is typically 30 to 60% of orders during a promo.
* Customers who would have ordered without the discount used it anyway, the discount went to natural-demand buyers, not incremental ones.
* Order mix shifted; not all line items were eligible (some categories often excluded).

**Free shipping discounts, are they here?**
Yes, if recorded as discount lines. Some Shopify configurations record free shipping in `totalShippingPrice` set to zero rather than as a discount; check the [Free vs Paid](/nerve-centre/kpi-cards/shopify/free-vs-paid-shipping) card for that view.

**Refund timing, do refunds appear here?**
No. The card sums discount-at-order-time. Refunds are tracked separately in [Refund Value](/nerve-centre/kpi-cards/shopify/refund-value). Discount-and-refund interactions (e.g. customer used 20% off then returned the goods) need cross-card analysis.

**Cancelled orders, are their discounts counted?**
Yes. Discounts on cancelled orders bucket on their order day. To exclude, filter out `cancelledAt IS NOT NULL` orders manually.

**Multi-currency, any impact?**
The card sums in original currency without FX. Stores transacting in multiple currencies see distorted totals; filter to a single presentment currency.

**Shopify Plus vs basic?**
Plus stores use Shopify Functions for richer custom-discount logic (tier-based, exclusive bundles). The card captures the resulting discount value; the source attribution differs but the totals align.

**Refresh cadence?**
5 to 15 minute index lag; daily buckets recompute each cycle.

**B2B vs DTC?**
B2B price catalogues often apply standing discounts (10% off list for tier-A customers). These appear here daily as a steady contribution. A B2B-heavy store should expect a higher baseline; the dynamic peaks usually come from DTC promo events.

**The card spiked unexpectedly, what should I do?**

1. Cross-reference [Top Discount Codes](/nerve-centre/kpi-cards/shopify/top-discount-codes) for the peak day.
2. Confirm the active campaign list, an unintended-still-live code is the most common cause.
3. Check whether a partner / influencer code went viral.
4. If the peak is genuine promo, evaluate ROI: what was the revenue lift? Did AOV move? Was the campaign profitable?

***

### Tracked live in Vortex IQ Nerve Centre

*Discounts Given Over Time* is one of hundreds of KPI pulses Vortex IQ tracks across Shopify and 70+ other ecommerce connectors. Nerve Centre runs the detection layer; Vortex Mind investigates the cause when something moves; Ask Viq lets you interrogate any number in plain English.

[Start for free](https://app.vortexiq.ai/login) or [book a demo](https://www.vortexiq.ai/contact-us) to see this metric running on your own data.
