Skip to main content
Back to Blog

Snapchat Conversions API: Complete E-Commerce Setup Guide

Set up the Snapchat Conversions API (CAPI) for your store with Snap's Shopify app, a partner or direct v3 calls. Covers deduplication, ScCid and testing.

15 min read
Snapchat Conversions API: Complete E-Commerce Setup Guide

Key Takeaways

  • •Snapchat's Conversions API (CAPI) v3 receives web, app and offline events at https://tr.snapchat.com/v3/{PIXEL_ID}/events with a long-lived token, and Snap recommends running it alongside the Snap Pixel, not instead of it
  • •There are three routes: the Snapchat Ads app for Shopify, which installs CAPI automatically with the pixel, a partner such as server-side GTM through Stape or Datahash's gateway, or a direct integration that needs a developer
  • •Deduplication depends on one shared ID: the CAPI event_id must equal the Pixel's client_dedup_id within 48 hours, and for purchases the order_id and transaction_id pair adds a fallback of up to 30 days
  • •Send the ScCid click ID as sc_click_id, the _scid cookie as sc_cookie1, and email and phone as SHA-256 hashes after normalizing them, because these fields drive match quality
  • •SignalBridge does not send to Snapchat yet. A Snap Conversions API destination is planned with no release date, so use Snap's own routes today

What is the Snapchat Conversions API?

The Snapchat Conversions API (CAPI) is Snap's server-to-server interface for sending web, app and offline conversion events, such as purchases, add to cart and sign-ups, from your server to Snapchat. It complements the Snap Pixel, which records the same actions in the visitor's browser, and lets conversions reach Snapchat even when the browser blocks the pixel.

Snap's own guidance is to run both. Its Snap Pixel page says the Conversions API "can capture events that may not be tracked by Snap Pixel" and recommends using the two together. The same page cites one advertiser, the French Army, that saw a 10% lower cost per action and 20% higher signal volume after adding CAPI to the pixel. That is a single case published by Snap, not a benchmark for your store. The API itself is free to install, although some partner options carry a cost.

A note on SignalBridge. We do not send conversions to Snapchat today. A Snap Conversions API destination is planned, with no release date. So this guide covers the routes that exist now: Snap's own Shopify app, partner tools and a direct integration. We describe Snap's behavior from its public documentation, which we last checked on October 18, 2026.


How does the Snapchat Conversions API work?

The flow is the same whichever route you choose:

  1. A shopper taps a Snapchat ad. Snap appends a ScCid click ID to the landing page address.
  2. The Snap Pixel records events in the browser, and your server or tool records the same events on its side.
  3. Each server event goes to Snap's v3 endpoint with hashed customer identifiers, the click ID and an event ID.
  4. Snap matches the event to a Snapchatter, removes duplicates of events it already received from the pixel, and attributes the conversion.

By default, Snap attributes a conversion to an ad within a 28-day window after a click and a 1-day window after a view. You can adjust the window in your Manage Ads reporting, according to Snap's campaign FAQ. When Snap's numbers differ from another tool's, a different attribution window is often part of the reason.

What you needWhere it comes from
Pixel IDAds Manager, Snap Pixel. Web events use the same ID as the pixel, so both feed one pipeline
Conversions API tokenAds Manager, Business Details, Conversions API Tokens
A Business ManagerRequired by Snap to use the API
Events with identifiersYour store, a tag manager or a partner

Which Snapchat CAPI setup method should you use?

MethodBest forEffortWeak spot
Snapchat Ads app for ShopifyShopify storesA couple of clicks, no codeCaptures only events on Shopify-hosted pages
Partner gateway such as DatahashStores that want no code on Shopify, WooCommerce, WordPress or MagentoOne click in Events ManagerYou depend on the partner, and pricing varies
Server-side GTM with a Snapchat CAPI tag (Stape)Teams already running server-side Google Tag ManagerMedium, needs GTM skillsThe web GTM Snap tag lacks event_id, so deduplication needs extra work
Direct integrationCustom stacks and developersHighYou own hashing, retries, deduplication and monitoring

