Most marketing teams discover their attribution is broken the same way: marketing reports that campaigns generated $2M in pipeline, sales says they only see $1.2M, finance trusts neither set of numbers, and the team blames the attribution tool. The tool is rarely the actual problem.
According to Gartner, poor data quality costs organizations an average of $12.9 million per year, and in marketing organizations a disproportionate share of that cost lands directly on attribution. The data flowing into your attribution model is wrong, and no amount of model tuning will fix it.
The CRM is where most of that bad data lives. Not the ad platform, not Google Analytics, not the marketing automation system. The CRM is where leads, deals, and revenue intersect, and every other system reports through or against it. When the CRM has attribution data gaps, every downstream report inherits them.
This post breaks down the seven root causes of CRM attribution data gaps that account for nearly every audit we run at Axiolo, with HubSpot and Salesforce-specific fixes for each.
Why the CRM is where attribution actually breaks
Attribution reports break in three layers: the analytics tool, the marketing automation platform, and the CRM. Most teams chase the analytics tool first because the symptom appears there (pipeline numbers do not match, channel attribution looks wrong, last-touch is overweighted). But the root cause is usually one layer deeper.
The CRM holds the truth about which contacts became opportunities and which opportunities closed. If the source field on a contact is wrong, if a contact is missing an account association, or if the same buyer exists as three contacts, attribution cannot produce a clean signal no matter how sophisticated the analytics tool is.
This is also why most attribution platforms (as covered in our why-broken post) overclaim. They each measure within their own framework, but the framework’s data layer is the CRM, and the CRM is where the gaps actually live.
The 7 most common CRM attribution data gaps
1. Orphaned contact records
How it surfaces: contacts exist in your CRM but are not associated with an account, a deal, or a campaign member record. Attribution reports skip them because there is no revenue object to attribute to.
Root cause: form submissions that create contact records without account-matching logic, list imports without association rules, and integrations that fire contact-create events without firing account-link events.
How to detect: in HubSpot, filter contacts where “Associated companies” is empty. In Salesforce, filter leads or contacts with no Opportunity or Campaign Member relationship. The orphan rate is usually higher than expected; most teams find 15 to 40 percent of contacts orphaned in a first audit.
How to fix: bulk-associate orphans using email domain to company match. Set up automation that runs association rules on contact create. Then run a CRM data cleanup pass to backfill historic orphans before they corrupt next quarter’s reporting.
2. Identity stitching failures
How it surfaces: the same person appears as multiple contact records. Each contact carries a fragment of the buyer journey, so the journey looks like five different people who all converted independently. Pipeline coverage looks inflated; per-deal attribution looks fragmented.
Root cause: people use multiple email addresses (work, personal, alias), forms accept any email without deduplicating, and integrations create new records on every interaction rather than matching to existing ones.
How to detect: in HubSpot, the duplicate management tool surfaces likely duplicates. In Salesforce, duplicate rules with both deterministic (exact email match) and fuzzy (similar name + company) criteria. Most B2B audits find 5 to 20 percent duplicate rates.
How to fix: merge duplicates on a rolling basis. Add deduplication rules to forms and integrations so new duplicates are matched on creation rather than created and then merged. For higher fidelity, layer in a CDP or third-party identity resolution service.
3. UTM parameters stripped on form submissions
How it surfaces: contacts have “direct” or “unknown” as their first-touch source even though they arrived via a tagged campaign URL. Marketing’s source attribution looks wrong even when the campaign was tagged correctly.
Root cause: the form builder strips URL parameters on submit, the landing page does not capture UTMs to hidden fields, or a redirect between the ad click and the form fill drops the query string.
How to detect: pick five recent contacts with “direct” or “unknown” source. Check Google Analytics or your ad platform to confirm they actually came from a tagged campaign. If they did, the UTM is being stripped between page and CRM.
How to fix: use a UTM-aware form configuration. HubSpot forms capture UTMs natively when the page has the HubSpot tracking script. For other form builders, write a JavaScript snippet that reads UTMs from window.location.search and writes them to hidden form fields. Generate test URLs with our free UTM builder and verify the end-to-end flow before launch.
4. CRM-to-MAP sync delays and silent failures
How it surfaces: lifecycle stage changes in the CRM are not reflected in the marketing automation platform, or vice versa. Campaign membership does not flow correctly between systems. Sync errors pile up unnoticed.
Root cause: bidirectional sync is misconfigured, sync rules have conflicting field-of-truth definitions, or the integration runs into API rate limits and silently retries forever.
How to detect: check the sync error log in your integration tool (HubSpot Settings > Integrations > Salesforce > Sync error log; Salesforce Setup > Integrations > Marketing Cloud Connect, depending on stack). Pick five recent contacts and confirm their lifecycle stage matches across CRM and MAP.
How to fix: document the source of truth for every synced field. Configure bidirectional sync with explicit conflict resolution rules. Set up error notifications so failures surface immediately. The martech audit checklist covers integration health in detail (Items 6-10).
5. Source overwrite on update
How it surfaces: a contact’s first-touch source changes over time. Originally Email, then later LinkedIn Ads, then Direct. Attribution reports cannot trust historical source values.
Root cause: the source field is configured as a “last touch” or “always update” field instead of a write-once field. Every new touchpoint overwrites the original.
How to detect: pick a contact created 6+ months ago. Check whether the current source field value matches what was captured at creation (you can audit this in HubSpot via the property history; in Salesforce, via field history tracking if enabled).
How to fix: lock the first-touch source field to write-once on creation. Use a separate field for last-touch or current-touch attribution. Most CRMs support both first-touch and last-touch attribution fields out of the box; you have to configure them explicitly.
6. Sales activity logging gaps
How it surfaces: deals close but the marketing-contributed touchpoints leading up to close are missing from the contact timeline. Attribution shows marketing’s involvement ending at MQL even though marketing-influenced touches continued throughout the sales cycle.
Root cause: sales reps do not log calls, meetings, in-person events, or partner referrals in the CRM. Marketing automation captures digital touches but not the rest.
How to detect: pull five closed deals from the last quarter. Read the contact timeline. Count touchpoints. If the count is under 10 for an enterprise sale or under 5 for a mid-market sale, sales activity logging is incomplete.
How to fix: this is partly a tooling problem and partly a culture problem. The tooling fix: enable activity logging features (call sync, meeting sync, calendar integration). The culture fix: tie deal close to activity completeness in sales reviews. Without leadership pressure on activity logging, the data gap persists.
7. Field mapping mismatches (especially HubSpot to Salesforce)
How it surfaces: source data captured by HubSpot does not appear correctly in Salesforce reports. Campaign membership exists in HubSpot but not in Salesforce. Lead Source picklist values diverge between systems.
Root cause: HubSpot’s Salesforce integration syncs contacts and leads but cannot write to Salesforce campaign member fields (Lead Source and Campaign Member). Those fields remain managed on the Salesforce side. Most teams discover this after months of assuming bidirectional sync was complete.
How to detect: pick a HubSpot contact that is associated with a HubSpot campaign. Check whether the corresponding Salesforce lead has Lead Source and Campaign Member set to the same values. If not, the field mapping gap is present.
How to fix: decide which system owns campaign attribution. If HubSpot owns it, run reports out of HubSpot and treat Salesforce campaign data as unreliable. If Salesforce owns it, write campaign membership directly in Salesforce (via list imports or a third-party tool that bridges HubSpot to Salesforce campaign members). Pick one. Document the trade-off so the team does not chase reconciliation forever.
HubSpot-specific quirks
HubSpot’s native tracking relies on browser cookies and client-side JavaScript. Industry estimates suggest 25 to 40 percent of web traffic now blocks or limits tracking scripts via ad blockers, iOS Intelligent Tracking Prevention, or third-party cookie restrictions. For that fraction of traffic, HubSpot loses the original source unless a UTM parameter is preserved through the form submission. This is not a HubSpot bug; it is a structural limitation of cookie-based tracking that will continue to widen as privacy enforcement grows.
The Salesforce integration limitation (gap #7) is the other big HubSpot-specific issue. Teams that need a single source of truth across both systems usually invest in a third-party integration (Workato, Tray.io, or a custom integration via the Salesforce API) to bridge campaign membership.
Salesforce-specific quirks
Salesforce Campaign Influence is more accurate than Lead Source for multi-touch attribution but more expensive to maintain. Campaign Influence requires explicit Campaign Member records on every contact for every campaign they touched; if those records are not created, the model underweights marketing’s contribution. Setting up Campaign Influence with a standard set of rules (W-shaped, U-shaped, or linear) is one of the highest-impact CRM attribution investments for B2B teams above $20M ARR.
Picklist value drift is the other quiet killer. Sales adds a new Lead Source value ad-hoc, the new value is not documented, and a quarter of reporting breaks. Lock the Lead Source picklist to a controlled list with explicit change management.
How to detect CRM attribution gaps in 30 days
A focused audit framework, one week per stage:
Week 1: orphan and duplicate rates. Run the two queries from gaps #1 and #2. Document the rates and the worst-offender contact segments. Bulk-fix the obvious cases.
Week 2: source field population rate. Audit the percentage of contacts with a populated first-touch source. Sample 25 contacts with missing or “direct” sources and trace why. Fix the form configurations or tracking scripts that are stripping UTMs.
Week 3: sync health and field mapping. Run the sync error log. Verify field mappings for the top 10 most-used fields. Document the source of truth for each. Fix any sync failures and lock down field write rules.
Week 4: prevention. Add automated workflows that catch new orphans, duplicates, missing sources, and sync errors as they happen. Schedule the audit to repeat monthly.
The first audit usually surfaces 30 to 50 percent gap rates. After three monthly audits, well-maintained teams hold under 5 percent.
When to call for help
If you ran the 30-day audit and surfaced more red items than your team can fix in the next quarter, the problem is not bandwidth, it is scope. Most mid-market B2B teams reach a point where the data debt has compounded faster than they can manually clean it, and a structured cleanup engagement pays back faster than incremental fixes.
The MarTech audit checklist walks through 20 items across data, integration, attribution, and automation if you want a broader diagnostic before deciding. The marketing data management framework explains why CRM data gaps cascade into every other layer of reporting.
Book a Marketing Data Architecture Review →
At Axiolo, we help B2B marketing teams build the data infrastructure that makes attribution, reporting, and automation actually work. Our developer-first team fixes the CRM-level data architecture that attribution tools cannot. Learn more about our marketing operations services →