all work
value-based bidding with bqml

Value-based bidding: teach the bidder what a lead is worth

Most accounts bid as if every lead were equal, and they are not. This build put a BigQuery ML model between the CRM and Google Ads: every lead gets a modeled value the moment it arrives, and the bidder optimizes toward predicted revenue instead of raw lead counts.

stack:bqml · logistic regression · google ads
focus:value-based bidding
scope:enterprise + smb
+58.4%[ monthly revenue rate after vbb ]smb contractor
11[ bqml models shipped ]enterprise
~1,100[ feature categories learned ]enterprise
24x[ top vs bottom decile ]enterprise

What value-based bidding actually does

Value-based bidding sits on top of the identity and attribution builds. A paid touch that led to revenue can lose that context for a lot of reasons: tracking that was never set up, gaps in what the CRM captures, messy lead-routing flows, or a visitor the identity layer simply hadn't connected yet. Once the journey is connected, the model can score each lead by the revenue it is likely to produce, so conversions carry weights that reflect their real value.

Most accounts bid on one of three weak signals: a flat conversion value, a count of CRM milestones, or a web event like a form fill. Some accounts go a step further and assign conversion value statically by rule, a fixed dollar amount per lead type, which bakes in assumptions and ignores the first-party variables the business already has in its CRM and customer journeys. Value-based bidding replaces all of that with a modeled prediction of value, and where the data supports it, predicted lifetime value. The model is trained with BQML against business reality, the actual outcomes recorded in the warehouse, so the bidder optimizes toward revenue and LTV directly.

Reading model health, before it ever reaches Google

Before a model's output can feed a bidder, its health has to be established. The vocabulary comes from decades of medical and signal-detection research, ROC-AUC in particular started as a way to score radar operators, and it carries over cleanly to scoring leads: it's about how well a system ranks the real thing above the noise.

ROC-AUC

Area under the receiver operating characteristic curve. It measures how often the model ranks a random converter above a random non-converter, from 0.5 (a coin flip) to 1.0 (perfect ranking). 0.7–0.8 is useful, above 0.8 is strong, and a suspiciously high 0.99 usually signals a leak in the features.

Precision

Of the leads the model flags as likely to convert, how many actually do. Low precision means the bidder is chasing leads that looked good on paper and didn't pan out.

Recall & F1

Recall asks how many of the true converters the model caught in the first place. F1 balances precision and recall into one number, since optimizing either alone in isolation is easy and usually wrong.

This model, in practice

0.88 ROC-AUC, 0.23 precision,0.35 F1, tuned so the values reaching Google are ones the auction can trust rather than noise dressed up as a price.

The dimensions the model resolved on

Reaching that output took building the identity and attribution layers underneath, engineering roughly 1,100 feature categories across lead source, the specific content a lead arrived through, campaign, industry, territory, business size, engagement and behavioral signals, account firmographics, and funnel stage, then training and evaluating eleven model versions. Those dimensions are what let it separate a high-value customer profile from a low-value one.

The lift chart: actual conversion by modeled decile

Leads ranked into ten deciles by modeled probability, then checked against what actually happened. Decile 1 converts at 1.8%, decile 10 at 42.1%, which is a 24x spread the bidder can finally see. The line is the modeled value per lead, indexed to the bottom decile = 100.

A lift chart is the plain-language test of whether a model is worth deploying. If the top decile did not convert far better than the bottom, the model would be noise and bidding on its values would waste money. Here the ranking holds cleanly from decile to decile, which is what makes the modeled values safe to send to Google.

[ what the model learned ]

Content beats demographics

Across roughly 1,100 learned feature categories, the strongest signal was the content a lead arrived through. Source-detail and campaign features carry two orders of magnitude more learned weight than firmographic fields like customer segment. The industry weights also challenged this business's prior assumptions and changed which target markets it prioritized, since several segments converted at multiples the team hadn't expected.

