Why ecommerce reports do not match: the direct answer
Your ecommerce reports do not match because each system is usually answering a different question. Your store platform may count placed orders. Your accounting export may count booked revenue. Your ad platform may count attributed conversions inside its own attribution window. Your analytics tool may count tracked website purchases. Your marketplace report may count settlements after fees and payout timing. Your spreadsheet may apply another layer of filters, joins, formulas, or manual edits.
That means one dashboard is not automatically wrong. The mismatch often comes from different rules for date basis, revenue recognition, attribution, refunds, discounts, tax, shipping, order status, marketplace settlement, POS syncs, SKU mapping, currency, timezone, or spreadsheet transformations.
Operator answer: do not start by asking, “Which dashboard is correct?” Start by asking, “Which business decision am I making?” Then choose the report whose definition matches that decision.
If you are deciding whether yesterday’s sales were down, start with raw commerce orders. If you are closing the month, use finance or accounting-recognized revenue. If you are tuning Meta or Google campaigns, review platform-attributed campaign data but do not treat it as total store revenue. If you are investigating refunds, separate refund date from original order date. If you are analyzing products, reconcile SKU, variant, bundle, and return logic before trusting the product table.
Which ecommerce report should you trust?
The report to trust depends on the decision. A single “master dashboard” can still mislead you if it blends incompatible definitions of revenue, orders, refunds, AOV, ROAS, and customer value.
| Decision you need to make | Best starting source | Why | What not to mix in |
|---|---|---|---|
| How many orders were placed? | Commerce platform or order database | It contains transaction-level order records, statuses, timestamps, discounts, customer IDs, and line items. | Ad platform conversions or analytics sessions. |
| How much revenue should finance book? | Accounting, payment, or finance export | It is closer to settlements, refunds, tax, shipping, fees, and recognized revenue rules. | Gross sales dashboards without refund and fee treatment. |
| Which campaign should get more budget? | Ad platform plus blended store-level performance | Ad tools show platform-attributed outcomes; store data shows whether total revenue and margin support the spend. | Do not compare ROAS from one attribution window to revenue from another source. |
| Why did conversion rate change? | Analytics tool and commerce checkout data | Analytics explains traffic and site behavior; checkout/order data confirms completed purchases. | Do not use order exports alone to diagnose traffic quality. |
| Which products are causing the issue? | Order line-item table, product catalog, returns data | Product diagnosis needs SKU, variant, bundle, discount, fulfillment, and refund context. | Do not rely only on aggregate revenue by product name. |
| Are customers coming back? | Cohort, customer, or lifecycle reporting | Retention, repeat purchase, and LTV depend on identity resolution and customer-level history. | Do not use simple order count without customer matching rules. |
The safest rule is to keep metric families together. Reconcile revenue from one definition, orders from one status policy, refunds from one timing rule, and ROAS from one attribution model. Mixing definitions creates false precision.
Report mismatch map: where ecommerce numbers usually diverge
Use this map to locate the mismatch before rebuilding your entire reporting stack.
| Mismatch bucket | Symptom operators see | Likely cause | First thing to inspect |
|---|---|---|---|
| Date basis | Revenue matches over a month but not by day. | One report uses order date, another uses payment date, fulfillment date, refund date, payout date, or local timezone. | Timestamp field, timezone, and date filter logic. |
| Revenue basis | One report is higher than another even with the same order count. | Gross revenue, net revenue, total sales, tax, shipping, discounts, refunds, or fees are treated differently. | Revenue formula and included components. |
| Order inclusion | Order counts differ across dashboards and exports. | Cancelled, unpaid, partially paid, test, fraud, draft, subscription, exchanged, or POS orders are included in one place but excluded elsewhere. | Order status filters. |
| Refund and return handling | Refund totals do not tie to revenue reports. | Refunds are counted by refund date in one tool and original order date in another; partial refunds and returns may be separated. | Refund timestamp, refund amount, return status, and original order ID. |
| Attribution logic | Meta, Google Ads, GA4, and store revenue all show different numbers. | Each platform uses different tracking, attribution windows, click/view rules, modeled conversions, and deduplication. | Attribution window and conversion source. |
| Customer identity | Repeat purchase, retention, and LTV do not match. | Email, phone, customer ID, marketplace ID, guest checkout, and POS identity are stitched differently. | Customer matching rule. |
| Product and SKU mapping | Product reports disagree with sales reports. | Variants, bundles, renamed SKUs, aliases, kits, exchanges, or returns are mapped inconsistently. | Line-item SKU, variant ID, bundle logic, and product catalog history. |
| Marketplace and POS settlement | Marketplace payout does not match marketplace order revenue. | Fees, holds, chargebacks, shipping adjustments, settlement date, and payout timing are included differently. | Payout report and settlement date. |
| Currency and timezone | International revenue changes depending on report. | Reports use different exchange rates, transaction currencies, store currency, or timezone cutoffs. | Currency conversion field and reporting timezone. |
| Spreadsheet transformations | Manual report disagrees with every dashboard. | Pivot tables, lookup errors, duplicated rows, excluded statuses, stale exports, or formula changes modify the source data. | Raw export row count, formulas, joins, and refresh date. |
A practical workflow for reconciling ecommerce reports
Do not reconcile every metric at once. Start from the symptom and follow the shortest path to the likely definition mismatch.
Start here if total revenue differs
- Freeze one date range and one timezone.
- Export raw orders for that exact range from the commerce platform or order database.
- Separate gross revenue, discounts, shipping, tax, refunds, fees, and net revenue into different columns.
- Check whether each report uses order date, payment date, fulfillment date, refund date, or payout date.
- Compare revenue before refunds and revenue after refunds separately.
If order count is the same but revenue differs, the issue is usually revenue basis. If revenue matches over a longer period but not by day, the issue is usually timing.
Start here if order counts differ
- List the order statuses included in each report.
- Check whether cancelled, unpaid, partially paid, draft, test, fraud, exchanged, subscription, POS, and marketplace orders are included.
- Compare total orders, paid orders, fulfilled orders, and refunded orders separately.
- Look for duplicate order IDs created by exports, joins, or subscription renewals.
Do not use ad conversions or analytics purchases as the source of truth for order count. They are tracking outputs, not the order ledger.
Start here if ROAS differs
- Write down the attribution window for each platform.
- Separate click-attributed, view-attributed, modeled, and tracked purchases where possible.
- Compare platform-attributed revenue to total store revenue, not as a replacement for it.
- Check whether returns, cancellations, taxes, shipping, and discounts are included in the revenue used for ROAS.
- Use blended measures alongside platform ROAS when budget decisions affect the whole store.
Ad platforms are useful for campaign diagnostics, but they should not be treated as the only source for company-level revenue or profit decisions.
Start here if product performance differs
- Export order line items, not only product summary rows.
- Map product ID, variant ID, SKU, product name, bundle parent, and bundle component.
- Check whether renamed SKUs or merged products changed historical reporting.
- Separate revenue sold from revenue kept after refunds and returns.
- Look at contribution margin if product decisions involve profitability, not just sales volume.
Product reports often disagree because one system reports what was sold, another reports what was fulfilled, and another reports what was retained after refunds.
Start here if refund totals differ
- Separate refund amount from return status.
- Compare refunds by original order date and refunds by refund processed date.
- Check for partial refunds, shipping refunds, tax refunds, exchanges, store credit, and chargebacks.
- Confirm whether refunded orders are removed from revenue or shown as negative transactions.
A refund report can be correct and still not match a revenue report if one uses the refund date and the other adjusts the original order date.
Start here if marketplace numbers differ
- Keep marketplace order revenue separate from marketplace payouts.
- Reconcile fees, reserves, holds, shipping adjustments, returns, chargebacks, and payout date.
- Compare order date revenue to settlement date cash movement.
- Document marketplace-specific caveats instead of forcing them into the same formula as direct-to-consumer orders.
Marketplace settlement reports are cash and payout tools. They are not always clean substitutes for order-level revenue reports.
Build a cleaner revenue-leak workflow
If your team is still stitching orders, refunds, ad spend, product performance, and retention data in spreadsheets, create a SignalOps account to start building a more repeatable audit workflow around the numbers operators actually use.
Analyze your order exportMetric definition matrix: revenue, orders, refunds, AOV, ROAS, and LTV
Before you compare dashboards, define the metric. Most reporting fights are definition fights disguised as data problems.
| Metric | Working definition | Common sources | Common mismatch reason | Recommended source of truth |
|---|---|---|---|---|
| Gross revenue | Product revenue before discounts, refunds, tax, shipping, and fees, depending on platform setup. | Commerce platform, order export, BI dashboard | Some reports include shipping or discounts; others do not. | Order line-item export with documented formula. |
| Net revenue | Revenue after discounts and refunds, with tax, shipping, and fees treated according to your finance policy. | Commerce platform, accounting, finance export | Refund timing and fee treatment differ. | Finance-approved revenue report. |
| Total sales | Platform-specific sales total that may include product sales, discounts, returns, shipping, and tax. | Store dashboard | The label sounds universal but the formula is platform-specific. | Use only after documenting included components. |
| Orders | All order records created in the store. | Commerce platform, order database | Draft, test, cancelled, unpaid, or marketplace orders may be included. | Commerce order table. |
| Paid orders | Orders with completed or captured payment. | Commerce platform, payment processor | Payment status filters differ from order status filters. | Commerce or payment export with payment status. |
| Fulfilled orders | Orders shipped or marked fulfilled. | Commerce platform, warehouse, 3PL | Partial fulfillment, split shipments, and cancellations create timing gaps. | Fulfillment or warehouse system for operations decisions. |
| Refunds | Money returned to customers through full or partial refunds. | Commerce platform, payment processor, accounting | Refund date versus original order date; partial refunds; shipping and tax refunds. | Payment or commerce refund export, with timing rule documented. |
| Returns | Items requested, approved, received, or processed through a return workflow. | Returns platform, support tools, warehouse | Return status is not the same as refunded money. | Returns system for return operations; finance export for refunded value. |
| Discounts | Promo, automatic, code-based, or manual reductions from price. | Commerce platform, order export | Line-item versus order-level discount allocation. | Order line-item export with allocation rule. |
| Shipping | Shipping charged to the customer, or shipping cost to the merchant, depending on report. | Commerce platform, carrier, 3PL, accounting | Shipping revenue and shipping cost are often confused. | Commerce for shipping charged; accounting or 3PL for shipping cost. |
| Tax | Sales tax, VAT, or other tax collected. | Commerce platform, tax software, accounting | Some reports include tax in revenue; others exclude it. | Tax or accounting system. |
| AOV | Average order value, usually revenue divided by order count. | Commerce platform, analytics, spreadsheet | Different revenue numerator or order denominator. | Define formula from order export and reuse it. |
| Conversion rate | Purchases divided by sessions, users, visitors, or another traffic denominator. | Analytics tool, ecommerce dashboard | Different traffic denominator, consent limits, tracking loss, or session rules. | Analytics tool for site behavior, validated against order count. |
| ROAS | Attributed revenue divided by ad spend. | Meta Ads, Google Ads, analytics, attribution tools | Attribution windows, modeled conversions, view-through credit, and revenue basis differ. | Ad platform for platform optimization; blended store data for business decisions. |
| MER | Total revenue divided by total marketing spend. | Finance, ad platforms, spreadsheet, BI dashboard | Revenue and spend sources may use different dates or include different channels. | Finance-approved revenue and complete spend export. |
| Repeat purchase rate | Share of customers who purchase more than once in a defined period. | Cohort tool, customer table, lifecycle platform | Customer identity and time window differ. | Customer-level order history with documented identity matching. |
| Retention rate | Share of customers who continue buying or remain active across a defined cohort window. | Cohort reporting, lifecycle analytics | Cohort start, active definition, and purchase window differ. | Cohort tool or customer table with stable cohort rules. |
| LTV | Customer value over a defined period, often revenue or margin per customer. | Cohort tool, BI, finance model | Gross revenue, net revenue, contribution margin, and time horizon are mixed. | Finance-approved cohort model. |
| Product revenue | Revenue assigned to products, variants, bundles, or SKUs. | Order line items, product dashboard | Bundles, variants, renamed SKUs, and returns are mapped differently. | Order line-item table with SKU mapping rules. |
| Contribution margin | Revenue remaining after selected variable costs such as COGS, payment fees, shipping, discounts, and sometimes ad spend. | Finance model, BI dashboard, product profitability tool | Cost allocation rules differ. | Finance-approved margin model. |
Common mismatch scenarios and what to audit first
Shopify or WooCommerce revenue does not match GA4
The likely explanation is that your commerce platform is reporting order records while GA4 is reporting tracked website events. GA4 can be affected by consent settings, tracking gaps, session rules, attribution, duplicate event handling, and transaction ID collection.
Check first: transaction IDs, purchase event firing, timezone, refunds, tax, shipping, discounts, and whether the same order date range is used. Do not use: GA4 as the sole ledger for order revenue.
Meta Ads or Google Ads revenue does not match analytics
The likely explanation is attribution. Ad platforms, analytics tools, and your store apply different rules for click credit, view credit, conversion windows, modeled conversions, deduplication, and channel assignment.
Check first: attribution window, conversion action, purchase event, revenue value passed, and whether returns or cancellations are adjusted. Do not use: one platform’s attributed revenue as total business revenue.
Order exports do not match dashboard orders
The likely explanation is a filter mismatch. The dashboard may exclude cancelled, test, unpaid, or archived orders while the export includes them, or the export may include POS, marketplace, subscription, draft, or duplicate rows from line items.
Check first: order status, payment status, sales channel, test orders, and whether each row is an order or a line item. Do not use: row count as order count unless each row is one order.
Refund totals do not match revenue reports
The likely explanation is timing. One report may apply the refund to the original order date, while another shows the refund on the date money was returned. Partial refunds, store credit, tax refunds, shipping refunds, chargebacks, and exchanges can also cause gaps.
Check first: refund date, original order date, refund amount, refund reason, payment processor record, and return status. Do not use: returns requested as a proxy for refunded revenue.
AOV changes depending on the report
AOV changes when the numerator or denominator changes. One tool may use gross sales divided by all orders. Another may use net revenue divided by paid orders. Another may exclude tax, shipping, refunds, discounts, or cancelled orders.
Check first: revenue numerator and order denominator. Do not use: AOV from mixed revenue and order definitions when evaluating pricing, bundles, or promotions.
Product reports disagree with sales reports
The likely explanation is product mapping. Product dashboards often group by current product name, while order exports may preserve historical SKU, variant, bundle, or line-item details. Refund and return handling can also move product performance after the sale.
Check first: SKU, variant ID, bundle logic, renamed products, deleted products, and refunded line items. Do not use: product name alone as the product key.
Marketplace payouts do not match order revenue
The likely explanation is that order revenue and payout cash are different concepts. Marketplace payouts may include fees, reserves, advertising charges, shipping adjustments, tax handling, chargebacks, and settlement delays.
Check first: settlement date, payout report, fees, holds, returns, and marketplace-specific adjustments. Do not use: payout amount as clean product revenue.
Manual spreadsheets disagree with dashboards
The likely explanation is spreadsheet logic. A stale export, hidden filter, broken lookup, duplicate join, pivot-table setting, overwritten formula, or manual exclusion can change the result even when the original data was correct.
Check first: raw row count, unique order IDs, formula ranges, lookup keys, pivot filters, export timestamp, and any manual edits. Do not use: a spreadsheet total until it reconciles back to raw source rows.
How to assign a source of truth by decision type
A source of truth is not just a tool. It is a documented rule that says which system, metric definition, date window, and filter policy your team will use for a specific decision.
For each important metric, document these fields:
- Metric name and business use.
- Primary source system.
- Date basis: order date, payment date, fulfillment date, refund date, settlement date, or cohort date.
- Reporting timezone.
- Included and excluded order statuses.
- Revenue basis: gross, net, total sales, booked revenue, or contribution margin.
- Tax, shipping, discount, refund, fee, and chargeback treatment.
- Attribution window and conversion source, if marketing-related.
- Customer identity rule for retention, repeat purchase, and LTV.
- SKU, variant, bundle, and product mapping rules.
- Marketplace, POS, subscription, and wholesale caveats.
- Metric owner and refresh cadence.
Practical takeaway: create an Ecommerce Report Reconciliation Matrix with one row per metric and columns for source system, definition, date basis, revenue basis, refund handling, tax and shipping treatment, attribution window, order status inclusion, SKU mapping, known caveats, owner, and recommended source of truth.
Once this is documented, reporting disagreements become easier to resolve. Instead of debating which dashboard “feels right,” the team can ask whether the report follows the approved rule for that decision.
Operator audit script: how to prevent mismatches from recurring
Run this script before major budget changes, merchandising decisions, monthly reporting, retention planning, or refund analysis.
- Freeze the date range. Use exact start and end dates, one timezone, and one refresh timestamp.
- Export raw orders. Pull order-level and line-item-level data before relying on summaries.
- Compare gross and net revenue separately. Do not reconcile one blended revenue number until discounts, refunds, tax, shipping, and fees are separated.
- Separate refunds by two dates. Build one view by original order date and another by refund processed date.
- Verify order statuses. Document whether cancelled, unpaid, partially paid, test, fraud, exchanged, subscription, POS, and marketplace orders are included.
- Check attribution windows. Record the conversion source, attribution window, click/view rules, and modeled conversion settings for each ad or analytics report.
- Reconcile SKU aliases and bundles. Map SKU, variant ID, product ID, bundle parent, bundle component, and historical product names.
- Compare marketplace settlements separately. Reconcile order revenue to payout reports only after fees, holds, reserves, returns, and settlement timing are identified.
- Inspect spreadsheet transformations. Check row counts, unique order IDs, lookup keys, pivot filters, formula ranges, and manual edits.
- Document the source-of-truth rule. For every metric used in a decision, write down the approved source, formula, timing rule, and owner.
The goal is not to make every platform show the same number. The goal is to know why the numbers differ, which one fits the decision, and where mismatches may be hiding a revenue leak.