Atribu
Concepts

Channel Classification

How traffic sources are automatically classified into marketing channels

Channel Classification

Atribu automatically classifies every visit into a marketing channel based on UTM parameters, referrer URL, and click IDs. This classification drives the Traffic Sources breakdown in your dashboard and the channel dimension in API responses.


Default channels

Paid Social

Meta, TikTok, and other social ads detected by click IDs or paid UTM parameters

Organic Social

Unpaid traffic from social platforms like Facebook, Instagram, X, LinkedIn

Paid Search

Google Ads, Microsoft Ads, and other search ads detected by click IDs or paid UTMs

Organic Search

Unpaid search engine traffic from Google, Bing, Yahoo, DuckDuckGo

Email

Traffic from email campaigns identified by utm_medium

Referral

Inbound traffic from other websites (not search or social)

Direct

No referrer, no UTMs, no click IDs -- typed URL or bookmark

Display

Banner and display ad traffic identified by utm_medium

Affiliate

Affiliate partner traffic identified by utm_medium


Classification rules

ChannelDetection logic
Paid Socialfbclid or ttclid present, OR utm_medium contains paid, cpc, or ppc with a social source
Organic SocialReferrer from a social platform (facebook.com, instagram.com, twitter.com, linkedin.com, etc.) without paid indicators
Paid Searchgclid or msclkid present, OR utm_medium is cpc/ppc with a search engine source
Organic SearchReferrer from a search engine (google, bing, yahoo, duckduckgo, baidu, etc.)
Emailutm_medium is email
ReferralHas a referrer that is not a known search engine or social platform
DirectNo referrer, no UTM parameters, no click IDs
Displayutm_medium is display, banner, or cpm
Affiliateutm_medium is affiliate

Classification priority

Click IDs take precedence over UTM parameters. If a visit has fbclid in the URL, it is classified as Paid Social regardless of what utm_medium says. This prevents misclassification when UTM tags are missing or incorrect.


Click ID detection

Click IDs are automatically appended to URLs by ad platforms. Atribu detects them to identify paid traffic even when UTM parameters are missing.

Click IDPlatformChannel
fbclidMeta (Facebook / Instagram)Paid Social
gclidGoogle AdsPaid Search
msclkidMicrosoft Advertising (Bing)Paid Search
ttclidTikTok AdsPaid Social

Always use UTMs alongside click IDs

Click IDs identify the platform but not the specific campaign. For full attribution down to the ad level, always include utm_campaign, utm_source, utm_medium, and utm_content in your ad URLs.


Using channels in the API

Channel breakdown

Get visitor and revenue distribution across all channels:

Request
curl -H "Authorization: Bearer atb_live_YOUR_KEY" \
  "https://www.atribu.app/api/v1/breakdowns?date_from=2026-03-01&date_to=2026-03-25&dimensions=channel"
Request
const response = await fetch(
  "https://www.atribu.app/api/v1/breakdowns?date_from=2026-03-01&date_to=2026-03-25&dimensions=channel",
  {
    headers: {
      Authorization: "Bearer atb_live_YOUR_KEY",
    },
  }
);
const data = await response.json();
Request
import requests

resp = requests.get(
    "https://www.atribu.app/api/v1/breakdowns",
    headers={"Authorization": "Bearer atb_live_YOUR_KEY"},
    params={
        "date_from": "2026-03-01",
        "date_to": "2026-03-25",
        "dimensions": "channel",
    },
)
data = resp.json()
Response
{
  "data": {
    "channel": [
      { "value": "Paid Social", "visitors": 3200, "sessions": 4100, "pageviews": 9800, "bounce_rate": 38.2 },
      { "value": "Organic Search", "visitors": 2800, "sessions": 3400, "pageviews": 8200, "bounce_rate": 45.1 },
      { "value": "Direct", "visitors": 1500, "sessions": 1800, "pageviews": 4200, "bounce_rate": 52.3 }
    ]
  }
}

Filtering by channel

Filter any endpoint to a specific channel using the filter[channel] parameter:

Request
curl -H "Authorization: Bearer atb_live_YOUR_KEY" \
  "https://www.atribu.app/api/v1/overview?date_from=2026-03-01&date_to=2026-03-25&filter[channel]=is:Paid+Social"
Request
const response = await fetch(
  "https://www.atribu.app/api/v1/overview?" + new URLSearchParams({
    date_from: "2026-03-01",
    date_to: "2026-03-25",
    "filter[channel]": "is:Paid Social",
  }),
  {
    headers: {
      Authorization: "Bearer atb_live_YOUR_KEY",
    },
  }
);
const data = await response.json();
Request
import requests

resp = requests.get(
    "https://www.atribu.app/api/v1/overview",
    headers={"Authorization": "Bearer atb_live_YOUR_KEY"},
    params={
        "date_from": "2026-03-01",
        "date_to": "2026-03-25",
        "filter[channel]": "is:Paid Social",
    },
)
data = resp.json()

Filter syntax

Channel filters use the is: prefix followed by the exact channel name. Channel names are case-sensitive. Use + or %20 for spaces in URLs.

On this page