Skip to main content

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.

Video Walkthrough

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 universalutm_*, 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:

  • cidexternal_id
  • offer_idv1 (a custom variable)
  • costcost

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:

SlotStorage Column
External IDexternal_id (the click row's external_id field)
Costcost (overrides the link's cost_value if set)
Token 1v1 (custom variable 1)
Token 2v2 (custom variable 2)
Token 3v3
Token 4v4
Token 5v5
Token 6v6
Token 7v7
Token 8v8
Token 9v9
Token 10v10

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 cpc for 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:

  1. The system looks at the incoming URL's query parameters.
  2. If the URL contains a parameter matching Parameter, that value is stored.
  3. 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.
  4. If Placeholder is set (and isn't itself an unsubstituted macro), use Placeholder.
  5. Otherwise, leave the column null.

Worked Example: Google Ads source

Set up:

SlotParameterPlaceholder
External IDgclid(empty)
Costcost(empty)
Token 1gad_campaignid(empty)
Token 2gad_adgroupid(empty)
Token 3gad_keyword(empty)
Token 4gad_source(empty)
Token 5device(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:

ColumnValue
external_idIwAR1abc
cost0.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.

Each link has a Source field (in its main settings — see Links). When a click arrives:

  1. The system looks up the link.
  2. Reads the link's configured Source.
  3. Applies the Source's parameter mappings to the incoming URL.
  4. 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 Adsgclid, gad_source, gad_campaignid, gad_keyword, etc.
  • Meta (Facebook & Instagram)fbclid, ad_id, adset_id, campaign_id
  • TikTok Adsttclid, ad_id
  • Microsoft Ads (Bing)msclkid
  • LinkedIn Adsli_fat_id
  • X (Twitter) Adstwclid
  • Pinterest Adsepik
  • Reddit Adsrdt_cid
  • Snapchat AdsScCid
  • 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