Technical
12 min read

How Do I Know My Ecommerce Numbers Are Right?

The number one question ecommerce operators ask about their data isn't 'what's my revenue', it's 'can I trust this figure'. Here's why your numbers disagree across tools, and how to make a single figure you can defend in a board meeting.

Kateryna Kozachenko

Marketing & Growth

TL;DR: the most common data question in ecommerce isn't "what was revenue last month?". It's "how do I know that number is right?". Numbers disagree because every tool defines revenue differently, refunds and settlements land on different days, and attribution windows don't line up. You build trust three ways: pin down one definition per metric, make every number traceable back to the raw row it came from, and run reconciliation checks that catch drift before a stakeholder does. An AI data analyst only earns trust if it can show you the query behind the answer and pull from consistent, governed definitions. That traceability is the whole point of running ingestion, transformation, and the analyst on one platform like Bruin, rather than stitching four vendors together and hoping they agree.

We spent a lot of time this year talking to ecommerce founders and operators. The single loudest theme, louder than "I want faster dashboards" or "I want AI", was a quieter and more anxious one:

"I have four tools open and they all show a different number. How do I know which one is correct?"

This is the real job to be done in ecommerce analytics. Not producing a number. Producing a number you can defend when your investor, your accountant, or your own gut asks "are you sure?".

Here's why your numbers disagree, and how to get to one you trust.

Why your revenue never matches across tools

Open Shopify, Amazon Seller Central, your ad platforms, and GA4 side by side for the same week. You will get four different revenue figures. None of them is lying. They are answering slightly different questions.

  • Shopify shows gross sales by default, before refunds, and often before you subtract discounts and shipping the way your accountant would. "Total sales" and "net sales" in Shopify's own reports are already two different numbers.
  • Amazon reports on a settlement cycle. Money from an order placed on the 30th might not appear in your settlement until two weeks later, net of fees, FBA charges, and reserves. Amazon's "sales" and Amazon's "deposits" are worlds apart.
  • Ad platforms report revenue they claim credit for, inside their own attribution window (often 7-day click, 1-day view). Meta and Google will both take credit for the same sale. Add them up and you can exceed your actual revenue.
  • GA4 counts purchases via a tag that fires in the browser. Ad blockers, consent banners, and failed page loads mean it systematically undercounts, usually by 5 to 15 percent.

Then layer on the boring killers: timezones (is "yesterday" UTC or your local store time?), currency conversion (spot rate or settlement rate?), and test orders that nobody remembered to exclude. Four tools, four definitions of "day", two definitions of "revenue", and a partridge in a pear tree.

The lesson: there is no such thing as "the" revenue number until you define it. The disagreement is a definition problem wearing a data-quality costume.

Trust comes from three things, not from a prettier chart

A dashboard that looks confident is not the same as a number you can trust. Trust in a figure comes from three properties, and you can audit any tool or any analyst against them.

1. One definition per metric, written down

"Net revenue" should mean exactly one thing across every report: gross sales, minus discounts, minus refunds, minus tax and shipping if that's your convention, in your store's timezone, converted at your chosen rate. Once. This is what people mean by a semantic layer or a metrics layer. It is less about technology and more about a decision that stops getting re-litigated in every meeting.

If two people can ask "what was net revenue in May?" and get two different answers, you don't have a data problem. You have an undefined metric.

2. Traceability back to the raw row

This is the property almost everyone skips, and it's the one that actually creates trust. For any number on a report, can you click through and see the exact orders that make it up? Can you get from "$770k net revenue" back to the raw Shopify order rows and Amazon settlement lines that produced it?

If you can trace it, you can verify it. If you can't, you're asked to take it on faith, and faith is exactly what an anxious operator does not have. Traceability is why lineage matters: a clear path from the raw ingested data, through each transformation, to the final figure.

3. Reconciliation checks that run on their own

The reason numbers quietly go wrong is that a feed breaks, a schema changes, or a currency field flips, and nobody notices for three weeks. Trustworthy setups run automatic checks: does the sum of daily revenue equal the monthly total? Did today's order count fall inside the normal range? Does warehouse revenue reconcile to the Shopify payout within a tolerance? These are cheap to write and they catch the errors that destroy confidence.

A number that has passed a freshness check ("data is current as of 06:00 today") and a reconciliation check ("ties to Shopify payouts within 0.5 percent") is a number you can put in front of your board.

What this means for AI data analysts

AI data analysts are genuinely useful for ecommerce because most of your questions are ad-hoc: "returns by SKU for the holiday cohort", "repeat rate for customers acquired on Meta in Q1", "margin after fees on the bundles". A curated dashboard was never going to have all of those.

