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

# Total Revenue, Shopify

> Headline gross revenue. The single number the founder checks at 9am Monday. How to read it, why it matters, and how to act on it.

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

> Headline gross revenue. The single number the founder checks at 9am Monday.

## At a glance

> Headline gross revenue across every Shopify order placed in the period. The arithmetic sum of `totalPrice` for every order created in the window, regardless of fulfilment, refund, or cancellation status.

|                               |                                                                                                                                                                                                                                                                                                                                                                               |
| ----------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **What it counts**            | `SUM(totalPrice)` across every order in the window, the total amount the customer paid (or was billed for), pre-refund.                                                                                                                                                                                                                                                       |
| **VAT / tax treatment**       | **Depends on `Order.taxesIncluded`.** UK / EU stores typically have `taxesIncluded = true`, so this number is VAT-inclusive (matches the customer-paid total). US stores typically have `taxesIncluded = false`, so the number is exclusive of sales tax (tax sits separately in `totalTax`). The card sums `totalPrice` blindly, it does not normalise across the two modes. |
| **Shipping**                  | **Included.** `totalPrice` already contains `totalShippingPrice`.                                                                                                                                                                                                                                                                                                             |
| **Discounts**                 | Already deducted, this is the post-discount, customer-paid figure.                                                                                                                                                                                                                                                                                                            |
| **Refunds**                   | **NOT deducted.** A refunded £100 order still contributes £100 to Total Revenue. For the post-refund view use the *Net Revenue* card (or *Refund Rate* for the leakage signal).                                                                                                                                                                                               |
| **Cancelled / voided orders** | Included if Shopify indexed them (`displayFinancialStatus = VOIDED` rows still count).                                                                                                                                                                                                                                                                                        |
| **Currency**                  | **Multi-currency arithmetic sum WITHOUT FX conversion.** A store taking GBP and EUR orders in the same window gets a single, meaningless number. Use a currency-filtered view for stores transacting in more than one currency.                                                                                                                                               |
| **Channels / sources**        | **Not filtered.** POS, Online Store, Buy Button, Shop App, Facebook & Instagram Shop, TikTok Shop, B2B / wholesale, and any custom marketplace-app channel all contribute. Shopify Order index doesn't yet expose `tags` / `sourceName`, so per-channel slicing isn't possible from this card alone.                                                                          |
| **Time window**               | `30D vsP` (default 30D vs the prior 30D)                                                                                                                                                                                                                                                                                                                                      |
| **Alert trigger**             | `drop >15% vsP`, driven by `sentiment_key: revenue_trend`                                                                                                                                                                                                                                                                                                                     |
| **Roles**                     | owner, marketing, operations                                                                                                                                                                                                                                                                                                                                                  |

## Calculation

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

## Worked example

A UK fashion store running on Shopify Plus. The 30-day window covers 14 Mar 26 to 12 Apr 26.

| Channel                       | Orders    | Avg order value | Channel revenue |
| ----------------------------- | --------- | --------------- | --------------- |
| Online Store                  | 1,420     | £92             | £130,640        |
| Shop POS (two retail sites)   | 380       | £64             | £24,320         |
| Buy Button (partner blogs)    | 18        | £71             | £1,278          |
| TikTok Shop                   | 92        | £41             | £3,772          |
| B2B (wholesale tag)           | 7         | £840            | £5,880          |
| **Total Revenue (this card)** | **1,917** | **£86**         | **£165,890**    |

Three things to notice:

1. The B2B contribution (£5,880) is just 7 orders but it nudges the headline up. If those 7 orders were excluded the figure drops to £160,010. This is why the channel-mix view matters when the headline moves and the merchant doesn't know which channel caused it.
2. Shop POS pulls the average down (£64 vs the online £92), so a bigger week in retail compresses AOV without hurting Total Revenue. Pair this card with [AOV](/nerve-centre/shopify/average-order-value) before drawing conclusions.
3. The 30-day prior window was £172,400. Total Revenue is down 3.8% vsP, which is below the `drop >15% vsP` alert threshold. Vortex IQ Nerve Centre stays quiet, but the merchant can still see the trend on the card itself.

