Back to Blog
Lead SellersAnalytics & Attribution·13 min read·

UTMs, GCLIDs & GA4: Closing the Revenue Loop

You're running Google Ads, Facebook, and LinkedIn — but which campaign generated your last $50K deal? Without UTM parameters and GCLID tracking, you're optimizing for clicks and leads, not revenue. Here's how to close the loop from click to closed deal.

TL;DR

You're running ads, but you don't know which campaigns drive revenue (just leads). UTM parameters (source, medium, campaign, term, content) tag every URL so GA4 knows where traffic came from. GCLID (Google Click ID) ties leads back to specific ad clicks for offline conversion tracking. This post covers: the 5 UTM parameters and naming best practices (lowercase, underscores, consistency), auto-tagging in Google Ads (GCLID), capturing GCLID in CRM (hidden form fields, Zapier, server-side), Final URL suffix for account-level UTM append, GA4 lead reports setup (generate_lead event, traffic acquisition, conversions), offline conversion imports back to Google Ads, and pipeline reporting (campaign → clicks → leads → cost → revenue → ROI).

You're spending $10,000/month on Google Ads, Facebook Ads, and LinkedIn Ads.

You know: How many clicks you got | How many leads you captured | How much you spent

You DON'T know:

  • Which campaign generated your $50,000 deal last month
  • Whether LinkedIn is actually profitable (or just generating junk leads)
  • If your Facebook ads are driving revenue or just form fills that never close

The problem: You're tracking clicks and leads, not revenue.

The fix: Close the loop with UTM parameters, GCLID tracking, and offline conversion uploads.


What Are UTM Parameters?

UTM parameters = Tags you add to URLs to track where traffic came from.

Without UTMs:

https://yourwebsite.com/landing-page

With UTMs:

https://yourwebsite.com/landing-page?utm_source=google&utm_medium=cpc&utm_campaign=roofing_phoenix&utm_term=roof%20repair&utm_content=ad_variant_A

When someone clicks this URL, GA4 captures the UTM parameters and knows:

  • Source: google (where traffic came from)
  • Medium: cpc (the marketing channel: paid search)
  • Campaign: roofing_phoenix (which campaign)
  • Term: roof repair (which keyword)
  • Content: ad_variant_A (which ad variation)

Now you can report: "The 'roofing_phoenix' campaign generated 50 clicks, 10 leads, and 2 closed deals worth $16,000."


The 5 UTM Parameters

ParameterWhat It TracksRequired?Example Values
utm_sourceTraffic source (platform)✅ Yesgoogle, facebook, linkedin, newsletter
utm_mediumMarketing medium (channel)✅ Yescpc, social, email, referral, organic
utm_campaignCampaign name✅ Yesroofing_phoenix, q4_promo, brand_awareness
utm_termKeyword (for paid search)⚪ Optionalroof repair Phoenix, HVAC installation
utm_contentAd variation or A/B test⚪ Optionalad_variant_A, banner_top, link_footer

Parameter #1: utm_source (Where)

What it tracks: Where the traffic originated (the platform or website).

Examples:

  • google (Google Ads, organic search)
  • facebook (Facebook Ads, organic posts)
  • linkedin (LinkedIn Ads, organic posts)
  • newsletter (your email newsletter)
  • partner_site (referral from a partner website)

Naming conventions: Use lowercase (google, not Google). Be consistent — don't mix "google" and "Google_Ads."


Parameter #2: utm_medium (How)

What it tracks: The marketing channel or method.

Examples:

  • cpc (cost-per-click, paid ads)
  • social (organic social media)
  • email (email campaigns)
  • referral (traffic from another website)
  • organic (organic search)
  • display (display ads, banners)
  • affiliate (affiliate links)

Use standard GA4 values when possible (cpc, organic, referral, social, email). Be consistent.


Parameter #3: utm_campaign (What)

What it tracks: The specific campaign or promotion.

Examples:

  • roofing_phoenix_q4_2025
  • hvac_summer_sale
  • brand_awareness_jan
  • lead_magnet_ebook

Naming conventions: Be descriptive (roofing_phoenix, not campaign1). Use underscores or hyphens (no spaces). Include date or version if relevant.


Parameter #4: utm_term (Which Keyword) — Optional

What it tracks: The keyword that triggered your ad (for paid search).

Examples:

  • roof repair Phoenix
  • HVAC installation
  • emergency plumber