Snap's partner list also names Google Tag Manager, Stape's CAPI gateway, Segment, Tealium, Zapier, LeadsBridge and others. For most Shopify stores, the first row is the right start. The steps below cover it and the direct route, because the hard parts, the token, the identifiers and the deduplication, are the same.


How to set up the Snapchat Conversions API (6 steps)

Step 1: Check your Snap Pixel and Business Manager

You need a Business Manager and a Snap Pixel before anything else. In Ads Manager open the menu, choose Snap Pixel, click Set up my Pixel and note the Pixel ID. If you plan to send web events from a server, the ID in the API address must be the same Pixel ID your pixel uses. That shared ID is what lets Snap deduplicate the two sources later.

Step 2: Generate a Conversions API token

In Ads Manager open the menu and choose Business Details. Under OAuth Apps, find Conversions API Tokens and click Generate Token. You must be an Organization Admin to see this section. Snap recommends these static long-lived tokens, which do not expire and need no refresh. You can create several and delete one to invalidate it.

A token only works for pixel and app IDs that belong to the organization that generated it. Treat it like a password: store it on your server or in your partner tool, never in page code, because anyone holding it can send events to your pixel.

Step 3: Choose your route and connect it

For a Shopify store, install the Snapchat Ads app from the Shopify App Store, connect your ad account and tick Connect Snap Pixel. Snap's own page says that when you install the pixel with the app, CAPI is installed automatically. Then open Settings, Customer events, App pixels in Shopify, find the Snap pixel and change its data setting from Optimized to Always on, as Snap recommends to protect campaign performance.

For a partner, enable the gateway in Events Manager or add Snap's CAPI tag to your server GTM container with the pixel ID and token. For a direct integration, continue with the next two steps and build the request yourself.

Step 4: Build the event payload

A web event is a POST to https://tr.snapchat.com/v3/{PIXEL_ID}/events?access_token={TOKEN} with a JSON body, as shown in Snap's API guide. Snap requires event_name, event_time, event_source_url, action_source and a user_data object that carries at least one matching identifier: a hashed email (em), a hashed phone number (ph), or client_ip_address together with client_user_agent. A PURCHASE also needs currency and value. Snap says sc_click_id improves ad measurement and highly recommends sc_cookie1, because it raises the user match rate.

Here is an illustrative purchase, with placeholder values:

{
  "data": [
    {
      "event_name": "PURCHASE",
      "event_time": 1792834200,
      "event_id": "1001",
      "action_source": "WEB",
      "event_source_url": "https://www.example-store.com/checkout/thank-you",
      "user_data": {
        "em": ["542d240129883c019e106e3b1b2d3f3cb3537c43c425364de8e951d5a3083345"],
        "client_ip_address": "203.0.113.42",
        "client_user_agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 18_0 like Mac OS X)",
        "sc_click_id": "7b3a7917-a82a-47e8-9728-e1b3b045abb2",
        "sc_cookie1": "<value of the _scid cookie>"
      },
      "custom_data": {
        "currency": "USD",
        "value": 89.5,
        "order_id": "1001",
        "num_items": "2",
        "content_ids": ["sku-001", "sku-002"],
        "content_type": "product"
      }
    }
  ]
}

Snap requires identifiers to be normalized first and then hashed as lowercase hex SHA-256. Trim and lowercase an email before hashing. For a phone number, keep the country code, drop a leading double zero and any leading zero of the number itself, and remove every non-digit. The IP address and user agent are not hashed, and the IP must be the shopper's device, not your server's. In Node, hashing an email takes three lines:

import { createHash } from 'node:crypto';

const sha256Hex = (value) => createHash('sha256').update(value).digest('hex');
const em = sha256Hex('Person@Example.com'.trim().toLowerCase());

Snap's documentation lists this exact email and its hash, 542d2401...083345, as the expected result, which makes it a handy self-test.

The event_time is a Unix timestamp, and Snap requires it to be no more than 7 days in the past. Send events as they happen, not in a nightly batch.

Step 5: Deduplicate with the Snap Pixel

