Revenue is one of the most quoted ecommerce numbers and one of the easiest to misunderstand. A storefront dashboard may report orders when checkout completes. A payment provider may report authorised or captured funds. An ERP may report fulfilled lines. Finance may recognise revenue after returns, tax, marketplace fees, or refund timing. Each number can be valid for its own purpose—and dangerously wrong when used as a substitute for another.
This ecommerce analytics analysis explains how to build a reconciliation process that gives growth, operations, and finance a shared decision base. The goal is not to force every system to match minute by minute. It is to define the grain, status, cut-off, and adjustment rules so a variance becomes explainable instead of political.

Table of contents
- Why ecommerce revenue figures disagree
- Define the decision before the metric
- Reconciliation table by data source
- A practical daily reconciliation workflow
- Handling refunds, discounts and fees
- FAQ
Why ecommerce revenue figures disagree
The most common cause is a hidden difference in time. An order placed at 23:58 can be captured after midnight, dispatched the next day, and partially refunded a week later. A daily dashboard and a finance ledger are not meant to show the same number unless they use the same event and time zone.
The next cause is grain. An order record is not the same as an order line, payment transaction, fulfilment, or refund transaction. One order can have multiple captures, several shipments, a replacement item, and partial refunds. Joining these tables without a declared grain often duplicates revenue silently.
Finally, channels do not have identical economics. Marketplaces may remit net of commissions. Tax treatment varies by location. Gift cards, store credit, shipping income, loyalty redemptions, and discounts can all change which number is appropriate for a commercial decision.
Define the decision before the metric
Instead of asking for “the revenue number,” write down the decision. A trading manager choosing tomorrow’s media budget needs recent demand and may use placed-order net sales with clear caveats. A warehouse leader needs paid and releasable order lines. Finance needs a controlled basis with settlement and accounting adjustments. A board forecast needs a consistent restatement policy.
| Decision | Recommended event basis | Useful exclusions or adjustments | Owner |
|---|---|---|---|
| Daily trading pulse | Order placed | Cancelled test orders; clearly label refunds pending | Ecommerce trading |
| Paid-media efficiency | Attributable placed order or captured payment | Deduplicate channels; separate tax and shipping consistently | Growth analytics |
| Pick-pack capacity | Paid, unfulfilled order lines | Exclude holds, pre-orders and fraud review | Operations |
| Cash planning | Captured payment and expected settlement | Provider fees, payout timing, chargeback reserve | Finance |
| Financial reporting | Accounting-recognised revenue | Returns, tax, marketplace rules and currency treatment | Finance controller |
This table is a governance tool. When a dashboard contains more than one basis, label each metric prominently. “Revenue” without a definition is an invitation to false certainty.
Reconciliation table by data source
| Source | What it is authoritative for | Typical mismatch | Control to apply |
|---|---|---|---|
| Storefront platform | Order creation, line items, discounts, customer journey | Late edits, cancellations, test orders | Preserve order ID and status history |
| Payment provider | Authorisation, capture, refund and payout | Multiple attempts, partial captures, settlement delay | Use transaction ID and currency amount |
| OMS / ERP | Allocation, fulfilment and operational status | Split shipments, substitutions, backorders | Reconcile at order-line level |
| Returns platform | Return request, receipt and disposition | Delay between request and refund | Track reason, received date and refund ID |
| Marketplace | Channel sales and remittance | Fees, tax handling, delayed reports | Keep gross sale, fee and payout separate |
| Finance ledger | Controlled financial reporting | Cut-off and journal adjustments | Document the reconciliation bridge |
The stable keys are usually order ID, line ID, transaction ID, SKU, channel, currency, and timestamps. Do not use customer email as a primary join key: it changes, may be absent, and introduces avoidable privacy exposure. Keep personally identifying fields out of broad analytics access where possible.
A practical daily reconciliation workflow
1. Freeze a reporting cut-off
Choose a reporting time zone and state it in every daily report. Pull the order and payment records for the same reporting window, but retain later status updates as separate adjustments. A backfilled refund should change the appropriate period according to the decision rule—not disappear because yesterday’s report is already circulated.
2. Create a status bridge
Map platform-specific statuses into a small, documented model: placed, paid, held, cancelled, fulfilled, returned, refunded, partially refunded, and chargeback. Do not collapse “authorised” and “captured” unless your payment flow makes that appropriate. The bridge lets stakeholders compare systems without pretending their original language is identical.
3. Classify variance before investigating it
Small, expected timing variance should not trigger a fire drill. Create categories such as cut-off timing, cancellation, partial capture, currency conversion, marketplace fee, manual adjustment, missing identifier, and unknown. The unknown bucket is the most important one to trend: it represents a data quality problem rather than a known business rule.
| Variance category | Example | Expected? | Escalation trigger |
|---|---|---|---|
| Timing | Payment captured after midnight | Usually | Grows beyond normal daily band |
| Cancellation | Fraud review rejects an order | Usually | Sudden change by payment method or campaign |
| Partial refund | One line returned from a multi-line order | Usually | Refund not linked to order or line |
| Currency | Settlement differs after conversion | Usually | Amount cannot be reproduced from agreed source |
| Identifier loss | Transaction has no usable order reference | No | Any recurring pattern after integration change |
| Duplicate event | Same purchase ingested twice | No | Revenue inflation or customer-level duplication |
4. Publish a decision-ready view
The daily summary should show gross placed sales, cancellations, refunds recognised in the period, net sales on the defined basis, payment variance, and the value in the unknown bucket. Add a short note when a system is delayed. This is more valuable than hiding disagreement behind a single polished total.