Note: Google Ads auto-populates utm_term if you enable auto-tagging (via GCLID). You usually don't need to add it manually for Google Ads.


Parameter #5: utm_content (Which Variation) — Optional

What it tracks: The specific ad variation, link, or A/B test.

Examples:

  • ad_variant_A (testing different ad copy)
  • banner_top (top banner vs. sidebar)
  • button_blue (blue CTA vs. red)
  • link_footer (footer link vs. header link)

UTM Naming Best Practices

✅ Do:

  1. Use lowercase (google, not Google)
  2. Use underscores or hyphens (roofing_phoenix or roofing-phoenix, not roofing phoenix)
  3. Be consistent (always "facebook" — never "fb" or "Facebook")
  4. Be descriptive (roofing_phoenix_q4, not campaign1)
  5. Maintain a UTM naming convention doc shared with your team

❌ Don't:

  1. Use spaces (roofing phoenix = broken URL)
  2. Use special characters (avoid &, %, =, etc.)
  3. Mix cases (google vs. Google vs. GOOGLE = 3 different sources in GA4)
  4. Use PII (personally identifiable information like names, emails)

How to Build UTM URLs

Tool method (recommended): Use Google's Campaign URL Builder: https://ga-dev-tools.google/campaign-url-builder/

Manual method:

https://yourwebsite.com/landing-page?utm_source=google&utm_medium=cpc&utm_campaign=roofing_phoenix

Generated URL with all parameters:

https://yourwebsite.com/landing-page?utm_source=google&utm_medium=cpc&utm_campaign=roofing_phoenix&utm_term=roof%20repair%20Phoenix&utm_content=ad_variant_A

GCLID: Google's Auto-Tagging for Attribution

GCLID (Google Click ID) = A unique identifier Google Ads adds to URLs when someone clicks your ad.

Example URL with GCLID:

https://yourwebsite.com/landing-page?gclid=ABC123XYZ456

Why GCLID matters:

  • Ties the click back to the specific ad, keyword, and campaign
  • Enables offline conversion tracking (upload closed deals back to Google Ads)
  • Works even if UTM parameters are stripped or missing

How to enable GCLID (auto-tagging):

  1. Go to Google Ads → Settings → Account settings
  2. Find "Auto-tagging"
  3. Turn it ON

Now every Google Ads click will have ?gclid=... appended automatically.


Capturing GCLID in Your CRM

Why you need GCLID in your CRM: To upload offline conversions back to Google Ads so Google knows which clicks led to revenue, not just leads.

Option A: Hidden Form Field

<input type="hidden" name="gclid" id="gclid">

<script>
  var urlParams = new URLSearchParams(window.location.search);
  var gclid = urlParams.get('gclid');
  if (gclid) {
    document.getElementById('gclid').value = gclid;
  }
</script>

Most form tools (Unbounce, Typeform, Gravity Forms) support dynamic parameters.

Option B: Zapier/Make.com

  1. Trigger: New form submission
  2. Action: Create lead in CRM (HubSpot, Salesforce, Airtable)
  3. Map the gclid field from the form to a custom CRM property

Option C: Server-Side Tracking (Cookie)

// When user lands on page, save GCLID to cookie
var urlParams = new URLSearchParams(window.location.search);
var gclid = urlParams.get('gclid');
if (gclid) {
  document.cookie = "gclid=" + gclid + "; path=/; max-age=7776000"; // 90 days
}

// On form submission, retrieve GCLID from cookie and include in form data

Final URL Suffix (Append UTMs to All Ads Automatically)

Problem: Manually adding UTMs to every ad URL is tedious and error-prone.

Solution: Use Final URL Suffix in Google Ads to append UTMs automatically.

Go to: Google Ads → Settings → Account settings → Tracking → Final URL Suffix

Add:

?utm_source=google&utm_medium=cpc&utm_campaign={campaignid}&utm_term={keyword}

Google Ads automatically replaces {campaignid} and {keyword} with real values. Your ads now have UTMs without manual tagging.


Setting Up GA4 to Track Leads and Revenue

Step 1: Create a "generate_lead" Conversion Event

Go to: GA4 → Admin → Events → Create Event

gtag('event', 'generate_lead', {
  'currency': 'USD',
  'value': 100.00  // Optional: estimated lead value
});

Step 2: Mark as Conversion

Go to: GA4 → Admin → Conversions → New conversion event → Add generate_lead

Step 3: View Lead Reports

