SteerAds
TutorialGoogle AdsSalesforceOffline conversion

Salesforce + Google Ads offline conversions 2026: complete setup guide

A complete 2026 setup guide for connecting Salesforce to Google Ads offline conversions β€” GCLID capture in leads and opportunities, offline conversion import via the connector and API, opportunity-stage to value mapping, Enhanced Conversions for Leads, Salesforce Flow automation, and attribution reconciliation for long B2B cycles.

Elon
ElonB2B & Enterprise PPC Strategist
Β·Β·Β·6 min read

If your business closes deals through a sales team in Salesforce rather than a checkout, optimizing Google Ads toward form submissions is optimizing toward the wrong thing. A lead form tells the algorithm someone raised a hand; it says nothing about whether that hand belonged to a qualified buyer or a tire-kicker, an enterprise account or a student doing research. Smart Bidding will dutifully chase whatever you tell it to value β€” and if you value form fills, you will get more form fills and not necessarily more revenue. Offline conversion import closes this loop by sending the outcomes that actually matter back to Google Ads.

This tutorial is written for Salesforce admins and B2B marketing operators who need a working, maintainable pipeline from a Google ad click through to a closed Salesforce opportunity. We will cover GCLID capture, the two import paths (the native connector and the Google Ads API), opportunity-stage-to-value mapping, Enhanced Conversions for Leads, Salesforce Flow automation, and the attribution reconciliation that long sales cycles demand. The mechanics are not hard, but the order of operations matters β€” and one missed step (carrying the GCLID through lead conversion) silently breaks the whole chain.

The single most common failure: the GCLID dies at conversion :

Teams capture the GCLID on the Lead, celebrate, and move on β€” then discover months later that nothing attributes, because when the Lead converts to a Contact and Opportunity, the GCLID was left behind on the dead Lead record. The Opportunity that eventually closes has no click ID to import against. A Salesforce Flow that copies the GCLID forward at conversion is the unglamorous step that makes the entire pipeline work. Build it first, test it second, before you touch Google Ads.

Why B2B needs offline conversions, not form fills

The case for offline conversions is the case against optimizing toward leads. In a B2B funnel, the distance between a form fill and revenue is enormous. Walk a typical conversion chain:

  • Contact form to sales-accepted lead: ~30%.
  • Sales-accepted lead to qualified opportunity: ~40%.
  • Qualified opportunity to closed-won: ~25%.

Multiply it through and a single form fill is worth roughly 3% of a closed deal β€” and not all form fills are equal. Some campaigns generate lots of cheap, low-quality fills; others generate fewer, expensive, high-quality ones. If you optimize toward fills, Smart Bidding will favor the cheap-fill campaigns and starve the ones producing real pipeline.

Offline conversion import fixes the incentive. By sending qualified opportunities and closed-won deals back to Google Ads β€” stitched to the original click via the GCLID β€” you let Smart Bidding learn which keywords, audiences, and creative produce revenue, not just hand-raises. Accounts that make this switch routinely see the bidding shift spend away from high-volume, low-quality lead sources toward the harder, more expensive clicks that actually close. The reported lead volume often drops; the pipeline and revenue rise. That is the correct outcome, even though it looks worse on a vanity metric.

There is a second benefit specific to value-based bidding. Once you import deal values β€” not just the fact of a conversion but its monetary worth β€” bidding can mature in two ways:

  • Move from Target CPA to Target ROAS, telling Google to chase high-value pipeline rather than treating a €5,000 deal and a €500,000 deal as identical conversions.
  • Differentiate by deal size within campaigns, so the algorithm leans into the keywords and audiences that produce large opportunities, not just frequent small ones.

This is transformative for businesses with wide deal-size variance, which describes most B2B.

The prerequisite for all of this is connecting Salesforce, where deal outcomes live, to Google Ads, where bidding happens. The rest of this guide builds that connection. For the strategic framing of running Google Ads for a B2B motion overall, our B2B SaaS Google Ads strategy guide provides the campaign-level context this tutorial assumes.

Capturing GCLID in Salesforce leads and opportunities

The GCLID (Google Click Identifier) is the thread that ties everything together. When auto-tagging is on, Google appends a unique gclid parameter to the URL of every ad click. Capturing and preserving that value through your entire funnel is the foundation of GCLID-based offline import.

Step one: turn on auto-tagging. In Google Ads under Account settings, confirm auto-tagging is enabled. Without it, there is no GCLID to capture and this entire approach is impossible. (If you also run Microsoft Ads, the equivalent is MSCLKID β€” the pattern is identical but the parameter name differs.)