Handling refunds, discounts and fees
Refunds should be tied to an order line where possible, with a reason code and a received/issued date. A request to return is not yet a financial refund; a customer can request, ship, and then abandon a return. Keeping the lifecycle separate helps both customer-service analysis and finance accuracy.
Discounts require the same discipline. Record promotional discount, loyalty redemption, staff discount, goodwill credit, bundle allocation, and shipping subsidy separately when the platform allows it. A single “discount” column cannot tell a merchandising team whether a campaign created incremental demand or merely gave margin away to customers who would have converted anyway.
Marketplace and payment fees should not be subtracted from storefront revenue in a way that masks their cause. Keep gross merchandise value, merchant-funded discount, tax, shipping, platform fee, payment fee, refund, and payout as distinct measures. The right margin model can then choose the appropriate components without rebuilding the raw data.
How often should reconciliation happen?
Run an automated daily control, review material exceptions every trading day, and perform a deeper weekly or monthly close according to finance needs. During peak trading, watch payment failures and payout timing more closely. The cadence is less important than ownership: an unexplained variance needs a person and a response time.
Related reading: Ecommerce analytics statistics for event deduplication, server-client revenue trust and Shopify profitability dashboard: margin, CAC and discount control.
FAQ
Which source should be the source of truth for ecommerce revenue?
There is no universal source of truth. The correct source depends on the decision. The durable answer is a documented metric contract that identifies the event, status, time zone, grain, and adjustments for each use case.
Why does GA4 revenue not match Shopify revenue?
They observe different systems and can lose data for different reasons: consent, ad blockers, event implementation, session boundaries, duplicate tags, order edits, and refund timing. Use analytics for behavioural analysis and reconcile transaction-level commercial reporting to the appropriate operational and financial sources.
What is an acceptable daily variance?
Set a baseline from your own settled history and classify expected timing differences. The acceptable level is not a generic percentage; it depends on order volume, payment methods, marketplaces, currency mix, and the maturity of the integrations.
EcomToolkit point of view
Good ecommerce analytics does not demand one magical revenue total. It makes every total traceable to a purpose. When orders, payments, returns, and finance are connected by clear contracts, teams spend less time debating dashboards and more time acting on profitable demand.