Snapchat Pixel Not Working? Fix Firing and Attribution Issues

Quick fix: If the Snap Pixel sends nothing, check that the base code runs snaptr('init') with the right pixel ID and isn't blocked. If events arrive but aren't attributed, send user_email, keep the ScCid click ID, and match the Pixel's client_dedup_id with the Conversions API event_id.
Snap Pixel problems usually show up in one of two ways. In the first, Events Manager shows no activity, or only page views. In the second, events arrive but few conversions appear in campaign reporting. The first is an installation problem. The second is about event data, matching and deduplication.
Work through the steps in order. The early steps fix a pixel that doesn't fire. The later steps fix events that fire but don't count.
Step 1: Check the base code and pixel ID
The Snap Pixel base code loads Snap's SDK, initializes the pixel and sends a page view:
snaptr('init', 'YOUR_PIXEL_ID', {
'user_email': '__INSERT_USER_EMAIL__'
});
snaptr('track', 'PAGE_VIEW');
Check these common problems first:
- Wrong pixel ID. Copy the ID from Events Manager in Snapchat Ads Manager and compare it with the one in
snaptr('init'). Old pixels from another ad account are a frequent cause of "no data." - Code missing from some pages. Put the base code in the shared header so every page, including the order confirmation page, loads it.
- Script errors. A syntax error in the snippet, often from a bad paste, stops it before
initruns. The browser console will show it. - Two installs. A platform integration plus a hand-pasted snippet sends each event twice. Keep one.
Step 2: Rule out ad blockers, consent and CSP
If the code is on the page but the Network tab shows no Snap requests, something is blocking them:
- Ad blockers. Snap's own testing guide tells you to turn off ad blockers before you test. Use a private window with extensions disabled. For real visitors, blocking is a permanent source of loss. See ad blockers, ITP and pixel data loss.
- Consent banners. If your consent tool holds marketing tags, the pixel fires only after a visitor accepts. Test by accepting all cookies in a fresh private window.
- Content Security Policy. A strict CSP blocks Snap's script or its requests. The console shows "Refused to load" or "Refused to connect" with the blocked domain. See CSP blocking pixels for the fix.
Step 3: Use Snap's exact event names
Snap event names are uppercase with underscores. Purchase or purchase won't be read as the standard purchase event. Snap's standard web events include:
| Event | Typical use |
|---|---|
PAGE_VIEW | Any page load |
VIEW_CONTENT | A product or key content page |
SEARCH | An on-site search |
ADD_CART | An item added to the cart |
START_CHECKOUT | Checkout begins |
ADD_BILLING | Payment details added |
PURCHASE | A completed order |
SIGN_UP | An account registration |
SAVE | An item saved for later |
Note that the cart event is ADD_CART, not ADD_TO_CART. That typo alone can make a funnel step disappear.
Send complete PURCHASE events
Snap's testing guidance says PURCHASE events should include price, currency and transaction_id:
snaptr('track', 'PURCHASE', {
'price': 84.50,
'currency': 'USD',
'transaction_id': '100457',
'client_dedup_id': 'order_100457'
});
Send price as a number, not a formatted string. Fire the event only on the confirmed-order page or callback. Firing it on the checkout page counts orders that were never placed. The client_dedup_id line is explained in Step 5.
Step 4: Help Snap attribute conversions
When the pixel fires correctly but campaign reporting shows few conversions, Snap usually can't connect the conversion to a Snapchat user. Three things help:
- User identifiers. Pass
user_email(or a hashed email or phone) insnaptr('init'). Snap hashes these values in its SDK before sending them. On pages where the customer's email is known, such as the order confirmation page, make sure the variable holds the real address, not a placeholder. - The click ID. When someone clicks a Snapchat ad, Snap adds a
ScCidquery parameter to the landing page URL. If a redirect, a URL shortener or your own routing strips query parameters, the click ID is lost. Click one of your ads and check the landing URL. - The first-party cookie. The pixel stores an identifier in the
_scidcookie. If you also send server events, forward this value and the click ID. In the Conversions API they go insc_cookie1andsc_click_id. You can also send the full landing URL asevent_source_urlso Snap can read the click ID from it.
Events Manager's activity graph shows raw pixel events, not conversions attributed to ads. Seeing purchases there but not in campaign reporting is normal for purchases that didn't follow a Snapchat ad interaction.
Step 5: Deduplicate the Pixel and the Conversions API
If you send the same events from the Snap Pixel and the Conversions API (CAPI), Snap needs a shared ID to recognize duplicates. Without one, purchases are counted twice.
- On the Pixel, pass the ID as
client_dedup_idin thesnaptr('track')parameters. - In CAPI, send the same value as the event's
event_id. - The event name must match. CAPI's
event_nameshould be the same as the name passed tosnaptr('track').
Snap's developer documentation gives a 48-hour window for matching client_dedup_id to event_id. For PURCHASE, it can also match the Pixel's transaction_id to CAPI's order_id for up to 30 days. That works as a fallback when the dedup IDs don't match.
The most common failures:
- No
client_dedup_idon the Pixel. If you leave it out, the SDK generates its own ID in the browser (it starts with@-). Your server never sees it, so it can never match. - Values that differ slightly. Snap treats the ID as an exact string. Different casing, extra spaces or a prefix on one side breaks the match.
- Unrendered placeholders. A tag that literally sends
{{order_id}}gives every event the same ID. Snap's docs warn that placeholder values may not be honored.
The principle is the same as on other platforms. Our guide to Meta Pixel and Conversions API deduplication covers the general pattern.
How to verify the Snap Pixel
- Snap Pixel Helper. Install Snap's Chrome extension, turn off ad blockers, reload your page and wait a few seconds. The icon shows whether a pixel was found and whether events were sent, with warnings or errors. Check that hashed user data and the
PURCHASEparameters are present. See Snap's guide to testing with Snap Pixel Helper. The Pixel Helper extension is another way to see which pixels and events fire on a page. - Test Events in Events Manager. In Events Manager, select Test Events, choose your pixel as the data source and enter your website URL. Your site opens in a new tab with the SDK in test mode. Click around and place a test order. Pixel events should appear with the event source "Web" and setup method "Snap Pixel SDK." Each one is labeled Valid, Valid with Warnings or Invalid. Open any warning to see what's wrong. See Snap's Test Event tool guide.
- Deduplication diagnostics. For Pixel plus CAPI setups, open the event's Diagnostics in Events Manager and confirm dedup IDs are present from both integrations. Snap suggests allowing up to 24 hours after a change before you judge it.
- Compare with orders. After a few days, compare
PURCHASEcounts in Events Manager with your store's orders.
FAQ
Why do I only see PAGE_VIEW events?
The base code works, but your conversion events either aren't installed, fire on pages the customer never reaches, or use the wrong names. Check the names in Step 3 and confirm the order confirmation page runs the PURCHASE call.
Do I need to hash user_email myself?
No. Snap's SDK hashes email and phone values before sending them. You can also send an already hashed value. In the Conversions API, you hash identifiers yourself before sending.
Is the Snap Pixel enough, or do I need CAPI?
The Pixel works on its own, but it loses events to ad blockers and browser restrictions. CAPI sends events from your server to fill that gap. If you add it, deduplicate as described above.
Why are test events marked "Valid with Warnings"?
The event was received, but some recommended data is missing or badly formatted, such as a currency or user identifier. Open the event in Test Events to see which field caused the warning.


