# How to push UTM parameters to Salesforce

Map SourceLoop's UTM and source fields to Salesforce Lead, Contact, Account, and Opportunity records. Default mapping, custom fields, and the standard LeadSource field.

Source: https://sourceloop.ai/help/push-utms-to-salesforce/
Updated: 2026-05-28

---

By default, SourceLoop ships with a mapping that writes UTM and source data to `sourceloop_*` custom fields on the Lead and Contact objects. For most teams that's enough. For teams that need to populate the standard `LeadSource` field, map to existing custom fields, or push to Accounts and Opportunities, the Field Mapping tab supports it.

This article walks through the mapping system end to end.

## Before you start

You'll need:

- [Salesforce connected to SourceLoop](/help/connect-salesforce-to-sourceloop/)
- A Salesforce user with **Modify All Data** (or System Administrator profile) for the auto-create flow
- **Admin** or **Owner** role in SourceLoop

## The fields SourceLoop can push

Same fields as every CRM integration:

**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

**Lifecycle:** lead status (raw + mapped), lifecycle stage (raw + mapped), lead score, qualified flag

**Revenue:** quote value, sales value

## Default mapping

When you connect Salesforce and enable outbound sync, SourceLoop sets up these default mappings on the **Lead** object:

- `first_source` → `sourceloop_first_source__c`
- `first_medium` → `sourceloop_first_medium__c`
- `first_campaign` → `sourceloop_first_campaign__c`
- `first_landing_page` → `sourceloop_first_landing_page__c`
- `latest_source` → `sourceloop_latest_source__c`
- `latest_medium` → `sourceloop_latest_medium__c`
- `latest_campaign` → `sourceloop_latest_campaign__c`
- `latest_landing_page` → `sourceloop_latest_landing_page__c`
- `lead_status_raw` → `Status` (standard Salesforce Lead Status picklist)

Same set is mirrored on the **Contact** object so that data survives Lead conversion.

These fields are created on the Salesforce side automatically the first time SourceLoop writes to them, no manual setup required (provided the connecting user has create-custom-field permission).

## Step 1: Open the Salesforce Field Mapping tab

1. Sign in to [SourceLoop](https://app.sourceloop.ai/).
2. Open **Setup -> CRM -> Salesforce**.
3. Click the **Field Mapping** tab inside the drawer.

You'll see existing mappings (defaults + any you've added), an **Add mapping** button, and a Salesforce field picker that lists every standard and custom field SourceLoop's introspection picked up.

## Step 2: Add a custom mapping

1. Click **Add mapping**.
2. Pick the **entity type**:
   - **Lead** (the most common starting point)
   - **Contact** (for after conversion)
   - **Account** (account-level rollup)
   - **Opportunity** (closed-won attribution)
3. Pick the **SourceLoop field** (left dropdown), e.g., `first_source`.
4. Pick the **Salesforce field** (right dropdown), e.g., `LeadSource` (standard) or `Original_UTM_Source__c` (custom).
5. Pick the **direction**:
   - **Outbound** (SourceLoop → Salesforce) — for fields SourceLoop owns.
   - **Inbound** (Salesforce → SourceLoop) — pull existing Salesforce values into SourceLoop (e.g., Opportunity Amount, Owner, Stage).
   - **Bidirectional** — both ways; most-recent value wins.
6. Click **Save**.

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

## Step 3: Configure Salesforce's Lead → Contact conversion mapping

This is the most-missed step. Salesforce's standard Lead conversion only copies custom fields from Lead to Contact if you've explicitly configured the mapping. Without it, your `sourceloop_first_source__c` value on the Lead gets dropped when the Lead converts to a Contact.

1. In Salesforce, go to **Setup -> Object Manager -> Lead -> Fields & Relationships -> Map Lead Fields**.
2. For each `sourceloop_*` custom field on Lead, map it to its same-named counterpart on Contact.
3. Save.

