The Marketing Attribution Illusion: Why Ad Platform ROAS Doesn't Match Bank Deposits

It is one of the most frustrating boardroom debates in modern business: Your advertising agency presents dashboards showing record performance. Return on Ad Spend (ROAS) is supposedly at a 4.2x average, and conversion charts are trending straight up.

Yet, when you look at the company’s operating accounts, cash flow is flat. Net revenue is stagnating, and bank deposits don't match the growth reported in your dashboards.

This mismatch represents the Marketing Attribution Illusion—a scenario where ad platform software settings quietly duplicate conversion data to claim credit for sales that would have happened anyway, or report sales that never actually took place.

The Boardroom Finger-Pointing

Before we were brought in to perform a root cause audit, the client’s executive team sat in an unproductive blame-loop:

  • Marketing pointed to Google Ads and Facebook Ads reports: "Our targeting is highly optimized. We delivered 1,200 leads this month. The sales team must be failing to close them."
  • Sales countered: "The lead lists you send are filled with duplicates, spam submissions, or people who have no recall of signing up. Our closing rates are down because lead quality is down."
  • Finance stood firm: "We cannot justify spending $50,000 a month on advertising when our actual bank balances are dropping. We need to freeze ad budgets."

The Silo Trap: Each department used real data to defend their domain. However, because they analyzed siloed dashboard exports, they missed the technical connection points where the data was breaking.

The Analytical Audit

To resolve the finger-pointing, we skipped the agency PDF summaries and went straight to the raw data pathways. We mapped the path from a user's web browser click to the final database record in their CRM (Salesforce).

First, we ran a query to inspect the conversion events stored in their database. We wanted to see if the unique transaction IDs passed by the browser matching Google and Meta tags were repeating:

-- SQL Query to isolate duplicate conversion event counts
SELECT 
  transaction_id, 
  count(*) as conversion_count,
  min(created_at) as first_fired_at,
  max(created_at) as last_fired_at
FROM `client_data.ad_conversions`
GROUP BY transaction_id
HAVING count(*) > 1
ORDER BY conversion_count DESC
LIMIT 50;

The SQL results were immediate. Out of 4,800 recorded purchase conversions over a 90-day period, 1,152 transaction IDs appeared more than once. Some IDs were recorded up to 6 times.

Uncovering the Fifth Drivers

By looking past the obvious explanations (sales execution or lead quality), our technical audit isolated two silent "Fifth Drivers" causing the data inflation:

1. The Receipt Page Refresh Glitch

The client's website had a browser-side Google Tag Manager (GTM) script set to fire a "Conversion" tag whenever a user landed on the transaction receipt page (`/checkout/thank-you`).

However, the developer had not built a check to verify if that transaction ID had already been recorded. Every time a customer refreshed the page, clicked a shipping link in their confirmation email that redirected back to the receipt, or opened the page on a mobile browser days later, GTM fired another conversion tag to Google and Facebook Ads. The ad platforms recorded these as fresh sales, inflating reported ROAS by 24%.

2. Cross-Channel Attribution Double-Counting

The second bottleneck was an attribution overlap. The client ran Google Search Ads, Meta Retargeting Ads, and an automated email sequence.

When a customer clicked a Meta ad on Monday, clicked a Google search link on Wednesday, and finally clicked an email link on Thursday to purchase, the following happened:

Traffic Channel Attribution Window Setting Claimed Revenue Credit
Meta Ads 7-Day Post-Click 100% ($1,200)
Google Ads 30-Day Post-Click 100% ($1,200)
Klaviyo (Email) 5-Day Post-Click 100% ($1,200)
Real Bank Deposit N/A 100% ($1,200)

Because each advertising platform operates in its own silo, both platforms and the email system claimed 100% credit for the same $1,200 transaction. The marketing agency summed up these reports, presenting a "unified" dashboard showing $3,600 in generated sales, while the bank only collected $1,200.

The Fix and Business Outcome

We resolved the discrepancy by executing a two-step remediation:

  1. Server-Side Conversion Verification: We moved conversion tracking from the user's browser to the backend server. The server validated the transaction ID against a database of completed orders before sending the conversion signal to Google and Facebook. Refreshes and email links no longer triggered duplicate signals.
  2. Deduplicated First-Touch/Last-Touch BI Models: We built a unified data pipeline in BigQuery that merged ad-click clickstreams with Salesforce transaction records, applying a single, deduplicated multi-touch attribution model.

The Result: The client identified that 32% of their paid search budget was going toward branded search keywords that drove zero incremental lift. We eliminated this waste, saving $16,000/month in ad spend, and aligned their dashboard numbers with cash collections.

Are Your Marketing Dashboards Lying to You?

Don't make budget decisions based on overlapping data. Let us run a technical root cause diagnostic on your acquisition funnel.

Find Your Fifth Driver