Step two: capture it on the landing page. When a user arrives from an ad, the gclid is in the URL. A small script should read it, write it to a first-party cookie with a 90-day lifetime so it survives a multi-page browsing session, and then populate a hidden form field on every lead-capture form on the site. Capture the click timestamp at the same time β€” you will need it later for window management. The hidden field flows through on submission and lands on the Salesforce Lead record.

Step three: create the Salesforce fields. Add custom fields to the Lead object: a GCLID text field (make it long enough β€” GCLIDs can be 100+ characters; never truncate) and a click-date field. These are where the captured values land.

Step four β€” and this is the critical one: carry the GCLID forward. Salesforce lead conversion creates a Contact, an Account, and usually an Opportunity, and by default custom Lead fields do not automatically map to the Opportunity. To preserve the identifier:

  • Add matching GCLID and click-date fields to the Contact and Opportunity objects.
  • Build a Flow (covered in detail later) that copies the values across at the moment of conversion.
  • Verify the import runs against the Opportunity's GCLID, since the Opportunity is what eventually closes.

If the identifier only ever lives on the Lead, every closed deal will be unattributable β€” this is the most common reason an otherwise-correct setup attributes nothing.

A quick validation ritual after setup: submit a real test lead by clicking one of your own live ads, then trace the GCLID from URL, to cookie, to hidden field, to Lead record, and finally β€” after a test conversion β€” to the Opportunity. If it survives that whole chain intact, your capture layer is sound. If it dies anywhere, fix it before configuring Google Ads.

Two import paths: the Salesforce connector vs the API

Once GCLIDs are flowing onto opportunities, you need a mechanism to send closed deals back to Google Ads. There are two, and choosing correctly saves weeks.

Path A β€” the native Salesforce connector (no code). Google Ads offers a built-in Salesforce integration configured under Tools and linked accounts. You authenticate to Salesforce, then map Salesforce lead and opportunity stages to Google Ads conversion actions, and map the Opportunity amount and probability fields to conversion value. From then on, when an opportunity reaches a mapped stage, the connector imports a conversion automatically, stitched via the stored GCLID. For standard Sales Cloud setups this is the right default β€” an admin can run the whole thing without a developer, and Google maintains the plumbing.

Path B β€” the Google Ads API (full control). For non-standard data models, custom objects, very high conversion volumes, complex value logic, or strict governance requirements, you build a scheduled job that uploads click conversions directly through the Google Ads API. You query Salesforce for newly closed (or newly staged) opportunities with a GCLID, format them as click-conversion uploads (GCLID, conversion action, time, value, currency), and send them on a schedule. More work, more flexibility, and necessary once you outgrow the connector.

A pragmatic recommendation: start with the connector if your model is standard. It gets you a working revenue-attributed pipeline fast, proves the concept to stakeholders, and surfaces data-quality issues (capture gaps, window problems) early. Migrate to the API only when a concrete limitation forces it β€” most B2B accounts never need to. If you eventually run a Customer Data Platform or warehouse-centric stack, the API path also slots into a broader server-side measurement approach; our enhanced conversions setup guide covers the adjacent server-side patterns.

Mapping opportunity stages to conversion values

Deciding which milestones to import, and what to value them, is where offline conversion strategy lives. Get this wrong and even a perfectly built pipeline optimizes toward the wrong thing.

Import multiple stages, not just closed-won. The instinct is to import only the final sale, but closed-won volume is almost always too low for Smart Bidding to learn from β€” an algorithm needs roughly 30+ conversions per month per campaign to optimize well, and most B2B accounts do not close that many deals. So the standard pattern is a two-tier setup: a mid-funnel conversion (sales-accepted lead or qualified opportunity) as the primary optimization target because it occurs at sufficient volume and within the GCLID window, and closed-won as a secondary conversion for reporting and, eventually, value-based bidding once volume permits.

Value each stage with stage-weighted expected value. Do not send the full contract amount for a deal that has not closed β€” that overstates revenue from pipeline that may evaporate. Instead multiply the opportunity amount by the historical win rate of its current stage:

This gives Smart Bidding a probabilistic revenue signal that reflects pipeline quality. A campaign producing many proposal-stage opportunities sends stronger value signals than one producing only early-stage leads, and bidding shifts accordingly.

Restate values as deals progress. When an opportunity advances or closes, send a conversion adjustment that restates the value to the new probability β€” or to the realized amount at closed-won. This keeps the algorithm learning from current reality rather than a frozen snapshot from one moment in the deal's life. The connector handles basic value mapping; full restatement control is one of the reasons accounts migrate to the API. For the broader principles of attaching real values to conversions, the conversion tracking guide is a useful companion.

