Connecting Craft CMS to Snapchat
Craft is a developer-oriented CMS, usually built bespoke by an agency, which means the implementation is whatever that agency decided and nothing is standard. Snapchat's audience is young, almost entirely mobile and inside an in-app browser, which is the least forgiving environment for browser-based tracking anywhere in paid media. The join between them succeeds or fails on one thing: whether the ScCid click identifier reaches the Craft Commerce order before the conversion happens, because Snapchat can only match a conversion it can tie back to a click it recognizes.
Free30 minutesNo obligation
Specific to this pair
Craft CMS to Snapchat: ScCid into an order field before checkout
Only Craft stores selling to young mobile buyers should wire Snapchat. Record ScCid on first load through a small uncached controller action, copy it to an order custom field, and send PURCHASE to the Snapchat Conversions API with value, currency, hashed email and phone, and an event ID shared with the Snap Pixel.
Snapchat is only worth wiring for Craft sites that sell to a young, mobile audience, such as a Commerce store for apparel, beauty or event tickets. For the B2B lead sites Craft often powers, Snapchat is the wrong channel and no integration changes that. Where it fits, the work is getting ScCid from Snapchat's in-app browser onto the Commerce order: read it on the first page load, write it to the session server-side immediately, and copy it to an order custom field in the order-complete listener.
Server-side capture matters more on Craft than usual, because static caching can serve the landing page HTML without running the code that would set a cookie, and the in-app browser may discard cookies anyway. A small uncached controller action that records ScCid on first load is the reliable version. Send PURCHASE to the Snapchat Conversions API with value, currency, the stored ScCid, hashed email and phone, and an event ID shared with the Snap Pixel.
Because Craft templates are bespoke, the Snap Pixel may have been added in a layout file, a tag manager and a plugin at different times. Inventory where it fires before adding a server source, or PURCHASE counts two or three times. Also test checkout inside the in-app browser; payment steps that open a new window or a 3-D Secure pop-up fail more often there.
Craft → Snapchat · what breaks
Why this join usually fails — Craft → Snapchat
- 01
The ScCid click identifier never reaches Craft
Craft's template caching and static caching plugins both serve stored output, and because every build is custom, where the capture code lives differs per site. There is no standard place to look.
- 02
Every install is bespoke
There is no standard Craft setup, so an approach that worked on another Craft site may have nothing to attach to on this one. Read the build before quoting.
- 03
The in-app browser loses the identifier
Snapchat traffic arrives through a webview with inconsistent storage. Anything relying on the identifier still being in the browser at conversion time will lose a large share, and the loss is invisible unless you measure capture on Snapchat traffic specifically.
- 04
Nothing reconciles afterwards
Snapchat Ads Manager shows received and matched events. Arriving is not the test — deduplicated and matched is. Reconcile against your own records for the same window.
Craft → Snapchat · the fix
What working looks like — Craft → Snapchat
The ScCid click identifier on every order
Conversions arriving in Snapchat
Events appear in Snapchat Ads Manager, deduplicated against the pixel, and become usable for optimization.
Reconciled against the source
Craft CMS's own records are the reference, not either dashboard.
Craft → Snapchat · architecture
How Craft and Snapchat actually connect
- 1
Craft CMS holds the truth
Craft installs are bespoke by nature. Establish how this particular build models a completed order before assuming anything transfers from another Craft site.
- 2
Snapchat needs a click to match
Snapchat matches server events on the click identifier and hashed customer information. Send both — on this traffic the fallback carries a meaningful share of the events.
- 3
The identifier is the bridge
The ScCid click identifier, captured at the visit and carried into the Craft Commerce order.
- 4
The event source decides reliability
Fire from the event listener in PHP rather than a Twig template, which may be cached.
- 5
Deduplication at the destination
Snapchat deduplicates on a client-supplied event identifier shared between the pixel and the Conversions API, the same pattern as Meta. Mismatched identifiers mean double counting.
Craft → Snapchat · normal or broken
Working vs. broken, side by side — Craft → Snapchat
Normal, not a fault
The ScCid click identifier present on the order
Visible on the record itself in Craft CMS, not merely captured somewhere on the site.
Sent from the Craft Commerce order-complete event
Deduplicated correctly
Snapchat deduplicates on a client-supplied event identifier shared between the pixel and the Conversions API, the same pattern as Meta. Mismatched identifiers mean double counting.
Reconciles with the source
Snapchat's count and Craft CMS's records agree within a few percent over a closed window.
Actually broken
The ScCid click identifier missing on most records
Craft's template caching and static caching plugins both serve stored output, and because every build is custom, where the capture code lives differs per site. There is no standard place to look.
Sent from the browser
There is no standard Craft setup, so an approach that worked on another Craft site may have nothing to attach to on this one. Read the build before quoting.
Counted twice, or not at all
Snapchat traffic arrives through a webview with inconsistent storage. Anything relying on the identifier still being in the browser at conversion time will lose a large share, and the loss is invisible unless you measure capture on Snapchat traffic specifically.
Nobody has reconciled it
The dashboard shows a number and no one has compared it to Craft CMS.
Craft → Snapchat · diagnose
Diagnostic order — Craft → Snapchat
- 01
Count orders carrying the ScCid click identifier
- 02
Follow one real conversion end to end
- 03
Read how this specific build handles order completion
Assumptions carried from another Craft project are the main source of wasted time here.
- 04
Measure capture rate on Snapchat traffic alone
The in-app browser is the failure case, so a healthy overall rate can hide a poor one on precisely the traffic you are paying for.
- 05
Read the match rate, not the success message
Snapchat Ads Manager shows received and matched events. Arriving is not the test — deduplicated and matched is. Reconcile against your own records for the same window.
Craft → Snapchat · prove
How it gets proven — Craft → Snapchat
Against Craft CMS's own records, not against either platform's dashboard.
Source of truth
Craft Commerce's order records in your own database, filtered to completed.
- The ScCid click identifier confirmed present on a live order.
- Capture rate measured on Snapchat traffic specifically, and deduplication confirmed on a real conversion.
- Order custom field confirmed populated on an order placed as an anonymous visitor through cache.
Craft → Snapchat · free audit
What we check in the free audit
- Count orders carrying the ScCid click identifier
- Follow one real conversion end to end
- Read how this specific build handles order completion
- Measure capture rate on Snapchat traffic alone
- Read the match rate, not the success message
Checked against
Craft Commerce's order records in your own database, filtered to completed.
Free30 minutesNo obligation
Craft → Snapchat · when not to buy
When you don't need this — Craft → Snapchat
- If Snapchat already reports conversions that reconcile against Craft CMS's records within a few percent, this join is working and there is nothing to buy.
- Measure identifier coverage yourself first — pull your last hundred orders and count how many carry the ScCid click identifier.
- If the original agency is still engaged, the fastest path is usually specifying the field and having them add the hook.
- If your customers are not in Snapchat's age profile, the channel is the wrong question and no measurement work fixes that.
Craft → Snapchat · what we deliver
What gets built — Craft → Snapchat
Identifier capture into Craft
Capture the identifier and store it as a custom field on the order through a Craft event listener, server-side.
Event source: the Craft Commerce order-complete event
Fire from the event listener in PHP rather than a Twig template, which may be cached.
Dispatch to Snapchat
Server events to the Snapchat Conversions API with the click identifier, hashed customer data and a matched event identifier.
Reversals where they exist
Refunds and cancelled orders are recorded against the order.
Written guarantee
95%+ tracking accuracy
Measured against Craft Commerce's order records in your own database, filtered to completed.. Miss it and we keep working at no cost.
From $400 · See packages
FAQ
Craft → Snapchat questions, answered
The ScCid is often dropped by Snapchat's in-app browser or never captured because a cached page didn't run the capture code. Record it server-side on first load.
Rarely. Snapchat's audience is young consumers, so lead-generation sites are usually better served by LinkedIn or Microsoft Ads.
Almost always because the ScCid click identifier never reached the Craft Commerce order. Craft's template caching and static caching plugins both serve stored output, and because every build is custom, where the capture code lives differs per site. There is no standard place to look. Measure coverage before debugging the dispatch.
Snapchat's click identifier, appended to your landing page URL. Snapchat also matches on hashed email, phone and mobile advertising IDs. The environment is the problem: traffic arrives inside Snapchat's in-app browser, whose storage behaviour is inconsistent, so an identifier that is captured but not immediately persisted server-side often is not there by the time the conversion happens.
The Craft Commerce order-complete event. Fire from the event listener in PHP rather than a Twig template, which may be cached.
Snapchat Ads Manager shows received and matched events. Arriving is not the test — deduplicated and matched is. Reconcile against your own records for the same window.
More on Craft → Snapchat
- Craft → Google AdsConnecting Craft CMS to Google Ads
- Craft → MetaConnecting Craft CMS to Meta Conversions API
- Craft → GA4Connecting Craft CMS to GA4
RELATED GUIDES
Where Craft → Snapchat fits in the rest of your tracking
- Snapchat · Local servicesSnapchat Ads conversion tracking for local service businesses
- Snapchat · SaaSSnapchat Ads conversion tracking for SaaS companies
- Snapchat × Ecommerce OrdersHow to reconcile Snapchat Ads against your store's order table
- Snapchat · Comparison page → demoHow to track comparison page visit to demo request for Snapchat Ads
- Contentful → SnapchatConnecting Contentful to Snapchat
- Craft → NextdoorConnecting Craft CMS to Nextdoor Ads
- Local servicesConversion tracking for local businesses, where most conversions bypass the website
- Drupal Commerce → SnapchatConnecting Drupal Commerce to Snapchat
Free · 30 min
Get Craft and Snapchat joined properly
Free30 minutesNo obligation
