Skip to main content
Card class: HeroCategory: Ecommerce Platform
Headline gross revenue across every OpenCart order in the period, the arithmetic sum of the stored order total over the window.

At a glance

Headline gross revenue across every OpenCart order placed in the period. The arithmetic sum of the stored order total for every order created in the window, across the configured revenue statuses. OpenCart builds each order total from configurable total lines (sub-total, shipping, tax, discount), so exactly what lands in “revenue” depends on which order-total extensions your store runs. By default the stored total is tax-inclusive and includes shipping. Refunds do not change the stored total; they are tracked as a status change.
What it countsSUM(order_total) across every order in the window, the total amount stored on each oc_order row, pre-refund.
VAT / tax treatmentTax-inclusive by default. OpenCart’s order total is assembled from total lines configured under Extensions → Order Totals; the tax line is included in the stored total unless your configuration excludes it. There is no separate pre-tax headline in core OpenCart.
ShippingIncluded. The shipping total line is added into the stored order total by default.
DiscountsAlready deducted. Coupon and discount total lines reduce the order total before it is stored, so this is the post-discount, customer-billed figure.
RefundsNOT deducted. OpenCart records a refund as an order status change (Refunded) rather than by rewriting the stored total, so a refunded order still contributes its original total here. For the realised view, watch Refund Rate alongside this card.
Cancelled / failed ordersDepends on the status filter. By default Cancelled and Failed orders are excluded from the revenue sum so phantom revenue does not inflate the headline. See Cancellation Rate.
CurrencyMulti-currency arithmetic sum WITHOUT FX conversion. Each order is stored in its placed currency on oc_order. A multi-currency store sums mixed-currency totals into a single, mixed-units number. Use a single-currency view for clean figures.
Channels / sourcesNot filtered. OpenCart has no native marketplace or ads channel tagging; every order in the configured statuses is summed. Source attribution comes from separately connected channels, see Orders to Email Attribution.
Time windowT/7D/30D vsP (default 30D)
Alert triggerdrop >15% vsP
Rolesowner, finance

Calculation

SUM(order_total)
  WHERE date BETWEEN [period_start, period_end]
    AND order_status IN [revenue_statuses]

Worked example

A UK auto-parts store on OpenCart 4.x. The 30-day window covers 14 Mar 26 to 12 Apr 26. The store runs the standard sub-total, shipping, coupon, and tax order-total extensions and takes both GBP and EUR orders.
SegmentOrdersAvg order totalContribution
Completed / Processing (GBP)2,180GBP 92GBP 200,560
Completed / Processing (EUR, summed without FX)240EUR 88EUR 21,120
Refunded (status change, total unchanged)64GBP 105GBP 6,720 (still counted)
Cancelled / Failed (excluded by status filter)130GBP 70GBP 0 (excluded)
Total Revenue (this card)2,420 (+64 refunded)GBP 207,280 + EUR 21,120 (mixed)
What’s interesting here:
  1. The headline mixes two currencies. Because there is no FX conversion, the GBP and EUR orders are summed into one mixed-units figure. For a multi-currency store this number is directional, not bankable. Use a single-currency view, GBP-only here would read GBP 207,280, for a clean read.
  2. Refunds are still inside the headline. The 64 refunded orders contribute their original GBP 6,720 to this card because OpenCart records a refund as a status change, not a total rewrite. If realised cash matters, read this against Refund Rate to size the gap.
  3. Cancelled and failed orders are correctly excluded. The 130 cancelled and failed orders, worth around GBP 9,100 at their stored totals, do not inflate the headline because they fall outside the configured revenue statuses. That keeps this card closer to realised revenue than a “count everything” sum would be.
  4. The prior 30-day window was GBP 198,400 (GBP-only basis). Total Revenue is up about 4.5% vsP on the comparable single-currency basis, well clear of the drop >15% vsP alert. The card stays green and the trend ticks up.

Sibling cards merchants should reference together

CardWhy pair it with Total Revenue (30d)
Average Order ValueTotal Revenue ÷ Order Volume. Tells you whether revenue moved on basket size or order count.
Order VolumeThe other half of the equation. If revenue moves but order count is flat, basket size changed.
Cancellation RateCancelled orders are excluded here. Cancellation Rate tells you how much potential revenue never converted.
Refund RateThis card is gross of refunds. Refund Rate is the downward adjustment to get realised revenue.
Revenue at Risk (Live)The forward-looking complement, revenue exposed to stock-outs and broken flows.
Orders to Email AttributionShows how much of this headline a connected email platform can claim.

