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. |
| 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 |
- The discount slice is the lever. -6.3% means the brand gave back ~9k of gross profit. Pair with Total Discount Used and Top Discount Codes to see which codes drove the cost.
- 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.
- 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.
- 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.
- 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 | The reconciliation total. The four slices should sum to total revenue. |
| Total Discount Used | The single-number version of the Discount slice. Use to track week-over-week discount cost. |
| Total Shipping Revenue | Single-number Shipping slice. Pair with carrier invoices for shipping P&L. |
| Total Tax Collected | Single-number Tax slice. Pair with your accounting to confirm liability matches what you’ll remit. |
| Discount % of Revenue | Discount slice expressed as a ratio. The benchmark version of the breakdown. |
| Shipping % of Revenue | Shipping slice as a ratio. Watch for upward drift, indicates carrier-rate hikes pass-through. |
| Top Discount Codes | Which codes drove the discount slice. The drill-down for the cost-of-promotion question. |
| 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.
| 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 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. |
| Card | Expected relationship | What causes legitimate divergence |
|---|---|---|
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 | Same logic, PayPal gateway only | Use as a slice-by-gateway check; not a same-number reconciliation. |
Known limitations / merchant FAQs
Why is my discount slice growing? Three usual causes:- Heavier promo cadence. More codes live, more aggressive depths. Pair with Top Discount Codes to see which codes are driving cost.
- Stacking enabled. If you’ve turned on discount stacking (Shopify Functions, app-level), customers combine codes and the depth-per-order rises sharply.
- Affiliate / influencer codes leakage. If creator codes are being shared on coupon sites, discount share rises with no marketing intent.
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:
- If discount share rises sharply: open Top Discount Codes. Find the code(s) responsible. Decide whether to cap usage, expire early, or accept the cost as planned.
- 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 for the absolute impact.
- 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.
- 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.