You built the funnel, dropped in your Meta Pixel, launched the ads — and Events Manager is quiet. Or worse: the pixel looks fine, but your reported conversions are a fraction of the leads actually landing in your inbox. Either way, you're optimizing ad spend on numbers you can't trust.
The frustrating part is that "my Meta Pixel isn't working" almost never has one cause. Sometimes the pixel genuinely isn't installed. Far more often, it is firing on your side and being quietly deleted on the user's side. Here are the nine reasons this happens, how to tell which one is yours, and the one change that makes the whole problem go away.
First, diagnose it in 60 seconds
Before changing anything, install the Meta Pixel Helper Chrome extension and load the page you care about. It tells you three things instantly: whether a pixel fired, which pixel ID it used, and what errors it hit.
Then open Events Manager → Test Events, enter your URL, and trigger the action (a page view, a form submit, a button click). If the event shows up here, the pixel is reaching Meta. If it doesn't, the event is dying somewhere between the browser and Meta — and that distinction tells you which half of this list to read.
Reasons the pixel isn't firing at all
1. The base code is missing or on the wrong pages
The pixel base code has to load on every page you want to track, inside the <head>. A single-page template, a landing page built outside your CMS, or a checkout hosted on another domain can all quietly miss it. If Pixel Helper shows nothing at all, this is your first suspect.
2. Wrong pixel ID
If you manage more than one brand, ad account, or client, it's easy to paste last project's pixel ID. Pixel Helper shows the ID that actually fired — check it against the ID in Events Manager. A pixel that fires perfectly into the wrong dataset looks exactly like a pixel that isn't working.
3. Your site is a single-page app that never re-fires
React, Vue, and most modern funnel builders don't reload the page when a user moves between steps. The base code fires one PageView on first load and then goes silent, because the events that should fire on later steps depend on a page reload that never happens. You need the pixel to fire on route changes and interactions — not just once.
4. A caching or "cookie" plugin is stripping the script
Aggressive page-cache plugins, cookie-consent tools, and "performance" optimizers routinely defer or remove third-party scripts, including the pixel. If the pixel works in an incognito window but not on the live cached page, a plugin is rewriting your output.
Reasons the pixel fires but conversions vanish
This is the bigger, sneakier category — and where most "my pixel is broken" reports actually live.
5. iOS App Tracking Transparency
Since iOS 14.5, Apple asks users to opt out of tracking by default. A huge share of your mobile traffic never grants that permission, so browser-side events from those users are throttled or dropped before they reach Meta. Your pixel is healthy; the conversions are simply being deleted on the device.
6. Ad blockers and browser tracking prevention
Safari's Intelligent Tracking Prevention, Firefox's Enhanced Tracking Protection, Brave, and every ad blocker specifically target connect.facebook.net and the _fbp / _fbc cookies. Depending on your audience, 20–40% of browser-side events can be blocked outright. The pixel fires in your console and never arrives at Meta's.
7. Cookie consent is (correctly) holding it back
Under GDPR and similar laws, the pixel shouldn't fire until the visitor accepts marketing cookies. If your pixel only fires after someone clicks "Accept," that's not a bug — it's compliance working. The real problem is when consent is handled so clumsily that few people ever opt in, or when the pixel fires before consent and exposes you to legal risk. You want a clean, one-click consent gate that maximizes opt-ins without breaking the law.
8. Poor Event Match Quality
Even events that reach Meta only count if Meta can match them to a real person. A bare PageView with no email, phone, or name has weak match quality, so those conversions get poorly attributed — or not attributed at all. In Events Manager you'll see this as a low Event Match Quality score, and downstream it shows up as conversions your ad account "loses."
9. No deduplication between pixel and CAPI
If you have already added the Conversions API but your numbers look inflated or erratic, you're likely sending the same event twice without a shared event ID. Meta can't tell they're the same conversion, so it either double-counts or drops one unpredictably.
The real fix: send events from the server, not the browser
Notice that reasons 5 through 9 have nothing to do with your pixel being installed wrong. They're all the same underlying problem: the browser is a hostile place to track conversions. Apple, Mozilla, Brave, and every ad blocker are actively deleting browser-side events, and there is no amount of pixel-tweaking that changes that.
The durable answer is Meta's Conversions API (CAPI), which sends the conversion server-to-server. There's no script for a blocker to strip, no cookie for ITP to expire, no device permission to deny. The event leaves your server and arrives at Meta's — full stop. Meta now treats the Pixel and CAPI as a single dataset and recommends running both together: the pixel for browser-side coverage, CAPI to recover everything the browser drops, deduplicated by a shared event ID so nothing is counted twice.
How Collectform makes this the default
Wiring up CAPI by hand means a server endpoint, SHA-256 hashing of customer data, event deduplication, and consent logic. In Collectform it's built in:
- Server-side by default. Connect Meta's Conversions API in your funnel's Integrations tab with your pixel ID and access token. Events fire from the server, immune to the blockers in reasons 5 and 6.
- Automatic deduplication. Every CAPI event shares an event ID with its browser pixel counterpart, so Meta counts each conversion once — no more inflated numbers from reason 9.
- Advanced matching, hashed. Map the fields your respondents fill in — email, phone, name, city — to Meta's matching parameters. Values are hashed with SHA-256 before they leave the server, and Collectform automatically forwards the
_fbp/_fbccookies, IP, and user agent. That's the cure for the low match quality in reason 8. - The right event for the right step. Because every Collectform funnel is one question at a time, you can fire a specific event —
Lead,Schedule,Purchase— on a specific button, instead of one generic event for the whole form. - Consent-aware and compliant. Both the pixel and the CAPI events sit behind a GDPR-ready one-click cookie consent gate, so reason 7 is handled by default: nothing marketing-related fires until the visitor opts in, and it fires cleanly the moment they do.
The takeaway
If your Meta Pixel shows no events, it's almost always installation: missing base code, the wrong ID, a single-page app that never re-fires, or a plugin stripping the script. Pixel Helper and the Test Events tab will find it in a minute.
But if your pixel fires and your conversions still don't add up, stop debugging the pixel. The browser is deleting your events, and the only reliable fix is to stop depending on the browser. Send your conversions server-side with the Conversions API, deduplicate them against your pixel, and enrich them with advanced matching.
That's the difference between a pixel that looks like it works and conversion tracking you can actually optimize on.
Server-side CAPI, deduplication, advanced matching, and consent are included on every paid Collectform plan. Explore templates or start building with Collectform.