Skip to main content

UTM Parameters

UTM parameters allow you to track the effectiveness of your marketing campaigns by tagging links with campaign information.

What are UTM Parameters?​

UTM (Urchin Tracking Module) parameters are query string parameters added to URLs to track traffic sources in analytics tools.

Example:

https://example.com/product?utm_source=instagram&utm_medium=social&utm_campaign=spring-sale

When a user clicks this link, your analytics know:

  • Traffic came from Instagram
  • It was a social media campaign
  • Part of the "spring-sale" campaign

The 5 UTM Parameters​

1. utm_source (Required)​

What: Identifies the traffic source (where the traffic comes from).

Examples:

  • instagram - Instagram
  • google - Google Search/Ads
  • newsletter - Email newsletter
  • facebook - Facebook
The API takes bare key names

When you send utmParameters to the API, the keys are source, medium, campaign, term and content — without the utm_ prefix. LinkForty adds the prefix when it builds the destination URL, so {"source": "instagram"} arrives at your page as ?utm_source=instagram.

Both spellings appear on this page for that reason: bare names when you are sending data, utm_-prefixed names when you are looking at a URL. Sending utm_source inside utmParameters does not error — the value is discarded and the link is created with no campaign tags.

Usage:

{
"utmParameters": {
"source": "instagram"
}
}

2. utm_medium (Required)​

What: Identifies the marketing medium (type of traffic).

Common Values:

  • social - Social media
  • email - Email marketing
  • cpc - Cost-per-click (paid ads)
  • organic - Organic search
  • referral - Referral traffic
  • display - Display advertising
  • affiliate - Affiliate marketing

Usage:

{
"utmParameters": {
"source": "instagram",
"medium": "social"
}
}

3. utm_campaign (Required)​

What: Identifies the specific campaign.

Examples:

  • spring-sale-2024 - Spring sale campaign
  • product-launch - Product launch
  • black-friday - Black Friday promotion
  • back-to-school - Back to school campaign

Usage:

{
"utmParameters": {
"source": "instagram",
"medium": "social",
"campaign": "spring-sale-2024"
}
}

4. utm_term (Optional)​

What: Identifies paid search keywords.

Use For:

  • Google Ads keywords
  • Bing Ads keywords
  • Paid search terms

Examples:

  • wireless+headphones - Keyword bid
  • running+shoes - Product keyword
  • best+phone - Search term

Usage:

{
"utmParameters": {
"source": "google",
"medium": "cpc",
"campaign": "product-ads",
"term": "wireless+headphones"
}
}

Note: Not useful for social media or email campaigns.

5. utm_content (Optional)​

What: Differentiates similar content or links within the same campaign.

Use For:

  • A/B testing ad variants
  • Multiple links in same email
  • Different creatives

Examples:

  • banner-ad vs text-ad
  • header-link vs footer-link
  • red-button vs blue-button
  • video-1 vs video-2

Usage:

{
"utmParameters": {
"source": "facebook",
"medium": "cpc",
"campaign": "summer-2024",
"content": "carousel-ad-1"
}
}

UTM Best Practices​

1. Use Consistent Naming​

Good - Consistent:

utm_source=instagram
utm_source=facebook
utm_source=twitter

Bad - Inconsistent:

utm_source=Instagram
utm_source=FB
utm_source=twitter.com

Rules:

  • Always lowercase
  • Use hyphens instead of spaces
  • Be specific but concise
  • Don't use special characters

2. Create a Naming Convention​

Document your UTM structure:

// UTM Naming Convention
const UTM_CONVENTION = {
source: {
format: 'platform-name',
examples: ['instagram', 'facebook', 'google', 'newsletter']
},
medium: {
format: 'channel-type',
examples: ['social', 'email', 'cpc', 'organic', 'referral']
},
campaign: {
format: 'campaign-name-year',
examples: ['spring-sale-2024', 'product-launch-q1', 'black-friday-2024']
},
term: {
format: 'keyword-phrase',
examples: ['wireless+headphones', 'running+shoes']
},
content: {
format: 'variant-identifier',
examples: ['carousel-ad-1', 'video-ad-2', 'banner-top']
}
};

3. Source Examples by Platform​

Platformutm_sourceutm_medium
Instagraminstagramsocial
Facebookfacebooksocial or cpc
Twittertwittersocial
TikToktiktoksocial
LinkedInlinkedinsocial or cpc
YouTubeyoutubevideo or cpc
Google Adsgooglecpc
Google Organicgoogleorganic
Email Newsletternewsletteremail
Mailchimpmailchimpemail
SMS Campaignsmssms
QR Codeqr-codeoffline
Referralreferralreferral

4. Campaign Examples​

E-commerce:

