Google Ads CRM attribution: how to tie every dollar to a patient record
The mechanics have not changed much since Google shipped offline conversion imports; what has changed is how many clinics run six-figure budgets on platform numbers anyway. This is the CRM-agnostic version of the setup: what has to exist in Salesforce, GoHighLevel, HubSpot or a practice-management system, in what order, and what the account looks like afterward.
If you run Salesforce, the step-by-step is in GCLID to Salesforce offline conversion import. If you run GoHighLevel, it is in GoHighLevel Google Ads conversion tracking. This page is the map both of those sit on.
On this page
- Why platform attribution fails a clinic
- The five parts of Google Ads CRM attribution
- What has to exist in the CRM, whichever CRM it is
- Choosing the revenue stage
- Getting the outcome back into Google Ads
- What changes in the account after the first import
- What leaves your systems, and what never does
- Questions owners ask
Why platform attribution fails a clinic
Google Ads attributes conversions to clicks. That part works. The failure is upstream: what counts as a conversion. By default it is an event the platform can observe, a form submitted, a call that lasted 60 seconds, a booking widget opened. None of those is a patient, and in high-ticket healthcare most of them never become one.
So Smart Bidding, doing exactly what it is told, finds the keywords and placements that produce the cheapest observable events and pours budget into them. The report improves every month. The schedule does not. The gap between the two is the subject of why your Google Ads conversions don't match your CRM; this article is about closing it.
CRM attribution flips the definition. The conversion becomes a record in your system that reached a stage you chose, and that stage, not the form fill, is what the platform learns from.
The five parts of Google Ads CRM attribution
| Step | What happens | Where it usually breaks |
|---|---|---|
| 1. Capture | The click ID (GCLID for Google, MSCLKID for Microsoft) is read from the landing-page URL and stored on the lead record | The ID dies at a chat widget, a call, or a form without a hidden field |
| 2. Define | A CRM stage is chosen as the conversion: consultation attended, patient admitted, closed-won | "Lead created" is chosen because it has volume; it is a form fill with a new name |
| 3. Import | Records that reached the stage are uploaded to Google Ads with click ID, timestamp, conversion name, value | Manual uploads that stop after month two; timestamps outside the click window |
| 4. Rebid | Target CPA / ROAS reset against the imported conversion; platform events demoted to secondary | Both signals left as primary, so bidding still chases form fills |
| 5. Report | Cost per patient by campaign, reconciled to the CRM, monthly | The report keeps showing platform conversions because they are bigger |
Every step is simple. The engagement is the discipline of doing all five and not stopping at three.
What has to exist in the CRM, whichever CRM it is
Three things, and they are CRM-agnostic.
A field for the click ID on the lead or patient record
Text field, one per platform. It is populated by the form (hidden input), by the call-tracking provider (passed as a parameter or matched by session), and by the chat tool if the chat tool cooperates. The front desk never types it. Once it exists, every lead has a receipt for the click that created it.
A stage that means money
Not "contacted," not "qualified." The stage where, if you counted only these records, you would be counting revenue. In a surgical practice that is usually consultation attended or procedure scheduled; in a treatment program it is admitted; in a dental practice it is the case accepted. This is a decision the owner makes, not the consultant.
A way to get records out on a schedule
Salesforce has a native connector to Google Ads. GoHighLevel, HubSpot, Zoho, Kipu and most practice-management systems need either a scheduled export or a small integration through the Google Ads API. The mechanism matters less than the schedule: an import that runs weekly beats a perfect one that ran once.
The related question, what to do about phone calls, has its own answer in call tracking and CRM: closing the attribution loop; the short version is that the call-tracking provider has to write the click ID to the CRM, not just to its own dashboard.
Choosing the revenue stage
Two forces pull in opposite directions. The later the stage, the truer the signal; admitted patients are revenue, form fills are not. But the later the stage, the fewer records reach it, and Smart Bidding needs roughly 30 to 50 conversions a month to learn from before it behaves. Pick a stage that is too late and bidding starves.
The working rule: choose the earliest stage that reliably predicts revenue and still produces enough volume. For most six-figure healthcare accounts that is consultation attended, with admitted or closed-won imported as a second conversion action carrying value. When volume allows, move the primary signal later.
Two mistakes I see repeatedly. Choosing "lead created" because it produces the prettiest volume; that is a form fill with a CRM label. And choosing "closed-won" on an account that closes eight patients a month; bidding never gets enough signal and the owner concludes the method failed.
Getting the outcome back into Google Ads
Google documents the mechanism as importing offline conversions. Four fields per row: the click ID, the conversion name, the conversion time, and optionally a value. The conversion time has to fall inside the click-to-conversion window you set on the conversion action; for healthcare, where a consult can happen six weeks after the click, set the window to 90 days and stop losing conversions to the default.
Once the import exists, the conversion-action settings decide what bidding does with it. The imported action becomes primary and is included in "Conversions"; the platform events (form submit, call) are set to secondary, observed but not optimized on. Skipping this step is the most common reason a working import changes nothing: both signals stay primary, and bidding keeps chasing the cheaper one.
For Microsoft Ads the mechanism is the same with MSCLKID; the Microsoft Ads page covers how I run it as a verified second channel.
What changes in the account after the first import
Reported conversions fall, sometimes by half or more, because the account is now counting patients instead of events. Owners who were not warned read this as a disaster. It is the system telling the truth for the first time.
Cost per patient becomes visible by campaign, and it is never evenly distributed. In every account I have rebuilt, a minority of campaigns produced most of the verified patients while the rest produced calls. Budget moves. Campaigns get cut the same week the report shows them producing nothing.
Bidding relearns over 30 to 60 days. Target CPA is reset against the verified conversion, brand traffic is separated so existing patients stop inflating results, and the account settles into a lower-volume, higher-value pattern that the platform report would have called a failure.
VERIFIED EXAMPLE · On the flagship engagement, a luxury US healthcare clinic, the account I inherited was optimizing toward platform conversions. Rebuilt around admitted patients imported from Salesforce, cost per verified patient fell ~78% while spend scaled ~2× and approved patients rose ~9×. The reported conversion count fell first.
What leaves your systems, and what never does
Four fields leave: a click ID, a timestamp, a conversion name, and a value. No name, no phone number, no diagnosis, no appointment reason. That is a materially smaller footprint than a pixel that fires on a "thank you" page, and it is the architecture I document for a compliance review. HHS guidance on online tracking technologies is the reference; the practical rules are on the HIPAA-compliant conversion tracking page.
What never leaves: the CRM record itself. The import is a one-way trip for four fields. Google does not get the patient; it gets a receipt that the click produced one.
Questions owners ask
What is Google Ads CRM attribution?
The loop that stores the ad click ID on a lead record in your CRM, marks the stage where revenue is real, and imports that outcome back into Google Ads as an offline conversion, so bidding optimizes toward patients instead of platform events.
Does this work with a practice-management system instead of a CRM?
Yes, if the PMS can store a text field on the patient record and export records by stage on a schedule. Most can. The import then runs through a scheduled upload or the Google Ads API rather than a native connector.
How many conversions does Smart Bidding need?
Roughly 30 to 50 a month on the primary conversion action for the algorithm to learn reliably. That number decides which CRM stage you import as primary; too late a stage starves bidding, too early a stage is a form fill.
Will my reported conversions drop?
Yes, often sharply, because the account stops counting events and starts counting patients. Cost per verified patient improves at the same time. If nobody warns you in advance, the first report after go-live looks like a failure.
How long does setup take?
Two to four weeks, most of it CRM work: the click-ID field, the form and call-tracking plumbing, the stage definition, the first import. Bidding then needs 30 to 60 days to relearn.
Is Enhanced Conversions the same thing?
No. Enhanced Conversions improves matching by hashing customer data from your site; offline conversion import brings an outcome from your CRM back to the click. They can be combined, but for a clinic the offline import is the one that changes what bidding optimizes toward.
What about Microsoft Ads?
Same loop with MSCLKID instead of GCLID. Microsoft Ads accepts offline conversion imports with the same four fields, and in most healthcare accounts it becomes a cheaper verified second channel once the loop exists.
Can I set this up myself?
The CRM side, often yes: a field, a stage, an export. The conversion-action settings, the click window, and the primary/secondary split are where self-setups usually go wrong. A paid audit will tell you which of the five steps is missing on your account.