How to Connect Google Ads, HubSpot and Search Console

Amruthavarshini
June 30, 202617 min read
connect Google Ads HubSpot Search Console
connect Google Ads HubSpot Search Console

The Google Ads dashboard says $127 CPL. The CRM shows $1,588 as the true cost per SQL. Only 12% of B2B SaaS companies have full pipeline attribution connecting ad spend to CRM revenue. The other 88% optimise based on CPL, a metric that tells you nothing about revenue.

That gap exists because most teams complete step one of a two-step connection and stop. Step one is the technical integration, GCLID capture, auto-tagging, offline conversion import, and audience sync. Every tutorial covers this. Most teams complete it and assume attribution is working.

Step two is data normalisation, making three platforms that handle dates, attribution windows, conversion events and campaign naming conventions differently speak the same language. Almost nobody covers this. This is where attribution breaks even after the technical connection is live.

This post covers the four specific mistakes that produce wrong attribution data even after the integrations are set up, and what the connected system looks like when all three sources work together.

At a Glance

  • 88% of B2B SaaS companies cannot connect a specific ad click to a specific closed-won deal. Most optimise based on CPL, a vanity metric that tells you nothing about revenue. The technical integration alone does not close this gap.

  • For B2B SaaS, offline conversion tracking, sending CRM events like MQL, SQL and closed-won back to Google Ads, is the single highest-leverage change most accounts can make. Feed Smart Bidding form fills and it optimises for form fills. Feed it pipeline signals and it optimises for pipeline.

  • GCLID expires after 90 days from the initial click. This creates immediate problems for enterprise SaaS companies with sales cycles longer than three months, standard GCLID tracking loses attribution before deals complete. Importing earlier funnel milestones like MQL and SQL is how you preserve the link before it breaks.

  • Implementing offline conversion tracking typically improves SQL volume by 30-50% at the same ad spend level, across 300+ B2B SaaS accounts. The improvement comes from Smart Bidding learning to optimise for clicks that produce SQLs rather than clicks that produce any form fill.

  • Search Console data left in isolation is the most underused intelligence in most B2B SaaS marketing stacks. Connected to HubSpot, it reveals which organic queries are generating sessions that convert to pipeline, not just traffic.

Why Three-Way Attribution Changes the Questions You Can Answer

Most B2B SaaS marketing teams run Google Ads, HubSpot and Search Console as three separate systems that each tell a partial story. Google Ads reports on what happened inside the platform, impressions, clicks, form fill conversions. HubSpot tracks the contact lifecycle from lead through to closed-won deal. Search Console shows which organic queries are driving sessions to which pages.

None of these alone can answer the questions that actually guide budget allocation. Together they can.

Which Google Ads keywords are generating closed-won HubSpot deals, not just form fills? Which organic Search Console queries are producing sessions that convert to pipeline, not just traffic? Which campaigns are generating in-pipeline contacts still receiving awareness ads? Which campaigns are generating high MQL volume with zero opportunity conversion rate?

These are the questions the wasted ad spend post covers in terms of waste detection. Building the three-way connection is the prerequisite that makes waste detection possible and accurate. Without it, the waste is invisible not because it does not exist but because the data to surface it does not exist in a connected form.

Mistake 1 — Attribution Windows Are Misaligned Across All Three Platforms

This is the mistake that most teams do not discover until they run a quarterly attribution analysis and find that campaigns generating significant pipeline look like underperformers.

Google Ads defaults to a 30-day click attribution window. For a B2B SaaS team with a 90-day average sales cycle, a 30-day window misattributes 60-70% of closed deals that originated from paid clicks. The campaign that sourced the deal gets no credit because the deal closed outside the window.

GCLID expires after 90 days from the initial click. If a deal takes longer than that to close, the attribution link disappears entirely unless earlier funnel stages were recorded while the GCLID was still active.

The solution is importing pipeline milestones rather than waiting for closed-won. A lead clicks a Google Ad today. They become an MQL in ten days and an SQL at day 45. The deal closes at day 110. Waiting until day 110 to import the conversion means the GCLID is expired and the attribution chain is broken. Importing the MQL at day 10 and the SQL at day 45, both within the 90-day window, preserves the connection from the original click to the eventual revenue outcome.

Window typeDefault behaviourRecommended for B2B
Google Ads GCLID retentionUp to 90 daysSave GCLID in CRM and import milestones before the 90-day limit
Google Ads conversion window30 days by defaultSet to 60-90 days to capture early pipeline activity
HubSpot attribution lookbackVaries by report typeMatch HubSpot windows to Google Ads settings

