Skip to main content Stan Consulting LLC · Marketing Atlas · Case File · Attribution · The CFO Who Asked Why the Numbers Did Not Match the Bank

Stan Consulting · Marketing Atlas · Case File · Attribution Mismatch

The CFO Who Asked Why the Numbers Did Not Match the Bank.

case_type: composite
cluster: attribution-mismatch
published: 2026-05-07
01 Section 01 · The setup The setup.

A Shopify Plus DTC home goods brand. Four-point-one million annualized. Ninety-five thousand monthly paid spend. The marketing dashboard reads two-point-one million in trailing-ninety-day revenue. Shopify reports one-point-nine-five. The bank shows one-point-seven-eight deposited. The CFO points at the three-hundred-twenty thousand spread and asks the marketing director which one of these is the company.

That is the composite. The names change. The shape does not.

The brand had been on Shopify Plus for four years. The product line was a mix of owned-inventory home goods and a small marketplace presence on Amazon and Faire. Paid traffic ran roughly fifty-fifty between Google Shopping and Meta. The marketing director had been in the role for six months and had inherited a reporting stack assembled by the prior head of growth.

The marketing dashboard was a Looker Studio document refreshed nightly from GA4 and the ad platforms. The Shopify report was the order-export view inside the admin. The bank balance was the operating account at the brand's bank. Three surfaces, three numbers, one trailing ninety-day window.

The CFO was new. He had joined three months prior and was working through his first quarter-close. He read the marketing dashboard, then the Shopify summary, then the bank statement. He asked the marketing director for an explanation of the spread. He had no theory; he had three numbers that did not agree and an open question.

The marketing director said she would reconcile the numbers. She had not realized until that moment that nobody on the team had decided which surface was the financial source of truth. The dashboard had been shipped to the board for a year. Nobody had tied it to the bank. The CFO's question was the first time the spread had been named.

The audit was scoped at this point. Seventy-two-hour written verdict. The brief was one sentence: tell us which of the three numbers is the company, and tell us what each leak between them is for.

Stage
Shopify Plus · DTC home goods plus marketplace
Annualized revenue
$4.1M
Monthly paid spend
$95K
Trailing-90-day spread
$2.1M dashboard / $1.95M Shopify / $1.78M bank
Spread · total
$320K across three reads
Leak conventions identified
7 active
Source-of-truth decision
Never made
Engagement
Conversion Second Opinion · written verdict
02 Section 02 · The visible problem The visible problem.

Three reads, one company, three-hundred-twenty thousand of spread. The numbers are below in the order the CFO read them. The marketing director had no language for the gap because the gap had never been decomposed.

Marketing dashboard

$2.10M

Trailing-90-day revenue per Looker Studio (GA4 plus ad-platform feeds)

Shopify report

$1.95M

Trailing-90-day gross sales per Shopify admin orders export

Operating bank account

$1.78M

Trailing-90-day deposits net of refunds, chargebacks, and platform fees

None of the three numbers is wrong. Each is internally consistent against a different definition. The marketing dashboard reads gross attributed revenue including marketplace orders pulled in from Faire and Amazon feeds and including in-progress checkouts that had not yet completed when the report ran. Shopify reads gross sales of completed orders inside the Shopify-native channel only. The bank reads deposited cash net of all the deductions the prior two surfaces did not see.

The marketing director's instinct was to defend the dashboard because the dashboard was what the team had built. The CFO's instinct was to anchor on the bank because the bank was what funded payroll. Neither was wrong. Both were applying a different definition of "the company" without a written rule that picked between them.

03 Section 03 · The wrong explanation The wrong explanation.

Four explanations were on the table when the audit started. Each one was almost-right and pointed away from the layer that mattered.

Wrong reason 01

"GA4 over-reports; rebuild the dashboard against Shopify only." The technical-sounding read. The argument is that GA4 inflates revenue because of session-duplication, bot traffic, and the Faire-and-Amazon feed pulling marketplace orders the Shopify admin does not show. Some of that is true. The dashboard does over-read. But Shopify under-reads against the bank by another one-hundred-seventy thousand, and that gap has nothing to do with GA4. Rebuilding the dashboard against Shopify only would fix the smaller of the two gaps and leave the larger one untouched.

