Skip to main content

Google Ads Optimization Engine

4-Tier Conversion Value Framework

ConversionOS feeds ML-derived conversion values to Google Ads, enabling Smart Bidding to optimize for revenue rather than raw conversion count. This is the system that powered 34K qualified leads from 2.3M prospects.

The 4-Tier Framework

Instead of sending a binary conversion signal (converted = yes/no), ConversionOS assigns a dollar value based on propensity tier:

TierPropensity ScoreConversion ValueWhat It Tells Google
Tier 1≥ 0.70$240"This is a premium prospect — bid aggressively"
Tier 20.40 – 0.69$50"Moderate quality — bid competitively"
Tier 30.15 – 0.39$10"Low probability — bid conservatively"
Tier 4< 0.15$1"Near-zero value — minimal spend"

Why This Works

Google's Smart Bidding (tROAS, value-based bidding) optimizes toward the conversion values you provide. By feeding ML-derived values instead of flat conversions:

  • Google learns which audience signals correlate with high-value prospects
  • Budget naturally shifts toward prospects your model predicts will convert
  • ROAS improves because spend concentrates on quality, not quantity

Implementation

Step 1: Enhanced Conversions Setup

# Upload offline conversion values to Google Ads
from google.ads.googleads.client import GoogleAdsClient

def upload_conversion_values(client, customer_id, conversions):
"""Upload propensity-scored conversion values."""
conversion_upload_service = client.get_service(
"ConversionUploadService"
)

click_conversions = []
for conv in conversions:
click_conversion = client.get_type("ClickConversion")
click_conversion.gclid = conv["gclid"]
click_conversion.conversion_action = (
f"customers/{customer_id}/conversionActions/{conv['action_id']}"
)
click_conversion.conversion_value = conv["propensity_value"]
click_conversion.currency_code = "USD"
click_conversions.append(click_conversion)

request = client.get_type("UploadClickConversionsRequest")
request.customer_id = customer_id
request.conversions = click_conversions

response = conversion_upload_service.upload_click_conversions(
request=request
)
return response

Step 2: BigQuery Scheduled Export

-- Daily export: scored prospects with GCLIDs for offline upload
CREATE OR REPLACE TABLE `project.conversionos.gads_upload` AS
SELECT
s.user_id,
c.gclid,
s.propensity_tier,
s.conversion_value,
CURRENT_TIMESTAMP() AS upload_timestamp
FROM `project.conversionos.scored_prospects` s
JOIN `project.analytics.click_ids` c USING(user_id)
WHERE s.conversion_value > 1 -- Skip $1 tier (suppression)
AND c.gclid IS NOT NULL
AND c.click_date >= DATE_SUB(CURRENT_DATE(), INTERVAL 90 DAY);

Step 3: Campaign Configuration

Campaign TypeBidding StrategyValue Signal
Performance MaxTarget ROAS (tROAS)4-tier conversion values
SearchMaximize Conversion Value4-tier + keyword intent signals
Demand GenTarget ROAS4-tier + audience signals

Performance Benchmarks

From production deployment:

  • ROAS improvement: 2.8x vs flat conversion bidding
  • CPL reduction: 40% lower cost per qualified lead
  • Budget efficiency: 70% of spend concentrates on Tier 1-2 prospects
  • Lead quality: Tier 1 converts at 4.7x the rate of Tier 3