In brief: Ad platforms learn from the conversion signals you give them. Optimising to cheap form fills can find cheap form fills without finding many buyers. Separate demand capture from demand creation, give each campaign a clear job, and feed qualified CRM outcomes back where there’s enough signal to use them.
B2B SaaS demand generation divides into two different jobs: capturing demand that already exists and creating demand where it doesn’t yet.
Most guides treat demand generation as one activity. That conflation produces bad measurement and worse decisions.
The quickest thing I check in a paid account is the conversion goals.
Before the ads or keywords, I want to know what the campaign is being told counts as success.
I’ve opened accounts where a demo request, newsletter signup, ebook download and pricing-page visit were all sitting in the same optimisation setup. The campaigns looked efficient. Leads were cheap.
Sales didn’t think they were efficient.
That’s not an ad problem. The bidder is working from the signals it has been given. If all of those actions count towards the objective, it can end up learning much more from the easy conversions than the one the business actually cares about.
So before I change creative or budget, I decide what job each campaign is doing and which conversion should count.
Demand capture versus demand creation
The distinction between demand capture and demand creation is the starting point for B2B SaaS demand generation.
The 95:5 heuristic from John Dawes is useful here.1 The exact split will vary by market, but the underlying point is that most potential buyers aren’t actively shopping at any given moment.
Demand capture targets the people who are.
That includes:
- brand search
- competitor search
- category and problem search
- some forms of retargeting
The buyer is already showing evidence that the problem or category is active.
Demand creation works earlier.
A cold LinkedIn campaign aimed at the right accounts may be introducing a problem, a point of view or a category entry point to somebody who has no intention of booking a demo this afternoon.
I don’t expect those two campaigns to behave the same way.
For capture, I can usually get quite close to pipeline and judge the campaign on qualified outcomes.
For creation, I’m looking at whether I reached the intended accounts, whether people engaged with the material, whether branded and direct demand changes over time, and eventually whether the cohorts exposed to the work behave differently when they do enter market.
Trying to force both through cost per lead usually produces bad decisions.
Every campaign gets a job before it gets a budget
I normally map the campaigns before building them.
A simple version looks like this:
| Campaign | Audience | Job | Offer | Main success signal | What I watch |
|---|---|---|---|---|---|
| Brand search | Searching the company name | Capture | Demo / contact | Qualified demo or closest viable downstream event | SQL rate, impression share |
| Competitor search | Comparing alternatives | Capture | Comparison page → demo | Qualified demo | Cost per SQL, opportunity creation |
| Category / problem search | Searching the problem | Capture | Problem-led page → demo or trial | Demo / trial, then qualified stages | Cost per SQL, MQL→SQL |
| Retargeting | Previous site/content audiences | Capture / assist | Case study, proof, demo | Demo or qualified downstream event | Qualified pipeline, frequency |
| Cold ICP paid social | Target accounts not necessarily in market | Creation | Useful ungated content | Usually not a demo conversion | Reach in ICP, engagement, downstream trend |
The messaging comes from the same voice-of-customer work I use for positioning.
If buyers repeatedly describe the trigger as “we have a board meeting and nobody trusts the pipeline number,” that can become a search angle, an ad and a landing page.
I don’t need a brainstorming session to invent “revenue intelligence for modern teams.”
What is the bidder learning from?
In Google Ads, conversion actions can be primary or secondary, and campaigns can use campaign-specific goals instead of the account defaults.23
Primary actions within the goals used by the campaign are eligible for bidding. Secondary actions generally remain available for observation without directly driving bidding, with some exceptions such as custom goals.3
That distinction matters.
Suppose a search campaign produces:
- 12 demo requests
- 40 newsletter signups
- 80 PDF downloads
If I intend the campaign to acquire demos, I don’t want the bidder treating all 132 actions as equivalent evidence of success.
The implementation differs on LinkedIn and Meta, but I apply the same operating rule: know which event the delivery system is trying to increase.
LinkedIn, for example, lets conversions be associated with particular ad sets and supports website, Conversions API, CRM and CSV sources.4
The exact settings screen is less important than being able to answer one question:
What behaviour am I currently paying the algorithm to find more of?
If I can’t answer that quickly, I fix the measurement setup before interpreting campaign performance.
How deep should the conversion event be?
In a demo-led SaaS business, I’d rather optimise towards an SQL than a raw form fill.
But only if there are enough SQLs for the platform to learn anything useful.
If the account produces six SQLs a month, making sql_created the only bidding signal may leave the campaign with very little feedback.
So I work backwards.
What is the furthest downstream event that:
- has a meaningful relationship with revenue, and
- occurs often enough to give the campaign useful signal?
Early on, that might still be demo_request.
As volume improves and the CRM feedback loop becomes reliable, I can move closer to qualified lead, SQL, opportunity or value.
I still import the deeper events while I’m doing that. They tell me whether the upstream conversion I’m buying is actually producing anything worthwhile.
The numbers determine how far down the funnel I can sensibly go.
The offline conversion loop
For a B2B campaign, the interesting outcome often happens well after the browser session.
Somebody clicks an ad today, requests a demo next week, becomes an SQL the week after that and turns into an opportunity later.
I want those stages connected.
The basic loop is:
- Click. The advertising platform supplies whatever click or attribution identifiers are available.
- Capture. The landing page preserves the useful campaign parameters and identifiers, subject to the site’s consent setup.
- Form. Those values travel into hidden fields when the visitor submits.
- CRM. The source and identifier data persist on the lead/contact and, where the CRM model supports it, through the opportunity.
- Lifecycle. Marketing and sales move the record through the stages defined in the lifecycle system.
- Return signal. Relevant qualified outcomes are sent back to the ad platforms through their supported integrations.
- Value. Where there’s enough data to make it useful, I attach values that better reflect the relative importance of those outcomes.
The form plumbing is the bit I find missing most often.
The ad account contains a GCLID. The CRM contains an SQL. There’s simply nothing connecting the two.
I cover the first-party form and hidden-field implementation in the marketing engineering post.
Google’s lead conversion setup (2026 changes)
Google now recommends enhanced conversions for leads for advertisers setting up this kind of offline measurement.5
It supplements offline conversion data with hashed first-party information such as email or phone data collected from the lead form, and Google still recommends including GCLIDs with uploaded events where possible.5
The plumbing around the API has also changed.
From 15 June 2026, Google made the Data Manager API its primary API for offline conversion imports. New adopters using developer tokens without qualifying previous offline-conversion activity are blocked from beginning uploads through the legacy Google Ads API path, while existing adopters have transitional access as they migrate.6
Google also combined the enhanced-conversions-for-web and enhanced-conversions-for-leads settings so that, from April 2026, user-provided data can arrive through website tags, Data Manager and API connections under the same broader setup.7
The practical thing I’d check in an older account is how its offline conversions are actually arriving.
If somebody wrote a custom Google Ads API upload integration years ago, I want to know whether it’s on a supported path rather than finding out after qualified-lead imports stop arriving.
Values need to mean something
It’s tempting to solve the whole problem by assigning:
- MQL = £50
- SQL = £400
- Opportunity = £2,000
and switching on value-based bidding.
I’ll use rough values when that’s the best information available, but I want to know where they came from.
If 20% of SQLs become opportunities and an average opportunity is worth £10,000 in expected value, there’s at least some logic behind the value assigned to an SQL.
If somebody typed £400 into the setup because it looked suitably larger than £50, the bidding system is learning from invented economics.
As the data improves, I’d rather use stage conversion rates, expected pipeline value or actual revenue.
The value doesn’t have to be perfect.
It does need to preserve the rough ordering of which outcomes matter more.
A few things I check in every account
Before I change bids or budgets, I check the conversion events. Duplicate events, missing UTMs or a form on another domain can make a good campaign look bad and a bad one look good.
Browser and server events are deduplicated. If the same conversion is sent from the browser and server, both channels need a shared identifier according to the platform’s implementation. Otherwise one person can become two conversions.
The platforms listen to the same underlying site event.
I’d rather have one dataLayer event for a successful demo request and let the relevant tags consume it than have separate bits of JavaScript deciding independently whether the demo happened.
That’s how you get Google reporting 60 submissions while the CRM contains 41.
Consent is actually tested. I test granted and denied states rather than assuming the consent banner is communicating with the tags correctly.
Automatic events are reviewed rather than trusted by default. Enhanced measurement and automatically detected events can be useful. I still want to know what’s being collected and whether anybody has accidentally promoted one of those events into an optimisation target.
View-through conversions are kept in context. Paid-social platforms can attribute conversions after an impression without a click. That’s useful information, but I don’t mix it blindly with click-through conversions and then call the total incremental pipeline.
The analytics and attribution post covers why I keep the platform view separate from the CRM scoreboard.
Cheap leads can be surprisingly expensive
The failure mode I care about isn’t high CPL.
It’s CPL falling while the quality underneath it falls faster.
Three things commonly create it.
Gated content as the goal
An ebook download tells me somebody wanted an ebook.
That may be useful for nurture. It’s not the same thing as somebody entering a buying process.
I keep content conversions available for reporting and audience building where useful. I don’t make them the primary evidence that a pipeline campaign is working.
Several actions treated as equivalent
If the campaign can satisfy its objective with an easy conversion or a hard conversion, I shouldn’t be surprised when a lot of the easier one arrives.
This is why I care so much about the conversion setup before I care about creative optimisation.
The conversion itself is badly measured
A thank-you pageview is still one of the most common examples.
Somebody refreshes the page and becomes another conversion. Someone bookmarks it and comes back next week. A shared URL gets opened.
The campaign now has bad training data.
The event-based version lives in the form-tracking article.
The scoreboard for demand capture
For capture campaigns, I want cost per qualified stage and eventually customer acquisition cost.
I do still look at CPL. It can tell me something useful about what’s changing further up the funnel.
I just don’t stop there.
If Campaign A produces leads at £80 and 30% become SQLs, while Campaign B produces leads at £40 and 5% become SQLs, the cheap campaign isn’t really cheaper for the outcome I care about.
The CRM makes that visible.
I’m wary of generic public CPL and CAC benchmarks for the same reason. Lead definitions, company size, deal size, sales motion and attribution method vary too much for a single number to tell me whether my own account is healthy.
The benchmark I care about first is the company’s own trend:
- cost per SQL
- cost per opportunity
- pipeline per pound spent
- CAC where enough customers have closed
- conversion between the stages that explain why those numbers moved
That gives me something I can actually improve.
Reading the platform without believing everything it says
Google, LinkedIn and Meta can all report on the role their own ads played in conversions.
They don’t have a neutral view of the entire buying journey.
The CRM has a different problem. It sees the source information that survived into the record, but it doesn’t automatically know about every ad impression, podcast, recommendation or article that influenced the buyer.
So I use the systems for different jobs.
Platform reporting helps me steer activity inside the platform.
The CRM tells me whether the people entering the funnel became qualified pipeline and revenue.
The attribution setup helps connect the two without pretending either is a complete account of why somebody bought.
That’s normally enough to make a decision.
If a campaign is producing more qualified pipeline at an acceptable cost, I can give it more room.
If the form fills look excellent and nothing downstream moves, I investigate before celebrating the CPL.
Where I start
If I inherit an account, I usually start with five things:
- Which conversion goals are the campaigns using?
- Which actions are actually eligible to influence bidding?
- What does the CRM say happened to the people behind those conversions?
- Are the click IDs and campaign fields making it through the forms?
- Are later-stage outcomes coming back to the advertising platforms?
That tells me much more than another pass through the ad copy.
The creative still matters. So does targeting. So does the offer.
But I want the machine learning from the right outcome before I ask it to find more people.
Frequently asked questions
What is B2B SaaS demand generation?
B2B SaaS demand generation is the work of creating awareness and interest among potential buyers and converting that interest into qualified pipeline. It includes both demand creation (reaching future buyers who aren’t yet in market) and demand capture (acquiring buyers who are actively searching). The distinction matters because the two jobs require different campaigns, different conversion signals and different success measures.
What is the difference between demand capture and demand creation?
Demand capture targets buyers already showing purchase intent—brand search, competitor search, category search, problem search and some retargeting. Demand creation reaches future buyers before they’re actively shopping—cold paid social introducing a point of view, a problem or a category entry point to target accounts. The 95:5 research suggests most potential buyers aren’t actively in market at any given moment, which is why creation and capture need different budgets, different conversion goals and different scorecards.
What conversion should Google Ads optimise for in B2B SaaS?
The best conversion event is the furthest downstream that has a meaningful relationship with revenue and occurs often enough to give the campaign useful signal. For many B2B SaaS accounts, that starts at demo request and moves toward SQL, opportunity or value as volume and CRM feedback improve. Import deeper events even while bidding upstream—they tell you whether the conversion you’re buying is actually producing pipeline.
What is an offline conversion loop?
An offline conversion loop connects ad-platform clicks to CRM outcomes that happen days or weeks later. The basic steps: capture click identifiers and campaign parameters, pass them through hidden form fields, persist them on the CRM record, move the record through lifecycle stages, and send qualified outcomes (SQL, opportunity, closed-won) back to the ad platforms so they can learn which clicks produced real pipeline. The form plumbing between GCLID and SQL is the link I find missing most often.
I’m engaged with client work just now, so none of this is a pitch. But if you’re building growth-stage B2B SaaS and want this kind of work when capacity opens, tell me what you’re building. I read every note.
Sources
-
Dawes, J., “Advertising Effectiveness and the 95-5 Rule,” LinkedIn B2B Institute / Ehrenberg-Bass Institute, 2021. business.linkedin.com (opens in new tab) ↩
-
Google Ads Help, “About campaign-specific conversion goals.” support.google.com (opens in new tab) ↩
-
Google Ads Help, “About primary and secondary conversion actions.” support.google.com (opens in new tab) ↩ ↩2
-
LinkedIn Marketing Solutions Help, “Create a conversion in Campaign Manager.” linkedin.com (opens in new tab) ↩
-
Google Ads Help, “About enhanced conversions for leads.” support.google.com (opens in new tab) ↩ ↩2
-
Google Ads Developer Blog, “Changes to Offline Click Conversion Import Support in the Google Ads API,” 15 May 2026. ads-developers.googleblog.com (opens in new tab) ↩
-
Google Ads Help, “Updates to your enhanced conversions settings.” support.google.com (opens in new tab) ↩