Your ad platform optimizes for form fills. That’s the only outcome you ever sent it.

RevOps/No. 26/7 min read

Your ad platform optimizes for form fills. That’s the only outcome you ever sent it.

Smart bidding builds a model of whoever produced the conversion you reported. Report only form submissions and it will find you more form-fillers, cheaply, forever.

All field notes

Open your Google Ads conversion actions right now. If the only action carrying a value is a form submission, your bidding algorithm has never seen a sale. It has spent your entire budget learning what a person who types an email address into a box looks like. It is very good at finding more of them. It is doing exactly what you told it to do.

The fix is not new creative or a rebuilt campaign structure. It’s a pipe. The outcome that happens in your CRM has to travel back to the platform that bought the click, on a schedule, with a value attached.

Smart bidding learns from what you send back. Only that.

Every automated bidding strategy is a feedback loop with two inputs: the clicks it bought, and the conversions you reported. It builds a model of the people who produced the second thing, then goes hunting for more of them.

So think about what you actually report. A form submission. Which means the model is optimizing toward the cheapest human who will complete a form. That population includes your buyers. It also includes students, competitors doing research, job seekers, and consultants collecting PDFs. They convert at a lower cost than real buyers because they have nothing at stake. The algorithm notices. It shifts spend toward the keywords, placements, and audiences that produce them.

Your cost per lead drops. Everyone congratulates the paid team. Pipeline stays flat.

We’ve written before about why cost per lead is the wrong number to optimize. That post is about the metric you look at. This one is about the metric the machine bids on, and they are not the same problem. You can change your dashboard tomorrow. The algorithm keeps buying form-fillers until a qualified outcome physically arrives back in the platform.

Three places the loop breaks

In practice it’s almost always these three, in this order.

1. The click ID never makes it onto the record

Google sends a gclid on every ad click. LinkedIn sends li_fat_id. Meta sends fbclid. They arrive as URL parameters on the landing page and then, for most sites, they evaporate. The hidden field capturing the click ID lives on the landing page form. Anyone who reads the page, clicks through to pricing, then converts on a different form has already lost it.

You end up holding click IDs for the small slice of visitors who converted without browsing. Which is, notably, the least considered slice of your audience.

Capture on first hit instead: read the parameters on entry, write them to session storage, and populate hidden fields on every form on the site. Same discipline as fixing a broken UTM taxonomy, one layer lower. Tagging tells you where traffic came from. The click ID is what lets you pay it back.

2. Nothing on the record says which outcome happened, or when

An offline conversion upload needs three things: an identifier, a conversion name, and a conversion time. Most CRMs can produce the first two and fail the third.

The reason is that teams store current stage, not stage history. dealstage = Closed Won tells you where the record sits today. It does not tell you when it became an opportunity, which is the event you actually want to send back. Upload the close date as the timestamp for the opportunity event and you’ve handed the platform a lie about timing. Timing is most of what it learns from.

You need discrete timestamp properties, set once by workflow on stage entry and never touched by hand: sql_date, opportunity_created_date, closed_won_date. This is also why deal stages need exit criteria rather than opinions. If two reps disagree about what “Opportunity” means, you’re training a bidding model on that disagreement.

3. Nobody owns the upload

The most common version of “we do offline conversions” is a CSV someone exports at quarter end. That’s not a feedback loop, it’s a report. Batching ninety days of conversions into one upload hands the model a wall of stale events well outside the window where it could have learned anything from them. Run it daily. It should be a job, not a task.

What to send back, and what not to

The instinct is to send closed-won and stop there. Don’t. Most B2B accounts close too few deals per month for a bidding model to learn from, and the lag between click and close is often longer than the conversion window.

Send two events instead:

  • An intermediate qualified event, at SQL or opportunity-created. This is your volume signal. Value it at expected value: pipeline amount multiplied by your trailing twelve-month win rate for that segment. Not the full deal value, which overstates it, and not zero, which teaches nothing.
  • Closed-won, valued at actual first-year revenue. This is your accuracy signal. Low volume, high truth.

What you should not do is send every MQL back with a value attached. An MQL is a form fill wearing a lifecycle stage. Report it and you’ve rebuilt the original problem with extra steps.

The build

  • Capture layer. gclid, gbraid, wbraid, li_fat_id, fbclid, plus landing page and referrer, read on first hit and written into hidden fields on every form. Land them in read-only contact properties so nothing overwrites them later.
  • Roll to the deal. Copy the click ID onto the deal at creation. Most CRM problems are data problems: if the identifier lives on the contact and the outcome lives on the deal, there is no join, and no join means no upload.
  • Stage timestamps. Workflow-set, one-way, not manually editable.
  • Value mapping. Every event gets a number. Expected value for the qualified event, actual revenue for closed-won. Recalculate the win rate quarterly instead of hardcoding it once and forgetting.
  • The upload. Automated, daily, with a failure alert that reaches a human. A silently broken import looks identical to a channel that stopped working.

On the Google side specifically, check which API your integration runs on. Google migrated offline conversion imports and enhanced conversions for leads uploads to the Data Manager API on June 15, 2026, and blocked them in the Google Ads API. If your import was wired up before then and nobody has touched it since, that’s worth ten minutes today.

And if you’re sending click IDs alone, add hashed first-party data. Google reports that advertisers who imported user-provided data alongside GCLIDs saw a median 10% increase in measured conversions compared to standard offline imports, which is the upgrade it calls enhanced conversions for leads. Respect consent state on all of it. Send only what the visitor agreed to let you send, hashed.

What changes once it’s running

Give it one bidding cycle, usually four to six weeks of qualified events. Then the campaigns that only ever produced form fills start losing budget without anyone arguing about lead quality in a meeting. The platform reaches that conclusion before your team does, because it can finally see the outcome.

There’s a quieter benefit too. Cost per qualified opportunity becomes a live number inside the ad account rather than a spreadsheet someone rebuilds monthly. That’s the number a CFO will actually accept.

This sits across two things we build. The capture layer, the value model, and the upload job are Growth & Demand Generation work. The property structure and stage timestamps that make the outcome uploadable in the first place are Marketing Operations & CRM work. Build one without the other and you get an integration that runs on time and sends garbage.

Where to start

Open your conversion actions list and count how many describe something that happened after the form. If the answer is zero, the problem isn’t that your leads are bad. It’s that you’ve never told the machine what a good one looks like.

Then pull one contact record from a paid click last week and check whether the click ID is on it. That single check tells you whether this is a two-day build or a two-week one.

Not sure where the click ID dies between your ad and your CRM? That’s one of the things we trace in the free 30-minute audit. We follow a click from the platform to the form to the contact to the deal, and show you exactly where the chain breaks. Whether we work together or not.

The audit

Is your bidding algorithm learning from your pipeline, or from your form?

30 minutes. We follow a click from the ad platform to the form to the contact to the deal, find where the click ID dies, and hand you the prioritized list of fixes. Whether we work together or not.

Book the audit →

Discover more from LSR Marketing

Subscribe now to keep reading and get access to the full archive.

Continue reading