Track a TikTok Spark Ad with two links for the same video. The ad's destination URL carries utm_medium=spark. The creator's bio or caption link carries utm_medium=social. Both use the same campaign and the same creator in utm_content. The form stores those values with the lead.
That split is what tells you whether the boost added pipeline. TikTok will report views and clicks on the post. Your CRM can report which of the two links showed up on won deals. A discount code only fires on a purchase, so it misses the demo request.
Creator authorizes the post → you paste a tagged destination into the ad → the bio gets a second tagged link → both submit into the form → you compare closed revenue by medium.
How do you track TikTok Spark Ads?
To track TikTok Spark Ads, give the boosted post's ad destination its own UTM-tagged URL in Ads Manager and give the profile bio a different tagged link. Each lead then shows whether it came from the paid boost or the organic post. Test both links through to a form submission. Tools like Trakt build consistent tagged links.
Quick start: Start free with Trakt to build separate tagged links for the Spark Ad and the bio and record each form submission with its source. Or follow the manual steps below.
Spark Ads run a creator's post, or your own TikTok post, as the ad. Likes and comments stay on that post. TikTok's Spark Ads article (updated October 2025) covers Smart+ campaigns and says manual and search campaigns have their own article in Ads Manager help. The tracking steps are the same idea either way: the paid click uses the destination URL you set on the ad, and every other tap uses whatever link is on the profile.
- Get a video code from the creator, or use a post from an account you already manage.
- Authorize that post in Ads Manager.
- Put a Spark-specific UTM URL in the ad destination before you submit.
- Give the creator a second URL for the bio, with a different medium.
- Submit a test lead from each URL. The two records should share a creator and differ in medium.
- Judge the boost on leads and won deals, with the creator named on both.
The parameter names themselves are in TikTok UTM parameters, including the macro table for ordinary ads. Spark destinations can use those macros. A bio link cannot. You type the bio values out.
Why the organic post and the boost need different links
The paid click and the organic click can leave from the same video and arrive on the same page. If both URLs are identical, the CRM has one row called TikTok and no way to say whether the ad budget added anything.
People also share the post in DMs. That visit often arrives with no referrer. A parameter on the link still travels, which is the fix in dark social on TikTok. A link with no parameters becomes another direct visit, and the creator gets none of the credit.
Comment threads and the caption are part of the post. TikTok's Spark Ads article says you cannot edit the caption after the post is authorized as an ad. If the tracked link lives in the caption, put it there before authorization. The bio link is separate. You can change it for the flight without re-authorizing the video.
Spark Ads tracking steps
1. The creator generates a video code
From TikTok's Spark Ads article, on the creator's phone:
- Allow authorized posts. TikTok points creators to Settings and Privacy, then Privacy, or to Creator tools from their profile.
- Open the video. Tap the three dots, then Ad settings.
- Agree to the advertising content terms and turn on Ad authorization.
- Choose how long the code lasts: 7, 30, 60, or 365 days.
- Generate the code and send it to you.
A private video used in a campaign becomes public for the run of the promotion. TikTok also notes a TikTok Ads Only mode on that point. Confirm the creator is willing to have the post public, or uses that mode, before you boost it.
2. Authorize the post in Ads Manager
TikTok's path for a code from another creator:
- Tools, then Creative, then Creative library.
- Spark ads posts, then Apply for Authorization.
- Paste the code, search, and confirm.
During ad setup, the same article also shows + Authorize TikTok Post, where you enter the code and select the account that authorized it. On Smart+, you can pull a post that is already authorized from the TikTok Post tab. You can authorize up to 20 codes at a time from Add Post.
A code that fails usually needs a new one from the creator: expired, deleted, wrong format, or a post that is not eligible. Stories, and some duet or stitch posts, are called out in TikTok's Spark Ads code error notes. Duets and stitches need a code from each creator in the video.
3. Set the destination URL before you submit
In the ad's destination field, use Build URL parameters, the same control as any TikTok website ad. How to add URL parameters is the click path: Edit under Preview, Build URL parameters, check the preview, Apply.
Use a clean page URL, then add the parameters. Leave TikTok's ttclid alone. It is the click id for TikTok's pixel, and it shows up on the click alongside your UTMs.
Illustrative Spark destination. Swap in the real handle and campaign:
https://example.com/demo?utm_source=tiktok&utm_medium=spark&utm_campaign=spring-demo&utm_content=ada
On an account with many Spark Ads, put __CID__ in utm_content if you want the creative id TikTok already has, and keep the creator handle in a second parameter you can read in the CRM. The macro only expands on the ad click. Document the handle in the campaign name if the team will not read ids.
4. Give the bio a different link
Illustrative bio link for the same creator and campaign:
https://example.com/demo?utm_source=tiktok&utm_medium=social&utm_campaign=spring-demo&utm_content=ada
Send that URL to the creator for the bio. Ask them to use it for the days the ad runs. You cannot see their bio from Ads Manager and assume it matches. Open the profile and tap the link.
5. Test both URLs into a lead
Submit one test from the ad preview and one from the bio link. You want two records: same utm_content, medium spark on one and social on the other. Trakt forms store source, medium, campaign, content, term, and id. The form scanner covers forms already on the site. A form that drops the query string will make this test fail, and it will make the live campaign fail the same way.
![]()
If you want the boost link and the bio link built side by side with the same naming, pre-register for Trakt.
UTM values for the boost and the bio link
| Spark Ad destination | Bio, caption, or comment | |
|---|---|---|
| Who clicks it | People who tap the ad's button | People who tap the link on the profile |
utm_source | tiktok | tiktok |
utm_medium | spark | social |
utm_campaign | Shared name, lowercase, hyphens | The same name |
utm_content | Creator handle, or __CID__ on the ad | The same creator handle, typed out |
| Macros | Expand on the click | Stay as literal text. Do not use them here. |
| What "good" looks like | Leads and won deals you would not have from the bio link | Leads that arrived without the ad spend |
spark is a medium we use so the boost is its own row. TikTok does not require that word. What matters is that the paid URL and the organic URL are different, and that the whole team spells them the same way. The account-wide names live with the rest of the TikTok playbook.
A printed code for the same creator is a third medium, qr, so event scans do not look like bio taps. The setup is in QR code for TikTok.
How do you tell if the boost added pipeline?
Pull leads, and then won deals, for one utm_content and split them by utm_medium.
The bio link is the organic baseline for that creator. The Spark link is the paid increment on the same video. A boost that only repeats leads you were already getting from the bio is spend you can move. A boost that creates leads the bio never produced is the one to renew.
Views, likes, and the creator's share count stay in TikTok. They are the wrong report for a renewal. So is a single discount code: it misses anyone who booked a demo or filled in a form and bought later at full price.
Read this beside TikTok ads cost when you are comparing the boost's cost with the deals it carried, and beside TikTok retargeting when the same creator video is also a retargeting ad. Those need their own utm_campaign or content value, or they will inherit this flight's numbers.
If you want every creator link built from the same source and medium list, pre-register for Trakt. The workspace uses one taxonomy, so spark and social do not turn into a new spelling for each creator.
Questions
How do I track TikTok Spark Ads?
Authorize the creator's post, put UTM parameters on the ad destination with utm_medium=spark, and give the creator a second link for the bio with utm_medium=social. Use the same campaign and the same creator on both. Store those fields on the form, then compare won deals by medium.
How does a creator get a Spark Ads authorization code?
In the TikTok app they open the video, tap the three dots, then Ad settings, agree to the advertising terms, turn on Ad authorization, pick a duration (7, 30, 60, or 365 days), and copy the code. You paste it under Tools, Creative library, Spark ads posts, Apply for Authorization. TikTok documents this in its Spark Ads help article.
What UTM parameters should a Spark Ad use?
utm_source=tiktok, utm_medium=spark, a shared utm_campaign, and utm_content set to the creator handle or to TikTok's __CID__ macro. The bio link uses utm_medium=social and the handle typed out. Macros expand on the ad click only.
Why do Spark Ad leads show up as direct or organic search?
The click that converted was often not the ad click. Someone saw the post, then came back by typing the domain or searching the brand, or they opened a copy of the link in a DM. A tagged bio link covers the copies that keep the URL. A typed domain has no parameters to store. Why leads show as direct walks through that second case.
Do discount codes replace Spark Ads UTM links?
A code records a purchase that used the code. It misses a demo request, a form fill, and a deal that closes later without the code. UTM links on the ad and the bio put the creator on those leads. Use a code as an extra if you want one. Use the links if you need the pipeline.