A final note on currency and counting: set each conversion action to count one per click (a single opportunity should not multiply into many conversions) and be meticulous about currency codes and time zones in uploads β€” formatting mismatches are a leading cause of silently rejected rows.

Enhanced Conversions for Leads as the GCLID-free fallback

GCLID-based import is precise but fragile. It fails whenever the GCLID was never captured (auto-tagging off, the hidden field not populated, a direct or organic first touch) or expired (the deal closed beyond the 90-day window). Enhanced Conversions for Leads (ECL) is the resilient complement that recovers these otherwise-lost deals.

How ECL differs from GCLID import. Instead of relying on a click ID stored at the moment of the click, ECL matches a hashed identifier β€” typically the lead's email, optionally phone β€” that you upload with the conversion event against the click Google already has on record for that signed-in user. You do not need to have captured a GCLID at all. Google does the matching on its side using the hash. This makes ECL far less sensitive to capture failures and timing, at the cost of slightly less granular attribution than a direct GCLID stitch.

How to set it up:

  • Enable Enhanced Conversions for Leads in your Google Ads conversion settings.
  • Capture the lead's email (and phone) at form submission β€” which Salesforce already stores.
  • Normalize and hash it with SHA-256 before transmission (the tag or upload mechanism can auto-hash).
  • Include the hashed identifiers when you upload the conversion event for a closed or qualified opportunity; Google matches and credits the conversion.
  • Use distinct conversion actions from your GCLID-based import so the two approaches complement rather than double-count.

Run both, deliberately. The mature 2026 setup is belt-and-suspenders: GCLID-based offline import where the GCLID exists and is in-window, ECL to recover the deals where it does not. Together they push your attributed share of closed deals far higher than either alone β€” many B2B accounts go from attributing 40-50% of closed-won to 75-85% by adding ECL on top of GCLID import. The hashing and privacy mechanics are identical to standard Enhanced Conversions, which our enhanced conversions setup guide documents in full, including normalization rules and GDPR considerations.

Treat the GCLID as your precise instrument and Enhanced Conversions for Leads as your safety net. The GCLID gives you exact attribution when everything works; the hashed-email match catches the long-cycle deals and capture gaps that the GCLID inevitably misses. Running only one of them leaves measurable revenue uncredited.

β€” A practical rule for B2B measurement

Automating the pipeline with Salesforce Flow

A reliable offline conversion pipeline is mostly Salesforce automation. Flow is the modern, no-code tool for this, and three flows carry the load.

Flow 1 β€” carry the GCLID forward at lead conversion. This is the load-bearing flow. Trigger it on Lead conversion (or on Opportunity creation from a converted Lead), find the originating Lead's GCLID and click-date, and write them to the new Opportunity (and Contact). Without this, the identifier dies at conversion. Build it as a record-triggered flow, test it against a real converted lead, and add error notifications so a silent failure does not go unnoticed for months. Everything downstream depends on this single flow doing its job every time.

