Booking · Q4 2026 · 2 slots open20+ yrs shipping systemsSecure AI · regulated environmentsStrategy → production
All guides
June 28, 20268 min readDashboard Truth

Why Your Sales Dashboards Disagree and How to Fix It

Meta, Google, and your store all report different sales. Here is how to build one honest view of where your revenue really comes from.

You have the same month open in four places and four different totals. Meta claims one number, Google another, TikTok its own, and your store shows less than all of them. Whichever you go with, you know you're picking a favorite.

The disagreement starts earlier than most people look. Before any ad platform gets a vote, the same sale can land in your own records twice: one checkout, two rows, two confirmation emails. Each of those four totals was assembled by a different system following its own rules, and none was built to agree with the others.

In this post I'll show you how to get to one number you'd decide from, starting in a spreadsheet.

This is part of the "Dashboard Truth" mini-series: one set of numbers you can trust enough to decide from.

The short answer. Your sales dashboards disagree because Meta, Google, TikTok, and your own store each count differently: duplicate events inflate one number, overlapping ad-platform credit inflates another, and none of them starts from the same definition of a sale. The fix is one reconciled view built from your own store's records.

Why Your Reports Never Add Up

One sale gets written down twice in two ordinary ways, and neither looks like a failure.

The first is a retry. Stripe re-sends a webhook until it gets a clean acknowledgment, and it can deliver the same event to several handlers at once. Insert a row every time your code hears about a payment and one purchase becomes four or eight rows, each with a confirmation email.

The other is one checkout producing two events. Switch on invoice creation for a Stripe payment link and a single checkout fires both checkout.session.completed and invoice.paid. Record both and the sale sits in your table twice, once as a cs_… row and once as an in_… row. Nothing errors out. The same money is written down under two names.

The fix for both is the same: store the ID the processor gives you, put a unique constraint on that column, and write updates against it so a repeat lands on the row it already wrote.

Now stack four ad platforms on top of that one sale. Each counts it as theirs if it saw a click or view inside its own lookback window, so the same buyer shows up on three invoices.

Ruler Analytics walked through a case where three platforms reported 175 conversions between them against 95 real sales, an 84% overcount, with platforms across accounts claiming 30 to 50% too many.

Why Adding Another Tool Backfires

Every dashboard you buy arrives with its own copy of your numbers. Take search: Search Console reports the clicks and impressions Google itself recorded, for free, and a paid SEO tool will show a different figure for the same week. Now you own two numbers plus the job of deciding which is right.

The judgment call is whether the paid tool reaches something your own sources can't: competitor keywords, backlinks, a market you hold no data on. If it hands back a second version of a number you already had, you've bought a reconciliation chore.

Marketing teams already run six tools to measure results, yet only 18% say they have a clear view of what's working, per research from Bitly, and one count put the landscape at more than 15,000 marketing tools in 2025. Every tool you add is one more number somebody reconciles by hand, and that somebody is you.

The Number That Hides: True Profit

I run a small pet-merch store on Shopify, printed on demand through Printify. Repricing it, I pulled current per-item costs straight from Printify instead of trusting my own pricing doc, and the same mug came back carrying two different costs in two places.

Do it across every live SKU rather than a sample. One row per product: supplier cost today, shipping, marketplace fee, payment fee. Check each against the margin you believe you're holding. Supplier costs move, and a pricing doc written in January is a guess by June.

Revenue looks fine through all of it. It always does. Revenue sits in your store platform, ad spend in Meta, fees with your processor, and joining them is nobody's job but yours.

By one ecommerce finance estimate, brands' actual net margin runs 5 to 8 points below what they think: a believed 15% is often really 7 to 10%.

Start Rough, Then Make It Honest

Count your sources before you build the spreadsheet: every payment account money lands in, every storefront, every ad account. A revenue check that reads one account while you take money through two is wrong before you start, and it looks healthy the whole time.

Then:

  1. Put a tracking link on everything you share, so each click carries a name tag. There's a fuller walkthrough in the four free tools that put a name tag on every click. Google's free Campaign URL Builder builds one for you.
  2. Put last month's numbers from each platform into one spreadsheet.
  3. Hand it to a strong reasoning model and ask where the sources disagree and which to trust.

