Attribution ยท Sprites diagnoses this

PostHog vs Meta Ads: why Meta claims more conversions

Meta counts a conversion after a click within 7 days or a view or engagement within 1 day, ties devices together and models the rest. PostHog counts only the events it captured and credits them to the UTMs it saw on the landing URL. In-app browsers, view-through credit and missing URL parameters account for most of the gap.

$1 today. Cancel anytime before day 7.

What Sprites checks

  • ?Meta attribution setting7d click, 1d engage, 1d view
  • ?PostHog signups by utm_sourcefacebook and fb split in two
  • !Signups with no UTM38% of new users
  • ?Event Meta optimizes forLead, not signup
Illustration of a typical broken account. Your own readout comes from your account.

Why it happens

View-through and engage-through credit

  1. View-through and engage-through credit

    Meta credits people who saw or engaged with an ad within a day and converted without clicking. PostHog has no record of an ad view, so those conversions show as direct or organic.

  2. In-app browsers

    A tap in Instagram opens your site inside the app. If the person signs up later in Safari or on desktop, PostHog sees a new anonymous user with no UTMs, while Meta still matches them.

  3. Inconsistent or missing UTMs

    Ads with no URL parameters, or values like facebook, fb and meta used side by side, scatter Meta signups across rows. See PostHog UTM tracking and fbclid.

  4. Different events

    Meta often optimizes for a Lead or a pixel event that fires before the account exists. PostHog counts the signup your app records.

How to line them up, step by step

  1. Pull Meta on click only

    In Ads Manager open Columns, Compare attribution settings and add 7-day click. That is the closest Meta number to what PostHog can trace.

  2. Break PostHog signups down by UTM

    In PostHog create a Trends insight on your signup event, break it down by Initial UTM source, then by Initial UTM campaign. Group the Meta spellings together.

  3. Standardize URL parameters

    In each Meta ad, under Destination, set URL parameters to one consistent utm_source and utm_medium, with the campaign name in utm_campaign.

  4. Compare the same dates

    Use a full 30 days and compare PostHog signups with the 7-day click column, not the default Meta total.

Steps checked against Meta Business Help Center: About attribution settings; Meta Business Help Center: Compare attribution settings; PostHog docs: Capturing UTM and campaign data.

Sprites diagnoses this

Sprites diagnoses it

Sprites lines up your PostHog and Meta numbers and shows where they split.

What Sprites does

  • Pulls Meta conversions per campaign and day on the basis you see in Ads Manager.
  • Breaks PostHog signups down by utm_source and utm_campaign, and shows the share that arrived with no UTM.
  • Runs a PostHog funnel from landing to signup to activation per source, so you see whether Meta signups activate.

What it doesn't do

  • It does not send PostHog events to Meta or set up the Conversions API.
  • It does not change your Meta attribution settings.

Questions

Why does Meta report more conversions than PostHog?

Meta counts view and engagement credit, conversions on other devices and modeled conversions. PostHog only counts events it captured with the UTMs it saw.

Does PostHog capture fbclid?

Yes, when fbclid is on the landing URL PostHog stores it as a campaign property. It is often stripped by redirects or privacy features before it arrives.

Should I install the Meta pixel through PostHog?

You can forward events with PostHog destinations, but the gap above stays, because it comes from how each tool attributes, not from the transport.

Which number should decide my Meta budget?

Activated users by source in PostHog over a few weeks, checked against Meta 7-day click. If both trend the same way, the budget move is safe.

See where it breaks

Connect your accounts. Sprites reads them side by side and shows you exactly where the numbers split.