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
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 |
- 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.
- 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 before drawing conclusions.
- The 30-day prior window was £172,400. Total Revenue is down 3.8% vsP, which is below the
drop >15% vsPalert 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 | Total Revenue ÷ Order Count. Tells you whether revenue moved on volume or basket size. |
| 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 | 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 | Discounting always lifts Total Revenue mechanically (more orders), but at the cost of margin. Watch them together. |
| New vs Returning Customer Revenue | A revenue spike from new customers behaves very differently to one from returning customers (acquisition vs retention). |
| 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. 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.
| 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 |
| Card | Expected relationship | What causes legitimate divergence |
|---|---|---|
stripe.stripe_total_revenue | 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 | PayPal ≤ Shopify Total Revenue | PayPal sees only PayPal-checkout orders. Subset by definition. |
google_analytics.ga_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. |
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.
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).
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.