focosys.io
← Writing
Essay · Customer Data, Attribution & Lifecycle

Why marketing and finance never agree on what a dashboard is showing

The BI dashboard rolls up GA4, Meta, and CRM into one clean number. That number is an opinion, not a fact, and most marketing teams never check which opinion it's giving them.

Why marketing and finance never agree on what a dashboard is showing
Key takeaways
  • A BI dashboard blending GA4, Meta, and CRM data is running whatever attribution model the last person to touch the join logic picked, usually last-click by default, and nobody documented it.
  • Finance's number and marketing's number disagree because they're counting different things: cash collected in a ledger versus modeled credit assigned across touchpoints that never happened in that order.
  • The fix isn't a better dashboard. It's writing down, in one page, what event counts as a conversion, what window it uses, and what model assigns credit, then checking that page before trusting any number.
  • Test your own dashboard: pull the same conversion metric from GA4, Meta Ads Manager, and your CRM for the same 30 days. As a rough heuristic, numbers in the same neighborhood suggest a documented model. A gap that's a multiple apart usually means an unlabeled attribution model, not a data problem.

Picture a Monday pipeline review. The VP of Marketing pulls up the Looker dashboard: paid social shows 412 conversions at a $38 CPA. She points at it like it's a fact. The CFO, sitting two seats down, has a Salesforce report open showing 260 closed-won deals sourced from paid social for the same month. The exact numbers change every time I see this play out, but the shape never does.

Nobody in the room asks why the numbers don't match. They just argue about which one is "more right," and marketing usually wins because their number is on the screen and finance's number takes longer to explain.

I've sat in versions of this meeting more times than I can count, different logos, same argument. The dashboard isn't lying. It's just answering a question nobody wrote down. This is the same root problem behind why marketing and finance see different revenue numbers: it's a measurement architecture gap, not a communication gap.

Every dashboard is a set of choices wearing a UI

A BI tool like Looker, Tableau, or a custom Snowflake + dbt stack doesn't measure marketing performance. It executes a query someone wrote, against data someone else piped in, using an attribution logic someone chose a while back and never revisited.

That query makes at least four decisions, usually invisibly:

  1. What counts as a conversion. Form fill? MQL? SQL? Closed-won? Each one is a different number, and I've seen dashboards silently switch definitions mid-quarter when a data team "improved" the pipeline.
  2. What window counts. A short click-based window, a view-through window, a long lookback window used by CRM-based models? These aren't cosmetic settings. Shortening an attribution window tends to reduce a channel's credited conversions, sometimes sharply, depending on the sales cycle length. I've seen this gut a channel's reported ROAS outright, the same dynamic covered in the attribution window mismatch case study.
  3. What model assigns credit. Last-click, last non-direct, linear, or some custom weighting someone built in a dbt model two analysts ago and nobody has opened since. If you're deciding between attribution and MMM, multi-touch attribution vs MMM walks through which model fits which spend level.
  4. What gets excluded. Bot traffic filters, internal IP exclusion, refunded orders, duplicate leads. Every one of these is a threshold somebody set, often the default, often stale.

None of this shows up in the dashboard UI. You see a number and a trend line. You don't see the WHERE clause.

The default is never neutral

If nobody explicitly chose an attribution model, the tool chose one for you. In my experience, GA4 has tended to default to a data-driven attribution model on many properties, Meta Ads Manager has typically defaulted to a 7-day click and 1-day view window, and Salesforce campaign influence defaults to whatever the admin set up during the original CRM implementation, often first-touch. Platform defaults change over time and vary by account setup, so check your own instance rather than assuming last year's default still holds. Blend a few of these defaults into one dashboard and you get a number that isn't wrong, it's just answering a question nobody asked on purpose. If you suspect GA4's model specifically is inflating your numbers, how to tell if your GA4 attribution is wrong covers the diagnostic steps.

Why finance and marketing are arguing about two different things

Why finance and marketing are arguing about two different things

Finance's number comes from a ledger. Cash in, cash out, deal closed, invoice paid. It's built for reconciliation. It doesn't care how a customer found you, only that the transaction happened and the amount is verifiable.

