Snapchat Ads UTM Tracking: The Click ID Guides Miss
Half the guides say Snapchat has no click ID and no URL macros. Snap's own developer docs document both. Here's what works, and which macros go where.
Snapchat has a click ID. It's called ScCid.
Go looking for how to tag Snapchat campaigns and you'll run into two claims fast. That Snap never appends a click identifier to your destination URL the way Google appends gclid. And that Snap has no dynamic macros, so you should hardcode static UTM values and accept it.
Both are wrong, and Snap's own developer documentation is the thing that says so.
Here's the sentence, from the Conversions API docs: "When a user clicks or swipes up on a Snapchat ad, the query parameter, &ScCid= is appended to the outgoing URL." Snap even prints the example landing page, and note that it shows the click ID living happily alongside a UTM:
https://www.mywebsite.com/landing-page?utm_source=snapchat&ScCid=7b3a7917-a82a-47e8-9728-e1b3b045abb2
Watch the capitalisation. Snap writes it ScCid. Almost everything written about it downstream writes sccid, and if you're pulling the value with a case-sensitive parser or a strict regex, that difference is the whole bug. (I've lost an afternoon to precisely this class of thing on another platform. Once is enough.)
What you do with it: parse ScCid off the URL and pass it as sc_click_id on the conversion event. Or hand Snap the full destination URL in event_source_url and let it pull the ID out itself. That's the tighter option if your stack already stores landing URLs.
Two macro systems, and only one belongs in your landing page URL
This is the part that actually costs people campaigns, and I haven't seen anyone lay it out.
Snapchat documents a set of dynamic macros in tilde syntax:
~.~SERVER_CAMPAIGN_ID~.~~.~SERVER_AD_SQUAD_ID~.~~.~SERVER_AD_ID~.~~.~SERVER_CREATIVE_ID~.~~.~SERVER_ORG_ID~.~~.~SERVER_AD_ACCOUNT_ID~.~~.~SERVER_MOAT_PRODUCT_TYPE~.~~.~TIMESTAMP~.~
Now the trap. Those macros belong to two specific fields, third_party_paid_impression_tracking_urls and third_party_on_swipe_tracking_urls. They're for the third-party impression and swipe pixels you hand to a verification vendor. They aren't the mechanism for tagging the URL your customer lands on.
Destination URLs are handled separately, through what Snap calls the URL Macros builder and, on the API side, url_macro_parameters. Different system, different job.
Paste ~.~SERVER_CAMPAIGN_ID~.~ into your final URL because a blog post showed you the list and you get a literal tilde string sitting in utm_campaign for the life of the flight. It looks like it worked. Every report downstream is then grouping on a macro that never resolved.
One naming trap while you're in there. The macro says AD_SQUAD, and Ads Manager calls the same object an ad set. Snap's API has always said ad squad. If you're mapping Snapchat into a schema built around Meta or LinkedIn, that's the field that won't line up, and it's worth writing the translation down somewhere your team will find it.
The Shopify parameter you can't touch
If you run the Snapchat Ads App for Shopify, Snap sets a snap_campaign_id parameter on web view and deep link ads to make attribution work in the Shopify admin. Their docs are blunt about your options: it "cannot be overwritten by the Snapchat URL Macros builder or with url_macro_parameters."
So don't build a naming convention that assumes you control every parameter on the URL. You don't. Plan around it, the same way you'd plan around UTMs that don't survive checkout.
What I couldn't verify, and why I'm saying so
Snapchat's business help centre is a JavaScript app that returns an error shell to anything that isn't a browser. Not a crawler, not a fetch, not an archive. So the exact syntax the URL Macros builder writes into destination URLs isn't something I can quote from a primary source today, and I'm not going to copy it out of a vendor blog and present it as documentation. There's an "Auto-UTMs" article in that help centre too, and I can tell you it exists and nothing more. It's not Google-style auto-tagging as far as anyone has shown.
If you have an Ads Manager login, that's a ten-minute check and you'll know more than the entire first page of search results.
Where this leaves your tagging
Set utm_source=snapchat and a real medium yourself, statically, at the campaign level. Use the UTM builder if you want the values consistent across whoever's launching. Keep ScCid for conversion matching rather than trying to make it a UTM, which is the same division of labour we argued for in click IDs vs UTM parameters. Keep the tilde macros in the third-party tracking fields where they belong.
And treat the click count in Ads Manager as Snapchat's number, not yours. Same rule as Pinterest, same rule everywhere. The platform counts the swipe. Your own redirect counts the arrival. When those two disagree, and they will, the gap is information rather than an error.