Every agency gives the same advice for tracking Facebook and Instagram ads: set utm_content={{ad.id}} in Ads Manager so each ad stamps its own ID onto the link, and you can see which one produced the sale. Good advice. It works, for ads you build the normal way.
It quietly does not work for ads built from an existing post, the "boost this post" path that a huge number of gyms and studios actually use. On those, Meta accepts the tracking field, the interface and the API both report success, and then it saves nothing at all.
We tested it, because it sounded too dumb to be true
We set the tracking field on a batch of boosted-post ads, then immediately read the ads back to see what Meta had stored. Twenty-five ads set. Twenty-five came back with the field empty. No error, no warning, no note in the UI. The write just evaporates.
So if your ads run off boosted posts and you followed the standard advice, your links carry no ad-level tracking, every click looks like it came from nowhere, and you'd have no way of knowing, because the platform told you it worked.
The fix
You stop relying on the field Meta ignores, and put the tracking where it can't drop it: inside the creative's own destination link. The UTM parameters live in the URL itself, so the ad ID rides along no matter how the ad was built, boosted post or not. It's not hard, it's just not the thing anyone tells you to do, because almost nobody knows the normal way silently fails on boosts.
Two more silent ways the trail disappears
Once you start looking, the boosted-post drop isn't the only place attribution leaks without a single error message. Two we check on every account:
- In-app browsers don't behave like real ones. When someone taps your link from inside Instagram or Facebook, that in-app browser handles storage and background requests differently from Safari or Chrome. Reads can come back empty, and the lightweight "fire-and-forget" call most tracking uses reports success when the event is merely queued, not actually delivered, so events can vanish with no sign anything broke. A big share of your traffic arrives exactly this way.
- Lead-form submissions sit on Meta until something pulls them. If you run lead ads, the leads don't come to you automatically. They wait in Meta until an integration with the right permission (
leads_retrieval) collects them. Set that up wrong, or not at all, and you are paying for leads that pile up uncollected while you wonder why the phone isn't ringing. We've opened an account and found dozens sitting there, never pulled.
The 60-second gut-check
If you boost posts: open one of those ads, look at the destination URL, and see whether the ad ID is actually in the link. If it isn't, your boosted ads have no attribution. If you run lead ads: ask whoever set them up to prove the leads are being retrieved, not just submitted. Both checks are free and both are usually a nasty surprise.
The 30-second version
- Meta silently ignores the tracking field on ads built from existing posts: it reports success and saves nothing. We verified it, 25 ads, all empty on read-back.
- The fix is to put the UTMs inside the creative's own destination link, where the platform can't drop them.
- In-app browsers and uncollected lead forms are two more places attribution and leads disappear with no error at all.
Want us to audit your ad tracking?
As part of a free 15-minute demo we'll check your boosted-ad tracking, your in-app traffic, and whether your lead forms are actually being collected, and show you where it's leaking.
Book a demo