Checklist:

  • Turn on auto-tagging in Google Ads — Settings → Account Settings → Auto-tagging → Yes. This is the foundational step that allows GCLID to pass into HubSpot contact records.
  • Set up conversion actions for each lifecycle stage: MQL, SQL, Demo Completed, Opportunity Created, Closed Won. Assign staged values, MQL at $10-50, SQL at $100-500, Opportunity at higher value, Closed Won at full deal amount. Mark Closed Won as the primary conversion and earlier stages as secondary. This gives Smart Bidding the full funnel signal rather than just the top.
  • Import earlier stage conversions within 90 days. The goal is to preserve the GCLID link for enterprise deals that close beyond the 90-day window.
  • In 2026, Google's recommended setup is Enhanced Conversions for Leads, not legacy GCLID imports. Enhanced Conversions adds hashed first-party data from the form as a second match key, so even when GCLID is not captured, the hashed email can still make the attribution match.

Mistake 2 — UTM Conventions Are Inconsistent and Create Duplicate Sources

UTM naming errors compound silently. The same Google Ads campaign appears as three different source records in HubSpot because auto-tagging and manual UTMs are formatted differently. Case sensitivity creates separate entries, "Paid_Search" and "paid_search" are treated as different sources. Long descriptive names for quick tests become impossible to aggregate in reporting.

HubSpot treats every UTM variation as a unique source. A single capital letter where a lowercase one should be creates a separate campaign entry and fragments the attribution data. Merging these duplicates later is manual, time-consuming work that most teams never fully complete.

Search Console tracks by query and page, not by UTM tag. The connection point between Search Console organic data and HubSpot contact records is the landing page URL, which means URL normalisation matters. Trailing slashes, www versus non-www, and parameter variations on the same page create mismatches that break the organic-to-CRM connection.

Governance workflow:

Write a naming convention document before anything goes live. Enforce source and medium values consistently, always lowercase, always underscored. Use a linting script or a UTM builder tool that flags non-conforming links before they are published. Set HubSpot forms to pull UTM data into specific contact properties. Pull GCLID population rate from HubSpot monthly, export contacts created in the past 30 days, filter for the hs_google_click_id property populated, and calculate the percentage with valid GCLID values. If capture rate falls below 70%, investigate landing page configuration, redirect chains stripping query parameters, or form builders failing to pass URL parameters to hidden fields.

Better decisions start with better infrastructure.

Most mid-market teams pick a channel and hope. Strivelabs gives you the data to know, and the infrastructure to act on it.

Book a Demo →

Mistake 3 — Search Console Data Lives in Isolation

Most teams check Search Console weekly to look at top queries. It informs SEO decisions and is not connected to pipeline reporting. This treats organic traffic as a traffic metric rather than a revenue signal.

Search Console shows which queries bring people to which pages, at what ranking position and click-through rate. Alone, this is useful for SEO. Connected to HubSpot, it reveals which organic queries are producing sessions that convert to contacts that progress to deals. A long-tail query at position 12 with low click volume might be bringing in the highest-intent visitors in the entire organic program, visitors who convert to opportunities at 34% because the query intent perfectly matches the problem a specific product solves. Without the HubSpot connection, this query looks unremarkable. With it, it becomes a priority to protect and expand.

This connection changes which pages get refreshed first. The content refresh strategy post covers how the SEO workflow automation layer connects Search Console decay signals to HubSpot pipeline attribution to prioritise refresh by revenue impact rather than traffic volume.

Making the connection:

Export Search Console data or pull via API. Normalise URLs before joining to HubSpot, clean trailing slashes, www prefix and parameter variations. Use the URL as the primary join key. Join organic sessions to HubSpot contact records using the landing page URL from first touch source data. Build a report that shows, per organic query: impressions, clicks, page ranking, and the number of contacts, MQLs, SQLs and opportunities that first-touched that page.

The specific questions this answers that separate analytics cannot: which organic queries bring visitors who convert to pipeline at the highest rate? Which queries are driving sessions that look healthy in Search Console but generate zero HubSpot opportunities? Which queries produce sessions that convert to the highest average deal value?

Mistake 4 — Optimising Google Ads for Form Fills Instead of Pipeline Stages

When a campaign optimises for form fill conversions, Smart Bidding finds the cheapest path to form fills. In B2B SaaS, the cheapest path to form fills is rarely the path to qualified pipeline. It is students, researchers, small businesses below ICP threshold, and job seekers. The cost per lead looks acceptable. The cost per SQL is 10 to 15 times higher than the dashboard suggests.