{
"utm_source": "instagram",
"utm_medium": "social",
"utm_campaign": "spring-sale-2024",
"utm_content": "story-swipe-up"
}

SaaS Product Launch:

{
"utm_source": "producthunt",
"utm_medium": "referral",
"utm_campaign": "product-launch-v2",
"utm_content": "launch-day"
}

Content Marketing:

{
"utm_source": "blog",
"utm_medium": "content",
"utm_campaign": "seo-growth-2024",
"utm_content": "ultimate-guide-cta"
}

Paid Search:

{
"utm_source": "google",
"utm_medium": "cpc",
"utm_campaign": "brand-keywords",
"utm_term": "linkforty+alternative",
"utm_content": "text-ad-1"
}

Email Campaign:

{
"utm_source": "newsletter",
"utm_medium": "email",
"utm_campaign": "weekly-digest-23",
"utm_content": "hero-cta"
}

Via Dashboard​

When creating a link:

  1. Fill in basic link details
  2. Scroll to "UTM Parameters" section
  3. Fill in fields:
    • Source: instagram
    • Medium: social
    • Campaign: spring-sale-2024
    • Content: story-1
  4. Click "Create Link"

Result: Parameters automatically appended to all URLs (original, iOS, Android, web).

Via API​

curl -X POST https://api.linkforty.com/api/links \
-H "Authorization: Bearer $LINKFORTY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"templateId": "template_123",
"originalUrl": "https://example.com/product/123",
"utmParameters": {
"source": "instagram",
"medium": "social",
"campaign": "spring-sale-2024",
"content": "carousel-ad-1"
}
}'

How It Works:

LinkForty appends UTM parameters to your destination URLs:

Original URL:

https://example.com/product/123

With UTM Parameters:

https://example.com/product/123?utm_source=instagram&utm_medium=social&utm_campaign=spring-sale-2024&utm_content=carousel-ad-1

Set default UTM parameters in templates:

curl -X POST https://api.linkforty.com/api/templates \
-H "Authorization: Bearer $LINKFORTY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "Instagram Campaign",
"iosUrl": "https://apps.apple.com/app/id123",
"androidUrl": "https://play.google.com/store/apps/details?id=com.app",
"utmParameters": {
"medium": "social",
"source": "instagram"
}
}'

Then create links from template:

curl -X POST https://api.linkforty.com/api/links \
-H "Authorization: Bearer $LINKFORTY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"templateId": "template_instagram",
"originalUrl": "https://example.com/product/123",
"utmParameters": {
"campaign": "spring-sale-2024",
"content": "story-1"
}
}'

Result: Inherits utm_medium=social and utm_source=instagram from template, adds campaign and content.

Tracking UTM Parameters​

For performance across a whole campaign — short-link clicks and site sessions together — see the Campaigns tab.

For one link at a time:

  1. Go to Analytics → Links
  2. Select your link
  3. View "Campaign Performance" section
  4. See breakdown by:
    • Source
    • Medium
    • Campaign
    • Content

Example:

Campaign: spring-sale-2024
├─ Source: instagram (450 clicks, 78 installs)
├─ Source: facebook (320 clicks, 52 installs)
└─ Source: twitter (180 clicks, 24 installs)
UTM names are reserved

utm_source, utm_medium, utm_campaign, utm_term and utm_content are consumed by LinkForty for campaign reporting and never reach your app under those names.

To send a value to the app, use any other name — ?slug=titanic arrives in customParameters. See URL Parameter Passthrough.

UTM parameters reach the SDK under utmParameters, separately from your own values:

const deepLinkData = await LinkForty.getInstallData();

console.log(deepLinkData);
// {
// utmParameters: {
// source: "instagram",
// medium: "social",
// campaign: "spring-sale-2024",
// content: "story-1"
// },
// customParameters: {
// productId: "123"
// }
// }

// Track where user came from
if (deepLinkData.utm_source === 'instagram') {
showInstagramSpecialOffer();
}

Via API​

curl https://api.linkforty.com/api/analytics/links/abc123 \
-H "Authorization: Bearer $LINKFORTY_API_KEY"

Response:

{
"linkId": "abc123",
"totalClicks": 950,
"utmBreakdown": {
"source": {
"instagram": 450,
"facebook": 320,
"twitter": 180
},
"medium": {
"social": 950
},
"campaign": {
"spring-sale-2024": 950
},
"content": {
"story-1": 450,
"post-1": 320,
"tweet-1": 180
}
}
}

Advanced UTM Strategies​

1. Multi-Channel Campaigns​

Track same campaign across multiple channels:

Instagram:

{
"utm_source": "instagram",
"utm_medium": "social",
"utm_campaign": "product-launch-2024",
"utm_content": "story-1"
}