But an AI analyst that just hands you a confident number makes the trust problem worse, not better. Now you have a fifth tool disagreeing with the other four, and this one talks like it's sure.

So the bar for an AI data analyst in ecommerce is specific. It has to:

  • Show the query. Every answer should come with the SQL (or the steps) it ran, so you or your analyst can read it. "Trust me" is not an acceptable output. "Here's the query, here are the rows" is.
  • Use your definitions. It should answer from the same governed metric definitions every time, not re-derive "revenue" from scratch on each question and drift.
  • Report freshness. It should tell you how current the underlying data is, so you're never quoting a number built on a feed that broke on Tuesday.
  • Cite the source tables. It should name which tables and which sources the answer touched, so the path back to raw data is never a mystery.

If a tool can do those four things, an operator can actually relax, because now the AI isn't asking for faith. It's showing its work.

Why we built Bruin around traceability, not just answers

We built Bruin as one platform that ingests your data, transforms it, and answers questions on top of it, on purpose. The reason is exactly this trust problem.

When ingestion, transformation, and the analyst are three different vendors, nobody owns the number. The analyst tool blames the transformation tool, which blames the ingestion tool, which blames the source API. You, the operator, are left holding a figure you can't defend.

When it's one platform, the path is unbroken. You can ask Bruin in plain English, in Slack or wherever your team already talks, "what was net revenue in May, and how did you get it?", and it can answer with the number, the definition it used, the query it ran, and the freshness of the data behind it. Ask it to trace a figure back to raw Shopify and Amazon rows and it can, because it ingested those rows in the first place.

Bruin connects to the ecommerce sources you actually use through direct integrations (Shopify, Amazon, Stripe, the major ad platforms, your warehouse), plus thousands more through APIs, webhooks, and scraping. And it lives where your team already works: Slack, Microsoft Teams, Google Chat, WhatsApp, Discord, Telegram, email, and the browser.

That is the whole design goal. Not "an AI that produces numbers". An AI that produces numbers you can trace, check, and defend.

A short checklist before you trust any ecommerce number

Whether the number came from a dashboard, an analyst, or an AI, run it through this:

  1. What's the definition? Gross or net? Refunds in or out? Which timezone? If you can't answer, stop here.
  2. Can I trace it? Can I get from this figure back to the raw orders? If not, it's faith, not fact.
  3. How fresh is it? As of when? A great number on stale data is a wrong number.
  4. Does it reconcile? Does it tie to a hard source of truth, like your actual bank settlements, within a known tolerance?
  5. Is it consistent? If I ask the same question tomorrow, or a colleague asks it a different way, do we get the same answer?

A number that clears all five is one you can stand behind. A number that clears none of them is a rumor with a chart attached.

FAQ

Why does Shopify show a different revenue number than my accountant?

Because Shopify's default "total sales" is usually gross, and often includes shipping and tax, before refunds fully settle. Your accountant works in net revenue on an accrual basis. Both can be correct for their purpose. The fix is to define which one you mean for each report and compute it consistently, rather than quoting whichever tool is open.

How can Meta and Google both claim the same sale?

Attribution windows overlap and neither platform can see the other. If a customer clicks a Meta ad on Monday and a Google ad on Wednesday and buys on Thursday, both platforms count the full sale inside their window. This is why summing platform-reported revenue overstates the total. Reconcile against your actual order data, and treat platform-reported revenue as a directional signal, not ground truth.

Do I need a data team to trust my numbers?

No, but you need discipline: written metric definitions, traceability back to raw data, and automatic checks. A modern AI data analyst that shows its query and pulls from governed definitions can give a small team most of what a data team would have enforced manually. What you can't skip is deciding what each metric means.

Is an AI data analyst trustworthy for financial reporting?

For exploration and operating decisions, yes, provided it shows its work and uses consistent definitions. For statutory financial statements, your accounting system and audited process remain the source of truth. The useful pattern is to use the AI analyst to explore and to reconcile against accounting, not to replace it.

What's the fastest way to stop the "four tools, four numbers" problem?

Pick one definition of net revenue, one timezone, and one currency convention, and write them down. Then compute that metric in one place that can trace back to raw orders, instead of eyeballing four dashboards. Consolidating ingestion, transformation, and questions onto one platform (which is what Bruin is for) removes the seams where the numbers drift apart in the first place.

How does Bruin actually help me verify a number?

You can ask it, in plain language, to explain how it got a figure. It returns the metric definition it used, the query it ran, the source tables it touched, and how fresh the data is. Because Bruin also ingested and transformed that data, the trace goes all the way back to the raw Shopify and Amazon rows, so verification is a click, not a support ticket.

Sign up to our newsletter

Practical updates on open-source data pipelines, AI analysts, governance, and what we are shipping at Bruin.