B2B SaaS companies typically see 30-50% improvement in SQL volume at the same spend level after implementing offline conversion tracking. The improvement comes from Google's Smart Bidding algorithm learning to optimise for clicks that produce SQLs and revenue, instead of clicks that produce any form fill. The effect compounds over time as the algorithm accumulates more offline conversion data.

Building the offline conversion import:

Define milestones in HubSpot first, which lifecycle stage transitions matter and in what order. Create a conversion action in Google Ads for each stage. Assign values that reflect pipeline weight, SQL at some fraction of average deal value, Opportunity at a higher fraction, Closed Won at actual deal value. Build a HubSpot workflow that triggers an API call to Google Ads offline conversion import when a contact transitions between stages, passing the GCLID and the conversion timestamp.

Once you have 30 or more offline conversions per month flowing, switch bidding strategy to Target CPA against the offline SQL event rather than the form fill event. This is when Smart Bidding begins meaningfully optimising toward pipeline quality.

Mark Closed Won as the Primary conversion and earlier stages as Secondary. Primary conversions inform Smart Bidding. Secondary conversions track without influencing bids, they show the funnel without distorting optimisation.

Data Normalisation — Making Three Platforms Speak the Same Language

The technical connection is necessary but insufficient. Three platforms that handle dates, naming conventions and attribution windows differently will produce conflicting numbers even after the integrations are live. Normalisation is the translator layer.

FieldBefore normalisationAfter normalisation
Campaign name"Q2-Launch_FB_Ad_A" or "q2-launch-facebook""2026_Q2_Launch_paid-facebook"
UTM medium"cpc", "paid", "ppc""paid_search"
Conversion event"form_submit", "demo-request", "contact""lead:MQL"

Normalising campaign naming: Use a date-prefix-campaign-channel format for every campaign link. Enforce lowercase with underscores for source and medium values. Put creative identifiers in the content token rather than embedding them in campaign names, this keeps campaign-level aggregation clean while preserving creative-level tracking.

Normalising conversion events and values: Map HubSpot lifecycle stages to a single conversion naming system. MQL maps to "lead:MQL" in Google Ads. SQL maps to "lead:SQL." Closed Won maps to "revenue:closed_won" with the actual deal amount or expected revenue. This single naming convention allows reporting that shows true cost per pipeline stage across the connected system rather than separate cost-per-event metrics across three separate dashboards.

Aligning timezones: Set Google Ads, HubSpot and Search Console to the same timezone. Morning reports that look inconsistent compared to the previous night's data are almost always a timezone misalignment. Document the primary timezone in the naming convention document and enforce it across all data exports.

How Strivelabs Reads and Acts on the Connected Data

Connecting Google Ads, HubSpot and Search Console is the infrastructure layer. The Strivelabs agent is the intelligence layer that reads all three simultaneously and detects the patterns that weekly manual reviews miss.

The AI agents for paid media post covers how the paid media agent detects in-pipeline waste, contacts who moved to Opportunity in HubSpot still appearing in Google Ads and LinkedIn awareness audiences, and queues audience suppression within 24 hours of the HubSpot stage change rather than waiting for the next weekly list export.

The wasted ad spend post covers how the agent surfaces zero-pipeline campaigns, campaigns generating MQL volume with zero opportunity conversion rate, by reading campaign-level contact records from Google Ads against HubSpot opportunity creation data on a 30-day rolling basis.

The marketing reporting automation post covers how the Monday morning report is built automatically from all three connected sources, showing cost per pipeline stage by channel, which organic queries are in deal attribution paths, and which campaigns are generating in-pipeline waste, before the marketer opens a dashboard.

When the agent detects a 23% drop in CTR on a high-spend ad group alongside a Search Console impression drop on the same landing page, it does not treat them as separate signals. It surfaces both in the same alert with a combined diagnosis and queues a recommended action for approval before any budget changes. The marketer reviews the reasoning and approves. No spend moves without sign-off.

The closed loop marketing post covers the full architecture that connects paid media, organic and CRM data into a single continuous pipeline reporting loop rather than three separate systems that need to be manually reconciled every Monday.

Validation — How to Confirm the System Is Actually Working

Connecting the tools is not the same as confirming the attribution is accurate. Run these four checks within the first two weeks of going live.

