Snapchat Ads
Deprecated. It duplicates the Snapchat integration (the same Conversions API). Use the Snapchat integration for new integrations. This integration is hidden from new installs; an integration already installed on it keeps its revision and keeps delivering. Nothing is removed.
Send conversion events to Snapchat through the Snapchat Conversions API v3. This integration and the Snapchat Conversions API integration call the same API; use one of them.
Why route Snapchat Ads through Datafly Signal
- Conversions survive ad blockers and tracking prevention. Signal sends the event from your own infrastructure, so the conversions Snapchat optimises against are not filtered by the browser.
- Identifiers are hashed before they leave your infrastructure. Signal normalises and applies SHA-256 inside your own deployment, so Snapchat receives match keys, not raw personal data.
- Click and cookie identifiers are captured first-party and replayed on later conversions, so attribution survives when the landing-page cookie has expired.
- One consent decision governs every destination. Snapchat is gated by the same consent state as the rest of your stack, so a withdrawal applies everywhere at once.
- Presets for Retail, Travel, Lead Generation and Insurance. The mapping starts from a working configuration for your vertical, and every field can be changed afterwards.
Prerequisites
- A Snapchat Business account and a Snap Pixel (Ads Manager > Events Manager). Copy the Pixel ID.
- In Business Manager, open Business Details > Conversions API Tokens and generate a token. Enter it in the Access Token field (stored as
api_key).
Configuration
| Field | Type | Required | Description |
|---|---|---|---|
pixel_id | string | Yes | Your Snap Pixel ID, from Snapchat Ads Manager > Events Manager. It forms the request path. |
api_key | secret | Yes | A Conversions API access token generated in Snapchat Business Manager (Business Details > Conversions API Tokens). Sent as the access_token query parameter. |
Configure in Signal
- In the Management UI, go to Integrations > Integration Library and select Snapchat Ads.
- Choose a preset, fill in the fields above and choose the pipelines and consent categories (advertising destinations default to marketing).
- Click Install Integration.
Or with the Management API:
curl -X POST http://localhost:8084/v1/admin/integration-catalog/snapchat_ads/install \
-H "Authorization: Bearer YOUR_TOKEN" -H "Content-Type: application/json" \
-d '{"name": "Snapchat Ads", "variant": "default", "config": {"pixel_id": "abc123de-f456-7890-gh12-ijkl34567890", "api_key": "eyJhbGciOi..."}, "delivery_mode": "server_side"}'API endpoint
POST https://tr.snapchat.com/v3/{{pixel_id}}/events?access_token={{api_key}}Authentication: ?access_token=<token> query parameter. Allow egress to tr.snapchat.com from the network your delivery workers run on.
Presets and event mapping
Every preset sends only the fields it maps (the strict output contract is on). Events not listed are not sent.
Retail (ecommerce)
Full retail funnel with Snap’s standard events: LIST_VIEW, SEARCH, VIEW_CONTENT, ADD_TO_WISHLIST, ADD_CART, START_CHECKOUT, ADD_BILLING and PURCHASE, with contents, content IDs, value and currency for Dynamic Ads.
| Signal event | Snapchat event |
|---|---|
page | PAGE_VIEW |
view_item_list | LIST_VIEW |
search | SEARCH |
view_search_results | SEARCH |
view_item | VIEW_CONTENT |
add_to_wishlist | ADD_TO_WISHLIST |
add_to_cart | ADD_CART |
begin_checkout | START_CHECKOUT |
add_payment_info | ADD_BILLING |
purchase | PURCHASE |
sign_up | SIGN_UP |
generate_lead | SIGN_UP |
Travel (travel)
Travel funnel with the Dynamic Travel Ads parameters: destination, flight and hotel searches, listing views and saves, booking start, payment and completed bookings.
| Signal event | Snapchat event |
|---|---|
page | PAGE_VIEW |
search | SEARCH |
destination_searched | SEARCH |
flight_searched | SEARCH |
hotel_searched | SEARCH |
view_item_list | LIST_VIEW |
listing_viewed | VIEW_CONTENT |
view_item | VIEW_CONTENT |
listing_saved | ADD_TO_WISHLIST |
booking_started | START_CHECKOUT |
begin_checkout | START_CHECKOUT |
add_payment_info | ADD_BILLING |
purchase | PURCHASE |
booking_completed | PURCHASE |
generate_lead | SIGN_UP |
Default (default)
Snapchat Conversions API v3 core funnel: page views, content views, search, add to cart, checkout, sign-ups, leads and purchases, with hashed email, phone and name, the Snap click ID and _scid cookie, IP and user agent, and an event ID for Pixel deduplication.
| Signal event | Snapchat event |
|---|---|
page | PAGE_VIEW |
view_item | VIEW_CONTENT |
search | SEARCH |
add_to_cart | ADD_CART |
begin_checkout | START_CHECKOUT |
sign_up | SIGN_UP |
generate_lead | SIGN_UP |
purchase | PURCHASE |
Lead Generation (lead_gen)
Lead-generation funnel: page views, search, sign-ups and leads (SIGN_UP, as Snap has no lead event) and newsletter subscriptions (SUBSCRIBE).
| Signal event | Snapchat event |
|---|---|
page | PAGE_VIEW |
search | SEARCH |
sign_up | SIGN_UP |
generate_lead | SIGN_UP |
newsletter_subscribed | SUBSCRIBE |
Insurance (insurance)
Insurance quote and policy funnel: quote start, quote request and quote completion as CUSTOM_EVENT_1 to 3 (label them in Snap Events Manager), leads as SIGN_UP, checkout, payment and policy purchase as PURCHASE with the policy number as the event ID, renewals as SUBSCRIBE.
| Signal event | Snapchat event |
|---|---|
page | PAGE_VIEW |
view_item | VIEW_CONTENT |
quote_started | CUSTOM_EVENT_1 |
get_quote | CUSTOM_EVENT_2 |
quote_requested | CUSTOM_EVENT_2 |
quote_completed | CUSTOM_EVENT_3 |
generate_lead | SIGN_UP |
lead_submitted | SIGN_UP |
begin_checkout | START_CHECKOUT |
add_payment_info | ADD_BILLING |
purchase | PURCHASE |
policy_purchased | PURCHASE |
policy_renewed | SUBSCRIBE |
sign_up | SIGN_UP |
Identity and hashing
| Snapchat field | Signal source | Treatment |
|---|---|---|
user_data.em | $traits.email | trim, lowercase, SHA-256 |
user_data.ph | $traits.phone | country code, no +, digits only, SHA-256 |
user_data.fn, user_data.ln | $traits.first_name, $traits.last_name | trim, lowercase, SHA-256 |
user_data.external_id | user_id | SHA-256 |
user_data.sc_click_id | ScCid click ID | sent as captured |
user_data.sc_cookie1 | _scid cookie (gateway sync) | sent as captured |
user_data.client_ip_address, client_user_agent | visitor request | sent as captured |
user_data.madid | device advertising ID (apps) | lowercase |
Email, phone and names come from datafly.identify() traits (a legacy properties.email / properties.phone is read when no trait is set). Raw personal data is never sent.
Deduplication and consent
event_id carries the Signal event ID, or the order ID on purchases, which Snap matches against the Pixel’s client_dedup_id / transaction_id within 48 hours. event_time is sent in epoch milliseconds; Snap rejects events older than seven days.
Example: purchase (Default preset)
datafly.identify('crm-user-7', { email: 'jane.doe@example.com', phone: '07700 900123', first_name: 'Jane', last_name: 'Doe' });
datafly.track('purchase', {
transaction_id: 'T_1001', value: 139.99, currency: 'GBP',
items: [
{ item_id: 'SKU_1', item_name: 'Helmet', item_category: 'Motorbike', item_brand: 'Shoei', price: 120.00, quantity: 2 },
{ item_id: 'SKU_2', item_name: 'Gloves', price: 19.99, quantity: 1 }
]
});Request Signal sends (rendered from the preset):
{
"data": [
{
"action_source": "WEB",
"custom_data": {
"content_ids": [
"SKU_1",
"SKU_2"
],
"content_type": "product",
"contents": [
{
"brand": "Shoei",
"id": "SKU_1",
"item_price": 120,
"quantity": 2
},
{
"id": "SKU_2",
"item_price": 19.99,
"quantity": 1
}
],
"currency": "GBP",
"num_items": "2",
"order_id": "T_1001",
"value": 139.99
},
"event_id": "T_1001",
"event_name": "PURCHASE",
"event_source_url": "https://shop.example.co.uk/p/123?utm_source=x",
"event_time": 1758500000123,
"integration": "datafly",
"user_data": {
"client_ip_address": "203.0.113.7",
"client_user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)",
"em": "86e0b9e56c17cc4d12387e1949b85053fbe73bc3ce5a1188713a9d300cc6133d",
"external_id": "a1a37b21e9d35da94d0ae0b42483e449206f1e24c3790d28c113fb5fb9045f93",
"fn": "81f8f6dde88365f3928796ec7aa53f72820b06db8664f5fe76a7eb13e24546a2",
"ln": "799ef92a11af918e3fb741df42934f3b568ed2d93ac1df74f1b8d41a27932a6f",
"ph": "033134b911b137918338415ee3d20a064b24773d36a3b02e8b99fdd3fcd6b4cd",
"sc_click_id": "scclick",
"sc_cookie1": "scid-cookie"
}
}
]
}Known limitations
- Snap has no lead event:
generate_leadis sent asSIGN_UP. The insurance quote events useCUSTOM_EVENT_1toCUSTOM_EVENT_3; name them in Snap Events Manager. snapchatandsnapchat_adsdeliver to the same API; use one of them.- Name hashing trims and lowercases but does not strip punctuation as Snap documents (#1390).
custom_data.num_itemsis the number of order lines, not the unit total (#1389).
Troubleshooting
| Symptom | Cause | Resolution |
|---|---|---|
401 / 403 | Invalid, expired or under-privileged credential | Re-issue the credential described under Prerequisites and update the integration. |
400 | A field the vendor rejects | Open the event in the Delivery Log; the vendor’s message names the field. |
| Event dead-lettered with a required-field error | A value the vendor requires is missing (for example currency and value on a purchase) | Send the property in the track() call, or map it in the integration. |
| Low match rate | Few identifiers | Call datafly.identify() with email and phone when you know them, and keep click-ID capture enabled. |
Vendor reference: https://developers.snap.com/api/marketing-api/Conversions-API/Parameters.