Launch · marketers · engineers
Pixel Helper is not the fired URL
Short answer
Pixel Helper tells you what fbq queued. Network tells you what left the machine. Events Manager tells you what Meta stored, later. A pixel debugger that only uses the extension will miss blocked hosts, CSP, and every conversion API POST.
Validate this snippet Open the rulepack
Three UIs, three jobs
Pixel Helper (and TikTok / Pinterest analogs) inject into the page and read the tag's event queue. They are good at event names, parameters the library thinks it sent, eventID / event_id, and duplicate PageView from two base codes. They are not a proxy. They do not prove facebook.com/tr left the machine. They do not see CAPI.
Network is the fired request: host, query, initiator, status, cancelled versus blocked. Events Manager and Test Events are what the vendor stored, minutes to hours later, filtered by Pixel ID. A debugger that only uses the extension will miss blocked hosts, CSP, consent that never unblocked, and every server POST. See Pixel not firing when the collector is absent.
What Pixel Helper actually sees
When Pixel Helper is empty and Network has /tr, the extension is the bug: blocked on this profile, outdated, or you are on a page that fired from a child frame the overlay does not list. When Pixel Helper is full and Network is empty, the request was blocked, cancelled, or never sent. Believe Network. When both are full and Events Manager is empty, the URL may still be wrong (Purchse, missing id, staging pixel) or the UI has not caught up.
Read eventID in the overlay and compare it to CAPI event_id. Same string, or you have two Purchases. Read value and currency on money events. A PageView with EMQ 10.0 is not the number you optimize toward. Check Purchase. The overlay will not name vendor.meta.param.ev.invalid. It will show Purchse as a custom event and move on.
Network is the debugger
Open DevTools. Preserve log. Filter by facebook.com/tr, /g/collect, ads.tiktok.com, ct.pinterest.com, px.ads.linkedin.com, googleadservices.com, doubleclick.net. Open the request. Copy the URL. Redact em=, hashed emails, cookies (_fbp, _ga, session). pixellint validate url on that string. Status 200 is the start. The query still has to be a legal event.
Initiator tells you fbq versus GTM versus a custom script versus an img. Two initiators for PageView is two installs. A chrome-extension initiator is an overlay or a blocker, not your tag. POST bodies (sendBeacon, fetch, GA4 collect) need the payload panel or Copy as cURL. CAPI will not appear here. Do not conclude the server is down because Pixel Helper is quiet on a thank-you page that only fires CAPI.
pixellint validate url 'https://www.facebook.com/tr?id=1234567890123456&ev=Purchase&noscript=1'
pixellint validate url 'https://www.google-analytics.com/g/collect?v=2&tid=G-XXXXXXX&cid=1.2&en=page_view'
Frames, SPA, and preserve log
A pixel inside an iframe sees a different referrer, a different cookie jar, and often a different CSP. Payment iframes (Stripe, PayPal) make thank-you pixels report stripe.com as the source. Pixel Helper on the parent may not list the child. Filter Network on All, then on the collector host. Fire from the parent on postMessage, or from the server when the webhook says paid.
SPA route changes do not always show as new documents. Look for /tr and /g/collect after history.pushState, not only after a full load. If you do not preserve log, a 302 click chain drops the hop that had gclid. See Chrome Network debugging, Iframe and nested pixels, and Redirect pixel chains.
Events Manager is delayed
Even a well-formed event can take minutes to hours to show. Absence in the UI is not a 404. Presence of Purchse as a custom event is not proof you meant a custom event. Test Events is faster for CAPI and still not a schema check. A 13-digit event_time can sit in a 200 and never attribute. A leftover test_event_code diverts live traffic out of the production graph.
Use the vendor UI to confirm Event Match Quality on Purchase (not PageView) and that both pipes arrived with the same event_id. Do not use it as the only test. CI on the URL and the JSON is the fast signal. Pixel Helper plus Test Events together, same id, is the hybrid test. One UI is a single-pipe test with extra ceremony.
HAR and cURL are secrets
A HAR includes cookies and Authorization for your own app if the user was logged in. Pixel debugging needs the collector rows. It does not need /api/me, billing XHR, or the session cookie. Sanitize before attach. Copy as cURL of a single /tr is usually enough. Never commit a live HAR. Never email it to an agency alias with twenty people on it. See HAR files.
Prefer a redacted URL plus pixellint output in the ticket. The finding cites the vendor doc. That is a debugger the other team can act on without installing an extension. If a HAR with a production session already shipped, rotate the session and stop asking for unsanitized exports in the runbook.
When to paste into the validator
Any time the question is whether this URL is a legal Meta Pixel, GA4 collect, GTM loader, Floodlight tag, or TikTok loader. Missing id, unrecognized ev, raw email, Purchase without value, GTM loader without id, Floodlight missing src type cat, v=1 on a GA4 property. Those are contract bugs. Pixel Helper will not name the rule. Pixellint will.
For CAPI, switch kind to JSON. That is a different debugger for a different pipe. See Conversion API validator. The playground runs in the tab. npm install pixellint and cargo install pixellint are the same engine for CI. Artifacts you test on pixellint.org may be stored; local CLI does not send them.
https://www.facebook.com/tr?ev=Purchse&em=buyer@example.com
TikTok Pixel Helper and the rest
TikTok's overlay has the same job and the same limits: it reads ttq, not the Network tab, and it cannot see Events API POSTs. Pinterest Tag Helper is the same idea for pintrk. Google Tag Assistant / GTM preview is a draft cookie, not production. None of them lint Floodlight path parameters. None of them decode gdpr_consent=1 as a missing TC String.
A pixel debugger that has to work across Meta, Google, TikTok, Pinterest, LinkedIn, and Floodlight is the Network tab plus one contract checker. Vendor overlays stay useful for queue names and eventID. They are not the contract.
Same engine after you close DevTools
A weekly screenshot of Pixel Helper is not a contract test. Keep fixtures: one /tr with a real Pixel ID and a legal Purchase, one /tr that should fail (Purchse, raw email), one /g/collect, one GTM loader, one CAPI body. Run them in CI. When a marketer files pixel not tracking, the first reply is the Network URL and the linter output, not another screenshot of the extension.
Pixellint is not affiliated with Meta. Pixel Helper is Meta's overlay. Both can be useful. Only one of them lints the fired URL against the documented parameter list and runs in a pipeline. Put the fixtures next to the dictionary. See Contract-test pixels in CI.
pixellint validate url @fixtures/meta-pixel-purchase.txt --rulepack vendor/meta
pixellint validate url @fixtures/gtm-loader.txt --rulepack vendor/google-tag-manager
pixellint validate json @fixtures/meta-capi-purchase.json --rulepack vendor/meta-conversions-api
Check the artifact
Paste the pixel URL or JSON body into the
playground. Same engine as
pixellint validate. Artifacts you test may be stored;
see privacy.