Sources
A Source tells the system where a click came from and what URL parameters to extract from it. Every ad platform sends clicks with different URL parameter shapes (Google Ads uses gclid, Meta uses fbclid, TikTok uses ttclid, your own affiliate network uses something else). Sources let you teach the system how to read each one without hard-coding.
This is the page where the question "what is Token 1 vs Token 2 vs Placeholder?" gets answered in detail.
Watch: Setting Up Traffic Sources — 0:00–6:00 (video coming soon)
Why Sources Matter
When a visitor clicks a tracked link, the URL might look like this:
https://click.yourdomain.com/c/promo
?utm_source=facebook
&fbclid=IwAR1abc...
&cid=12345
&offer_id=678
&cost=0.45
Some of these are universal — utm_*, gclid, fbclid, etc. — and the system captures them automatically. But cid, offer_id, and cost are platform-specific. The system has no idea what they mean unless you tell it.
A Source does that. It maps incoming URL parameters to the click record's columns:
cid→external_idoffer_id→v1(a custom variable)cost→cost
Once mapped, those values appear in the Click Log, in Reports, and are available as filters and rule criteria.
The Source List
Open Click Tracking → Sources to see all your configured sources.
Each row shows:
- Name — your label for this source
- Group — optional category
- Parameter Mappings — count of mappings configured
- Active — enable/disable toggle
Click a source to edit it.
Source Fields
Name
Human-readable label.
Example: Google Ads, Meta Ads, TikTok Ads, Internal Affiliate Tracker.
Group
Optional category.
Example: Paid Search, Paid Social, Affiliate Networks.
Tags
Optional keyword tags.
Track Revenue
When enabled, revenue from conversions tied to clicks of this source is rolled up in revenue reports for the source.
Source Templates
For known platforms (Google Ads, Meta, etc.), the system includes pre-built templates with the standard parameter mappings already configured. When you create a new source, you can pick a template to start with — saves you from looking up gclid etc. yourself.
You can still customize after picking a template.
Parameter Mappings
This is the core of a source. A mapping says: "when the incoming URL has parameter X, extract its value and store it in click column Y."
There are 12 mapping slots per source:
| Slot | Storage Column |
|---|---|
| External ID | external_id (the click row's external_id field) |
| Cost | cost (overrides the link's cost_value if set) |
| Token 1 | v1 (custom variable 1) |
| Token 2 | v2 (custom variable 2) |
| Token 3 | v3 |
| Token 4 | v4 |
| Token 5 | v5 |
| Token 6 | v6 |
| Token 7 | v7 |
| Token 8 | v8 |
| Token 9 | v9 |
| Token 10 | v10 |
Each slot has two configurable fields:
Parameter
The URL query parameter name to read from the incoming URL. Whatever the ad platform calls it.
Examples:
- Google Ads:
gclid,gad_source,gad_campaignid,gbraid - Meta:
fbclid,ad_id,adset_id,campaign_id - TikTok:
ttclid,ad_id - Custom affiliate:
aff_id,sub1,sub2,cid
Placeholder
A literal default value to use when the parameter isn't present in the URL. Useful for static identifiers — "this source ALWAYS represents traffic_type=cpc".
Examples:
- Set Placeholder to
cpcfor a Token. Every click via this source will have that Token =cpc, even if the ad platform doesn't send a parameter. - Leave Placeholder empty to mean "no default — leave the column null if the parameter isn't sent."
How Resolution Works
For each mapping slot:
- The system looks at the incoming URL's query parameters.
- If the URL contains a parameter matching
Parameter, that value is stored. - Macro detection: if the value looks like an unsubstituted ad-platform macro (e.g.
{{ad.id}},{gclid},__CAMPAIGN_ID__), it's treated as missing — the ad platform failed to substitute it. Falls through to step 4. - If
Placeholderis set (and isn't itself an unsubstituted macro), usePlaceholder. - Otherwise, leave the column null.
Worked Example: Google Ads source
Set up:
| Slot | Parameter | Placeholder |
|---|---|---|
| External ID | gclid | (empty) |
| Cost | cost | (empty) |
| Token 1 | gad_campaignid | (empty) |
| Token 2 | gad_adgroupid | (empty) |
| Token 3 | gad_keyword | (empty) |
| Token 4 | gad_source | (empty) |
| Token 5 | device | (empty) |
Visitor URL:
https://click.yourdomain.com/c/promo
?gclid=IwAR1abc
&gad_campaignid=12345
&gad_keyword=spring%20sale
&device=mobile
&cost=0.45
Click row gets:
| Column | Value |
|---|---|
external_id | IwAR1abc |
cost | 0.45 |
v1 (Token 1) | 12345 |
v2 (Token 2) | (null — not sent) |
v3 (Token 3) | spring sale |
v4 (Token 4) | (null) |
v5 (Token 5) | mobile |
Now you can filter the click log by v3 contains "spring" to see all clicks from that keyword. Reports can group by v1 to see performance per campaign ID. The cost column drives ROI calculations.
What Token 1-10 Are For
Tokens 1-10 are generic free-form storage slots. Use them however you want. The system doesn't care what's inside — it just stores them and lets you filter, group, and report on them.
Common patterns:
- Token 1 = campaign_id (track ROI per campaign)
- Token 2 = ad_id (track which creative wins)
- Token 3 = keyword (search-term reports)
- Token 4 = placement_id (which website your ad ran on)
- Token 5 = device_type as reported by the platform (their classification, not ours)
The mental model: pick a column purpose for each Token, set it consistently across all your sources, and reports stay coherent. If Token 1 means "campaign_id" in Google Ads but "ad_set_id" in Meta, your reports get confusing fast.
Why External ID and Cost Are Special
External ID is the dedicated column for the platform's identifier for this click. Most platforms have one (gclid, fbclid, ttclid, your network's cid). Mapping it to external_id (instead of a generic Token) lets the conversion-tracking and postback systems use it for two-way attribution. When a conversion happens, the postback can include {external_id} to tell the ad platform which click converted.
Cost is the dedicated column for per-click cost. It overrides the link's static cost_value when set. Use this when your ad platform sends actual cost data (not all do). Drives ROI/ROAS reports.
Source Selection on a Link
Each link has a Source field (in its main settings — see Links). When a click arrives:
- The system looks up the link.
- Reads the link's configured Source.
- Applies the Source's parameter mappings to the incoming URL.
- Stores the resolved values on the click row.
A link with no Source still captures universal parameters (UTMs, gclid/fbclid/etc. via auto-detection) but no Token columns get populated.
Source Templates
The system includes pre-built templates for major platforms:
- Google Ads —
gclid,gad_source,gad_campaignid,gad_keyword, etc. - Meta (Facebook & Instagram) —
fbclid,ad_id,adset_id,campaign_id - TikTok Ads —
ttclid,ad_id - Microsoft Ads (Bing) —
msclkid - LinkedIn Ads —
li_fat_id - X (Twitter) Ads —
twclid - Pinterest Ads —
epik - Reddit Ads —
rdt_cid - Snapchat Ads —
ScCid - Affiliate / Custom — generic mapping starter
When creating a new Source, click Use Template to pre-fill the mappings. You can edit afterward.
Next Steps
- Links — Assign a source to a link
- Click Log — See the resolved values (
external_id,v1-v10,cost) per click - Reports — Group by source or by any Token to compare performance
- URL Tokens Reference — Use Token values in destination URLs