> ## 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.

# Revenue Breakdown, Shopify

> Revenue Breakdown 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

> A stacked breakdown of gross revenue into its four economic components: subtotal (line items), discounts applied, shipping charged, and tax collected. The card decomposes `totalPrice` into the customer-paid bucket each pound went into.

|                               |                                                                                                                                                                                                                                                                                   |
| ----------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **What it counts**            | `SUM(subtotalPrice) + SUM(totalShippingPrice) + SUM(totalTax) - SUM(totalDiscounts)` rendered as four stacked components. The arithmetic identity should equal `SUM(totalPrice)` to within rounding.                                                                              |
| **VAT / tax treatment**       | The Tax slice is `SUM(totalTax)` regardless of `taxesIncluded` mode; for VAT-inclusive UK stores, this slice is the *embedded* VAT extracted server-side, not an add-on.                                                                                                          |
| **Shipping**                  | The Shipping slice is `SUM(totalShippingPrice)`. Free-shipping orders contribute zero to this slice but still affect the discount slice if a shipping discount code was applied.                                                                                                  |
| **Discounts**                 | The Discount slice is `SUM(totalDiscounts)` and is shown as a *negative* component visually; mathematically it sits between subtotal and net total.                                                                                                                               |
| **Refunds**                   | NOT deducted. The card shows gross customer-paid amounts. For the post-refund view, pair with [Refund Value](/nerve-centre/kpi-cards/shopify/refund-value).                                                                                                                       |
| **Cancelled / voided orders** | Included if Shopify indexed them. `VOIDED` orders still contribute their original components to all four slices.                                                                                                                                                                  |
| **Currency**                  | Multi-currency arithmetic without FX. Each component aggregates raw amounts; for stores transacting in mixed currencies the slice ratios remain coherent (each currency's tax slice is proportional to its sub) but absolute totals are nonsense. Use the currency-filtered view. |
| **Channels / sources**        | All channels contribute. POS sales contribute to subtotal and tax; shipping is typically zero on POS. B2B sales often have discount-heavy structures that distort the discount slice.                                                                                             |
| **Time window**               | `30D` (default 30D rolling)                                                                                                                                                                                                                                                       |
| **Alert trigger**             | None, the card is descriptive, not alerting.                                                                                                                                                                                                                                      |
| **Roles**                     | owner                                                                                                                                                                                                                                                                             |

## Calculation

Calculated automatically from your Shopify data. See the At a glance summary above for what the metric tracks and the worked example below for a typical reading.

## Worked example

A US homeware DTC brand on Shopify, sales-tax-exclusive pricing, free shipping over \$75, 30D window 12 Apr 26 to 12 May 26.

| Component                              | Amount        | Share of gross | Note                                               |
| -------------------------------------- | ------------- | -------------- | -------------------------------------------------- |
| Subtotal (line items, pre-discount)    | \$412,300     | 91.2%          | The economic engine                                |
| Discounts applied                      | -\$28,400     | -6.3%          | Welcome10, FRIENDS25, EOSALE codes                 |
| Shipping charged                       | \$19,650      | 4.3%           | Many orders qualified for free shipping            |
| Tax collected                          | \$48,200      | 10.7%          | Roughly the blended state-tax across customer ZIPs |
| **Customer-paid total (`totalPrice`)** | **\$451,750** | **100%**       | The reconciliation bottom line                     |

```text theme={null}
451,750 = 412,300 - 28,400 + 19,650 + 48,200   identity holds
```

Five things to notice:

1. **The discount slice is the lever.** -6.3% means the brand gave back \~$28k against gross. If margin is 30%, that discount cost roughly $9k of gross profit. Pair with [Total Discount Used](/nerve-centre/kpi-cards/shopify/total-discount-used) and [Top Discount Codes](/nerve-centre/kpi-cards/shopify/top-discount-codes) to see which codes drove the cost.
2. **Shipping is revenue, not cost.** The 4.3% shipping share is the customer-paid amount. Actual carrier cost may run higher; that gap is the shipping subsidy. Pair with carrier invoices to compute net.
3. **Tax is pass-through.** The 10.7% tax slice is owed to the relevant tax authorities; it's not yours to spend. UK / EU stores running VAT-inclusive will see a smaller "Tax" slice because the customer-paid total is gross-inclusive; the slice is the embedded VAT.
4. **The slice ratios are stable in healthy periods.** Big swings flag mix-shifts: a sudden drop in shipping share usually means a free-shipping promo went hot; a jump in discount share means a sale or coupon-stuffing event.
5. **Cross-reconcile against your accounting.** Add up the four slices in your bookkeeping system (Xero, QuickBooks). They should match this card's four numbers within rounding. Mismatches usually trace to currency-conversion or refund-timing differences.

## Sibling cards merchants should reference together

Revenue Breakdown is a viewfinder. The cards that explain each slice:

| Card                                                                                 | Why pair it with Revenue Breakdown                                                                 |
| ------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------- |
| [Total Revenue](/nerve-centre/kpi-cards/shopify/total-revenue)                       | The reconciliation total. The four slices should sum to total revenue.                             |
| [Total Discount Used](/nerve-centre/kpi-cards/shopify/total-discount-used)           | The single-number version of the Discount slice. Use to track week-over-week discount cost.        |
| [Total Shipping Revenue](/nerve-centre/kpi-cards/shopify/total-shipping-revenue)     | Single-number Shipping slice. Pair with carrier invoices for shipping P\&L.                        |
| [Total Tax Collected](/nerve-centre/kpi-cards/shopify/total-tax-collected)           | Single-number Tax slice. Pair with your accounting to confirm liability matches what you'll remit. |
| [Discount % of Revenue](/nerve-centre/kpi-cards/shopify/discount-of-revenue)         | Discount slice expressed as a ratio. The benchmark version of the breakdown.                       |
| [Shipping % of Revenue](/nerve-centre/kpi-cards/shopify/shipping-cost-as-of-revenue) | Shipping slice as a ratio. Watch for upward drift, indicates carrier-rate hikes pass-through.      |
| [Top Discount Codes](/nerve-centre/kpi-cards/shopify/top-discount-codes)             | Which codes drove the discount slice. The drill-down for the cost-of-promotion question.           |
| [Refund Value](/nerve-centre/kpi-cards/shopify/refund-value)                         | The "missing" fifth slice, what came back out. Subtract from total revenue for the net view.       |

## Reconciling against the vendor's own dashboard

**Where to look in Shopify Admin:**

> **Shopify Admin → Analytics → Reports → "Total sales"** (under the *Sales* category)

Shopify's *Total sales* report exposes the same four columns: gross sales, discounts, shipping, taxes, returns, net sales. Pick the same date range and the four slices should match this card to within rounding.

Other Shopify Admin views that look similar:

* **Reports → Sales by sales channel**: same components, broken by channel. Useful when you suspect one channel is distorting the breakdown.
* **Reports → Discounts**: drills the Discount slice. Use when discount share spikes.
* **Reports → Sales by billing location**: useful for tax reconciliation, ties the Tax slice to states/regions.

**Why our number may legitimately differ from Shopify's:**

| Reason                              | Direction                 | Why                                                                                                                                                                                   |
| ----------------------------------- | ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Refund handling**                 | Shopify *Net Sales* lower | Shopify's *Total Sales* is gross (matches our card). *Net Sales* subtracts returns; we don't. Use [Refund Value](/nerve-centre/kpi-cards/shopify/refund-value) to bridge.             |
| **Time zone**                       | Boundary days             | Shopify Admin uses store time zone; Vortex IQ uses UTC. The 30D window can drift by a day either side.                                                                                |
| **Tax-inclusive vs exclusive mode** | Slice mix differs         | UK / EU VAT-inclusive stores see Tax extracted from gross; US sales-tax-exclusive stores see Tax added on top. The math identity holds in both, but the slice ratios visually differ. |
| **Multi-currency**                  | Slice totals nonsensical  | We don't FX-normalise. Slices look correct shape-wise per currency, but absolute totals across currencies are not meaningful. Filter by currency.                                     |
| **Sync lag**                        | Ours lower for "today"    | The most recent 5 to 15 minutes of orders may not be in the index yet.                                                                                                                |
| **Test orders**                     | Ours slightly higher      | Shopify Admin can hide test orders. Vortex IQ does not yet filter `Order.test`.                                                                                                       |

**Cross-connector reconciliation:**

The four slices have indirect parallels in payment connectors:

| Card                                                                       | Expected relationship                                       | What causes legitimate divergence                                                                                                                                    |
| -------------------------------------------------------------------------- | ----------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [`stripe.stripe_gross_volume`](/nerve-centre/stripe/stripe_gross_volume)   | Tracks the customer-paid total slice for Stripe-only orders | Stripe excludes Shopify Payments orders that route via the native Shopify gateway. PayPal / Apple Pay etc are routed differently. Expect significant numerical gaps. |
| [`paypal.paypal_gross_revenue`](/nerve-centre/paypal/paypal_gross_revenue) | Same logic, PayPal gateway only                             | Use as a slice-by-gateway check; not a same-number reconciliation.                                                                                                   |

***

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

  The same revenue-decomposition exists on other commerce platforms.

  * [`bigcommerce.revenue_breakdown`](/nerve-centre/kpi-cards/bigcommerce/revenue-breakdown)
  * [`adobe_commerce.revenue_breakdown`](/nerve-centre/kpi-cards/adobe-commerce/revenue-breakdown)
</details>

## Known limitations / merchant FAQs

**Why is my discount slice growing?**
Three usual causes:

1. **Heavier promo cadence.** More codes live, more aggressive depths. Pair with [Top Discount Codes](/nerve-centre/kpi-cards/shopify/top-discount-codes) to see which codes are driving cost.
2. **Stacking enabled.** If you've turned on discount stacking (Shopify Functions, app-level), customers combine codes and the depth-per-order rises sharply.
3. **Affiliate / influencer codes leakage.** If creator codes are being shared on coupon sites, discount share rises with no marketing intent.

**Action:** audit code expiry dates and usage caps. Shopify Functions can enforce one-code-per-order or once-per-customer limits.

**Why is the shipping slice so small?**
Common in DTC, especially after free-shipping thresholds are introduced. Customers route to the threshold to avoid paying shipping; charged shipping shrinks. The flip-side: subtotal usually rises (filler items added). Net effect on margin depends on margin-per-filler-item and your free-shipping cost.

**Why does my tax slice look unstable month to month?**
Tax depends on the geographic mix of customers. A month with disproportionate California or NYC orders pushes US tax higher; a month with more Texas (no state income tax, lower retail tax) lowers it. UK / EU brands selling to multiple VAT regions see a similar effect, especially around VAT registration thresholds.

**My VAT-inclusive store, is this card useful for HMRC reporting?**
Partially. The Tax slice is `SUM(totalTax)` and tracks the embedded VAT for VAT-inclusive stores. For HMRC VAT returns, you want the same period and the *same number*; cross-check against Shopify Admin Reports Taxes and your accounting record. Don't rely on this card alone for tax filings; treat it as a sanity check.

**Why is the discount slice negative?**
By accounting convention, discounts reduce revenue. The card displays it as a negative figure to make the identity `subtotal - discount + shipping + tax = total` visible. Some BI tools render it as a positive bar pointing left; same number, different orientation.

**Does this card include subscription billings?**
Yes. Each Shopify Subscriptions billing creates a new order with its own subtotal, discount (if a subscription discount was applied), shipping, and tax. Subscription-heavy brands see a steady, predictable breakdown shape; one-time-purchase brands see more volatility tied to promo events.

**My multi-store setup, can I aggregate across stores?**
Not on this card. Each Shopify store maps to a separate connector instance in Vortex IQ. Aggregation is on the cross-store roadmap. For now, pair multiple instances of this card on a single dashboard for a multi-store view.

**Action playbook when slice ratios drift:**

1. **If discount share rises sharply**: open [Top Discount Codes](/nerve-centre/kpi-cards/shopify/top-discount-codes). Find the code(s) responsible. Decide whether to cap usage, expire early, or accept the cost as planned.
2. **If shipping share falls sharply**: check whether you've recently enabled free-shipping thresholds or expanded a free-shipping zone. Pair with [Total Shipping Revenue](/nerve-centre/kpi-cards/shopify/total-shipping-revenue) for the absolute impact.
3. **If tax share drifts**: confirm tax-engine (Shopify Tax / Avalara / TaxJar) is current. A misconfiguration after a new state nexus or VAT registration can throw the calculation off.
4. **If the identity doesn't hold** (slices don't sum to total): a sync-lag artefact, raise with Vortex IQ support; persistent breakage indicates an indexing bug.

***

### Tracked live in Vortex IQ Nerve Centre

*Revenue Breakdown* 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.