Marketing's number comes from a model. It's built to answer "what should we do next," which requires assigning credit across a sequence of touches that, in reality, didn't happen the way the model draws it. A user who saw a display ad, searched the brand name a few days later, clicked an email, and then converted through a retargeting ad gets attribution split (or not split) based on rules that have nothing to do with what actually caused the sale. This is the same confusion that shows up in the retargeting fallacy case study on attribution vs incrementality, where a channel got credit for sales it didn't cause.

These two systems will never naturally agree, because they're not measuring the same thing. One is accounting. The other is inference. Putting them on the same dashboard tile, labeled "Marketing Performance," is where the fight starts.

I've seen this pattern repeat across companies: marketing's attributed pipeline number for a quarter comes in well above finance's closed-won number for the same period and channel. The gap usually isn't fraud or bad tracking. It's open opportunities sitting in a pipeline stage that marketing's dashboard counted as "generated" the moment they entered the CRM, while finance only counted revenue that had actually closed. Same word, "conversions," two different events.

The join is where dashboards quietly break

Most marketing BI dashboards are built on a join: ad platform data joined to CRM data on some identifier, usually email or a UTM-derived campaign ID. That join is fragile in ways that don't show up until you go looking.

A few things I check first when a client says "the numbers don't add up":

  • UTM parameters get stripped or overwritten. A user clicks a paid ad, lands with utm_source=google&utm_campaign=brand_q1, then navigates to another page before filling out a form. If your CRM only captures UTMs on the exact landing page and the form isn't there, the lead gets logged as (direct) or gets whatever UTM was last set by a subsequent session. This is closely related to how cross-domain tracking breaks and shows up as direct traffic in GA4.
  • The identifier used for the join doesn't match consistently. Ad platforms often join on click ID. CRMs join on email. If the handoff between ad click and form submission loses that click ID (common with third-party form embeds, iframes, or any redirect that doesn't pass query params), the join fails silently and that lead falls out of the paid channel's reporting.
  • Timezone mismatches shift day-level attribution. GA4 reports in the property's set timezone. The CRM reports in whatever timezone the org default is. A conversion late at night can land on different calendar days in each system, which matters a lot when someone's comparing "conversions this week."

None of these show up as errors. The dashboard doesn't throw a warning. It just quietly under- or over-counts, and the number looks plausible enough that nobody questions it.

Write a one-page measurement definition before you trust the number

You don't fix this by buying a better BI tool. Looker, Tableau, Domo, they're all rendering whatever logic you feed them. The fix is documentation and a reconciliation habit, not new software.

Write a one-page measurement definition doc. For every metric that shows up on an executive dashboard, write down: the exact event that counts as a conversion, the attribution window, the model, and any filters applied (bot exclusion, refund handling, internal traffic). This should live somewhere everyone building or reading the dashboard can find it, not buried in an old Slack thread nobody remembers to search. If you're building this out for the first time, a measurement roadmap for B2B SaaS is a reasonable template to start from.

Run the three-way comparison regularly. Pull the same conversion metric, same date range, from the ad platform, GA4, and the CRM. Don't expect them to match exactly. Do expect the gap to be explainable. If paid search shows a large number of conversions in the ad platform and your CRM shows far fewer leads for the same campaign in the same window, that's not "attribution is messy," that's likely a broken join or a mismatched definition, and it's findable. The same logic applies to why your CAC numbers disagree across platforms.

Separate the two dashboards on purpose. Build one view for marketing operations (channel-level, model-based, used for budget allocation) and one for finance and the board (ledger-based, tied to actual revenue events). Stop trying to make one number serve both audiences. It won't, because the questions are different.

Test your own dashboard

Pick one channel and one 30-day window. Pull conversions from the ad platform's native reporting, from GA4, and from your CRM for that same channel and window. Line them up side by side. As a rough practitioner heuristic, numbers within 10-15% of each other usually point to a documented, consistent model. A gap that's double or more with no obvious explanation usually means an attribution model nobody wrote down, and that's the actual problem, not the dashboard.

The number isn't wrong. The question was never asked.

A dashboard showing a clean conversion count isn't lying to you. It's giving a precise answer to an imprecise, undocumented question: which touch, in which window, under which model, counted as a conversion.

The fix isn't better visualization. It's opening the query, or the model config, or the dbt file, and writing down in plain language what it's actually counting. Do that once, put it next to the dashboard, and the next time marketing and finance disagree in a pipeline review, you'll be able to point at the definition instead of the trend line.

focosys — Measurement systems writingMore writing →