Your Google Ads dashboard shows more enquiries and a healthier cost per lead, but your sales team isn't celebrating. They're rejecting unsuitable contacts, chasing people who never answer and closing no more business than before. Meanwhile, the campaign producing fewer enquiries might be the one bringing in customers.
Offline conversion import connects CRM outcomes to the advertising that generated them. The difficult part isn't moving records between systems. It's deciding which CRM stage deserves to influence bidding, what that event is worth and whether you can trust the record behind it.
Why Form Fills Send Smart Bidding the Wrong Signal
Say a prospect submits your enquiry form on Monday. In a hypothetical sales cycle, they become a qualified opportunity three weeks later and sign a contract after ten weeks. Without CRM feedback, Google Ads sees the form submission but not the qualification or the sale.
That's like judging a recruitment campaign by applications rather than hires. Applications tell you the advert persuaded people to respond. Hires tell you whether it helped fill the vacancy.
When every form submission carries the same conversion value, a student, competitor and genuine buyer can look equally useful to the bidding system. Smart Bidding doesn't know your sales team rejected the first enquiries unless you send that distinction back.
Google's offline conversion setup guidance describes the connection between captured click identifiers, lead-management records and subsequent conversion uploads. That connection lets you measure commercial milestones rather than stopping at the website enquiry.
Change the goal, not just the report
The practical correction has several parts:
- Keep form submissions secondary. Retain visibility without making every enquiry the bidding objective.
- Import meaningful CRM outcomes. Feed back qualification, opportunities and completed sales using agreed triggers.
- Assign defensible values. Reflect commercial quality rather than giving every stage the same placeholder amount.
A secondary action is principally a reporting signal, not an automatic bidding instruction. Check campaign goals and custom goals before assuming that changing an action's label has changed what the campaign optimises towards.
The distinction between enquiry volume and lead-quality data in UK B2B advertising matters more than a tidier dashboard.
Practical rule: Only import events you can define, timestamp and trust.
Map CRM Stages to Conversion Actions and Values
One stage, one conversion action, one explicit CRM trigger. Agree that model with sales before connecting HubSpot, Pipedrive or Salesforce. A salesperson's interpretation of qualified mustn't change according to how busy they are.
Use separate actions for lifecycle milestones, but don't automatically make them all primary. Otherwise, a single customer journey can contribute several overlapping successes to the bidding objective.
CRM stage to Google Ads conversion action mapping
| CRM stage | CRM trigger | Google Ads role | Counting setting | Value model |
|---|---|---|---|---|
| Form submission | Form completed and contact created | Secondary, for reporting and early signal | Once per lead | Fixed low value or none |
| Marketing-qualified lead | Lifecycle stage set to MQL | Secondary, import for signal | Every, with unique timestamp | Average deal value × MQL rate |
| Sales-qualified opportunity | Deal created at qualified stage | Secondary or primary, depending on volume | Every, with unique timestamp | Average deal value × opportunity rate |
| Closed-won customer | Deal moved to won | Primary for Smart Bidding after validation | Every, with unique timestamp | Actual contract value excluding VAT |
| Refund or cancellation | Deal moved to lost or refunded after win | Adjustment to original conversion | Not a new conversion | Negative adjustment of original value |
Treat once per lead as a business rule, enforced through CRM deduplication and stable event identifiers. Google Ads' One counting setting isn't a substitute for deduplicating CRM contacts. Where the table uses Every, generate an event only for the agreed milestone, not whenever someone edits the record.
Google's conversion import guidance explains that matching duplicate uploads are counted once, while different timestamps can represent separate conversions under Every. A retry must therefore retain the original event identity and time.
Make the value mean something
Define the rates in the table as the probability of winning from that stage, not merely the proportion of leads entering it. For example, in a hypothetical model, a £12,000 average contract multiplied by a 25% opportunity-to-win rate gives an opportunity value of £3,000. If 25% merely describes how many enquiries become opportunities, that calculation doesn't establish an opportunity's expected revenue.
Apply each row consistently:
- Form submission: Record the response without pretending it's revenue.
- MQL: Require agreed fit criteria, not just a downloaded document.
- Opportunity: Require sales acceptance and a credible buying requirement.
- Closed-won: Use the actual contract amount, net of VAT.
- Refund or cancellation: Reduce, restate or retract the original conversion using the supported adjustment method. Don't upload a negative-value sale.
Closed-won is the preferred commercial target when it's timely and sufficiently frequent. If it's sparse, a rigorously defined opportunity can be the more usable primary goal.
For businesses selling through quotations or credit accounts, tracking the journey from click to account revenue makes the distinction particularly important.
How to Capture and Pass the GCLID from Form to CRM
The Google Click Identifier, or GCLID, connects a later CRM outcome to the original advertising interaction. Google's offline conversion documentation recommends preserving it with the prospect's record and including it when importing subsequent outcomes.
Use this flow to check where the identifier could disappear.
Build and test the capture chain
Confirm auto-tagging and the landing URL. Check that
gclidappears after a controlled live ad click. Follow redirects through to the final page, because a parameter present on the initial URL may disappear before your capture script runs.Read the parameter on arrival. Use a website script or tag-manager implementation to capture it and, where permitted, persist it in a first-party cookie. Respect the relevant consent state rather than treating persistence as unconditional.
Populate every lead form. Write the stored identifier into a hidden field called
gclid. Test embedded forms and multi-step forms separately, since a working standard contact form doesn't prove those implementations work.Create dedicated CRM fields. In HubSpot, use a single-line text contact property such as
google_click_id. In Pipedrive, create a text field on the person or deal and define how the value transfers between them; in Salesforce, create matching custom text fields such asGCLID__con Lead and Opportunity.Map the submission explicitly. Connect the hidden website field to the CRM property in your form handler, integration or automation. Don't assume matching display names create the mapping automatically.
Protect Salesforce lead conversion. Add the custom field to lead-conversion mapping so the identifier reaches the Opportunity. Include a Contact field too if your reporting or integration reads from Contact rather than Opportunity.
Preserve the attribution record. Don't replace the identifier when a salesperson changes the lifecycle stage. If repeat enquiries need separate attribution, retain a dedicated enquiry or deal-level record instead of repeatedly overwriting one contact-level field.
Submit and inspect a test lead. Confirm the exact GCLID reaches the CRM, survives qualification and remains attached to the exported conversion event. Compare the values character for character.
The accompanying video provides another way to follow the implementation.
Test beyond the contact record
A populated CRM field proves capture, not the whole import. Inspect an outbound record containing conversion_action, conversion_time, conversion_value, currency_code and a stable event identifier.
Use the time the milestone happened, including its time zone, rather than the export time. Check that a lead converted into a deal still carries the same attribution key. Testing that full chain before increasing spend prevents you from discovering later that sales records exist but can't be connected to clicks.
Enhanced Conversions for Leads When the GCLID Is Missing
A lead can reach your CRM without a usable GCLID because a form dropped the parameter, a browser restricted storage or a phone enquiry bypassed the website form. Enhanced conversions for leads can supplement matching with customer-provided email addresses and telephone numbers. It doesn't make every direct visit or untracked call attributable to an advert.
Google's scheduled-upload guidance requires normalised customer identifiers before SHA-256 hashing, a conversion timestamp and an eligible matching key. It also states that the advertiser must accept the Google Ads customer-data terms for enhanced conversions for leads to function.
Matching identifiers, normalisation and when to use them
| Identifier | Where it lives in the CRM | Formatting before upload | Use when |
|---|---|---|---|
| GCLID | Hidden form field stored on contact, person or lead | Exact value, unchanged | Click identifier is present; always preferred |
| Hashed email | Email field on contact or lead | Lower case, trimmed, then SHA-256 | No GCLID, email captured |
| Hashed phone | Phone field on contact or lead | E.164 format, including country code, then SHA-256 | No GCLID, phone captured |
| Email and phone together | Both fields | Both normalised and hashed | No GCLID, both captured; gives matching more usable identifiers |
| Neither identifier | No usable click or contact data | Not applicable | Do not import; report separately |
Normalise before hashing
For UK telephone numbers, standardise the international format with +44 and remove the domestic leading zero. Remove spaces and presentation punctuation before hashing. For email addresses, trim surrounding whitespace and lower-case the address, applying Google's provider-specific punctuation rules rather than stripping punctuation indiscriminately.
Keep the original customer information in controlled CRM fields and generate the upload representation separately. That lets you correct a transformation without damaging the sales record.
Check whether your connector expects raw identifiers or pre-hashed values. Some integrations handle hashing themselves; hashing an already hashed value produces a different identifier and won't fix a failed match.
Hashing is a matching preparation step, not permission to share the underlying personal data.
Send one event with the supported identifiers attached. Don't submit a plain import and then create another enhanced event for the same milestone.
The practical rule is to send GCLID wherever it's available and supplement it with eligible customer data. Where it's missing, use properly normalised email and phone rather than discarding an otherwise eligible outcome, but don't assume a match is guaranteed.
Upload Frequency, Consent and Suppression Rules
Choose an upload rhythm that keeps useful milestones timely. These are operating recommendations, not promises that a particular conversion window or matching method will accept every record.
Upload rhythm by sales cycle length
| Sales cycle | Upload rhythm | Conversion window | Stages to import |
|---|---|---|---|
| Under 7 days | Daily | Covers full lag plus a buffer | Form, MQL and closed-won |
| 1 to 4 weeks | Daily | Covers longest typical quote-to-close lag | Every stage, with unique timestamps |
| Over 90 days | Weekly batch, with early stages sent as soon as they occur | Maximum allowed for the selected action and import method | Early stages; later outcomes need an alternative eligible signal if outside the import limit |
A conversion window doesn't override the import method's click-age limit. Check the applicable eligibility rules before building the schedule, and send earlier milestones promptly rather than waiting for a long-running deal to close.
Google's enhanced conversions for leads guidance describes supplementing offline records with normalised, hashed customer identifiers. Use a supported Data Manager connection or upload integration, map only the required fields and keep stage names consistent.
Put the consent gate before the export
The ICO's electronic marketing guidance explains consent requirements and withdrawal rights. Your operational design needs evidence of the applicable purpose and permissions, not merely an email address in a contact record.
Store fields such as:
- Purpose and provenance:
measurement_purpose,lawful_basis,consent_wording_versionandconsent_source. - Timing and jurisdiction:
consent_timestamp,withdrawal_timestampandjurisdiction. - Export eligibility:
ads_measurement_statusandsuppression_reason.
Filter withdrawn, suppressed and otherwise ineligible records before each scheduled export. Log how many records were excluded and why, without copying unnecessary personal information into the log. Restrict access and apply a documented retention policy.
Keep advertising-measurement eligibility separate from marketing-email permission. A CRM contact being available to sales doesn't establish permission for every advertising use, and Consent Mode configuration doesn't replace the CRM audit trail.
Common Import Mistakes and How to Fix Them
When uploads are accepted but attribution is weak, inspect capture before changing the bidding strategy. A missing GCLID, an overwritten field or a broken contact-to-deal mapping can leave technically valid records with little useful matching information.
Then work through the symptom rather than rebuilding the integration indiscriminately.
Import symptoms, causes and fixes
| Symptom | Likely cause | Fix |
|---|---|---|
| Low match rate on uploads | GCLID not stored at capture or overwritten at a later stage | Store GCLID in a dedicated field and never overwrite it during progression |
| Lead volume up, sales flat | Form fill still the primary action | Make validated closed-won primary where usable; keep form fill secondary |
| Duplicate conversions | Same event sent with changing identifiers or timestamps, or Every used without event controls | Send a stable unique identifier, preserve event time and use the intended counting setting per action |
| Weak enhanced match rate | Email or phone not normalised before hashing | Trim and lower-case email; format phone internationally with the correct country code; hash once |
| Inflated conversion values | Form-stage value copied into closed-won, or mixed currencies | Set values per stage and consistently report GBP excluding VAT |
| Uploads rejected as too old | Lag exceeds Google's applicable click-age limit | Send early stages sooner and split long-cycle deals into meaningful milestones |
| Cancelled deals still counted | Refunds sent as new events | Send refunds and cancellations as adjustments to the original conversion |
Distinguish a transport fault from a goal fault
An accepted upload doesn't prove that the campaign is optimising towards it. Inspect the campaign's selected conversion goals, any custom goals and the actions included in the bidding objective.
Similarly, Every isn't a duplicate-conversion error by default. It becomes a problem when your automation generates a fresh conversion whenever the same deal is saved, reopened or synchronised. Build the event key from the CRM deal and milestone, then preserve it across retries.
Inspect the event, not just the total
For inflated values, open individual records. Check whether an opportunity's estimated value was copied into the won event, whether VAT was included and whether the exporter changed currency labels without converting the amount.
For cancelled deals, establish who owns the correction. Finance may know about a refund before sales updates the CRM, so an adjustment workflow that listens only to sales stages can miss it.
A successful upload means the platform accepted the record. It doesn't mean the event definition, value or bidding goal is correct.
Check the diagnostic report after every upload batch. Separate rejected records, accepted records and matched outcomes in your monitoring so that a healthy job status can't hide a broken measurement process.
Confirm the First Import Before Trusting Smart Bidding
A smaller, consistently defined conversion set is more useful than a larger upload you can't reconcile. That's a measurement decision, not a claim that fewer conversions always improve performance. Sparse, delayed sales may still be unsuitable as the sole bidding target.
The ICO's detailed guidance for small organisations distinguishes lawful bases and marketing requirements. Having a lawful reason to retain a CRM record doesn't automatically make every advertising use appropriate.
Use this checklist before handing the new outcome to bidding.
Validate before making the action primary
I would start with closed-won imports as a secondary action and reconcile them over a short observation period. Compare eligible CRM records with accepted and matched outcomes by event, date and value, allowing for conversion lag. Don't expect every CRM sale to appear as an attributed advertising conversion.
Before changing campaign goals, confirm:
- Capture: New eligible leads retain their identifiers.
- Definitions: Sales and marketing agree stage triggers.
- Values: Won revenue is net of VAT and correctly denominated.
- Deduplication: Retries preserve event identity.
- Permissions: The suppression filter runs before export.
- Reconciliation: The first batch matches its eligible CRM source records.
Add opportunity imports as a secondary diagnostic signal once the pipeline works. Promote a stage to primary only when its quality, frequency and delay make it a defensible bidding objective.
An outside audit of your lead-generation setup can check the CRM model alongside the account settings. This week, capture a test lead from a live click and trace it from form to CRM to Google Ads.
PPC Geeks offers CRM integration and offline conversion tracking support to connect lead-generation campaigns with qualified opportunities and sales. Visit PPC Geeks to request an audit of your identifier capture, stage mapping and conversion goals before changing what Smart Bidding optimises towards.