If the pixel and the API both report an event, give them the same ID so Snap counts it once. Snap's deduplication guide sets these rules for the web:

  • The pixel's client_dedup_id and the API's event_id must be identical, for the same Pixel ID and the same event name, within a 48-hour window.
  • For purchases, add the order reference as well: the pixel calls it transaction_id and CAPI v3 calls it order_id, inside custom_data. This pair adds a fallback of up to 30 days, and the cross-channel ID pair takes precedence when both are present.
  • Use one ID per conversion, not per session. Reusing a session ID across several events collapses them into one.
  • Set the pixel's ID yourself. If you do not pass client_dedup_id, the pixel generates one that starts with @-, which is known only to the browser and can never match your server.

A matching pixel call for the purchase above looks like this:

snaptr('track', 'PURCHASE', {
  client_dedup_id: '1001',
  transaction_id: '1001',
  price: '89.50',
  currency: 'USD',
});

On Shopify with Snap's app, Snap handles this for you. With server-side GTM, Stape notes that the Snap tag for web GTM does not support event_id, so you need a custom HTML tag in web GTM to set the same ID on the pixel side.

Step 6: Test and verify

Validate before you go live. Snap's test event tool accepts the same body at POST https://tr.snapchat.com/v3/{PIXEL_ID}/events/validate?access_token={TOKEN}, without processing it as production data. Its validate/logs and validate/stats endpoints summarize what you sent in the past day, and Events Manager, Test Events shows the same events with warnings and recommendations.

curl -X POST "https://tr.snapchat.com/v3/$PIXEL_ID/events/validate?access_token=$SNAP_CAPI_TOKEN" \
  -H "Content-Type: application/json" \
  -d @event.json

After launch, allow 1 to 2 hours for events to appear in Events Manager marked "Via Conversions API", and up to 24 hours for the deduplication diagnostics on each event to settle. On Shopify, the Snapchat Pixel Helper extension should show your Pixel ID and an integration value of shopify-wpe.


Which events should an online store send to Snapchat?

Snap's v3 API uses fixed event names. These are the ones an e-commerce store normally needs:

Store momentevent_nameWhat to include
Page loadedPAGE_VIEWevent_source_url
Product page viewedVIEW_CONTENTcontent_ids, content_type, content_name, currency, value
Product added to cartADD_CARTThe same product fields plus num_items
Checkout startedSTART_CHECKOUTcontents, value, currency
Payment details addedADD_BILLINGvalue, currency
Order placedPURCHASEcurrency and value (required), order_id, contents
Account createdSIGN_UPA hashed email
Site searchSEARCHsearch_string
Wishlist addADD_TO_WISHLISTcontent_ids

For dynamic product ads, content_ids carries your product IDs, content_type is product or product_group, and contents is a list of items with id, quantity and item_price. Snap accepts a defined subset of ISO 4217 currency codes, so check its parameters page if you sell in an uncommon currency.


How do you improve Snapchat CAPI match quality?

Match quality decides how many server events Snap can connect to an ad interaction. These are the levers, in order of impact:

FieldHash it?Notes
em and phYes, SHA-256Strongest identifiers. Normalize before hashing
fn, ln, ct, st, zp, countryYes, SHA-256Add what you have from the checkout
client_ip_addressNoThe shopper's IP, not your server's. IPv4 and IPv6 are accepted
client_user_agentNoRecommended for all web events
sc_click_idNoThe ScCid value from the landing page address
sc_cookie1NoThe _scid cookie set by the Snap Pixel
external_idHashing recommendedYour own customer or first-party cookie ID

The click ID deserves special care. Parse &ScCid= from the landing page URL when the shopper arrives, store it for the session and send it as sc_click_id on every later event. Snap also encourages advertisers who use the click ID to pass the full landing page URL as the event's source URL. Alongside it, send the _scid cookie as sc_cookie1, which Snap says increases the user match rate.

Consent matters too. Snap's data_processing_options parameter accepts LMU to flag an opted-out user on web events, and its documentation ties that flag to iOS 14.5 and later opt-outs, so leave it unset otherwise. It does not replace your own consent logic: your cookie banner should decide which events leave your server at all. Our guide to Consent Mode v2 explains how consent shapes what you can measure.