Wrong reason 02

"The bank is the truth; the rest is noise." The CFO-sympathetic read. The argument is that deposited cash is what funds the business and the marketing reports are a proxy. There is a strong case for the bank as the financial source of truth. There is a weak case for treating the other two reads as noise, because the other two reads are how the team actually steers the channels. Promoting the bank to source of truth without a documented reconciliation framework leaves the marketing team with no read at all on the days when the bank is two weeks out of date.

Wrong reason 03

"This is a Shopify Payments lag; it will resolve next month." The temporal-sounding read. The argument is that Shopify Payments deposits run on a two-business-day lag, so the trailing-ninety-day deposit number is always lower than the trailing-ninety-day gross sales by roughly two days of revenue. True. The two-day lag accounts for roughly fifty thousand of the spread. It does not account for the other two-hundred-seventy thousand. Pointing at the lag was a way to defer the larger conversation.

Wrong reason 04

"Marketing is responsible for revenue, finance is responsible for cash; the two will never tie." The political read. The argument is that marketing reports against revenue and finance reports against cash and the two reads are fundamentally different and should remain so. Half-true. The reads are different. The fact that they are different does not absolve the operator of writing down which is the business read. Without the document, every internal conversation about budget and performance defaults to whichever read favors the speaker. The political read is the same failure mode as having no read at all.

All four explanations let the team avoid writing the rule. The structural defect was the missing rule. None of the explanations went there.

04 Section 04 · The structural cause The structural cause.

No source-of-truth decision, plus seven leak conventions running between the three surfaces unmediated. Each leak was small. Together they produced a three-hundred-twenty thousand spread that nobody on the operating side could explain on demand.

The audit decomposed the spread into seven named conventions. Each is a place where revenue can leak between surfaces. Each is internally honest. None of them was wrong on its own. The absence of the rule that names which surface is the company is what made the seven into a problem instead of a footnote.

01

Gross versus net of refunds

The marketing dashboard read gross sales at the moment of order. Shopify's "gross sales" line on the report includes refunds-issued as a separate column the dashboard had not pulled. The bank reads net of refunds because the refund hit the bank when issued. Refunds in the trailing-ninety-day window were roughly forty-eight thousand. The dashboard saw none of it; Shopify saw it but in a column the dashboard ignored; the bank reflected the full impact.

Impact · ~$48K dashboard vs bank

02

Attributed versus unattributed orders

The dashboard reported attributed revenue: orders the GA4 model could route to a source. Roughly seven percent of orders in the window had no attributable source because the user had cleared cookies, arrived through a non-tagged email link, or come through a marketplace surface where the UTM was lost. The dashboard reported the attributed share as if it were the total. Shopify reported all orders regardless of attribution. The mismatch was structural and had been live for the full year.

Impact · ~$70K dashboard vs Shopify

03

In-period versus cash-basis recognition

Marketing read revenue at the moment of order placement. The bank read revenue when the deposit cleared. Shopify Payments runs a two-business-day lag plus an additional one-day on weekend orders. The trailing-ninety-day window had roughly fifty thousand of orders that had been counted by Shopify and the dashboard but had not yet hit the bank. The same number existed at the front of every quarter; nobody had named it.

Impact · ~$50K Shopify vs bank

04

Refund and chargeback handling

The Shopify gross-sales report does not net out chargebacks because Shopify treats chargebacks as a separate line. Chargebacks in the window were roughly twelve thousand. The bank reflects the full chargeback hit including the per-instance fee. The dashboard saw zero chargebacks because the GA4 feed has no concept of a chargeback. Three surfaces, three different treatments of the same dispute.

Impact · ~$15K Shopify vs bank

05

Marketplace deductions

Faire and Amazon orders were pulled into the dashboard via a third-party connector that reported gross marketplace revenue at order placement. Faire takes a fifteen-to-twenty-five percent commission and Amazon takes referral fees plus FBA fees plus storage. The dashboard saw gross. Shopify did not see marketplace orders at all because they did not flow through the Shopify channel. The bank saw deposits net of all marketplace fees, settled on a separate cadence per platform.

