Skip to content
SourceLoop
HubSpot

How to push UTM parameters to HubSpot

Map SourceLoop's UTM and source fields to HubSpot contact, company, and deal properties. Default mapping, custom properties, inbound vs outbound direction.

On this page
  1. Before you start
  2. The fields SourceLoop can push
  3. The default mapping
  4. Step 1: Open the HubSpot drawer
  5. Step 2: Add a custom mapping
  6. Step 3: Verify the mapping is working
  7. When to map to your own properties vs SourceLoop’s defaults
  8. Company and deal mappings
  9. What’s next

By default, SourceLoop ships with a sensible mapping that writes UTM and source data to a set of sourceloop_* custom properties on the HubSpot contact. For most teams that’s enough. For teams that already have their own UTM properties (or want SourceLoop’s data to drive a HubSpot workflow that already exists), you can remap any field to any HubSpot property.

This article covers the field mapping system end to end, default mapping, customising it, contact vs company vs deal mappings, and direction.

Before you start

You’ll need:

  • HubSpot connected to SourceLoop (the connection must show Connected)
  • HubSpot Super Admin or Account Access (to create custom properties on HubSpot’s side if you want SourceLoop to auto-create them)
  • Admin or Owner role in SourceLoop

The fields SourceLoop can push

SourceLoop tracks every visitor session across these dimensions. Any of them can be pushed to HubSpot:

Contact identity:

  • Email, contact name, phone, company name, country, city, title, LinkedIn URL

Attribution (per-touchpoint):

  • First-touch: source, medium, campaign, content, term, landing page, channel, keyword
  • Last-touch (converting session): same set
  • Multi-touch model output: configurable per workspace

Lifecycle:

Revenue:

  • Quote value (expected revenue from this lead)
  • Sales value (realised revenue, when payment integrations are connected)

The default mapping

When you connect HubSpot and enable outbound sync, SourceLoop ships these default mappings on the contact entity:

  • first_channelsourceloop_first_channel
  • first_sourcesourceloop_first_source
  • first_mediumsourceloop_first_medium
  • first_campaignsourceloop_first_campaign
  • first_landing_pagesourceloop_first_landing_page
  • latest_channelsourceloop_latest_channel
  • latest_sourcesourceloop_latest_source
  • latest_mediumsourceloop_latest_medium
  • latest_campaignsourceloop_latest_campaign
  • latest_landing_pagesourceloop_latest_landing_page
  • lead_status_rawhs_lead_status
  • lifecycle_stage_rawlifecyclestage

These custom properties are created in your HubSpot portal automatically the first time SourceLoop writes to them, you don’t have to pre-create anything.

Step 1: Open the HubSpot drawer

  1. Sign in to SourceLoop.
  2. Open Setup -> CRM -> HubSpot. The drawer opens with the connection status at the top and several stacked sections: Lead status mapping, Lifecycle stage mapping, Deal stages, and Field mappings.
SourceLoop HubSpot drawer showing sync toggles, lead status mapping, lifecycle stage mapping, deal stages, and field mappings sections
  1. Scroll down to the Field mappings section. It lists the entities you can map (Contacts, Companies, Deals) each with its own Edit button.
  2. Click Edit next to Contacts (or Companies / Deals depending on which entity you’re mapping).

Step 2: Add a custom mapping

  1. Click Add mapping.
  2. Pick the entity type:
    • Contact (most common)
    • Company (account-level attribution; SourceLoop aggregates from the company’s contacts)
    • Deal (closed-won attribution; sourced from the contact that opened the deal)
  3. Pick the SourceLoop field (left dropdown), e.g., first_campaign.
  4. Pick the HubSpot property (right dropdown), e.g., original_utm_campaign (your existing property) or type a new property API name.
  5. Pick the direction:
    • Outbound (SourceLoop → HubSpot) — for fields you want SourceLoop to own.
    • Inbound (HubSpot → SourceLoop) — for HubSpot data you want SourceLoop to import (e.g., HubSpot’s own deal stage, owner, deal amount).
    • Bidirectional — both ways; the most-recent value wins.
  6. Click Save.

