You launch Meta ads. Clicks are cheap, engagement looks great, conversions are rolling in.Then you open GA4โฆ and see this mess:
1. Half of your purchases have no source
2. facebook / cpc? Nowhere. But (direct) / (none) is having a party
Whatโs going on?
Itโs the infamous in-app browser from Meta. Facebook and Instagram donโt open links in Chrome or Safari โ they trap users inside their own little browser. And thatโs where the attribution train crashes.
Hereโs how it breaks:
1. User clicks the ad โ site opens inside Metaโs in-app browser.
2. Referrer is stripped (because itโs an app), fbclid or UTM parameters get lost in redirects or dynamic loads.
3. The user comes back later via Safari or Chrome โ either typing the URL manually or from a saved tab. GA4 thinks itโs a brand-new (direct) session.
The result? Meta drives sales. GA4 seesโฆ nothing.
Hereโs how I fix this in my own projects:
1. I capture fbclid from landing page URLs and store it in BigQuery. Then I link it with Meta Ads API exports. This is what we call the Matching Loop: click โ session โ event โ export โ match.
2. I run GA4 through server-side GTM and pipe everything into BigQuery. That helps bypass ad blockers and keep the context.
3. I stitch sessions manually when needed โ using IPs, user-agent, fingerprints. If thereโs a login, I connect client_id to user_id and deduplicate the mess.
Bottom line:
Not every โdirectโ is direct. Sometimes itโs just broken paid social that never got proper credit. If youโre not tracking fbclid, syncing with Metaโs API, and building your own attribution โ youโre flying blind.
Want to fix that? Drop bigquery in the comments or DM me โ Iโll send you a free lesson from my BigQuery Attribution course.
This post was originally shared by on Linkedin.