The Single Source of Truth: A Guide to Solving Cross-Platform Attribution & Tracking Discrepancies
In digital marketing, the gap between the conversions reported in ad platforms like Google Ads and LinkedIn and the actual lead data in your CRM (like HubSpot or Salesforce) is a critical challenge. Discrepancies arise from a complex interplay of technical issues, user behavior, and varying attribution models. Achieving a single source of truth requires a multi-faceted approach that includes robust UTM parameter management, implementing offline conversion imports to connect ad clicks to revenue, and understanding the fundamental differences in how each platform measures success. This guide breaks down the most common causes of tracking discrepancies and provides actionable solutions to create a more unified and accurate view of your marketing performance.
Why are the conversion numbers in Google Ads so different from what we see in HubSpot?
Discrepancies between Google Ads and HubSpot conversion numbers stem from several factors:
- Data Sync Settings: The HubSpot integration can be configured to send 'All contacts' that reach a certain lifecycle stage to Google Ads, not just those who interacted with an ad. This setting, while recommended by HubSpot for better ad optimization, inflates conversion counts in Google Ads because it includes individuals who may have become an MQL or SQL through other channels. In contrast, HubSpot's internal ad reporting will only show contacts directly associated with the ad interaction.
- Cookie Rejection: If a user rejects tracking cookies on your website, HubSpot can still capture their lead information when they fill out a form. However, Google Ads may not be able to attribute that conversion to a specific ad click, leading to underreporting in the ad platform or misattribution.
- Conversion Counting Methods: Platforms can count conversions differently. For a time, Google Ads was set to count every form submission, even if it was from the same user, leading to double counting. While this can be changed to count only one conversion per user, it's a potential source of historical discrepancy.
- Modeled Conversions: Google uses modeling to account for conversions that cannot be observed directly due to privacy settings or cross-device behavior. This can lead to Google reporting a higher number of conversions than what is directly tracked in HubSpot.
How does Google's data-driven attribution model differ from HubSpot's, and which is more accurate?
Google's attribution models and the models used in a CRM like HubSpot serve different purposes and are based on different data sets. Neither is inherently more 'accurate'; they are simply different ways of looking at results.
- Direct Attribution (Last-Touch): This model gives 100% of the credit for a conversion to the last touchpoint a user interacted with before converting. For example, if a user clicks a Google Ad and immediately requests a demo, the ad gets full credit. This is a straightforward model but often overlooks the influence of earlier touchpoints.
- Influence Attribution (Multi-Touch): This model distributes credit for a conversion across multiple touchpoints in the user's journey. Every campaign that a person interacts with before becoming an opportunity gets a percentage of the credit. This provides a more diverse and holistic view of how various campaigns contribute to building the pipeline.
Both models are valid for analysis. Direct attribution is useful for identifying which channels are closing conversions, while influence attribution is better for understanding the entire customer journey and the role each marketing effort plays. The choice of which model to use depends on the specific question you are trying to answer about your marketing performance.
What is the best way to ensure our UTM tracking parameters are captured correctly on every lead?
A primary cause of lost tracking data is the failure of UTM parameters to persist as a user navigates across your website, especially when moving from a main domain to a subdomain (e.g., from `yourwebsite.com` to `info.yourwebsite.com` for a Marketo form). When the UTMs are lost from the URL, the lead is often misattributed to 'Direct' traffic.
The most effective solution is to use Google Tag Manager (GTM) to capture the UTM parameters from the URL on the initial landing page. A tag can be configured to write these parameters into a first-party cookie. Then, another script can read the values from this cookie and populate hidden fields in your forms (like HubSpot or Marketo forms) upon submission. This ensures that even if the UTMs disappear from the URL bar during navigation, the original source, medium, and campaign data are still captured with the lead, providing accurate attribution in your CRM.
How can we accurately track a lead from the first ad click all the way to a closed deal in Salesforce?
Tracking a lead through the entire funnel from ad click to closed deal requires a connected system that passes data seamlessly between platforms. The process involves several key steps:
- Initial Click Capture: The journey begins by capturing the ad interaction using either UTM parameters or a platform-specific click identifier like the Google Click ID (GCLID). This data must be captured on the landing page.
- CRM Data Entry: When a user fills out a form, the captured tracking data (UTMs, GCLID) must be passed into the corresponding lead or contact record in your marketing automation platform (e.g., HubSpot). This is often done using hidden form fields.
- Sync to Salesforce: The lead record, now containing the initial ad interaction data, is synced from the marketing platform to Salesforce. This ensures that the sales team has visibility into the lead's origin.
- Offline Conversion Import: As the lead progresses through the sales cycle in Salesforce (e.g., becomes an MQL, SQL, or Opportunity), this status change is sent back to the ad platform (Google Ads, LinkedIn) as an 'offline conversion.' This crucial step connects the ad spend to actual sales pipeline and revenue, allowing the ad platform's algorithm to optimize for higher-quality leads, not just initial form fills.
This closed-loop system ensures that attribution data is maintained from the very first touchpoint to the final sale, providing a clear line of sight into campaign ROI.
What is offline conversion import, and how can it help us connect ad spend to actual revenue?
Offline conversion import is the process of sending lead quality and lifecycle stage data from your CRM (like Salesforce or HubSpot) back to your ad platforms (like Google Ads or LinkedIn). Instead of only tracking top-of-funnel actions like a form fill (an online conversion), this method allows you to inform the ad platform when a lead has reached a more valuable stage, such as 'Meeting Completed,' 'Sales Qualified Lead (SQL),' or 'Opportunity Created.'
This helps connect ad spend to revenue in two ways:
- Improved Reporting: It provides a clearer picture of which campaigns, ad groups, and keywords are generating leads that actually progress through the sales funnel and contribute to the pipeline. You can see not just the cost per lead, but the cost per qualified lead or opportunity.
- Smarter Bidding: By feeding this quality data back, you can use the ad platform's automated bidding strategies to optimize for these higher-value offline conversions. The algorithm learns the characteristics of users who become valuable leads and prioritizes showing ads to similar audiences. This shifts the focus from lead quantity to lead quality, ultimately improving the return on ad spend (ROAS).
Tools like Zapier or Make.com, or native integrations like the Salesforce connector for Google Ads, can be used to automate this data transfer.
We're losing UTM data when a user navigates from our main domain to a subdomain. How can we fix this?
This is a common and critical attribution problem. When a user clicks an ad and lands on `www.yourdomain.com` with UTM parameters in the URL, and then navigates to a form on a subdomain like `info.yourdomain.com`, the URL parameters are often dropped. This breaks the attribution chain, and the lead is typically recorded as 'Direct' traffic.
The definitive solution is to implement a script via Google Tag Manager (GTM) that captures the UTM parameters upon the user's first landing and stores them in a first-party cookie. This cookie will persist as the user navigates across your main domain and subdomains. A second script on your form pages can then read the data from this cookie and use it to populate hidden fields in your forms before submission. This ensures the original attribution data is captured with the lead, regardless of their navigation path on your site.
What could be causing the discrepancy between leads reported in LinkedIn and leads appearing in our CRM?
Discrepancies between LinkedIn Ads and your CRM are common and can be attributed to several factors:
- View-Through vs. Click-Through Conversions: LinkedIn may report 'view-through' conversions, which occur when a user sees an ad, doesn't click, but later converts through another channel. While LinkedIn takes credit, your CRM will attribute the conversion to the channel the user actually converted on (e.g., organic search or direct), as there is no click data to tie it back to the LinkedIn ad.
- Lead Gen Forms vs. Website Conversions: Leads from LinkedIn's native Lead Gen Forms are generally tracked accurately as they are captured directly on the platform. However, discrepancies often arise with website conversions. Technical issues, such as a broken sync between LinkedIn and your CRM or problems with your website's form submission process, can cause leads to be lost.
- Existing Contacts and Remarketing: In remarketing campaigns, you are targeting users who likely already exist in your CRM. When they convert, they may not be counted as a 'new' lead in your CRM reports, but LinkedIn will count it as a conversion for the campaign, creating a discrepancy.
- Data Sync Configuration: Similar to the Google Ads integration, if your HubSpot-to-LinkedIn connection is set to sync 'All contacts' that change lifecycle stages, LinkedIn's numbers will be higher. It will count conversions from users who may not have interacted with a LinkedIn ad in the current conversion window.
How do we handle cookie consent and its impact on our tracking accuracy?
Cookie consent is a significant factor in tracking discrepancies. When a user lands on your site and rejects tracking cookies, or if your consent mode is set to 'decline by default,' the tracking tags from ad platforms (like the Google tag or Microsoft's UET tag) will not fire.
This has two main consequences:
- Loss of Click Identifiers: The platform-specific click ID (like GCLID) associated with the ad click cannot be captured. This makes it impossible for the ad platform to directly tie a conversion back to that specific click, even if the user fills out a form.
- Underreporting in Ad Platforms: Your CRM will still record the lead when the form is submitted, as this is a first-party action. However, the ad platform will not see the conversion, leading to a higher number of leads in your CRM than conversions reported in the ad platform. For example, analysis showed that in some cases, only a fraction of leads from Bing had a corresponding click ID, indicating a high rate of cookie rejection.
While there is no way to force users to accept cookies, implementing solutions like Google's Consent Mode and using offline conversion imports with hashed first-party data (like email addresses) can help recover some of the lost conversion data and provide the ad platforms with more signals for modeling and optimization.
What is a Google Click ID (GCLID) and is it more reliable than UTMs for tracking?
A Google Click ID (GCLID) is a unique parameter that Google automatically appends to the URL when a user clicks on one of your ads (if auto-tagging is enabled). Its primary purpose is to link ad interactions with website activity and conversions.
UTM parameters, on the other hand, are manual tracking tags you add to URLs to track campaign performance across various platforms, not just Google.
Neither is inherently more reliable; they serve slightly different functions and have their own vulnerabilities:
- GCLID: It is essential for importing offline conversions back into Google Ads. Google uses the GCLID to match the conversion data from your CRM to the specific ad click that generated the lead. However, its reliability is compromised by privacy features in browsers like Safari (Intelligent Tracking Prevention), which can strip the GCLID from URLs, and by users who reject tracking cookies.
- UTMs: They are more universal and can be used for tracking across any platform (Google, LinkedIn, email, etc.). They are crucial for consistent internal reporting within your analytics and CRM. However, they can also be lost if not handled correctly, such as when a user navigates to a subdomain.
Best practice is to use both. Enable auto-tagging in Google Ads to capture the GCLID for robust integration with Google's ecosystem (especially for offline conversions), and also use UTM parameters for a consistent, cross-platform internal attribution framework.
Is it possible that our CRM setup is causing duplicate conversions to be reported?
Yes, it is possible for your CRM setup and its integration with ad platforms to cause duplicate or inflated conversion reporting. There are two primary ways this can happen:
- Multiple Submissions: If your ad platform's conversion tracking is set to count 'Every' conversion instead of 'One' conversion, a single user who submits the same form multiple times will be counted as multiple conversions in the ad platform. This setting should be reviewed and set to 'One' for lead generation goals to ensure each user is only counted once.
- Lifecycle Stage Counting: When you import offline conversions from your CRM, ad platforms may count each new stage as a separate conversion. For example, a single lead who first becomes a Marketing Qualified Lead (MQL) and later a Sales Qualified Lead (SQL) might be reported as two separate conversions in Google Ads (one MQL conversion and one SQL conversion). This inflates the total conversion count, even though it's the same person progressing through the funnel. It's important to understand this behavior when analyzing reports and to consider optimizing for only the most important, bottom-funnel stage to avoid this inflation.
How can we set up a unified dashboard in Looker Studio that pulls data from Google Ads, HubSpot, and Salesforce?
Creating a unified dashboard in Looker Studio (now Google Data Studio) is a key goal for achieving a single view of performance. This involves connecting multiple data sources and blending them to compare metrics side-by-side.
The process generally involves these steps:
- Data Sources: You need to connect each platform as a data source within Looker Studio. This is done using 'connectors.'
- Google Ads: Has a native, free connector.
- HubSpot & Salesforce: Do not have native connectors. You will need to use a third-party connector, such as one from Supermetrics. These are typically paid services that handle the API connection and data transfer.
- Dashboard Creation: Once the data sources are connected, you can build charts and tables in your Looker Studio report. You can pull 'Ad Spend' from the Google Ads source and 'Leads' or 'Opportunities' from the HubSpot or Salesforce source.
- Data Blending: To compare metrics directly in a single chart (e.g., Ad Spend vs. SQLs), you would use Looker Studio's 'data blending' feature. This allows you to join the different data sources on a common key, such as 'Date' or 'Campaign Name,' to create unified visualizations.
- Maintenance: It's important to be aware of potential API issues. For example, problems with the LinkedIn API via Supermetrics have caused data inconsistencies in the past, requiring troubleshooting.
By setting up such a dashboard, you can directly compare the conversions reported by Google Ads against the leads and pipeline generated in your CRM, making it easier to spot and investigate discrepancies.
Why are some leads attributed to 'Direct Traffic' when we know they came from a paid campaign?
This is a classic symptom of broken attribution tracking. When a lead that originated from a paid campaign is recorded in your CRM as 'Direct Traffic,' it means the tracking parameters (like UTMs or a click ID) were lost somewhere between the ad click and the form submission.
The most common cause is cross-domain or subdomain navigation. For example:
- A user clicks a paid ad with the URL `https://yourwebsite.com/?utm_campaign=xyz`.
- On that page, they click a 'Request a Demo' button that takes them to a form hosted on a subdomain, like `https://info.yourwebsite.com/demo`.
- During this navigation, the browser often drops the UTM parameters from the URL.
- When the user submits the form on the subdomain, there are no tracking parameters present, so your CRM cannot identify the original source. It defaults to attributing the lead to 'Direct Traffic' because it appears the user typed the URL directly into their browser.
The solution is to implement a persistent tracking method, such as using Google Tag Manager to store the original UTM parameters in a first-party cookie. This cookie can then be accessed on the conversion page to correctly populate the lead source information, ensuring proper attribution.


