The monthly report looks good. Cost per lead came down from $61 to $44, volume held steady, and the channel responsible is the one you were close to cutting. Then you sit in the pipeline review and nobody is pleased. Sales worked more leads than the month before and booked fewer meetings.
Both of those things are true at once, and they are usually the same event described twice. The platform delivered cheaper leads because leads are what you asked it for, and the cheapest way to produce a form fill is to find the people most willing to fill in forms. Cost per qualified lead is the number that would have caught this in week two. Most accounts never calculate it.
The optimiser did exactly what you asked
Buying ads is no longer really about choosing an audience. You hand the platform an event and a budget, and it goes looking for whoever produces that event most cheaply.
So the event you send is the instruction. Send it form_submitted and the model learns the shape of a person who submits forms: someone comparing five vendors on a Tuesday afternoon, a student writing a dissertation, a competitor checking your pricing, somebody who only ever wanted the PDF.
None of that is the platform misbehaving. It optimised toward the target you gave it and got better at hitting that target over the month. The cost fell because it worked.
Agree what qualified means before you measure it
This is where most attempts stall, and the blocker is rarely technical. Marketing and sales have to name one event that counts, and it needs to be something you can observe rather than something you can argue about in a meeting.
A lead score won't do. Scores are opinions with a number attached, they get recalibrated quietly, and nobody in the room can reconstruct why a particular lead came out at 74.
Pick something binary. The usual candidates, roughly in order of how far down the funnel they sit:
- Meeting booked. Fast feedback, weak signal. People book and then vanish.
- Meeting held. Usually the sweet spot. It happened or it didn't, and you know within a fortnight.
- Opportunity created. A real seller spent time opening a record. Stronger signal, slower.
- Closed won. The best evidence you will ever have, and often useless for bidding. A 90-day sales cycle means the platform is learning from a decision made last quarter.
Most B2B teams land on meeting held. A decent rule: pick the earliest event that would still hurt to fake.
Cost per qualified lead is a round trip
The number doesn't exist inside your ad account. It has to be assembled, and the assembly runs in both directions.
A click arrives carrying an identifier: gclid on Google, fbclid on Meta. Your form captures that identifier in a hidden field and writes it to the CRM next to the lead. Later, when sales marks the record as qualified, the identifier goes back out to the platform as an offline conversion.
Three things have to hold, and all three break in ordinary ways.
- The hidden field survives your form builder, your landing page redirect and your consent banner.
- The CRM field is populated on every form, including the one somebody spun up for a webinar last March.
- The upload runs on a schedule instead of when a person remembers.
Close that loop and two things open up. You can report cost per qualified lead by campaign, keyword and creative. And you can hand the platform the qualified event as its optimisation target, so it starts hunting for people who resemble the ones sales actually wanted.
Expect the headline numbers to get worse
Switching the target changes the report, usually in a direction that looks like failure.
Cost per lead goes up. Volume goes down. Someone notices in week three and asks what happened, so agree the new scoreboard before you flip the switch rather than after.
What to watch instead:
- Cost per qualified lead, by campaign. This is the headline now.
- Qualified rate, the share of leads reaching your chosen event, split by source. This is the diagnostic. A campaign converting at 4% and one converting at 28% are not the same business, whatever their CPL says.
- Time from lead to qualified event. If it drifts upward, qualification is slowing down and your feedback loop is getting worse with it.
There's a common surprise waiting in that first split. The channel you were about to cut for being expensive often turns out to produce most of the meetings, which is a good argument for running the numbers before a budget decision rather than after.
What to do when the volume is too low
Platform-side optimisation needs a reasonable number of qualified events per month before the model has anything to learn from. The published thresholds move, so check the current guidance rather than a figure you read somewhere. If you are producing single-digit qualified leads a month, you are under it.
That doesn't make the measurement useless. It makes the automation useless.
So do it by hand. Export the last quarter's leads, sit down with whoever works them, and mark each one qualified or not. It's a dull afternoon. It also tells you which campaigns, keywords and offers produce people worth calling, and you can act on that yourself: pause the bad ones, move the budget, rewrite the offer that pulled in the wrong crowd.
At genuinely low volumes the honest answer is sometimes that paid acquisition isn't your first channel yet, and that a tightly defined outbound list reaches the same conversations for less.
Where to start this week
You don't need the whole loop to get the first answer.
Pull every lead from the last 90 days, hand the list to sales, and ask them to mark the ones that became a real conversation. Group the result by campaign. In most accounts that single split changes a budget decision immediately, and it costs an afternoon rather than an integration project.
Then build the plumbing, in this order: capture the click identifier on the form, get it into the CRM, close the loop back to the platform. Reporting improves the day the first step lands.
When we run paid and search campaigns, measurement gets fixed before any money moves, for exactly this reason. Optimising toward a cheap form fill is worse than not optimising at all, because it works.