Impact · ~$95K dashboard vs bank

06

Currency settlement and FX

Approximately eight percent of orders in the window were billed in non-USD currencies and settled to USD on the deposit cadence. The dashboard reported the order in the listed USD price at order time. The bank reported the deposited USD after currency conversion and Shopify Payments' currency-conversion fee. The fee plus the FX drift was small per order and meaningful in aggregate.

Impact · ~$22K Shopify vs bank

07

Channel-specific processing fees

Shopify Payments takes a per-transaction processing fee of roughly two-point-nine percent plus thirty cents. PayPal, where used, takes a different fee structure. Klarna, where used, takes a flat-rate fee that the bank reflects but neither Shopify gross-sales nor the dashboard accounts for. Total processing fees in the window were roughly twenty thousand. Dashboard sees zero, Shopify gross-sales sees zero, bank sees the full deduction.

Impact · ~$20K Shopify vs bank

Seven conventions, one missing rule. Each leak was honest. Each was visible to one surface and invisible to another. The decision the operator had been avoiding was which surface to name as the company, and how to reconcile the rest as variances.

05 Section 05 · The decomposition The decomposition.

The decomposition reads in three layers, the same shape as the platform-level case file in the same cluster. Tracking integrity, conventions, judgment. The reads disagreed because the third layer was empty. The other two were doing what they were configured to do.

Tracking integrity. The data-capture layer was largely intact. GA4 was firing purchase events. The Shopify orders export was complete. The bank statement was authoritative on the cash side. The three surfaces had access to roughly the data they needed. Two specific defects were named: the dashboard was not pulling Shopify's refund column, and the marketplace connector was reporting gross instead of net. Neither defect alone produced the spread.

Conventions. Seven counting conventions were live between the three surfaces, listed in the previous section. Each was internally defensible. Each was incompatible with the conventions on the other surfaces. Without a written rule, the conventions could only produce disagreement.

Judgment. The operator layer was empty. There was no document on the account that named which surface is the financial source of truth, which leaks are reconciled and how, what variance threshold triggers an investigation, and what cadence the reconciliation runs on. The CFO's question was the first time the absence had surfaced.

The shape repeats across the cluster. The technical layer is roughly intact in most operating brands. The conventional layer is full of incompatible definitions. The judgment layer is empty. The disagreement is not a tracking problem; the tracking is fine. The disagreement is a missing rule.

06 Section 06 · The fix or better move The fix, in install order.

The audit's written verdict named the install order. Order matters. Picking a source of truth before mapping the seven conventions is the difference between an arbitrary policy and a decision that holds up at the next quarter-close.

The reconciliation framework below is what was installed.

  1. Day one · Declare Shopify-net the source of truth for revenue

    The decision is written and signed. Shopify gross sales minus refunds minus discounts is the financial source of truth for revenue recognition inside the marketing reporting. Marketplace revenue (Faire, Amazon) is reported as a separate line item, net of platform fees, sourced from the platform statements. The bank is the source of truth for cash. Each surface has a defined role; the dashboard reports each surface honestly rather than blending them.

  2. Week one · Rebuild the dashboard against the source-of-truth definition

    Looker Studio rebuild: trailing-ninety-day revenue line is now Shopify-net plus marketplace-net, with the two lines visible separately. The GA4 attributed-revenue line is moved into a "Channel Attribution" subsection labeled as a directional read for budget steering, not a revenue read. The dashboard now reconciles to Shopify-net within two percent on any given day; it reconciles to bank with a documented set of variances against the seven conventions.

  3. Week two · Install the variance schedule

    One artifact, one page: the seven leak conventions named, the variance each contributes between Shopify-net and the bank in a typical month, and the threshold past which the variance is investigated. Refunds run roughly two-point-three percent in this category; chargebacks roughly point-six percent; processing fees roughly two-point-five percent. The variance schedule is the document the CFO and the marketing director read together at the monthly close.

  4. Week three · Rewire the marketplace feeds

    The third-party connector pulling Faire and Amazon revenue is rewired to pull net-of-fees revenue using each platform's settlement statements rather than gross-of-fees from the order export. Marketplace revenue now reads against the bank within the same two-percent tolerance Shopify-native does. The dashboard line that previously over-reported by ninety-five thousand is now within five thousand of the bank-reflected truth.

  5. Week four · Build the close-process runbook

    Monthly-close runbook documented end to end: pull Shopify-net, pull marketplace-net, pull bank-deposited, run the variance schedule, investigate any deviation past threshold, sign off. The runbook is owned by the marketing director on the operating side and the CFO on the finance side. Either party can run the close in roughly two hours. The CFO's quarterly question now has an answer in writing before the question is asked.

  6. Month two onward · The board read

    The board pack now leads with the Shopify-net plus marketplace-net revenue line, with the bank-deposited line listed alongside and the seven-convention variance schedule attached as an appendix. The CFO has the answer to the question he asked at the operating review. The decision is reproducible, owned, and defensible. The next channel-level decision the marketing director makes is sized against the Shopify-net read, not the over-reading dashboard read it replaced.