## Sibling cards merchants should reference together

| Card                                                                                | Why pair it with Total Revenue                                                                                                                                   |
| ----------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [Average Order Value](/nerve-centre/shopify/average-order-value)                    | Total Revenue ÷ Order Count. Tells you whether revenue moved on volume or basket size.                                                                           |
| [Order Count](/nerve-centre/shopify/order-count)                                    | The other half of the equation. If revenue moves but order count is flat, basket size changed (discounting, mix, threshold lift).                                |
| [Refund Rate](/nerve-centre/shopify/refund-rate)                                    | This card is **gross**. Refund Rate tells you how much of it never actually banks. A high refund rate means Total Revenue is overstating what hits your account. |
| [Discount % of Revenue](/nerve-centre/shopify/discount-of-revenue)                  | Discounting always lifts Total Revenue mechanically (more orders), but at the cost of margin. Watch them together.                                               |
| [New vs Returning Customer Revenue](/nerve-centre/shopify/new-vs-returning-revenue) | A revenue spike from new customers behaves very differently to one from returning customers (acquisition vs retention).                                          |
| [Cancelled Orders Over Time](/nerve-centre/shopify/cancelled-orders-over-time)      | Cancellations still count in Total Revenue until they're refunded. A spike in cancellations + flat Total Revenue is a red flag.                                  |

## Reconciling against the vendor's own dashboard

**Where to look in Shopify Admin:**