Now your attribution carries through every conversion. If you converted Leads before doing this, the historical conversions won't have the source data on the Contact, but every conversion going forward will.

## Step 4: Verify the mapping is working

1. Wait for one full sync cycle (~15 minutes) after a new conversion happens.
2. Open the Lead in Salesforce.
3. Check the `sourceloop_*` custom fields and any standard fields you mapped, values should match what's shown on the contact in SourceLoop's Contacts Hub.

If a field isn't getting written, see [Troubleshoot Salesforce sync issues](/help/troubleshoot-salesforce-sync/).

## Should you also map to Salesforce's standard LeadSource?

A common question. Two camps:

- **Don't map** (default behavior): SourceLoop writes to `sourceloop_*` fields. Your team's existing LeadSource conventions stay intact. Reports built on LeadSource keep working unchanged. SourceLoop adds new fields you can pivot on separately.
- **Do map**: SourceLoop writes first-touch source to `LeadSource` directly. Useful when your existing Salesforce reports are heavily built on LeadSource and changing them is more work than letting SourceLoop populate it. Caveat: SourceLoop will overwrite any prior LeadSource value (including manual entry).

There's no wrong answer, it depends on how much existing Salesforce reporting depends on LeadSource. Most teams start with the default and add the LeadSource mapping later if reporting is awkward.

## Pushing to custom objects

Custom objects (e.g., `Custom_Application__c`) aren't supported via the Field Mapping tab. For those, use the Outbound Webhook (Setup -> Integrations -> Webhooks) to send raw conversion events as JSON and write to the custom object via an Apex trigger or Flow on your side.

## What's next

After fields are mapped, the next step is aligning SourceLoop's lifecycle stages with Salesforce's Lead Status picklist. See [Map SourceLoop stages to Salesforce Lead Status](/help/map-salesforce-lead-status/).

## Frequently Asked Questions

### Do I need to create custom fields in Salesforce first?

No. SourceLoop auto-creates the default `sourceloop_*` custom fields on the Lead and Contact objects the first time it tries to write them. The connecting Salesforce user needs Modify All Data + the ability to create custom fields. If you'd rather map to existing fields, add the mapping in the Field Mapping tab and skip the auto-create.

### Should I map first-touch source to Salesforce's standard LeadSource field?

Personal preference. Mapping to `LeadSource` means SourceLoop overwrites whatever was there (manual entry, web-to-lead default, etc.). If your team already uses LeadSource for high-level categorisation (Web, Partner, Trade Show), it's safer to leave it alone and map SourceLoop to `sourceloop_first_source__c` so both values coexist. Some teams do map to LeadSource specifically so existing Salesforce reports work without modification.

### Can I push UTMs to the Account record, not just Lead and Contact?

Yes. Add a mapping with entity type 'account' and pick the Salesforce Account field as the target. SourceLoop aggregates UTM values across all Contacts on the Account and writes the consensus value.

### What about pushing to Opportunity?

Yes. Opportunity-level attribution is supported. The source values come from the converting Lead / Contact (the person who opened the Opportunity), and SourceLoop writes them onto the Opportunity record on each sync.

### Does the mapping survive Salesforce's Lead → Contact conversion?

Yes, with one caveat. Salesforce's standard conversion only carries fields you've explicitly mapped in its Lead Convert Settings (Setup -> Customize -> Leads -> Lead Custom Field Mapping). After SourceLoop auto-creates `sourceloop_*` fields on both Lead and Contact, you should configure Salesforce's conversion mapping to copy each `sourceloop_*` field from Lead to its Contact counterpart. SourceLoop's docs panel in the Salesforce drawer has a step-by-step on this.

### My custom field has a Field-Level Security restriction. Will SourceLoop be able to write?

SourceLoop writes via the OAuth-connected user. If that user's profile doesn't have edit access to the field, the write fails silently. Either grant the user FLS edit access, or connect with a System Administrator user.