Go to: GA4 → Reports → Acquisition → Traffic acquisition

See which campaigns drove leads (generate_lead conversions), cost per lead, and conversion rate by source/medium.

Step 4: Import Offline Conversions (Closed Deals)

Option A: Manual CSV import

  • Export closed deals from CRM with GCLID, revenue, close date
  • Import to GA4 (Admin → Data Import)

Option B: API (advanced)

  • Use GA4 Measurement Protocol API to send offline conversion data programmatically

Offline Conversion Workflow (Full Loop)

  1. User clicks your Google Ad → Google appends ?gclid=ABC123 to the URL
  2. User lands on landing page → Hidden form field captures GCLID
  3. User submits form → CRM stores: Name, Phone, Email, GCLID
  4. Sales team works the lead → Lead is qualified, quoted
  5. Lead closes → CRM marks as "Closed-Won" with revenue amount
  6. Upload offline conversion → Export GCLID + close date + revenue → Upload to Google Ads

Google Ads now knows: GCLID ABC123 = keyword "roof repair Phoenix" = $8,500 revenue

Google's Smart Bidding optimizes for revenue-generating keywords, not just lead-generating keywords.


Pipeline Reporting (Campaign → Revenue → ROI)

MetricExample
Campaignroofing_phoenix
Clicks500
Cost$5,000
Leads50 (10% conversion rate)
Cost per Lead$100
Closed Deals5 (10% close rate)
Revenue$40,000 (avg. $8,000/job)
Profit$35,000
ROAS8:1 ($40K / $5K)
ROI700%

Without UTM/GCLID: You only know clicks and leads. With UTM/GCLID: You know which campaigns drive revenue and ROI.


Real-World Example: SaaS Company — LinkedIn vs. Facebook

Month 1 (No UTM Tracking): $5K total spend, 100 leads, $50K revenue. They know the totals — but not which platform generated the $50K.

Month 2 (With UTM Tracking):

LinkedIn (?utm_source=linkedin&utm_medium=cpc&utm_campaign=b2b_saas_q4)

  • Spend: $3,000 | Leads: 30 | Closed: 6 | Revenue: $48,500 | ROAS: 16.2:1

Facebook (?utm_source=facebook&utm_medium=cpc&utm_campaign=b2b_saas_q4)

  • Spend: $2,000 | Leads: 70 | Closed: 2 | Revenue: $2,500 | ROAS: 1.25:1

Insight: LinkedIn generates fewer leads but 19x more revenue per dollar spent.

Action: Cut Facebook from $2K → $500. Increase LinkedIn from $3K → $5K.

Month 3: $81,250 revenue (vs. $50K before) — 62% revenue increase by reallocating budget based on UTM data.


Common UTM Mistakes

Mistake #1: Inconsistent naming ❌ Using "google," "Google," and "Google_Ads" in different campaigns ✅ Pick one (google) and stick with it

Mistake #2: No UTMs on email campaigns ❌ Emails without UTMs (you can't track performance in GA4) ✅ Add ?utm_source=newsletter&utm_medium=email&utm_campaign=weekly_digest

Mistake #3: Spaces in UTM values ❌ utm_campaign=roofing phoenix (breaks URL) ✅ utm_campaign=roofing_phoenix

Mistake #4: Not capturing GCLID in CRM ❌ Google Ads conversions tracked, but no offline conversions uploaded ✅ Capture GCLID, upload closed deals back to Google Ads

Mistake #5: Only tracking leads (not revenue) ❌ Only tracking form fills in GA4 ✅ Import offline conversion data (closed deals + revenue)


The Bottom Line

UTMs and GCLID close the revenue loop.

Without them: You only know clicks and leads. With them: You know which campaigns drive revenue and ROI.

Set up the loop:

  1. Use the 5 UTM parameters (source, medium, campaign, term, content)
  2. Follow naming conventions (lowercase, underscores, consistency)
  3. Enable auto-tagging in Google Ads (GCLID)
  4. Capture GCLID in your CRM (hidden form field)
  5. Upload offline conversions back to Google Ads (closed deals + revenue)
  6. Set up GA4 to track leads and revenue
  7. Build pipeline reports (campaign → leads → cost → revenue → ROI)

Optimize for revenue, not just lead volume. Your ROAS will skyrocket.

Ready to Start Selling Leads?

Launch your first campaign in under 15 minutes. Try Growth free for 14 days.

Start Selling Leads →

Related Articles