Why are Snapchat CAPI events missing or duplicated?

SymptomLikely causeFix
No events in Events ManagerWrong Pixel ID, or a token from a different organizationUse the pixel's ID and a token generated in the same organization, then wait 1 to 2 hours
Events not acceptedevent_time more than 7 days old, or a missing event_source_url or action_sourceSend events promptly and include every required field
Purchases without revenuePURCHASE sent without currency and value, which Snap requiresAdd both to custom_data
Purchases counted twiceevent_id differs from client_dedup_id, a placeholder such as {{order.order_number}}, or a fresh UUID created on the serverReuse the exact same real ID on both sides
Page views and add to cart doubledThe pixel's auto-generated @- ID cannot match your serverSet client_dedup_id explicitly
Dedup fails on purchases onlyThe order reference is missing from the server eventSend order_id inside custom_data to match the pixel's transaction_id
Low match rateMissing em and ph, unnormalized hashes, or your server's IP addressHash after normalizing and send the shopper's IP
Shopify events missing on some pagesSnap's app captures only Shopify-hosted pages, so headless or external pages are missedCheck those pages with the Pixel Helper and send them another way
Fewer pixel events than expected on ShopifyPixel data setting left on Optimized, while Snap recommends Always onSwitch it to Always on in Customer events

If counts still look inflated, check the deduplication diagnostics in Events Manager, and allow up to 24 hours after a fix before you recheck.


What does SignalBridge cover today?

SignalBridge sends server-side events to Meta, Google Ads, GA4, TikTok, Microsoft Ads, Taboola and Klaviyo. Snapchat is not among them, and we will not describe a setup that does not exist. If you advertise on Snapchat and those platforms together, run Snap's own route for Snapchat and use SignalBridge for the others. See our TikTok Events API setup guide and our guide to what Meta CAPI is for the same server-side logic on those platforms.

If you want to follow our Snapchat plans, the integrations page shows the current status of every destination. Plans start at $29 a month for the platforms we support, with a 14-day free trial.


FAQ

What is the Snapchat Conversions API?

It is Snap's server-to-server interface for sending web, app and offline conversion events to Snapchat. Your server or a partner tool posts each event, with hashed customer identifiers and the ScCid click ID, to Snap's v3 endpoint. It complements the Snap Pixel and lets conversions reach Snapchat when the browser blocks the pixel.

Is the Snapchat Conversions API free?

Yes. Snap says the API itself is free to install, although some partner installation options might have a cost. A direct integration costs developer time, and hosting a server-side GTM container costs whatever the host charges.

Do I need both the Snap Pixel and the Conversions API?

Snap recommends using both. Running them together gives Snap a fuller picture and covers events one source misses. It works safely only if every event carries the same ID on both sides, so Snap counts it once.

How does Snapchat deduplicate pixel and CAPI events?

For web events, the pixel's client_dedup_id must equal the API's event_id, for the same Pixel ID and event name, within 48 hours. For purchases, matching transaction_id on the pixel and order_id in the API's custom_data adds a fallback of up to 30 days.

What is ScCid and do I need it?

ScCid is the click ID Snap appends to the landing page address when someone taps your ad. Snap does not list it as mandatory, but it says sending it as sc_click_id improves ad measurement. Snap also highly recommends sending the _scid cookie as sc_cookie1, which raises the user match rate.

Can I set up Snapchat CAPI on Shopify without code?

Yes. Install the Snapchat Ads app, connect your ad account and the Snap Pixel, and the app installs CAPI automatically. Set the pixel to Always on in Customer events. The app captures only events on Shopify-hosted pages, so headless storefronts need another route.

Does SignalBridge support the Snapchat Conversions API?

Not yet. A Snap Conversions API destination is planned, with no release date. SignalBridge currently supports Meta, Google Ads, GA4, TikTok, Microsoft Ads, Taboola and Klaviyo.


Ready to recover more conversions?

Start tracking what your pixels miss. Set up in 5 minutes, no credit card required.

Start Free Trial