Last month I audited a B2B logistics SaaS spending EUR 18,000 per month on Google Ads. They had 43 closed-won deals in Q2 worth EUR 411,000. Google Ads reported nine conversions for the same period. The other 34 deals -- EUR 338,000 in pipeline -- were invisible to Smart Bidding because the GCLID died during Lead-to-Opportunity conversion inside Salesforce.
The Salesforce admin had created a custom GCLID field on the Lead object. But when sales reps converted Leads to Opportunities, the field was not mapped. Every GCLID evaporated at the exact moment it became valuable. The campaigns were profitable. The algorithm did not know it and was steering spend accordingly.
This is the most common failure I see in Salesforce Google Ads integration setups. The CRM connection technically exists. Data technically flows. But a single unmapped field or a misconfigured connector turns the entire measurement loop into theater.
How the Salesforce Google Ads Integration Should Work
The concept is identical to any offline conversion tracking pipeline: capture the GCLID at ad click, store it in the CRM, and send conversion events back to Google Ads when deals progress. But Salesforce's data model -- Lead, Contact, Account, Opportunity as separate objects with explicit conversion steps -- creates specific failure points that HubSpot's flatter structure does not have.
A working Salesforce integration with Google Ads has four jobs:
- Capture the GCLID when a prospect arrives from a Google Ad and pass it into Salesforce via the Lead record.
- Preserve the GCLID through Lead conversion so it survives from Lead to Contact to Opportunity.
- Send conversion events back to Google Ads when Opportunities reach key stages (SQL, closed-won) with revenue values attached.
- Match conversions to clicks using the GCLID and, ideally, hashed email as a backup signal via enhanced conversions for leads.
Break any one of these and Smart Bidding optimizes on partial data. In most accounts, partial data produces worse outcomes than no offline data at all -- because it gives false confidence in the wrong campaigns.
GCLID Field Mapping: Lead to Opportunity
This is where Salesforce diverges from every other CRM I work with. In HubSpot or Pipedrive, a contact record is a contact record -- the GCLID field stays attached through every lifecycle stage. In Salesforce, the Lead object and the Opportunity object are separate. When a sales rep clicks "Convert," Salesforce creates a Contact and (optionally) an Opportunity, but only maps fields you have explicitly told it to map.
The setup:
- Create a custom text field on the Lead object:
GCLID__c(255 characters, single-line text). - Create the same field on the Contact object and the Opportunity object.
- Map Lead fields to Contact fields using Salesforce Lead Field Mapping. Go to Setup > Object Manager > Lead > Fields & Relationships > Map Lead Fields and map
GCLID__con Lead toGCLID__con Contact. - Flow the GCLID from Contact to Opportunity. Lead field mapping does not cover Opportunities directly. Use a Salesforce Flow (or Process Builder, though Salesforce is retiring Process Builder): when an Opportunity is created and has a Contact Role, copy
GCLID__cfrom the primary Contact to the Opportunity.
Skip step 3 or 4 and the GCLID disappears at conversion. This is exactly what happened to the logistics company I mentioned. The field existed on Lead but was not mapped forward. Thirty-four deals worth EUR 338,000 never made it back to Google Ads.
Test it. Click a live ad, submit a form, verify the GCLID on the Lead record, convert the Lead, and confirm the GCLID appears on both the Contact and the Opportunity. Twenty minutes of testing saves months of broken measurement.
Three Ways to Send Conversions from Salesforce to Google Ads
Once the GCLID survives through to the Opportunity, you need a mechanism to push conversion events back to Google Ads. I see three approaches in the field, each with trade-offs.
Option 1: Salesforce Data Connector in Google Ads
Google Ads offers a native Salesforce integration through Data Manager (formerly called the Salesforce-to-Google Ads connector). You authenticate your Salesforce org directly inside Google Ads, map Salesforce Opportunity stages to Google Ads conversion actions, and Google pulls the data on a recurring schedule.
Setup path: Google Ads > Tools > Data Manager > Connect > Salesforce.
The configuration requires you to:
- Map each Opportunity stage you want to track (e.g., Qualification, Proposal, Closed Won) to a conversion action in Google Ads.
- Specify which Salesforce field holds the GCLID (your custom
GCLID__cfield). - Set the conversion value source -- typically the Opportunity Amount field.
Advantages: no middleware, no third-party costs, Google manages the sync cadence. Disadvantages: limited flexibility on timing (you cannot trigger on custom object changes or non-standard stage progressions), and debugging is opaque -- when rows fail to match, the error reporting inside Data Manager is minimal.
Option 2: Zapier or Make (Middleware Automation)
If your pipeline has custom stages, custom objects, or logic that the native connector cannot handle, Zapier or Make can bridge the gap. The pattern:
- Trigger: Opportunity stage changes to a target value (e.g., "Closed Won").
- Action: Send an offline conversion upload to the Google Ads API with the GCLID, conversion action name, timestamp, value, and currency.
This gives you fine-grained control. You can filter by record type, enrich with data from related objects, or fan out to multiple conversion actions based on deal size or product line. The downside is maintenance. Zapier workflows break silently when Salesforce field names change or API versions update. Someone needs to monitor them.
Option 3: SOQL Export + Google Ads API
For teams with a data engineer or a data warehouse in the loop, writing a scheduled SOQL query against Salesforce gives you the most control.
A basic query to extract conversion-ready records:
SELECT
GCLID__c,
StageName,
Amount,
CloseDate,
CurrencyIsoCode
FROM Opportunity
WHERE StageName = 'Closed Won'
AND GCLID__c != null
AND CloseDate >= LAST_N_DAYS:7
Pipe the results through a transformation layer (dbt, a Python script, your warehouse) and upload via the Google Ads API conversion upload endpoint. This is the approach I recommend when you also need the data for internal BI dashboards or when you want to apply revenue attribution rules before sending values back to Google.
Stage-to-Conversion-Action Mapping
Do not send only closed-won deals back to Google Ads. If your average sales cycle is 60 or 90 days, closed-won events arrive too late for Smart Bidding to learn efficiently -- and deals that close after 90 days fall outside Google's upload window entirely. I cover this constraint in depth in Marketing Measurement for Long B2B Sales Cycles.
Instead, map multiple Opportunity stages to separate conversion actions:
| Salesforce Stage | Google Ads Conversion Action | Suggested Value | Primary/Secondary |
|---|---|---|---|
| MQL (Lead Status) | MQL | 10% of avg deal | Secondary |
| SQL / Qualification | SQL | 25% of avg deal | Secondary |
| Proposal / Negotiation | Opportunity | 50% of avg deal | Primary |
| Closed Won | Closed Won | Actual Amount | Primary |
Mark your downstream stages (Opportunity and Closed Won) as Primary so Smart Bidding optimizes against them. Keep MQL and SQL as Secondary for reporting visibility without confusing the algorithm. This is the same principle behind value-based bidding -- give the algorithm value variance so it can distinguish the clicks that produce EUR 8,000 deals from the ones that produce EUR 120,000 deals.
The Five Salesforce-Specific Breakpoints
After auditing Salesforce-to-Google-Ads pipelines across dozens of accounts, these are the five failures I find most often.
1. GCLID lost at Lead conversion. The field exists on Lead but is not mapped to Contact or Opportunity. This is the single most common Salesforce-specific failure.
2. Web-to-Lead without a GCLID field. Salesforce Web-to-Lead forms require you to explicitly add hidden fields for custom properties. If GCLID__c is not in the generated HTML, the value never reaches the Lead record.
3. Multiple record types with different field layouts. Enterprise Salesforce orgs often have distinct Lead or Opportunity record types for different business lines. The GCLID field must be on every record type's page layout, or it gets silently dropped for certain lead sources.
4. Connector authenticated by a departed employee. The Salesforce Data Connector in Google Ads authenticates via a specific Salesforce user. When that person leaves and their account is deactivated, the sync silently stops. I have seen pipelines dead for four months before anyone noticed.
5. Conversion values not populated. The native connector pulls from the Opportunity Amount field. If your sales team does not fill in Amount until late in the cycle -- or uses a different currency field -- Google Ads receives conversions with zero value. Value-based bidding cannot work without actual values.
If more than one of these sounds familiar, a tracking audit will save you months of broken data. Most of these take a day to diagnose and a few days to fix -- but they compound silently while left alone.
Validating the Pipeline End-to-End
Do not trust the integration until you have tested it with a real click.
- Click a live Google Ad (or use ad preview mode).
- Submit the form on the landing page.
- Open the Lead in Salesforce. Confirm
GCLID__cis populated. - Convert the Lead to a Contact and Opportunity. Confirm
GCLID__cis present on both. - Move the Opportunity to a mapped stage (e.g., Closed Won). Set the Amount.
- Wait for the sync cycle (native connector) or trigger the automation (Zapier/API).
- Check Goals > Conversions > Diagnostics in Google Ads. Confirm the conversion appears and is matched.
If any step fails, you have found the break. Fix it before trusting the data.
Check your match rate in Google Ads under Goals > Conversions > Uploads. A healthy google ads to Salesforce integration pipeline matches above 80 percent of uploaded rows. Below 60 percent typically means GCLIDs are expiring before upload (layer enhanced conversions for leads to recover them) or formatting issues are silently rejecting rows.
FAQ
How do I connect Salesforce to Google Ads for offline conversions?
In Google Ads, go to Tools, then Data Manager, and select Salesforce as a data source. Authenticate with a Salesforce user account that has API access, map your Opportunity stages to conversion actions, and specify the custom field that holds the GCLID. Google Ads will pull conversion data on a recurring schedule.
Why is my GCLID missing on Salesforce Opportunities?
The most common cause is that the GCLID field exists on the Lead object but is not mapped to the Contact or Opportunity object during Lead conversion. Salesforce does not automatically carry custom fields forward. You need to configure Lead Field Mapping for the Contact and use a Flow to copy the GCLID to the Opportunity.
Can I use Zapier instead of the native Salesforce connector?
Yes. Zapier or Make can trigger when an Opportunity stage changes and send the conversion data to Google Ads via API. This approach gives you more flexibility for custom stages or complex logic, but requires ongoing monitoring because workflows can break silently when Salesforce field names or API versions change.
How many Salesforce stages should I send back to Google Ads?
Send at least two stages: one early-funnel event like SQL for faster Smart Bidding feedback, and Closed Won for revenue attribution. If your sales cycle exceeds 60 days, adding a mid-funnel stage like Proposal gives the algorithm additional signal before the 90-day upload window closes.
What happens if the Salesforce user who set up the connector leaves?
The Salesforce Data Connector in Google Ads authenticates through a specific Salesforce user. If that user's account is deactivated, the sync stops silently. Use a dedicated integration user or service account in Salesforce so the connection survives employee turnover.
Not sure your Salesforce data is actually reaching Google Ads? Let me audit it -- I will trace every click from ad to Lead to Opportunity and show you exactly where the pipeline breaks.