Reconciling against OpenCart

Where to look in OpenCart admin: Reports → Sales → Orders shows total revenue and order count for a date range, filtered by order status. The “Total” column for a 30-day window, with the same statuses selected, should match this card to within rounding and timezone effects. The underlying data is the order total and order_status_id columns on oc_order, joined to oc_order_status for the status names. Other OpenCart views that look like the same number but are not:
  • The Dashboard sales chart: shows revenue over time as a graph, often on a different status basis than your report filter.
  • Reports → Sales → Tax and Reports → Sales → Shipping: break out single total lines, not the full order total.
  • Sales → Orders list “Total” column: per-order totals you can eyeball, but the list count depends on the status filter applied.
Why our number may legitimately differ from the OpenCart admin:
ReasonDirection of divergence
Timezone. OpenCart reports use the store timezone (System → Settings); Vortex IQ uses UTC by default. Boundary-day orders fall on different sides.±1 day’s revenue at the boundary
Currency. Multi-currency stores can show a converted figure in admin; Vortex IQ sums original-currency totals without FX.Material for international stores
Status filter. The admin total depends on the statuses you select; this card uses its configured revenue-status set. If they disagree, the sums differ.Either direction
Refund handling. OpenCart refunds via status change, not by editing the stored total. Both the admin report and this card include the original total of a refunded order unless that status is excluded.Both can overstate realised revenue
Multi-store. Revenue aggregates across all store_id values by default; a store-filtered admin report differs.Either direction
API / DB sync lag. Recent orders may not yet be reflected in Vortex IQ.Self-resolves at next sync
Cross-connector reconciliation (when payment and email connectors are linked): These connectors see the same transactions through different lenses. They should agree within known gaps. Divergence is a data-quality signal worth investigating.
CardExpected relationshipWhat causes legitimate divergence
stripe.stripe_total_revenueStripe ≤ OpenCart Total RevenueStripe sees only successfully captured charges. It excludes OpenCart Failed and Cancelled orders, refund flows, and any orders routed through a non-Stripe processor (PayPal, manual transfer). The right comparison is Stripe ≈ this card minus failed/cancelled minus non-Stripe payments.
paypal.pp_total_volumePayPal ≤ OpenCart Total RevenuePayPal sees only PayPal-checkout orders. A subset by definition.
Orders to Email AttributionEmail-attributed revenue ≤ this cardThe email connector can only claim orders it can attribute. Unattributed revenue is the remainder, not an error.
Net of all processors: if you sum Stripe + PayPal + manual transfers and compare against this card minus failed and cancelled orders, the gap should be small. A persistent gap means a payment processor is missing from your Vortex IQ workspace, or one of them is handling refunds differently.

Known limitations / merchant FAQs

Why does my Total Revenue look higher than my bank deposits? The most common reasons on OpenCart are that refunds are not deducted (a refund is a status change, not a total rewrite) and that mixed currencies are summed without FX. Read this card against Refund Rate and, if you sell in more than one currency, switch to a single-currency view. Does this include shipping and tax? By default, yes. OpenCart assembles the order total from configurable total lines including shipping and tax, and this card sums the stored total. If your Order Totals configuration excludes a line, it is excluded here too. Does it net out refunds? No. OpenCart records a refund as an order status change rather than by rewriting the stored total, so a refunded order still contributes its original total. Use Refund Rate to size the realised-revenue gap. Why is my OpenCart sales report number different from this card? Usually the status filter. The admin Sales → Orders report totals only the statuses you select. Match the report filter to the configured revenue statuses, and align the timezone, and the two should agree within rounding. My multi-currency store shows a strange total, why? The card sums each order’s stored total without FX conversion, so a store taking GBP and EUR produces a single mixed-currency number. Use a single-currency view for a bankable figure; per-currency revenue is on the OpenCart roadmap. Are Cancelled and Failed orders counted? By default, no. They fall outside the configured revenue statuses, so they do not inflate the headline. If your status configuration includes them, expect a higher and less realistic number. Why does today’s number jump up and down so much? Today is incomplete data: orders accumulate through the day and some shift date at the timezone boundary. Use the rolling 7-day or 30-day view for stable numbers, which is why the alert window is 30D vsP and not 1D.

Tracked live in Vortex IQ Nerve Centre

Total Revenue (30d) is one of hundreds of KPI pulses Vortex IQ tracks across OpenCart 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 or book a demo to see this metric running on your own data.