Full journey trace. Pick a recent closed-won deal. Trace it backwards from the closed-won date in HubSpot to the original Google Ads click or organic Search Console query. A working system shows an unbroken chain: query or ad click, session, form fill, GCLID in HubSpot contact property, MQL import in Google Ads, SQL import, Closed Won event. If any link is missing, the attribution is incomplete.

GCLID persistence check. Click your own ads using a test user and complete a form. Inspect the resulting HubSpot contact record within five minutes — the hs_google_click_id property should be populated. Check that Google Ads accepted the subsequent offline conversion import for this test contact. If the property is empty or the import fails, GCLID is not being captured correctly at the form level.

UTM duplicate audit. Generate a report of every unique UTM source and medium combination currently in HubSpot contact records. Any combination that appears in multiple near-identical variations — same campaign, different casing or formatting — indicates a naming convention breach that is fragmenting attribution data.

Search Console to pipeline mapping. Confirm that the pages generating the most HubSpot pipeline appear in Search Console export data connected to relevant organic queries. If high-pipeline pages are not appearing in the organic query mapping, the URL normalisation step needs revisiting.

A discrepancy between Google Ads conversion counts and HubSpot deal counts of 5-30% is normal given different attribution models. Investigate immediately if discrepancies exceed 30% for more than two consecutive weeks.

Weekly Operations to Maintain the Connection

A connected system degrades without maintenance. Someone needs to own the weekly checks that keep attribution reliable.

Weekly: review GCLID capture rate on new forms, confirm data is moving from Google Ads through to HubSpot contact properties. Check that MQL and SQL offline imports arrived in Google Ads before the 90-day windows close on outstanding leads. Fix UTM errors on links published in the past week. Confirm the HubSpot-Google Ads audience sync is running without errors. Check Search Console for ranking drops on pages with high HubSpot pipeline attribution, these are priority refresh candidates.

When a contact reaches SQL or Opportunity stage in HubSpot, automation removes them from prospecting audiences on Google Ads and LinkedIn. This prevents awareness ads from continuing to run against contacts already in active sales conversations, the specific waste type covered in the AI agents for CRM post.

The marketing engineer function, delivered as software.

See how Strivelabs gives mid-market teams the operational capacity without the hiring cost.

Explore Strivelabs →

Frequently Asked Questions (FAQs)

Why do Google Ads and HubSpot conversion numbers never match?

Because they use different attribution logic and different counting methodologies. Google Ads counts every click event and its associated conversion. HubSpot tracks the contact lifecycle across multiple touchpoints. A 5-30% variance is normal and expected. Investigate immediately if the gap exceeds 30% for two consecutive weeks — the most common causes are GCLID capture failures, timezone mismatches in report date ranges, and attribution window differences between the two platforms.


What is the maximum attribution window for Google Ads and HubSpot?

GCLID expires after 90 days — this is a hard limit. Google cannot match offline conversions to clicks older than 90 days. For enterprise B2B SaaS teams with sales cycles longer than 90 days, import earlier funnel milestones — MQL and SQL — while the GCLID is still active. This preserves the attribution chain for deals that close beyond the 90-day window. In 2026, Enhanced Conversions for Leads provides a second match key using hashed email, which helps when GCLID is not captured or gets stripped in transit.


Why does optimising for form fills hurt B2B pipeline quality?

Smart Bidding finds the cheapest path to the conversion event you specify. For form fills, the cheapest path is often low-intent users — students, researchers, small businesses below ICP threshold. The cost per lead looks acceptable on the dashboard. The cost per SQL is 10 to 15 times higher. Importing offline conversion signals — MQL, SQL, Opportunity, Closed Won — teaches Smart Bidding which clicks actually produce pipeline and concentrates spend toward those patterns.


How do inconsistent UTMs create duplicate sources in HubSpot?

HubSpot treats every unique UTM combination as a separate source. A capital letter where a lowercase one should be creates a new campaign entry. The same campaign appearing as "paid_search" in one context and "Paid-Search" in another generates two separate source records that cannot be merged automatically. These duplicates fragment attribution data and make it impossible to see accurate total performance for any campaign that has been tagged inconsistently.


What does Search Console add to HubSpot attribution that Google Ads cannot provide?

Search Console provides organic query-level intelligence that Google Ads cannot see. The specific organic queries driving sessions, at what ranking position and click-through rate, and to which landing pages. Connected to HubSpot, this reveals which organic queries produce sessions that convert to pipeline — not just traffic. This changes content refresh prioritisation from traffic-based to pipeline-based, which is the most significant practical impact of making the three-way connection.