crm-attribution-setup
This skill should be used when the user asks to "set up attribution in CRM", "configure CRM attribution", "track lead source in CRM", "CRM attribution setup", "set up marketing attribution", "build attribution reporting in CRM", "design attribution tracking", "implement attribution in HubSpot or Salesforce", "track pipeline attribution in CRM", or any variation of setting up attribution tracking within a CRM for B2B SaaS.
CRM Attribution Setup
Attribution in CRM connects pipeline and revenue back to the marketing and sales activities that created them. Without attribution, you can't answer "which channel produced the most pipeline?" With attribution, you can allocate budget, optimize channels, and prove ROI for every GTM investment.
The principle: set up attribution before you need attribution reports. Retrofitting attribution on 12 months of data with no source tracking is impossible. The best time to set up attribution was 6 months ago. The second best time is today.
The Attribution Data Model
Core attribution fields
| Field | Object | Type | Purpose |
|---|---|---|---|
| Original Source | Contact | Dropdown | How the person first entered the CRM |
| Original Source Drill-Down | Contact | Text | Specific detail (campaign name, keyword, etc.) |
| Lead Source | Lead/Contact | Dropdown | Marketing or sales source category |
| Self-Reported Source | Contact | Dropdown | "How did you hear about us?" |
| UTM Source | Contact | Text | utm_source parameter from form submission |
| UTM Medium | Contact | Text | utm_medium parameter |
| UTM Campaign | Contact | Text | utm_campaign parameter |
| Pipeline Source | Deal/Opportunity | Dropdown | Inbound, Outbound, Partner, Referral |
| First Touch Campaign | Contact | Lookup | First marketing campaign engagement |
| Last Touch Campaign | Contact | Lookup | Last marketing campaign before conversion |
Field rules
- Track at the contact level AND the deal level. Contact-level attribution tells you which channel brought the person. Deal-level attribution tells you which channel produced the pipeline. Both matter
- Separate first-touch from last-touch. First-touch captures awareness (how they discovered you). Last-touch captures conversion (what triggered the action). Both have different uses
- Include self-reported alongside software-tracked. Software misses dark funnel (podcasts, word of mouth, communities). Self-reported captures it. Track both. Report them separately
- Lock original source. Once set, the Original Source should never change. It's the historical record of how this person first entered your world. Subsequent interactions update "latest" fields, not "original"
Setting Up UTM Tracking
UTM parameter standards
| Parameter | What it tracks | Naming convention | Example |
|---|---|---|---|
| utm_source | Platform or channel | Lowercase, no spaces | linkedin, google, newsletter |
| utm_medium | Marketing medium | Lowercase | paid-social, organic-social, email, cpc |
| utm_campaign | Specific campaign | Lowercase, hyphens | q2-pipeline-push, series-b-launch |
| utm_content | Ad or content variation | Lowercase, hyphens | cta-demo, testimonial-ad |
| utm_term | Keyword (for paid search) | Lowercase | crm-software, sales-tools |
UTM rules
- Standardize naming before launching any campaign. Create a UTM naming document. Share it with the team. Enforce it. "LinkedIn" vs "linkedin" vs "LINKEDIN" creates three different sources in reports
- Use lowercase always. UTMs are case-sensitive. Standardize on lowercase to prevent duplicate source entries
- Use hyphens, not underscores or spaces.
paid-socialnotpaid_socialorpaid social. Consistent delimiter across all UTMs - Capture UTMs on every form. HubSpot auto-captures UTMs from form submissions. Salesforce requires hidden form fields or a marketing automation tool. Ensure every conversion point captures UTM data
CRM-specific UTM setup
HubSpot:
HubSpot automatically captures UTM parameters from
form submissions and stores them on the contact record.
Properties created automatically:
- First page seen
- Original source type
- Original source data 1 (utm_source)
- Original source data 2 (utm_medium)
Custom properties to add:
- UTM Campaign (text, auto-captured)
- UTM Content (text, auto-captured)
- UTM Term (text, auto-captured)
Salesforce:
1. Create custom fields on Lead and Contact:
- UTM_Source__c (text)
- UTM_Medium__c (text)
- UTM_Campaign__c (text)
- UTM_Content__c (text)
2. Add hidden fields to web forms that capture
URL parameters
3. Map lead UTM fields to contact UTM fields
on lead conversion
4. OR: use a marketing automation tool
(Marketo, Pardot, HubSpot) that captures
UTMs and syncs to Salesforce
Pipeline Attribution
Attributing pipeline to source
For each deal/opportunity:
1. Who is the primary contact on the deal?
2. What was that contact's original source?
3. What was the last touch before the deal was created?
→ Pipeline Source = contact's original source
→ Or: Pipeline Source = the activity that directly
created the opportunity (outbound sequence, inbound form, etc.)
Pipeline source categories
| Source | Definition | How to determine |
|---|---|---|
| Inbound | Contact submitted a form, requested a demo, or signed up | Form submission exists before deal creation |
| Outbound | SDR or AE initiated contact through cold outreach | Outbound sequence or cold email preceded the meeting |
| Partner | Partner referred the deal | Partner field populated, or referral source tracked |
| Referral | Existing customer or contact referred the prospect | Self-reported or manual attribution by the rep |
| Event | Met at an event, conference, or webinar | Event attendance tracked before deal creation |
| PLG (Product-Led) | Used the product (free trial, freemium) before engaging sales | Product usage data preceded deal creation |
Pipeline attribution rules
- Set pipeline source when the deal is created. Not retroactively. The rep or automation should stamp the source at deal creation based on the contact's history
- If the contact had both inbound and outbound touches, use the touch closest to deal creation. They submitted a form 6 months ago (inbound) but responded to a cold email last week (outbound). The pipeline source is outbound. The email directly created the opportunity
- Don't change pipeline source after the deal is created. It's a historical record. Changing it retroactively distorts reporting
- Track multi-touch alongside single-touch. Single-touch (first or last) for simplicity. Multi-touch for accuracy. Both views are useful for different decisions
Building Attribution Reports
Essential attribution reports
| Report | What it shows | How to build |
|---|---|---|
| Pipeline by source | $ pipeline per source (inbound, outbound, partner) | Group deals by Pipeline Source. Sum amounts |
| Revenue by source | $ closed-won per source | Same, filtered to Closed Won |
| Pipeline by channel | $ pipeline per UTM medium (paid, organic, social) | Group contacts by UTM Medium, join to deals |
| MQL-to-pipeline by source | Conversion rate per source | MQLs that became pipeline, grouped by source |
| Cost per pipeline dollar by channel | Channel spend / pipeline generated | Manual: match channel spend to pipeline |
| Self-reported vs software attribution | Comparison of sources | Side-by-side report of original source vs self-reported |
Reporting rules
- Report at the pipeline level, not just the lead level. "We got 500 leads from Google" is interesting. "Google-sourced leads produced $800K in pipeline" is actionable. Always tie attribution to pipeline dollars
- Include cost data. "$200K pipeline from LinkedIn Ads" is good. "$200K pipeline from LinkedIn Ads at $15K spend (13:1 ROI)" is a budget decision. Add spend data manually or through a BI tool
- Show both first-touch and last-touch. First-touch credits awareness. Last-touch credits conversion. Show both to leadership. They answer different questions
- Separate inbound from outbound clearly. Blending inbound and outbound attribution obscures the performance of each motion. Always report separately
Measurement
| Metric | Definition | Target | Frequency |
|---|---|---|---|
| Attribution coverage | % of deals with a source assigned | > 95% | Monthly |
| UTM capture rate | % of form submissions with UTM data | > 80% | Monthly |
| Self-reported fill rate | % of demo requests with "how did you hear about us?" | > 90% | Monthly |
| Pipeline by source accuracy | Does reported pipeline match reality? Spot-check | > 90% accuracy | Quarterly |
| Source diversity | No single source > 60% of pipeline | Balanced distribution | Quarterly |
| Attribution-to-spend alignment | Top-spend channels produce top pipeline? | Correlated | Quarterly |
Pre-Setup Checklist
- [ ] Original Source field configured on Contact (locked after first set)
- [ ] Lead Source dropdown standardized with 8-12 categories
- [ ] Self-reported attribution field on demo/signup forms
- [ ] UTM parameters standardized (naming convention documented)
- [ ] UTM capture configured on all forms
- [ ] Pipeline Source field on Deal/Opportunity (required at creation)
- [ ] Field mapping configured for lead conversion (lead source maps to contact)
- [ ] Attribution report built: pipeline by source
- [ ] Attribution report built: revenue by source
- [ ] Cost data available per channel for ROI calculation
- [ ] Team trained on when and how to set pipeline source
Anti-Pattern Check
- No attribution fields in the CRM. 12 months of data with no source tracking. You can't attribute pipeline retroactively. Every quarter without attribution is data you'll never recover. Set up the fields today
- UTM naming inconsistency. "linkedin", "LinkedIn", "LI", "linkedin-ads" all appear as separate sources. One channel looks like four. Standardize naming. Enforce lowercase. Document the convention
- Pipeline source not required on deals. 30% of deals have no source. That's 30% of pipeline you can't attribute. Make pipeline source a required field at deal creation
- Only tracking last-touch. Everything is attributed to the last click. The podcast that built awareness, the blog post that educated, and the case study that convinced all get zero credit. Track first-touch alongside last-touch
- Ignoring self-reported attribution. Software says 40% of pipeline is "direct" traffic. Self-reported says those same leads heard about you on a podcast or from a colleague. Software attribution alone misses 40-60% of the real picture
- Changing attribution retroactively. Marketing reassigns deals from "outbound" to "inbound" because the contact also visited the website. Historical attribution should not change. It's a record of what happened, not a story you want to tell
- Not tying attribution to pipeline dollars. "We generated 500 MQLs from Google." So what? Tie it to pipeline: "Google-sourced leads generated $1.2M in pipeline this quarter." Pipeline dollars justify budget. Lead counts don't
Want agents that use skill files like this?
We customize skill files for your brand voice and methodology, then run content agents against them.
Book a call