Facebook:

{
"utm_source": "facebook",
"utm_medium": "social",
"utm_campaign": "product-launch-2024",
"utm_content": "feed-ad-1"
}

Email:

{
"utm_source": "newsletter",
"utm_medium": "email",
"utm_campaign": "product-launch-2024",
"utm_content": "header-cta"
}

Result: See which channel drives most conversions for same campaign.

2. A/B Testing with utm_content​

Test different creatives:

Variant A:

{
"utm_source": "facebook",
"utm_medium": "cpc",
"utm_campaign": "summer-2024",
"utm_content": "video-ad-a"
}

Variant B:

{
"utm_source": "facebook",
"utm_medium": "cpc",
"utm_campaign": "summer-2024",
"utm_content": "carousel-ad-b"
}

Analysis:

Video Ad A: 500 clicks, 85 installs (17% CVR)
Carousel Ad B: 500 clicks, 120 installs (24% CVR)
→ Winner: Carousel Ad B

3. Funnel Tracking​

Track user journey with different utm_content:

Top of Funnel (Awareness):

{
"utm_campaign": "brand-awareness-2024",
"utm_content": "blog-post-cta"
}

Middle of Funnel (Consideration):

{
"utm_campaign": "brand-awareness-2024",
"utm_content": "case-study-download"
}

Bottom of Funnel (Conversion):

{
"utm_campaign": "brand-awareness-2024",
"utm_content": "free-trial-cta"
}

4. Influencer Tracking​

Track individual influencers:

{
"utm_source": "instagram",
"utm_medium": "influencer",
"utm_campaign": "influencer-q1-2024",
"utm_content": "influencer-johndoe"
}

Analytics:

johndoe: 1,200 clicks, 180 installs (15% conversion)
janedoe: 800 clicks, 160 installs (20% conversion)
→ janedoe has better conversion rate

5. Geographic Campaigns​

Track by region:

{
"utm_source": "facebook",
"utm_medium": "cpc",
"utm_campaign": "us-launch-2024",
"utm_content": "us-west-coast"
}
{
"utm_source": "facebook",
"utm_medium": "cpc",
"utm_campaign": "us-launch-2024",
"utm_content": "us-east-coast"
}

Common Mistakes to Avoid​

1. Inconsistent Capitalization​

Bad:

utm_source=Instagram
utm_source=instagram
utm_source=INSTAGRAM

Good:

utm_source=instagram (always)

2. Using Spaces​

Bad:

utm_campaign=spring sale 2024

Good:

utm_campaign=spring-sale-2024

3. Too Many Variations​

Bad:

utm_source=ig
utm_source=insta
utm_source=instagram
utm_source=instagram-stories

Good:

utm_source=instagram (always)
utm_content=story (to differentiate)

4. Missing Required Parameters​

Bad:

{
"utm_campaign": "spring-2024"
}

Good:

{
"utm_source": "instagram",
"utm_medium": "social",
"utm_campaign": "spring-2024"
}

5. Using Personal Information​

Bad:

Good:

utm_content=email-variant-a

Why: UTM parameters appear in URLs (visible to users) and analytics (possibly shared).

UTM Parameter Tools​

URL Builder​

Use LinkForty's built-in URL builder:

function buildUTMUrl(baseUrl, utmParams) {
const url = new URL(baseUrl);

Object.entries(utmParams).forEach(([key, value]) => {
if (value) {
url.searchParams.set(key, value);
}
});

return url.toString();
}

const url = buildUTMUrl('https://example.com/product', {
utm_source: 'instagram',
utm_medium: 'social',
utm_campaign: 'spring-2024'
});
// https://example.com/product?utm_source=instagram&utm_medium=social&utm_campaign=spring-2024

Campaign URL Spreadsheet​

Create a spreadsheet to track all campaigns:

CampaignSourceMediumContentLink
spring-2024instagramsocialstory-1lnk.forty.com/abc123
spring-2024facebooksocialfeed-1lnk.forty.com/def456
spring-2024newsletteremailheaderlnk.forty.com/ghi789

Integration with Analytics Tools​

Google Analytics​

UTM parameters appear automatically in:

  • Acquisition → All Traffic → Source/Medium
  • Acquisition → Campaigns → All Campaigns

Custom Analytics​

Parse UTM parameters in your app:

const url = new URL(window.location.href);
const utmParams = {
source: url.searchParams.get('utm_source'),
medium: url.searchParams.get('utm_medium'),
campaign: url.searchParams.get('utm_campaign'),
term: url.searchParams.get('utm_term'),
content: url.searchParams.get('utm_content')
};

// Send to your analytics
analytics.track('Page View', utmParams);

Next Steps​

Further Reading​