skip to content
san.is
Table of Contents

Marketing teams love custom UTM structures. They track campaigns with precision: utm_source=linkedin-sponsored, utm_medium=social-paid-q1, utm_campaign=webinar-ai-future-2025.

Then they implement HubSpot and discover their beautiful UTM taxonomy doesn’t map to attribution reports.

This article explains why, and more importantly, how to build an architecture that preserves your custom UTMs while enabling HubSpot’s native attribution.

The Attribution Gap

HubSpot’s attribution reporting - Revenue Attribution, Contact Attribution, Deal Attribution - only works with 10 fixed source categories:

  1. Organic Search
  2. Paid Search
  3. Email Marketing
  4. Social Media (Organic)
  5. Paid Social
  6. Referrals
  7. Other Campaigns
  8. Direct Traffic
  9. Offline Sources
  10. (Unassigned)

You cannot add custom values. Your utm_source=partner-network will land in “Other Campaigns” regardless of how important partner marketing is to your business.

Understanding HubSpot’s Source Properties

HubSpot maintains several source properties automatically:

Original Source Properties

  • Original Source (dropdown): The categorised first-touch source
  • Original Source Data 1: First drill-down (campaign name, social platform, etc.)
  • Original Source Data 2: Second drill-down (specific content, keyword, etc.)

Latest Source Properties

  • Latest Source (dropdown): The categorised most recent source
  • Latest Source Data 1: First drill-down
  • Latest Source Data 2: Second drill-down

Critical point: These dropdown properties only accept HubSpot’s 10 fixed values. You cannot add custom options.

How HubSpot Categorises Traffic

HubSpot uses rules based on UTM parameters and referrer information:

If HubSpot Sees…It Assigns…
utm_medium=cpc/ppc + search referrerPaid Search
utm_source=[social] + utm_medium=paid/cpcPaid Social
utm_source=email OR utm_medium=emailEmail Marketing
Social referrer without paid indicatorsSocial Media
Search referrer without paid indicatorsOrganic Search
External domain referrerReferrals
UTMs that don’t match other rulesOther Campaigns
No referrer + no UTMsDirect Traffic

Your custom utm_source=partner-webinar triggers “Other Campaigns” because it doesn’t match any specific rule.

The Hybrid Solution

The architecture that works: capture custom UTMs in dedicated properties while allowing HubSpot to populate its native source properties.

Step 1: Create Custom UTM Properties

Create these custom contact properties:

PropertyInternal NameType
UTM Sourceutm_sourceSingle-line text
UTM Mediumutm_mediumSingle-line text
UTM Campaignutm_campaignSingle-line text
UTM Contentutm_contentSingle-line text
UTM Termutm_termSingle-line text

These store the raw values exactly as they appear in your URLs.

Step 2: Create First/Last Conversion Properties

Because UTM properties get overwritten on each form submission, create preservation properties:

First Conversion (FC) Properties:

  • FC UTM Source
  • FC UTM Medium
  • FC UTM Campaign
  • FC UTM Content
  • FC UTM Term

Last Conversion (LC) Properties:

  • LC UTM Source
  • LC UTM Medium
  • LC UTM Campaign
  • LC UTM Content
  • LC UTM Term

Step 3: Add Hidden Fields to Forms

On every HubSpot form, add the five UTM properties as hidden fields. HubSpot automatically populates them from URL parameters.

In the form editor:

  1. Add field → Select your UTM Source property
  2. Set as “Hidden field”
  3. Repeat for all five UTM properties

Step 4: Build Preservation Workflows

Workflow 1: First Conversion Capture

  • Trigger: Contact is created
  • Condition: FC UTM Source is unknown
  • Actions:
    • Copy UTM Source → FC UTM Source
    • Copy UTM Medium → FC UTM Medium
    • Copy UTM Campaign → FC UTM Campaign
    • Copy UTM Content → FC UTM Content
    • Copy UTM Term → FC UTM Term
  • Re-enrollment: Disabled

Workflow 2: Last Conversion Update

  • Trigger: Form submission occurs
  • Actions:
    • Copy UTM Source → LC UTM Source
    • Copy UTM Medium → LC UTM Medium
    • Copy UTM Campaign → LC UTM Campaign
    • Copy UTM Content → LC UTM Content
    • Copy UTM Term → LC UTM Term
  • Re-enrollment: Enabled (every submission)

