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- Instagramgoogle- Google Search/Adsnewsletter- Email newsletterfacebook- Facebook
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 mediaemail- Email marketingcpc- Cost-per-click (paid ads)organic- Organic searchreferral- Referral trafficdisplay- Display advertisingaffiliate- Affiliate marketing
Usage:
{
"utmParameters": {
"source": "instagram",
"medium": "social"
}
}
3. utm_campaign (Required)
What: Identifies the specific campaign.
Examples:
spring-sale-2024- Spring sale campaignproduct-launch- Product launchblack-friday- Black Friday promotionback-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 bidrunning+shoes- Product keywordbest+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-advstext-adheader-linkvsfooter-linkred-buttonvsblue-buttonvideo-1vsvideo-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
| Platform | utm_source | utm_medium |
|---|---|---|
| social | ||
| social or cpc | ||
| social | ||
| TikTok | tiktok | social |
| social or cpc | ||
| YouTube | youtube | video or cpc |
| Google Ads | cpc | |
| Google Organic | organic | |
| Email Newsletter | newsletter | |
| Mailchimp | mailchimp | |
| SMS Campaign | sms | sms |
| QR Code | qr-code | offline |
| Referral | referral | referral |
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"
}
Adding UTM Parameters to Links
Via Dashboard
When creating a link:
- Fill in basic link details
- Scroll to "UTM Parameters" section
- Fill in fields:
- Source:
instagram - Medium:
social - Campaign:
spring-sale-2024 - Content:
story-1
- Source:
- 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
Via Link Templates
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
In Link Analytics
For performance across a whole campaign — short-link clicks and site sessions together — see the Campaigns tab.
For one link at a time:
- Go to Analytics → Links
- Select your link
- View "Campaign Performance" section
- 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)
In Deep Link Data
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:
| Campaign | Source | Medium | Content | Link |
|---|---|---|---|---|
| spring-2024 | social | story-1 | lnk.forty.com/abc123 | |
| spring-2024 | social | feed-1 | lnk.forty.com/def456 | |
| spring-2024 | newsletter | header | lnk.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
- Creating Links - Add UTM parameters to links
- Analytics - View UTM performance
- Link Templates - Set default UTM parameters
- API Reference - UTM parameter API