Give each channel its own row: Meta, Google, TikTok, email, organic. Add a column for what each platform claims it drove, one for what your store recorded as orders, and one for what you spent. One platform claims 40 sales while your store shows 22. Then ask:

"Which of these looks like it's double-counting, and which channel is most efficient once spend is in?"

Two things to keep fixed. Use one date basis in every column, order date or payout date all the way across, because the month boundary alone can move a channel by double digits. And keep refunds and test charges out of the sales column: a refunded order reads as revenue in most raw exports.

One Honest Number, on Demand

Here's my test for a dashboard: can it answer "how much did I make from each channel last month, after costs?" in one place? If getting there still means Meta, then Google, then your store, then a spreadsheet, the pulling-together hasn't happened yet.

That same test, run again, comes back with a different answer each time. None of them are lying. Each one answered something narrower than you thought you asked.

So pin the scope down before trusting a total: which accounts are in it, whether refunds are netted out, whether test charges still sit in the table, and which currency it's in. Write those four at the top of the sheet.

Why This Is Worth Doing

A dashboard can look healthy for months and hold nothing. An attribution tracker will record pageviews flawlessly and still show zero sales if nothing in your checkout code ever tells it a sale happened. The tool you installed to show where customers come from holds no outcomes at all, and no error appears anywhere to say so.

That blind spot shows up the same way on the visitor side: how to find out why visitors leave your website covers the check for whether your tracking has ever fired at all.

You're not the only one squinting at your own reports: 67% of organizations say they don't fully trust the data they use to make decisions, up from 55% the year before, in research from Precisely and Drexel's LeBow College of Business.

So give your reconciled view a month against what you already know, and order it the way the money moved. Payments first, from every account you hold, each with its own read-only key. Then store orders. Then money out, even from a cost file you keep by hand.

When a source can't be read, a missing permission or an expired token, have that line come back "could not measure" instead of a number. A zero would tell you you made nothing that day, and you'd go hunting a sales problem that doesn't exist.

Quick Recap

  • One checkout can land in your database several times, so duplicate events break your count before any ad platform touches it.
  • Ad platforms each claim the same customer, so the totals add up to more than you sold.
  • True profit hides because costs sit in separate systems, and one product can carry two prices.
  • Count your sources first: a revenue check can be reading one payment account when you hold several.
  • Start rough: one spreadsheet, last month's numbers, and a model asked where they disagree.

Start Here

If you're tired of trusting whichever dashboard looks best that day, the fix is a single reconciled view, and that's the work I do.

At daisyguti.ai/work-with-me, there's a short intake: about nine questions, a few minutes. Daisy reads every submission herself, assesses whether a reconciled view is a fit for your numbers, and replies with next steps. She's a 20+ year engineer who builds these dashboards for online brands doing $1-20M.

Sources

  1. Ruler Analytics, conversion duplication (175 reported vs 95 actual; 30 to 50% overcount) - https://www.ruleranalytics.com/blog/reporting/conversion-duplication/
  2. MarTech.org, marketing measurement complexity (6 tools, 18% clarity; Bitly data) - https://martech.org/marketing-measurement-is-breaking-under-its-own-complexity/
  3. MarTech.org, 2025 martech landscape (15,384 tools) - https://martech.org/the-number-of-martech-tools-is-now-15384/
  4. Luca, ecommerce profit margins (perceived vs actual margin gap of 5 to 8 points) - https://ask-luca.com/blogs/ecommerce-profit-margins
  5. Precisely with Drexel LeBow, data trust (67% don't fully trust their decision data) - https://www.precisely.com/press-release/new-global-research-points-to-lack-of-data-quality-and-governance-as-major-obstacles-to-ai-readiness
  6. Google Campaign URL Builder, free UTM tool - https://ga-dev-tools.google/campaign-url-builder/

Start a project

Ready to scope it and ship it?

Have an AI workflow, reporting gap, or system you can't seem to get off the ground? Scope it with me. You'll get a real read on what to build first and what it should cost.

I review every submission and reply with a real read on fit.