Flow 2 β€” compute and stamp the conversion value. When an Opportunity reaches a stage you import, calculate the stage-weighted expected value (amount times the stage's historical win rate) and write it to a field the connector or API job reads. Centralizing the value logic in a flow β€” rather than scattering it across the connector configuration β€” makes the win-rate assumptions auditable and easy to update as your funnel maturity changes. Maintain the per-stage win rates in a custom metadata table so updating them does not require editing the flow itself.

Flow 3 β€” trigger restatement on stage change or close. When an Opportunity advances or closes, flag it for a value adjustment so the pipeline sends an updated conversion value. If you are on the API path, this flow can write to a queue object that your upload job processes; on the connector path, it ensures the value field reflects the latest stage before the next sync. Closed-won should restate to the realized amount.

Beyond these three, a few automation hygiene practices pay off:

  • Validation rules that warn when an Opportunity reaches a sales stage without a GCLID and without an email β€” that combination means the deal will be invisible to both import paths and signals a capture problem worth fixing upstream.
  • A coverage dashboard that tracks GCLID coverage on opportunities over time, so capture regressions surface immediately rather than at the next quarterly audit.
  • Documentation of every flow, field, and mapping; offline conversion pipelines are notorious for breaking quietly when someone unrelated edits a form, a flow, or a stage definition months later.

Salesforce Trailhead has thorough, free modules on Flow and lead conversion if your team needs to skill up on the automation itself; the patterns above are standard Flow, not anything exotic.

Reconciling attribution across long sales cycles

The defining challenge of B2B offline conversions is time. When a sales cycle runs 90, 120, or 180 days, the gap between click and revenue stresses every part of the system β€” the GCLID window, Smart Bidding's learning, and your ability to trust the numbers.

The 90-day window problem. Google accepts offline uploads for a click up to 90 days after it occurred. Any deal that closes beyond that cannot be imported against its GCLID. There are three mitigations, used together. First, optimize toward a mid-funnel conversion that lands inside the window β€” a qualified opportunity at day 30 is importable even if closed-won at day 130 is not. Second, extend the conversion window in your conversion action settings where supported, to capture as much of the cycle as possible. Third, lean on Enhanced Conversions for Leads, which is far less sensitive to the timing because it matches on hashed identifiers rather than a click ID that ages out. The combination means even very long cycles remain measurable.

The Smart Bidding learning problem. Smart Bidding learns from conversions as they are reported, so a long lag means today's bids are informed by clicks from one to three months ago. This is unavoidable, but importing the mid-funnel conversion shortens the effective feedback loop β€” the algorithm gets a quality signal at day 30 instead of waiting for day 130. It also argues for patience: do not judge a B2B account's bidding changes on a two-week horizon when your cycle is two months. Evaluate over a window at least as long as your sales cycle.

The three mitigations for the 90-day window, applied together:

  • Optimize toward a mid-funnel conversion that lands inside the window β€” a qualified opportunity at day 30 is importable even when closed-won at day 130 is not.
  • Extend the conversion window in your conversion action settings where supported, to capture as much of the cycle as possible.
  • Lean on Enhanced Conversions for Leads, which matches on hashed identifiers and ages out far less aggressively than a click ID.

The reconciliation discipline. Monthly, reconcile three numbers and chase every gap:

If imported conversions lag closed-won, investigate capture failures, out-of-window uploads, and formatting rejections. If GCLID coverage is low, the problem is upstream in capture or the carry-forward flow. Healthy mature accounts attribute 70-85% of closed-won across GCLID import plus ECL; if you are well below that, the leak is almost always capture, not Google.

Finally, remember that Google Ads is one channel in a multi-touch B2B journey that often also includes LinkedIn, email, and events. Offline conversion import gives Google Ads credit for the clicks it influenced, but it does not resolve cross-channel overlap. Once single-channel attribution is solid, layer in cross-channel attribution to understand how Google works alongside your other demand sources.

30-day implementation playbook for SF admins

The HowTo schema above is the day-by-day checklist. Here is the strategic framing of the four-week build.

Week 1 β€” foundation and capture. Confirm auto-tagging, agree the conversion milestones with sales, and build the website-to-Lead GCLID capture. By end of week one, a test lead from a real ad click should carry its GCLID all the way to the Lead record. No Google Ads configuration yet β€” capture must be proven first, because everything downstream is worthless without it.

Week 2 β€” propagation and conversion actions. Build the Flow that carries the GCLID through lead conversion to the Opportunity, and create the conversion actions in Google Ads (qualified-opportunity primary, closed-won secondary). By end of week two, a test lead-to-opportunity conversion should propagate the GCLID, and your conversion actions should be configured and ready to receive imports.

Week 3 β€” connection and fallback. Stand up the import mechanism (connector for standard models, API job otherwise), wire the stage-to-value mapping, and add Enhanced Conversions for Leads as the hashed-identifier fallback. By end of week three, real closed and qualified opportunities should begin importing, and ECL should be recovering deals without a GCLID.

Week 4 β€” value refinement and reconciliation. Finalize stage-weighted value logic, add restatement adjustments, and run the first reconciliation of closed-won versus imported versus GCLID coverage. By end of week four you have a working, revenue-attributed pipeline and a monthly process to keep it honest.

After the build, this becomes ongoing hygiene: monitor GCLID coverage for regressions, update stage win rates as your funnel data matures, reconcile monthly, and resist judging long-cycle bidding changes on short horizons. Once revenue is flowing back to Google Ads, you can graduate the account from lead-based Target CPA to value-based Target ROAS β€” the payoff that makes the whole effort worthwhile.

If you want a second set of eyes on whether your offline conversion setup is actually feeding Smart Bidding correctly β€” the most common B2B failure is a pipeline that looks connected but imports a fraction of real deals β€” SteerAds runs a free 14-day audit on Google and Microsoft Ads that checks conversion configuration, value mapping, and attribution coverage end to end.

Sources

FAQ

What is the difference between Salesforce offline conversion import and Enhanced Conversions for Leads?

Offline conversion import (OCI) requires a GCLID β€” the Google click ID captured when the lead first arrived β€” to stitch a closed deal back to the exact ad click. Enhanced Conversions for Leads (ECL) does not need a GCLID; it matches a hashed email or phone you upload against the click Google already recorded for that user. OCI is more precise and supports per-event value, but breaks if the GCLID was never captured or expired. ECL is the resilient fallback when GCLID capture is imperfect. Most mature B2B accounts run both: OCI where the GCLID exists, ECL to recover the rest.

How long does a GCLID stay valid for offline conversion import?

Google accepts an offline conversion upload for a click up to 90 days after the click occurred, by default. Because B2B sales cycles routinely exceed 90 days, this is a real constraint: a deal that closes 120 days after the click cannot be imported against that GCLID. The workarounds are to import an earlier intermediate conversion (for example a sales-qualified opportunity at day 30) within the window, to extend the conversion window in your conversion action settings where supported, and to use Enhanced Conversions for Leads, which is less sensitive to the timing because it matches on hashed identifiers.

Should I import the lead, the opportunity, or the closed deal as the conversion?

Import multiple stages, each as its own conversion action with its own value. A single conversion at closed-won gives Smart Bidding far too little data β€” most accounts close too few deals per month for the algorithm to learn. The standard 2026 pattern is to import a mid-funnel signal (sales-accepted lead or qualified opportunity) as the primary optimization conversion, because it happens within the GCLID window and at sufficient volume, and to import closed-won as a secondary conversion for reporting and value-based bidding once volume allows. Map a representative value to each stage.

What value should I send for an offline conversion if the deal has not closed yet?

Use stage-weighted expected value, not the full contract value. Multiply the opportunity amount by the historical win rate of that stage β€” a deal at 'proposal' with a 40% historical close rate and a €50,000 amount is worth €20,000 as a conversion value. This gives Smart Bidding a probabilistic signal that reflects pipeline quality without overstating revenue from deals that may never close. When the deal actually closes, send an adjustment (restate to the real value) or import closed-won as a separate action, so the algorithm eventually learns from realized revenue, not just pipeline.

Do I need a developer to connect Salesforce to Google Ads?

Not necessarily. Google offers a native Salesforce connector configured inside Google Ads (Tools, then linked accounts) that maps Salesforce lead and opportunity stages to conversion actions without code, provided your Salesforce stores the GCLID. For most standard Sales Cloud setups, an admin can implement the whole pipeline using the connector plus Salesforce Flow for GCLID capture and field mapping. You only need developer involvement for non-standard objects, complex value logic, very high volumes, or when you outgrow the connector and move to direct Google Ads API uploads for finer control.

How do I capture the GCLID when a lead fills out a form?

The GCLID arrives as a URL parameter on the landing page when a user clicks a Google ad with auto-tagging on. Read it client-side, store it in a first-party cookie (so it survives multi-page sessions), and write it into a hidden field on every lead form. On submission it lands on the Salesforce Lead record in a custom GCLID field. Crucially, build a Flow that copies the GCLID forward when the Lead converts to a Contact and Opportunity β€” if it only lives on the Lead, you lose it at conversion and cannot attribute the closed deal. Capture the click timestamp too, for window management.

Can offline conversions and online conversions both run without double counting?

Yes, if you assign them to distinct conversion actions and are deliberate about which ones are marked Primary (used for bidding) versus Secondary (observed only). A common clean setup: keep the online form-fill as a Secondary conversion for early funnel visibility, and make the offline qualified-opportunity import the Primary conversion that Smart Bidding optimizes toward. Because they are separate actions tracking different milestones of the same journey, there is no double counting in bidding β€” you simply must avoid marking two actions that represent the same event as Primary.

Why is my Salesforce offline import showing 'unattributed' or low match rates?

The usual causes, in order: GCLID never captured (auto-tagging off, or the hidden field not populated), GCLID lost at lead-to-opportunity conversion (no Flow carrying it forward), uploads outside the 90-day window because the cycle is long, time-zone or currency formatting mismatches in the upload, or the GCLID stored truncated. Diagnose by checking what fraction of closed-won opportunities have a populated, in-window GCLID. If capture is the problem, fix the Flow; if timing is the problem, import an earlier-stage conversion and add Enhanced Conversions for Leads as a hashed-identifier fallback.

πŸ’‘

Get our best tips to cut your CPA

Each week, an actionable tip to optimize your Google & Bing Ads campaigns. Joined by 1,200+ advertisers.

No spam. One-click unsubscribe. Privacy policy.

Ready to optimize your campaigns?

Start a free audit in 2 minutes and discover the ROI potential of your accounts.

Start my free audit

Free audit β€” no credit card required

Keep reading