Salesforce marketing attribution works through Campaigns: by default, the Primary Campaign Source field gives 100% of an opportunity's amount to one campaign, and Customizable Campaign Influence lets several campaigns share that credit using first touch, last touch, even distribution or custom models. It is solid for crediting campaigns your team already tracks inside Salesforce. It is weak at seeing ad clicks, WhatsApp chats and offline touches that never become a campaign member, because Salesforce can only credit what is recorded as a campaign membership on a contact who is a Contact Role on the deal.
This guide explains how the pieces fit, how to set it up step by step, a worked example with numbers, and the limits to plan around. Product details were checked against Salesforce's pricing page and Salesforce-focused documentation in November 2026.
How does attribution work in Salesforce?
Salesforce does not track sessions or ad clicks the way an analytics tool does. It connects records. Attribution is a chain of four objects, and if any link is missing, the campaign gets no credit.
| Object | What it stores | Why it matters for attribution |
|---|---|---|
| Campaign | A marketing effort: a Meta campaign, a webinar, a trade show, a Google Ads search campaign | This is the "channel" that receives credit |
| Campaign Member | A lead or contact added to a campaign, with a status and a date | The date is used as the touch date in first and last touch models |
| Opportunity | The deal, with amount, stage and close date | The amount is the revenue that gets split |
| Opportunity Contact Role | Which contacts are involved in the deal | Without a Contact Role, the contact's campaigns are not linked to the deal |
The common summary from Salesforce consultants, for example in Salesforce Ben's Campaign Influence guide, is short: no Contact Roles, no influence. Many orgs that "have attribution" actually have dozens of opportunities with no Contact Roles, so the reports quietly undercount marketing.
Primary Campaign Source vs Customizable Campaign Influence: what's the difference?
These are two different ways to answer "which campaign gets credit for this deal?"
| Primary Campaign Source | Customizable Campaign Influence | |
|---|---|---|
| How many campaigns per deal | One (it is a single lookup field) | Many |
| Credit split | 100% to that campaign | Percentages per model, applied to the opportunity amount |
| How records are created | Set on the opportunity, often from the lead's source campaign at conversion | Auto-association rules, manual entry, or automation via API/Apex for custom models |
| Best use | A simple "sourced by" view | Multi-touch "influenced by" views |
Customizable Campaign Influence has to be enabled in Setup. Salesforce-focused guides list it for Professional, Enterprise, Performance, Unlimited and Developer editions, in both Lightning Experience and Classic.
Which attribution models does Salesforce include?
With Customizable Campaign Influence you can work with these models, and you pick one default model that appears on related lists:
- Primary campaign model: the original model based on Primary Campaign Source. One campaign gets 100%.
- First touch: 100% to the earliest campaign, based on the campaign member created date.
- Last touch: 100% to the most recent campaign, based on the campaign member last modified date.
- Even distribution: the amount is split equally across all influencing campaigns.
- Custom models: you define the percentages and populate the records yourself, through Apex, Flow or the API.
One licensing detail trips teams up. Salesforce-focused guides and many admins report that the first touch, last touch and even distribution models are provisioned for orgs that also have Marketing Cloud Account Engagement (formerly Pardot). Confirm what your org shows under Setup before you plan around them. Account Engagement also adds weighted multi-touch dashboards through B2B Marketing Analytics. On Salesforce's Account Engagement pricing page, Account Engagement starts at $1,250/org/month for Growth+ and Plus+ costs $2,750/org/month, with B2B Marketing Analytics listed in the Plus+ highlights, all billed annually (checked Nov 2026).
If you want a neutral refresher on what each model rewards, read multi-touch attribution models explained.
How do you set up Campaign Influence step by step?
- Enable Customizable Campaign Influence. In Setup, search for Campaign Influence and turn it on. Add the Campaign Influence related list to the opportunity and campaign page layouts.
- Choose a default model. In Model Settings, pick the model your team will quote in meetings. Even distribution is a reasonable default for B2B teams that run several touches per deal.
- Set auto-association rules. Decide which campaigns can be auto-associated (you can filter by campaign type or other campaign fields) and set the Campaign Influence Time Frame. If you leave the time frame blank, there is no time limit. A practical rule is to make it at least as long as your longest sales cycle.
- Make Contact Roles non-optional. Add the converted contact as a Contact Role during lead conversion, and use a validation rule or Flow so opportunities cannot advance past a stage without at least one Contact Role.
- Design campaigns per channel. Create one campaign per paid channel and major campaign (for example "Meta | Lead ads | Q1" and "Google Ads | Search | Brand"), with a consistent naming convention and a campaign hierarchy.
- Get people into campaigns automatically. Capture UTM parameters and click IDs in hidden form fields, then use Flow or Account Engagement completion actions to add each new lead to the right campaign. Our guide on passing UTM parameters into your CRM shows the hidden-field pattern.
- Report by model. Build a report on campaign influence records grouped by campaign and model name, filtered to closed-won opportunities.
- Validate. Pick 20 recent closed-won deals and check by hand that each has Contact Roles, campaign memberships and influence records that match what sales remembers.
Example: how one deal is credited under each model
Example (hypothetical numbers): an opportunity closes for $20,000. The buyer's contact is a Contact Role and belongs to three campaigns: a Meta lead ad (joined January 5), a webinar (February 2) and a Google Ads search campaign (March 1).
| Campaign | First touch | Last touch | Even distribution |
|---|---|---|---|
| Meta lead ad | $20,000 | $0 | $6,667 |
| Webinar | $0 | $0 | $6,667 |
| Google Ads search | $0 | $20,000 | $6,667 |
Same deal, three very different budget stories. Now imagine the buyer also clicked a TikTok ad and chatted on WhatsApp before filling the form, but nobody created a campaign membership for those touches. Under every model, TikTok and WhatsApp get $0. That gap, not the model choice, is usually the bigger error.
What are the limits of Salesforce attribution?
- It only credits recorded memberships. Ad clicks, organic visits and anonymous sessions before a form are not in the model unless something writes them into a campaign.
- Touch dates are record dates. First touch uses when the campaign member was created, which may be days after the real first ad click.
- Contact Roles are a hard dependency. Deals without them show no influence at all.
- Costs are manual. Campaign cost fields are not pulled from Meta, Google Ads or TikTok, so ROAS and CAC by campaign need extra work. See how to calculate CAC by channel.
- Nothing goes back to ad platforms by default. Meta and Google keep optimizing for form fills unless you send qualified and closed-won events back. Google's own Salesforce conversion import is labeled "Legacy" in its help center.
- Chat and call channels sit outside. Click-to-WhatsApp conversations and phone calls rarely become campaign members on their own.
HubSpot users face a similar set of tradeoffs, covered in the limits of HubSpot attribution reports.
How do you get ad-level revenue out of Salesforce?
Keep Salesforce as the source of truth for revenue, and add the click-level data it lacks:
- Store UTMs, GCLID and fbclid on the lead, and map those fields to the opportunity on conversion so they survive.
- Send stage changes (qualified, opportunity, closed-won with value) back to Google Ads and Meta. The Google Ads offline conversion import guide walks through the Google side.
- Join ad spend to the same campaigns so you can read cost per opportunity, not just cost per lead.
This is the job Admira does for sales-led teams. It connects Salesforce with Meta, Google Ads, TikTok and Click-to-WhatsApp leads, applies multi-touch models to CRM revenue, and sends CRM events back to the ad platforms through its Conversion API. It does not replace Salesforce reporting, and it is a young product with few public reviews, so test it on your own closed-won deals before trusting it.
Who this is for, and when it doesn't apply
Good fit for native Campaign Influence: B2B teams whose touches are mostly events, webinars, emails and forms already tracked in Salesforce, with disciplined Contact Roles.
Needs more than native: teams spending heavily on Meta, Google Ads or TikTok who need revenue per ad or creative, teams with leads arriving through WhatsApp or calls, and teams that want closed-won events sent back to ad platforms. For a broader view of B2B setups, see B2B marketing attribution.
Doesn't apply: pure ecommerce stores with online checkout and no CRM stage; a store-focused tool fits better there.
FAQ
Does Salesforce have built-in marketing attribution?
Yes. Primary Campaign Source gives single-campaign credit, and Customizable Campaign Influence allows multi-touch credit across campaigns. Weighted multi-touch dashboards come with Account Engagement's B2B Marketing Analytics.
Why is my Campaign Influence report empty?
The most common cause is missing Opportunity Contact Roles. Also check that contacts are campaign members and that the influence time frame is not shorter than your sales cycle.
Do I need Account Engagement (Pardot) for multi-touch models?
Many orgs only see first touch, last touch and even distribution when Account Engagement is provisioned. Check Model Settings in your org; you can still build custom models with automation.
Can Salesforce show ROAS by ad?
Not natively. Campaign costs are manual and ad clicks are not stored unless you capture click IDs and UTMs and join spend data yourself or with a tool.
What time frame should I set for auto-association?
At least as long as your longest sales cycle. Leaving it blank removes the limit, which can credit very old campaigns.
Is Campaign Influence the same as marketing-sourced pipeline?
No. Primary Campaign Source answers "who sourced it"; influence answers "who touched it before it closed." Report both and label them clearly.






%20(2).png)