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:
| Tier | Propensity Score | Conversion Value | What It Tells Google |
|---|---|---|---|
| Tier 1 | ≥ 0.70 | $240 | "This is a premium prospect — bid aggressively" |
| Tier 2 | 0.40 – 0.69 | $50 | "Moderate quality — bid competitively" |
| Tier 3 | 0.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 Type | Bidding Strategy | Value Signal |
|---|---|---|
| Performance Max | Target ROAS (tROAS) | 4-tier conversion values |
| Search | Maximize Conversion Value | 4-tier + keyword intent signals |
| Demand Gen | Target ROAS | 4-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