Workflow 3: Clear Base Properties (Optional) After copying to LC properties, clear the base UTM properties so they’re ready for fresh data on the next submission.

Step 5: Map to HubSpot Categories

If you need your custom UTMs to correctly populate HubSpot’s native source categories (for attribution reports), create a mapping workflow:

Trigger: UTM Medium is any of: partner-cpc, partner-paid, affiliate-cpc
Action: Set Latest Source to "Paid Search" (via API update)

Wait - you can’t directly set the Latest Source dropdown via workflow. But you can influence how HubSpot categorises by ensuring your UTMs match expected patterns:

Strategy: Align your UTM values with HubSpot’s recognition patterns.

Your GoalUse These UTMs
Track as Paid Searchutm_medium=cpc or ppc
Track as Paid Socialutm_source=[platform] + utm_medium=paid
Track as Email Marketingutm_source=email or utm_medium=email
Track as Specific CampaignAdd details in utm_campaign, utm_content

The Complete UTM Strategy

For campaigns you want in native attribution:

URL: site.com/page?utm_source=facebook&utm_medium=paid&utm_campaign=spring-promo-2025

→ HubSpot categorises as “Paid Social” → Your LC UTM Campaign captures “spring-promo-2025”

For campaigns where detail matters more than category:

URL: site.com/page?utm_source=partner-acme&utm_medium=referral&utm_campaign=comarketing-q1

→ HubSpot categorises as “Other Campaigns” → Your custom properties capture the precise values → Build custom reports using your UTM properties

Reporting Architecture

Native Attribution Reports

Use for: Executive reporting on channel performance Limitation: Only shows 10 categories

Custom Reports with UTM Properties

Use for: Campaign-level performance analysis

Example report:

  • Object: Contacts
  • Measures: Count of contacts, Sum of associated revenue
  • Breakdown by: LC UTM Campaign
  • Filter: LC UTM Source = “partner”

The Full Picture Dashboard

Create a dashboard combining both:

  1. Channel Overview (Native Attribution): High-level channel mix
  2. Campaign Performance (Custom): Drill into specific campaigns
  3. Source Quality (Custom): Conversion rates by UTM source

Advanced: Multi-Touch Attribution

HubSpot’s native multi-touch attribution uses interaction data, not just first/last touch. To track all touchpoints with your UTMs:

Option 1: Marketing Events

Log a marketing event for each form submission:

  • Event name: Form Submission
  • Properties: Include UTM values as event properties

Option 2: Custom Object for Touchpoints

Create a “UTM Touchpoint” custom object:

  • Contact association
  • Touchpoint Date
  • UTM Source
  • UTM Medium
  • UTM Campaign
  • UTM Content
  • UTM Term
  • Form Name

Each form submission creates a new touchpoint record, preserving the complete journey.

Workflow to Create Touchpoints

Trigger: Form submission (any form)
Action: Create UTM Touchpoint record
Properties:
- Touchpoint Date = Current date
- UTM Source = [UTM Source property]
- UTM Medium = [UTM Medium property]
- (etc.)
Association: Contact who submitted

Integration with External Tracking

If you’re also using GA4 or other analytics, ensure consistency:

GA4 ↔ HubSpot Alignment

  • Use the same UTM parameter structure
  • GA4 captures all page views; HubSpot only captures form conversions
  • Stitch data using contact email as the join key

Data Warehouse Approach Export HubSpot contact data (with UTM properties) to your data warehouse. Join with GA4 data for complete journey analysis that neither platform provides alone.

Key Takeaways

  1. HubSpot’s native attribution is limited to 10 categories - you cannot add custom values
  2. Create dedicated UTM properties to capture your exact parameter values
  3. Use First Conversion/Last Conversion properties to preserve attribution history
  4. Add hidden UTM fields to every form
  5. Build custom reports using your UTM properties for detailed campaign analysis
  6. Consider a custom object for full multi-touch attribution tracking
  7. Align critical campaign UTMs with HubSpot’s recognition patterns when native attribution matters

The hybrid approach gives you the best of both worlds: native attribution for high-level reporting, custom UTM tracking for detailed analysis.


Need help implementing UTM tracking architecture in HubSpot? Connect with me on LinkedIn.