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 counts | SUM(order_total) across every order in the window, the total amount stored on each oc_order row, pre-refund. |
| VAT / tax treatment | Tax-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. |
| Shipping | Included. The shipping total line is added into the stored order total by default. |
| Discounts | Already deducted. Coupon and discount total lines reduce the order total before it is stored, so this is the post-discount, customer-billed figure. |
| Refunds | NOT 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 orders | Depends 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. |
| Currency | Multi-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 / sources | Not 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 window | T/7D/30D vsP (default 30D) |
| Alert trigger | drop >15% vsP |
| Roles | owner, finance |
Calculation
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.| Segment | Orders | Avg order total | Contribution |
|---|---|---|---|
| Completed / Processing (GBP) | 2,180 | GBP 92 | GBP 200,560 |
| Completed / Processing (EUR, summed without FX) | 240 | EUR 88 | EUR 21,120 |
| Refunded (status change, total unchanged) | 64 | GBP 105 | GBP 6,720 (still counted) |
| Cancelled / Failed (excluded by status filter) | 130 | GBP 70 | GBP 0 (excluded) |
| Total Revenue (this card) | 2,420 (+64 refunded) | GBP 207,280 + EUR 21,120 (mixed) |
- 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.
- 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.
- 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.
- 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% vsPalert. The card stays green and the trend ticks up.
Sibling cards merchants should reference together
| Card | Why pair it with Total Revenue (30d) |
|---|---|
| Average Order Value | Total Revenue ÷ Order Volume. Tells you whether revenue moved on basket size or order count. |
| Order Volume | The other half of the equation. If revenue moves but order count is flat, basket size changed. |
| Cancellation Rate | Cancelled orders are excluded here. Cancellation Rate tells you how much potential revenue never converted. |
| Refund Rate | This 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 Attribution | Shows 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 andorder_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.
| Reason | Direction 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 |
| Card | Expected relationship | What causes legitimate divergence |
|---|---|---|
stripe.stripe_total_revenue | Stripe ≤ OpenCart Total Revenue | Stripe 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_volume | PayPal ≤ OpenCart Total Revenue | PayPal sees only PayPal-checkout orders. A subset by definition. |
| Orders to Email Attribution | Email-attributed revenue ≤ this card | The email connector can only claim orders it can attribute. Unattributed revenue is the remainder, not an error. |
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 is30D vsP and not 1D.