[Reports → Sales over time](https://admin.shopify.com/analytics/reports/sales_over_time). Set the same window (default 30D), keep the *Sales channel* filter blank, and look at **Total sales**. That figure should match this card to within a couple of pounds.

Other Shopify Admin views that *look* like the same number but aren't:

* **Reports → Total sales over time**: this one DOES match (assuming same window, same channels).
* **Reports → Net sales**: this is post-refund, so it's lower than this card (this card is gross).
* **Home → Total sales** widget: this is *today only*, in the shop's local timezone.
* **Orders → Filter "Last 30 days"**: this counts orders, not revenue.

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

| Reason                                                                                                                                                                                                                                                                  | Direction of divergence                     |
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------- |
| **Time-zone**. Shopify reports run on shop-timezone; Vortex IQ runs on UTC by default. A few orders near midnight on the boundary days will fall on different sides.                                                                                                    | ±1 day's revenue at the boundary            |
| **Currency**. If your store has multi-currency selling enabled, Shopify Admin reports in *shop currency* (auto-converted at FX). Vortex IQ sums `totalPrice` in *order currency* without FX. Stores transacting in multiple currencies will see arithmetic differences. | Can be large for international stores       |
| **Test orders**. Shopify Admin can be set to *exclude* test orders. Vortex IQ does not yet filter by `Order.test`.                                                                                                                                                      | Vortex IQ slightly higher (rare, low value) |
| **Draft orders**. Shopify Admin counts only completed orders. Vortex IQ also excludes drafts (these don't enter the Order index).                                                                                                                                       | Should match.                               |
| **Refunds in the report period**. If a refund is issued *during* the window for an order placed *before* the window, Shopify "Net sales" deducts it. Vortex IQ Total Revenue (gross) does not.                                                                          | Vortex IQ higher than Shopify Net sales     |

**Cross-connector reconciliation (when the merchant has connected payment processors and analytics):**

These connectors see *the same transactions through different lenses*. They should agree within known tracking gaps. Divergence is a data-quality signal worth investigating.

| Card                                                                                          | Expected relationship                            | What causes legitimate divergence                                                                                                                                                                                                       |
| --------------------------------------------------------------------------------------------- | ------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [`stripe.stripe_total_revenue`](/nerve-centre/kpi-cards/stripe/total-charge-volume)           | Stripe ≤ Shopify Total Revenue                   | Stripe sees only card / wallet / Apple Pay / Google Pay charges routed through Stripe. It does not see Shop Pay Installments, gift cards, manual / COD orders, or any orders routed through a non-Stripe processor.                     |
| [`paypal.pp_total_volume`](/nerve-centre/paypal/pp_total_volume)                              | PayPal ≤ Shopify Total Revenue                   | PayPal sees only PayPal-checkout orders. Subset by definition.                                                                                                                                                                          |
| [`google_analytics.ga_revenue_trend`](/nerve-centre/kpi-cards/google-analytics/revenue-trend) | GA4 ≈ Shopify Total Revenue × (1 − tracking gap) | GA4 typically misses 10, 25% of Shopify orders due to ad-blockers, cookie rejection, and tag-fire failures. **Treat Shopify as the source of truth for revenue.** Use GA4 for traffic and channel attribution, not for revenue figures. |

**Net of all processors:** if you sum Stripe + PayPal + manual transfers + gift cards + Shop Pay (separate connector if available), the total should sit very close to this card. A persistent gap > 2% means a payment processor is missing from your Vortex IQ workspace, or one of them is double-counting refunds.

***

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

  The same definition of Total Revenue lives on other commerce platforms. This is **not a reconciliation**, your Shopify store doesn't have a parallel store on BigCommerce or Adobe Commerce to compare numbers against. These cross-links exist so agencies running multi-platform client books can navigate between identical metrics across the docs.

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

## Known limitations / merchant FAQs

**Does Total Revenue include refunds?**
**No, refunds are NOT deducted.** This card is *gross* revenue. A fully refunded £100 order still contributes £100 here. If you want the post-refund view, use the *Net Revenue* card (or watch *Refund Rate* alongside this one).

**Why is my Shopify Total Revenue different from my Stripe number?**
Stripe only sees the orders that were paid via Stripe-routed cards or wallets. Shopify Total Revenue sees every order regardless of how it was paid. Differences are normal and expected. **Stripe ≤ Shopify Total Revenue, always.** A persistent gap > 5% usually means another payment processor (PayPal, gift cards, Shop Pay Installments, manual / COD) is contributing meaningfully and isn't yet connected to Vortex IQ.

**Why doesn't Google Analytics match?**
GA4 typically misses 10, 25% of orders because of ad blockers, cookie banners ("reject all"), and tag-fire failures (slow networks, page bounces before pixel fires). The miss rate is *not* fixable; it's structural. **Treat Shopify as the source of truth for revenue.** Use GA4 for sessions, traffic source, and funnel behaviour, not revenue.

**Is shipping included?**
Yes. `totalPrice` already includes `totalShippingPrice`. If you want a shipping-free view, subtract *Total Shipping Revenue* from this card.

**My multi-currency store, what currency does this show?**
**The card sums `totalPrice` without FX conversion.** A store taking GBP and EUR orders gets a single, meaningless number. For multi-currency stores, use the currency-filtered view (filter by `presentmentCurrency`). On a roadmap item: per-currency Total Revenue cards, see [shopify backlog](https://github.com/vortex-iq/agentic-workflow/issues).

**Does B2B / wholesale revenue count?**
Yes, every order created in Shopify Admin contributes, including orders tagged `B2B`, `Wholesale`, or routed through Shopify B2B. Wholesale orders are typically much larger (£800+) than DTC, so a single big B2B order can lift the number meaningfully on a slow day. To exclude them, filter by `Order.tags`, that requires the `tags` field to be in the Order index (planned, see [shopify.yaml](https://github.com/vortex-iq/agentic-workflow/tree/master/config/vortex_mind/manifests/shopify.yaml)).

**Subscriptions, how does recurring revenue count?**
Each Shopify Subscriptions billing event is a separate order with its own `totalPrice`. So a customer paying £20/month over 12 months shows up as 12 orders × £20 = £240 of Total Revenue across the year, not one £240 order. This means a strong subscription book gives Total Revenue a steady monthly floor that doesn't depend on new acquisition.

**Why does today's number jump up and down so much?**
Today is incomplete data. As the day progresses orders add into the bucket, and as the day rolls past midnight some orders flip date because of timezone effects. **Use the rolling 7-day or 30-day view for stable numbers**, that's why the alert window is `30D vsP` and not `1D`. If you need a daily-only view, the *Orders Over Time* card and the *Sales Over Time* report in Shopify Admin are more appropriate.

***

### Tracked live in Vortex IQ Nerve Centre

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