The new mapping takes effect on the next sync cycle (within 15 minutes).

Step 3: Verify the mapping is working

  1. Wait for one full sync cycle (~15 minutes) after a new conversion happens.
  2. Open the contact in HubSpot.
  3. Check the properties you mapped, the values should match what’s on the contact in SourceLoop’s Contacts Hub.

If a property isn’t getting written, see the troubleshooting checklist in Troubleshoot HubSpot sync issues.

When to map to your own properties vs SourceLoop’s defaults

A simple rule of thumb:

  • Map to SourceLoop defaults when HubSpot is your CRM but you don’t have UTM workflows already wired to other properties. The sourceloop_* properties keep the marketing data cleanly namespaced.
  • Map to your own properties when you’ve already built HubSpot workflows, lists, or reports against your own UTM fields (e.g., original_utm_source, latest_utm_source). Pointing SourceLoop at those fields means your existing automation just works.

If you’re not sure, start with the defaults. You can always add custom mappings later without breaking anything.

Company and deal mappings

Most teams stop at contact-level mappings. Two cases where company / deal mappings are useful:

  • B2B with account-based reporting — push first-touch source to the company record so your sales reports group by source at the account level (e.g., “all leads from this account came in via LinkedIn organic”).
  • Closed-won attribution — push the original contact’s first-touch source to the deal record so HubSpot’s revenue reports can group by source.

Both use the same mapping flow, just pick the entity type accordingly.

What’s next

Once your contact properties are flowing, the natural next step is mapping lifecycle stages and lead status so SourceLoop’s internal pipeline aligns with HubSpot’s. See Map SourceLoop stages to HubSpot lifecycle stages.

Frequently asked questions

  1. Do I need to create custom properties in HubSpot first?

    No. When SourceLoop's default mapping is enabled, it creates the required custom properties (`sourceloop_first_source`, `sourceloop_last_source`, the UTM properties, etc.) automatically the first time it tries to write them. If you'd rather map to your own existing properties, add the mapping manually in the Field Mapping tab and skip the auto-create.

  2. Can I push UTMs to the company record, not just the contact?

    Yes. Entity type 'company' is supported. Add a mapping with the entity set to 'company' and pick a HubSpot company property as the target. SourceLoop writes the company-level UTMs (aggregated from the company's contacts) on the next sync.

  3. Can I map the same SourceLoop field to two HubSpot properties?

    Yes. Add two mappings, same internal field, two different external fields. SourceLoop writes both on every sync.

  4. What's the difference between `first_campaign` and `latest_campaign` in the SourceLoop side?

    The `first_campaign` field is the UTM campaign of the visitor's very first session with you (first touch). The `latest_campaign` field is the UTM campaign of the session in which they actually converted (last touch, or "converting session"). Both are useful, last touch closes the deal, first touch shows what initially drove discovery.

  5. Can I prevent SourceLoop from overwriting a HubSpot property after the initial set?

    Yes. Set the field mapping's direction to **outbound only** and set the property's "write mode" to **on create**. SourceLoop populates it only on the first sync for that contact, then leaves it alone.

  6. What if my HubSpot custom property has a different label than the API name?

    SourceLoop's Field Mapping panel shows both the label and the API name. Map against the API name, which is what HubSpot actually uses to identify the property. Labels can change without breaking the mapping.

Track every conversion to its true source

Capture and send full attribution data from every signup, lead, booking, and sale to your CRM and ad platforms, so you know exactly what's driving revenue.

Without SourceLoop

Untagged

Kayden Floyd

kayden@abc.com

  • SourceUnknown
  • MediumUnknown
  • CampaignUnknown
  • Landing pageUnknown
Journey
No touchpoints captured

With SourceLoop

Auto-tagged

Kayden Floyd

kayden@abc.com · Acme Co.

  • Channel Paid Social
  • CampaignFree_demo
  • Landing page/pricing
Journey
Synced to HubSpot Google Ads Meta