Learned weight by feature family

Total absolute weight per feature family. The content a lead touched (red) dominates; the fields most lead-scoring folklore is built on barely registered.

Industry conversion odds vs baseline

Odds multipliers the model assigned by industry. Agriculture and forestry at 14.7x (gold), a segment this team hadn't been prioritizing before the model priced it.

[ shipping the value signal ]

The model for the enterprise, and the SMB export

The model for this business is a BQML logistic regression trained on resolved journeys from the identity layer. It scores each lead's probability of becoming an opportunity, then multiplies that probability by segment-level value to produce a price the bidder can use. The same principle runs at SMB scale for a home-services contractor, where booked-job revenue is exported back to Google as conversion value. Both charts below are indexed so the shape of the value signal is comparable across the two builds.

Enterprise: modeled value by decile, indexed

Modeled value per lead, indexed to the bottom decile at 100. The top decile is priced at nearly 3.6x the bottom, which is the spread Smart Bidding gets to act on.

SMB: value export, indexed

Booked-job revenue exported to Google as conversion value, indexed to pre-build = 100. The value signal reaching the bidder rose to 5.0x.

[ what the value signal bought ]

Cheaper customers, not just more of them

Everything above is a model and an export. This is what the account did afterward. The contractor build is the cleaner test of the two, because media spend only starts reaching the warehouse on a known date, which gives a real baseline to measure against rather than a period someone chose after the fact. Baseline is jan 20 – feb 28 2026, March is the month the campaigns spent re-training on the new signal, and the ramp is everything since.

The counterintuitive number is cost per lead, which went up 27%, from $68 to $87. That is the mechanism working, not failing. Feeding Google real sold jobs instead of raw form fills moved bidding toward more expensive, better-qualified demand. Over the same window the lead-to-won rate rose 70.6%, from 3.54% to 6.04%, so each more expensive lead bought a materially cheaper customer: spend per won job fell 25.6%. Paying more per lead and less per customer is the signature of a bidder that has stopped counting conversions and started pricing them.

Every revenue figure in this section is indexed to the baseline period at 100 rather than shown in dollars. That keeps the client's revenue off the page, and it makes the charts comparable to each other — this dataset carries three defensible definitions of monthly revenue, and in dollars the same month reads differently under each.

The revenue ramp, indexed to baseline

Daily revenue on the install-date anchor, indexed so the pre-signal baseline daily rate equals 100, the dashed rule, from 2026-01-01 through the end of August 2026. The gray bars are single days and most of them are zero, because a contractor books whole jobs, so the 14-day trailing average (gold) is the series to read. It sits near baseline through the learning month, holds around three times baseline through the spring, then climbs through August.

Cost per won job against marketing efficiency

Bars are media spend per won job; the dashed rule is the blended baseline of $1,925. The line is the marketing efficiency ratio, booked revenue over media spend. February and March recede because they are the baseline and learning months. The two measures move in opposite directions, which is the point: the account is buying the same outcome for less.

Does the ramp survive a different clock?

The same won revenue recut on two dates, both indexed to baseline = 100. Bars recognize revenue when the job was installed; the line recognizes it when the deal entered a won stage in CRM stage history. February's line value is partial by construction, since stage-history capture began mid-month.

This is the objection worth taking seriously. Home services runs a long clock: a job is sold weeks before it is installed, so revenue recognized on the install date could ramp simply because crews worked through a backlog. That would look identical to marketing improving.

So the same revenue was recut on the date each deal actually entered a won stage, read from stage-transition history rather than install dates. The two clocks disagree month to month, which is what you expect when one measures bookings and the other installs. What matters is that both sit far above baseline from March onward. A backlog artifact would show up on one clock and not the other.

“On average, advertisers that switch from a Target CPA to a Target ROAS bid strategy can see 14% more conversion value at a similar return on ad spend”

· google ads help, google internal data, 2021