Table of contents
To connect Salesforce to Google Ads offline conversions, import a meaningful Salesforce milestone—such as a qualified lead, sales opportunity, or closed-won deal—into its own Google Ads conversion action. Match the record using GCLID when available and consented first-party identifiers for enhanced conversions for leads.
The implementation is successful only when a marketer can trace one test record from the original ad interaction to Salesforce, through the upload, and into the correct Google Ads conversion action without duplicates.
The current Salesforce-to-Google Ads routes
You have two practical routes in 2026:
- Direct Salesforce → Google Ads Data Manager. Use this when Google Ads is the only destination and the required fields live cleanly in one supported Salesforce Lead, Opportunity, or Order object.
- Salesforce → CustomerLabs → Google Ads Data Manager. Use this when the conversion needs website identity, related Salesforce objects, custom transformation, destination logs, or activation across multiple advertising platforms.
Do not follow an old tutorial that sends you to the legacy Salesforce tab in Google Ads. Google ended support for that legacy integration on May 31, 2025. Salesforce connections are now managed in Data Manager.
This guide explains the CustomerLabs route and shows where the direct route may be simpler. The relevant product capability is offline conversion tracking. Use the Salesforce integration page for the connector overview.
The working data flow
Google ad click -> website stores GCLID, WBRAID, or GBRAID when available -> lead form stores email or phone with the permitted consent state -> lead and click identity enter Salesforce or CustomerLabs -> Salesforce Lead Status or Opportunity Stage changes -> a Salesforce Flow sends the selected record to CustomerLabs -> CustomerLabs maps the milestone to a Google Ads conversion action -> Google Ads matches the upload to an eligible ad interactionEnhanced conversions for leads does not mean “upload an email and every Salesforce record will match.” Google uses the first-party data collected with the website lead and the same normalized, hashed data sent with the later CRM outcome. Send the click ID too whenever it exists.
Prerequisites
Prepare these items before configuring the connection:
- Salesforce admin access and API access for the integration user.
- Permission to install and configure the CustomerLabs Salesforce package.
- CustomerLabs admin access.
- Access to the correct Google Ads child or manager account.
- Auto-tagging where GCLID collection applies.
- A Google tag or Google Tag Manager implementation for enhanced conversions for leads.
- Google’s customer data terms accepted.
- A recorded rule for when email, phone, and ad-user data may be shared with Google.
- An exact definition for each CRM milestone, including who owns it and when it changes.
- A field path from the conversion object to email, phone, and the captured click ID.
- A real stage-change timestamp with time-zone context.
If you use Google’s direct Salesforce connector, note one current limitation: Data Manager does not support Salesforce sandbox imports. Use an approved production test record, or validate the source-to-CustomerLabs section independently before the production upload test.
Step 1: select the correct Salesforce object
Salesforce models early leads and qualified opportunities differently. A Lead can be converted into an Account, Contact, and Opportunity. An Opportunity then moves through the sales stages your organization defines.
Choose the object that contains the conversion event and enough identity to match it:
| Business outcome | Typical Salesforce object | Trigger field | Required related data |
|---|---|---|---|
| Sales accepts a lead | Lead | Status | Email or phone; click ID when available |
| Qualified deal is created | Opportunity | StageName | Contact role or related Contact; click ID inheritance |
| Proposal or negotiation begins | Opportunity | StageName | Stage timestamp; Opportunity ID; expected value if used |
| Revenue closes | Opportunity | StageName = Closed Won | Actual amount, currency, associated person identity |
| Fulfilled sale lives as an order | Order | Your Order status field | Customer identity, value, currency, order ID |
These are examples. Salesforce explicitly notes that opportunity stages vary by company. Use your organization’s field API names and definitions.
If you choose Google’s direct Data Manager connector and need events from Lead and Opportunity, create separate connections. Google connects one Salesforce object per connection.
Step 2: create separate Google Ads actions for each stage
Do not combine SQL, Opportunity, Proposal, and Closed won into one conversion action. Google recommends a separate action for each funnel stage, usually with bidding focused on one stage.
An illustrative map might look like this:
| Salesforce condition | CustomerLabs event | Google Ads goal | Example value | Initial status |
|---|---|---|---|---|
| Lead Status becomes Qualified | sf_lead_qualified | Qualified lead | 100 | Secondary |
| Opportunity Stage becomes Proposal | sf_opportunity_proposal | Qualified lead | 500 | Secondary |
| Opportunity Stage becomes Closed Won | sf_opportunity_won | Converted lead | Actual Opportunity Amount | Primary after QA |
The values above are examples only. Calculate a stage value from your own close rate and contribution margin, or do not send a fixed value. Do not copy a made-up value into bidding.
In Google Ads, create the actions under Goals → Summary → Create conversion action. Choose an offline source, use Qualified lead or Converted lead, and start each action as Secondary. For a normal lead event, select One as the count setting unless repeated outcomes from the same click represent separate conversions.
Step 3: make the Salesforce record matchable
A stage value alone is not enough. Map the fields Google needs to match and audit the conversion.
| Destination field | Salesforce source example | Rule |
|---|---|---|
| GCLID | Custom Lead/Contact field populated from the landing session | Send whenever available; preserve it through Lead conversion |
| WBRAID or GBRAID | Custom click-ID field when captured | Send the applicable identifier rather than forcing GCLID |
| Lead Email or related Contact Email | Normalize and hash before Google receives user-provided data | |
| Phone | Lead Phone or related Contact Phone | Include country code and normalize consistently |
| Conversion time | Dedicated qualified/won timestamp | Use the actual stage-change time with offset, not an arbitrary export time |
| Conversion value | Opportunity Amount or governed stage value | Send the currency with the value |
| Stable event ID | Lead/Opportunity ID plus milestone | Keep the same value on retries to avoid duplicate business events |
| Consent | Your approved consent field | Do not infer permission merely because Salesforce has an email |
The most common Opportunity problem is missing person identity. The amount and stage live on the Opportunity, while email and phone live on a Contact. Maintain an Opportunity Contact Role or another governed association so the conversion can be joined to the correct person.
The most common Lead-conversion problem is losing the original GCLID. When Salesforce converts a Lead, explicitly map the custom click-ID field to the resulting Contact or Opportunity field that the workflow reads.
Step 4: connect Salesforce to CustomerLabs
Follow the current CustomerLabs Salesforce source guide for the full screen-by-screen setup. The implementation has four parts:
- In CustomerLabs, add Salesforce as a source and copy the generated App ID and webhook details.
- Install the CustomerLabs package in Salesforce for admins.
- Add the CustomerLabs App ID under the package’s custom settings.
- Add and activate the documented CustomerLabs remote-site setting.
Use a dedicated integration user with the minimum object and field permissions required for the selected flow. Confirm that field-level security exposes the click ID, consent, identifier, stage, timestamp, value, and currency fields.
Step 5: create record-triggered Salesforce Flows
Create one Salesforce record-triggered Flow per milestone family. A broad “record updated” Flow can send the same conversion every time a sales rep edits a note or close date.
For a qualified Lead event:
- Set the object to Lead.
- Trigger when the record is updated to meet the exact qualified-status condition.
- Run the action asynchronously.
- Add the package action Send data to CustomerLabs.
- Pass the current Lead ID as
recordIdString. - Save, debug with a test Lead, and activate only after the condition fires once.
For an Opportunity milestone:
- Set the object to Opportunity.
- Trigger only when
StageNamechanges to the selected value. - Include the fields and related object data needed for Contact identity.
- Pass the Opportunity ID to the CustomerLabs action.
- Debug a single stage transition and confirm unrelated edits do not fire it.
The Flow should express the business rule. CustomerLabs then filters and transforms the received record; it should not have to guess whether a general Opportunity update meant a conversion.
Step 6: map the event in CustomerLabs
Create one CustomerLabs workflow for each source event:
- Move a test Salesforce record into the target status or stage.
- Fetch that sample in the CustomerLabs workflow.
- Inspect the raw fields and related objects.
- Filter for the intended object and stage value.
- Set an explicit event name, such as
sf_opportunity_won. - Map user identity using the associated email, phone, Salesforce ID, and website identity where available.
- Map conversion time, value, currency, consent, click IDs, and the stable milestone ID.
- Save and publish the workflow.
If the incoming Opportunity sample lacks a Contact, stop. Fix the Salesforce association or related-object payload. Do not send an Opportunity amount against an arbitrary Account contact.
Step 7: map CustomerLabs to Google Data Manager
In CustomerLabs:
- Add Google Data Manager → Google Ads as a destination.
- Complete the Google authorization flow, then select and verify the right customer and ad account.
- Fetch the offline conversion actions created earlier.
- Map each CustomerLabs event to its matching Google Ads action.
- Enable enhanced conversion tracking and map email and phone.
- Enable only the event workflows that passed source testing.
Google’s current enhanced-conversions-for-leads guidance supports GCLID, email, or phone and recommends mapping as many available identifiers as possible. For new implementations, use Data Manager. Google says certain legacy Google Ads API upload paths were restricted beginning June 15, 2026.
Step 8: run an end-to-end test
Use one uniquely named test record and write down its IDs before starting:
- Generate a test lead from a tagged Google Ads interaction or another approved test method.
- Confirm the website captured the click ID and consented email or phone.
- Confirm the identifiers reached the Salesforce Lead.
- Convert or associate the Lead without losing the click ID.
- Change the target Lead Status or Opportunity Stage once.
- Confirm the Salesforce Flow ran exactly once.
- Confirm one CustomerLabs source event, one transformed event, and one destination delivery.
- Inspect CustomerLabs destination logs for success or a concrete rejection.
- Inspect Google Ads offline data diagnostics and enhanced-conversion diagnostics.
- In Google Ads, report All conv. (by conv. time) and segment by conversion action.
Google says offline conversion statistics may take about three hours to appear. Compare the Google conversion-time report with the Salesforce milestone timestamp, not the date the upload job ran.
Keep each action Secondary until it has delivered complete, stable data for at least one ordinary conversion cycle. Then choose the stage that has enough volume and the strongest relationship with revenue as the Primary bidding action.
Failure cases to check
| Symptom | Likely cause | Check |
|---|---|---|
| Salesforce Flow never runs | Entry condition or asynchronous path is wrong | Flow debug and the exact old/new stage values |
| Flow runs on every edit | Trigger checks current value but not the transition | “Updated to meet condition” and change detection |
| Opportunity has no match data | Contact role or related Contact was omitted | Salesforce association and CustomerLabs raw sample |
| GCLID disappears after Lead conversion | Custom field was not mapped forward | Lead field mapping to Contact/Opportunity |
| Google rejects an old event | Conversion arrived after the import limit | Send a timely qualified stage and reduce processing delay |
| Conversion time precedes click | Export time zone or milestone time is wrong | Dedicated timestamp and time-zone offset |
| Conversion action not found | Wrong Google Ads account or MCC level | Destination account and cross-account conversion setup |
| Duplicate conversions appear upstream | Multiple Flows or workflows represent the same milestone | Stable event ID and one owner per conversion action |
| Salesforce and Google totals differ | Unmatched, rejected, unattributed, or differently dated events | Upload diagnostics and All conv. by conversion time |
Google currently rejects standard GCLID offline conversions uploaded more than 90 days after the click. For enhanced conversions for leads using user-provided data, the documented limit is 63 days after the associated last click. These limits matter for long B2B sales cycles.
When the direct Salesforce connector is enough
Use the direct Google Data Manager Salesforce connector when all of these are true:
- Google Ads is the only destination.
- The conversion lives in a supported Lead, Opportunity, or Order object.
- GCLID, email, or phone and the conversion fields can be mapped cleanly.
- One connection per object is acceptable.
- You do not need a Salesforce sandbox source.
Use CustomerLabs when you need identity across the website and Salesforce, related-object handling, a consistent event sent to several ad platforms, or an operational log outside a single Google Ads connector.
Neither route guarantees better ROAS or makes data sharing compliant by itself. The route should produce complete, timely, consented, and auditable conversion records. Campaign performance depends on the quality and volume of those outcomes and on how bidding is configured.
If you want CustomerLabs to review your Salesforce object model, stage definitions, identity fields, and Google Ads mapping, book an offline-conversion working session.
Sources and implementation references
- Google: Salesforce Data Manager connection
- Google: Legacy Salesforce integration upgrade FAQ
- Google: About enhanced conversions for leads
- Google: Offline conversion import FAQs
- Salesforce: Track leads and convert them to opportunities
- Salesforce: Work with opportunity stages
- CustomerLabs: Salesforce source setup
- CustomerLabs: Google Data Manager setup