07 Section 07 · The lesson The lesson.

The CFO's question was the first time the spread had been forced into the open. The question itself was simple. Why do the numbers not match. The answer was complicated only because the operator had been running for a year without a written rule about which surface was the company. The seven conventions had been live the entire time. Nobody had been hiding anything. The reporting had been running honestly against incompatible definitions, and the incompatibility had compounded into a three-hundred-twenty thousand spread that the marketing director could not explain on demand.

The lesson is that revenue reads are conventional, not natural. There is no platonic "revenue" sitting somewhere waiting to be measured. Every surface measures a defensible quantity against a defensible definition. The operator who has not picked which definition is the company is operating on three or more reads that will not agree, and the disagreement is not the surfaces' fault. It is the operator's, for not having written down the rule.

The second lesson is the speed at which the spread compounds. None of the seven conventions on this account looked, on its own, like a structural defect. Each one was a small-percentage leak hidden in plain sight. The dashboard over-reading by a few percent. The two-day Shopify Payments lag. The marketplace connector pulling gross instead of net. None of them seemed worth the audit on a Tuesday afternoon. Compounded, they produced the question the CFO asked at the next quarter-close. The cost of the absent rule is the slow accumulation of small defensible inaccuracies into a number large enough to make the operating team look careless.

Five Cents · Stan's note

Five Cents

What strikes me about this case file every time I read it back is how recently the marketing director and the CFO had been on the same side of the table. Three months earlier, when the CFO joined, they were aligned on the strategy and reading the same dashboard. Three months later they were on opposite sides of a quarter-close with a three-hundred-twenty thousand spread between them. Nothing in their working relationship had broken. The numbers had broken, slowly, while neither of them was looking. The defect had been live the whole time and was only visible the first time someone with a finance instinct opened the bank and the dashboard side by side.

The thing I want operators to take from this is that the reconciliation document is a piece of finance hygiene that lives on the marketing side of the wall. The CFO does not write it. The marketing director writes it, ships it to the CFO, and the two parties sign off on the conventions and the variances. The document protects the marketing director from the version of the question the CFO asks two quarters later, when the dashboard has drifted again and the bank has drifted again and the new spread is bigger and the explanation is harder. Writing it once costs an afternoon. Not writing it costs the marketing director the kind of credibility you cannot rebuild on a single quarter.

What this case file is for: if your marketing dashboard, your Shopify report, and your bank statement have never been reconciled in writing, you have this case file. The Conversion Second Opinion runs the seven-convention diagnostic in seventy-two hours and produces the variance schedule the team can sign off against.

Stan Tscherenkow · Marketing Atlas · 2026-05-07
09 Section 09 · Related Atlas entries Related Atlas entries.

Each link below points at a related Atlas page that handles a piece of the case file in more depth. Reference pages give the definition. Position pages give the firm's defended doctrine. The hub gives the map.

If this is the pattern in your account

Reconcile the surfaces. Then close the quarter.

If the case file maps to your account — multiple surfaces, contradictory revenue reads, the CFO question still open — the engagement that runs this diagnostic is the Conversion Second Opinion. A written verdict against the seven-convention reconciliation framework, delivered in seventy-two hours. If the verdict says install, the Sprint engagement runs the close-process build. If the verdict says hold, you keep the read.