← Blog

    Field notes

    Why Meta and Google both claim the same conversion

    Add up the conversions your ad platforms report and you'll get more revenue than you made. Why cross-channel double counting happens, and how to resolve every conversion to a single winner.

    9 min read

    TL;DR

    Every ad platform attributes conversions to itself using whatever window makes it look best, so the sum of your dashboards is always bigger than your actual revenue. A customer who sees a TikTok ad, clicks a Google ad, and buys gets counted by TikTok, Google, and often Meta too. This isn't a tracking bug you can fix with a better pixel. It's how platform attribution is designed to work. The fix is to stop asking platforms who deserves credit and instead resolve every conversion yourself: capture click identifiers and identity signals on your own pixel, rank the evidence by strength, and award each sale to exactly one channel. Then, and this is the part most tools skip, allocate budget on those verified numbers instead of the platforms' self-reported ones.

    The math that never adds up

    Run a simple audit on your own accounts. Take last month's conversion totals from Meta, Google, TikTok, and Reddit. Add them up. Compare that number to the orders in your Shopify backend or the closed deals in your CRM.

    The platform total will be higher. Often 30 to 50 percent higher. Sometimes double.

    Most marketers know this and shrug it off as "attribution being attribution." But think about what it actually means: the number you use to decide where next month's budget goes is inflated by a different amount on every channel, in proportion to how aggressively each platform claims credit. You're not comparing performance. You're comparing self-promotion.

    Why every platform claims the same sale

    Picture a real customer journey. Sarah sees your TikTok ad on Monday but doesn't click. On Wednesday she searches your brand name, clicks your Google ad, and browses. On Friday a Meta retargeting ad reminds her, she clicks, and buys.

    Here's what each platform reports:

    • TikTok counts it as a view-through conversion. Sarah saw the ad within its view-through window, so TikTok takes credit.
    • Google counts it as a click conversion. She clicked the ad and converted within the click window.
    • Meta counts it as a click conversion too, and it was the last click before purchase, which Meta considers the strongest claim of all.

    Three platforms, three "conversions," one actual order. Each platform is technically following its own rules. The rules are just written so the platform wins.

    This is not a conspiracy. Platforms genuinely believe their touchpoint mattered, and it often did. The problem is that "mattered" and "caused" are different things, and each platform grades its own homework on the generous interpretation.

    Why better tracking doesn't fix it

    The instinctive response is to tighten tracking: server-side events, conversion APIs, better UTM hygiene. Do all of that. It helps. But it doesn't solve the double-counting problem, because the problem isn't missing data. It's overlapping credit.

    Server-side tracking actually makes the overlap more visible. When you fire conversions to Meta's Conversions API and Google's Enhanced Conversions with proper event IDs, each platform deduplicates its own events cleanly, and then still claims the full conversion against the other platforms. Your data gets cleaner. The sum stays wrong.

    Attribution modeling inside one platform doesn't help either. Data-driven attribution in Google Ads distributes credit across Google touchpoints. It has no idea Meta exists.

    The actual fix: one conversion, one winner

    The only way out is to resolve attribution yourself, outside any platform's incentive structure. Concretely, that means four things:

    1. Capture your own evidence. Your pixel records click identifiers (fbclid, gclid, ttclid, and their equivalents), UTM parameters, and hashed identity signals like email and phone, at the moment of each visit and each conversion.

    2. Rank evidence by strength. A deterministic click ID tied to the converting session is the gold standard. A hashed email match to an ad exposure is strong but weaker. A UTM parameter or behavioral pattern is weaker still. Every claim gets an explicit confidence score.

    3. Award each conversion exactly once. When two platforms claim the same order, the stronger evidence wins and the other claim is discarded. View-through claims are held to a far stricter standard than the platforms hold themselves to. The total credit assigned across all channels can never exceed the sale itself.

    4. Close the loop. This is the step almost everyone skips. Verified attribution is worthless if budget decisions still run on platform dashboards. The channel that actually drove the sale should get the next dollar, and that allocation has to run on the reconciled numbers.

    What changes when you do this

    Two things happen immediately.

    First, your channel rankings usually shuffle. Channels with big view-through claims and brand-heavy traffic (looking at you, branded search) tend to shrink. Channels that start journeys rather than finish them tend to grow. The budget follows.

    Second, your platform dashboards start looking "wrong" to you, because they no longer match your source of truth. That's the correct direction. The dashboards were never measuring your business. They were measuring themselves.

    Where GhostEngine fits

    This reconciliation is what GhostEngine's attribution layer does continuously. Click IDs, hashed identity signals, and behavioral matches are ranked by evidence strength, every conversion resolves to a single winner, and conversions fire server-side to all four platforms' conversion APIs with a shared event ID so signal survives iOS and ad blockers without double counting. Budget allocation then runs on the verified numbers, not the self-reported ones.

    If you want the deeper mechanics, the Why GhostEngine page walks through the evidence model, and the platform integrations page shows what gets connected.