"Our Target ROAS campaign isn't hitting the target — but we're not sure the values are even right." ROAS-based bidding is powerful, but it's only as good as the values you feed it. If the conversion value is missing, wrong, or inconsistent, the algorithm optimizes on bad data — and you won't realize it until the numbers in Google Ads don't match your actual revenue.
This guide covers how to set up conversion values correctly, how to verify they're being received, and how to diagnose when they're wrong.
1. Why conversion values matter beyond reporting
Conversion values serve two functions:
- Reporting — you see revenue in your Google Ads dashboard and can calculate ROAS
- Bidding signal — Smart Bidding strategies like Target ROAS and Maximize Conversion Value use the value to decide how much to bid on each auction
The second function is the one most people underestimate. When a conversion comes in with a $500 value instead of $50 (a decimal error), the algorithm doesn't know it's wrong — it treats that click as 10x more valuable and starts bidding aggressively on similar clicks. The feedback loop amplifies the error.
2. Static vs. dynamic values
Static values
You assign a fixed value to each conversion action in Google Ads settings. Every conversion of that type gets the same value.
When to use: Lead generation, where every form submission has roughly the same business value (e.g., "each lead is worth $200 on average").
Setup: In the conversion action settings, enter the value and currency. Done.
Risk: If lead quality varies significantly, a static value hides that variance from Smart Bidding.
Dynamic values
The tag passes a transaction-specific value at the time of conversion. Each conversion carries its actual revenue.
When to use: E-commerce (order total), variable-value services (different plan tiers), or anywhere the value differs per conversion.
Setup: The conversion tag (gtag.js or GTM) must pass value and currency parameters:
gtag('event', 'conversion', {
'send_to': 'AW-XXXXXXX/YYYYYYY',
'value': 149.99,
'currency': 'USD'
});
In GTM, these are typically populated from a data layer:
dataLayer.push({
'event': 'purchase',
'transactionTotal': 149.99,
'transactionCurrency': 'USD'
});
Risk: If the value or currency parameter is missing or malformed, Google Ads falls back to the static default value (or $1, or $0 — depending on your settings).
3. Common value mistakes and how they manifest
| Mistake | What happens | How to detect |
|---|---|---|
| Value not passed (undefined/null) | Falls back to default value; all conversions show the same amount | Check "Conv. value" column — if every conversion has the same value, dynamic values aren't working |
| Currency not passed | Google assumes the account's currency, which may mismatch | Revenue looks correct in one currency but wildly wrong when your account currency differs |
| Decimal error (149.99 → 14999) | ROAS appears 100x what it should be; bidding becomes hyper-aggressive | Spot-check a few known transactions against your order system |
| Tax/shipping included inconsistently | Some conversions include tax, others don't | Revenue in Google Ads doesn't match your accounting |
| Value passed on wrong page/event | The value from the previous page is sent, or a default value fires | Check the Network tab — the value= parameter on the conversion request should match the actual order total |
GA4 ecommerce value vs Google Ads value |
GA4's purchase event and Google Ads' conversion tag may read from different data layer keys |
Compare GA4's event value in DebugView with the Google Ads conversion request value |
4. How to verify conversion values are correct
Method 1: DevTools Network tab
On your thank-you / order confirmation page, open DevTools → Network and filter for the conversion request:
- Google Ads: Look for
googleadservices.com/pagead/conversion/— thevalue=parameter shows what was sent - GA4: Look for requests to
google-analytics.com/g/collect— the event parameters includeep.valueor the ecommerceprparameters
Compare the value in the request against the actual order total on the page.
Method 2: GTM Preview mode
In Google Tag Manager's Preview mode, click through a test conversion and check:
- The tag that fires — does it include a
valuevariable? - What value does the variable resolve to? (Check the "Variables" tab in Preview)
- Does it match the data layer value? (Check the "Data Layer" tab)
Method 3: Google Ads conversion action report
In Google Ads → Goals → Conversions, click on a specific conversion action and check:
- Conversion value column — are the values realistic?
- Value/conv — is the average value per conversion consistent with your business?
- If "Value/conv" is exactly your static default, dynamic values might not be passing through
Method 4: GA4 DebugView
For GA4 ecommerce events, use Admin → DebugView to watch purchase events fire in real time. Check the value parameter against the expected order total.
5. Setting up for Target ROAS bidding
Target ROAS requires accurate, consistent values. Before switching to this bidding strategy, run through this checklist:
- Dynamic values are passing correctly (verified with DevTools on 5+ test transactions)
- Currency is explicitly set in the tag (don't rely on the default)
- Values match your source of truth (order management system, CRM)
- The conversion action is set to "Primary" (secondary actions aren't used by Target ROAS)
- You have at least 15 conversions in the last 30 days (Google's recommended minimum for Target ROAS)
- Your target ROAS is realistic given historical data (check the "Conversion value / cost" column)
What target should you set?
Start with your current ROAS as the baseline. If your account currently achieves 400% ROAS, setting a target of 800% will drastically reduce spend (the algorithm will only bid on auctions where it expects 8x return). Start at or slightly above your current level, then adjust.
6. Value discrepancies: Google Ads vs. your backend
The most common question: "Why doesn't the revenue in Google Ads match our order system?"
| Cause | Direction of mismatch | How to check |
|---|---|---|
| Refunds/cancellations not synced | Google Ads shows higher revenue | Upload conversion adjustments for refunds |
| Different attribution windows | Either direction | Check conversion window settings vs. your backend's attribution |
| Currency conversion | Either direction | Verify the currency parameter matches your account currency |
| Tax/shipping discrepancy | Either direction | Decide on a standard (with or without tax) and apply it consistently |
| Multiple tags counting the same purchase | Google Ads shows higher revenue | Check for duplicate conversion tags (see duplicate tracking) |
| Conversion value rules modifying values | Google Ads shows different values | Check Goals → Conversions → Value rules |
Conversion value rules: practical design
Google Ads lets you create rules that modify conversion values based on conditions (audience, location, device). If you've set these up, the value in reports won't match the raw value your tag sent. Check Goals → Conversions → Value rules to see if any rules are active.
Value rules are especially powerful for businesses where conversion quality varies by segment but the tag only sends a uniform value. Here's how to design them:
Step 1: Calculate segment-level multipliers from data
Don't guess — derive multipliers from your actual backend data:
| Condition type | Example | How to calculate the multiplier |
|---|---|---|
| Audience | Returning customers convert to deals at 2x the rate of new visitors | Set returning customer audience rule: multiply value by 2.0 |
| Location | Leads from Tokyo close at 1.3x the national average | Set Tokyo geo rule: multiply value by 1.3 |
| Device | Mobile leads have 0.7x the close rate of desktop | Set mobile device rule: multiply value by 0.7 |
The formula: multiplier = segment close rate / overall average close rate
Step 2: Limit changes to ±20% at a time
Large multiplier changes can push Smart Bidding into a learning period. Start conservative (e.g., 1.2x instead of 2.0x), verify the effect over 2–4 weeks, then increase if the data supports it.
Step 3: Don't stack multiple new rules simultaneously
Change one rule at a time. If you adjust audience, location, and device rules all at once, you can't isolate which change caused any performance shift — and you risk a prolonged learning period.
7. Using conversion values for lead generation (non-e-commerce)
ROAS-based bidding isn't just for e-commerce. Lead-gen businesses can use it by assigning different values to different conversion points based on their business impact:
| Conversion point | Suggested value | Rationale |
|---|---|---|
| Form submission (inquiry) | $50 | Low-commitment action, many don't convert to deals |
| Phone call (30+ seconds) | $100 | Higher intent than a form fill |
| Demo/meeting booked | $300 | Strong buying signal |
| Qualified lead (MQL) | $500 | Sales-verified quality |
| Closed deal (via offline import) | $5,000 | Actual revenue |
By assigning these weighted values, you teach the algorithm: "a demo booking is worth 6x a form submission." Smart Bidding then allocates budget toward the clicks that generate higher-value actions, not just the most form fills.
How to implement:
- Create separate conversion actions for each stage
- Set the value for each action (static values are fine here — the value represents the average worth of that action type)
- Mark all of them as "Primary" so they feed into bidding
- Use "Maximize Conversion Value" or "Target ROAS" as your bid strategy
This approach is far more effective than optimizing for form submissions alone, because it accounts for lead quality in the bidding signal.
8. Target CPA vs. Target ROAS: when to use which
A common question: should I use Target CPA or Target ROAS? The decision depends on whether your conversion values vary meaningfully:
| Condition | Recommended strategy | Why |
|---|---|---|
| All conversions have roughly the same value | Target CPA | There's no value variance for ROAS to exploit |
| Conversion values differ significantly (e.g., order totals from $20 to $2,000) | Target ROAS | The algorithm can bid more for high-value conversions |
| Lead-gen with a single conversion action and no offline import | Target CPA | Without value differentiation, CPA is simpler and equally effective |
| Lead-gen with weighted conversion points or offline import | Target ROAS | Value differences across conversion types give the algorithm actionable signals |
| Fewer than 15 conversions per month | Maximize conversions (no target) | Not enough data for target-based strategies |
Transitioning from Target CPA to Target ROAS:
- Ensure dynamic values or weighted conversion points are set up and verified
- Calculate your current effective ROAS:
total conversion value / total cost - Set your initial target ROAS at or slightly below your current level (don't start ambitious)
- Allow 2–4 weeks for learning; expect some volatility in the first week
- Adjust the target in increments of 10–20% — large jumps trigger re-learning
Frequently asked questions
Q. Can I use Target ROAS with static conversion values? A. Technically yes, but it's less useful. If every conversion has the same value, Target ROAS behaves similarly to Target CPA (it's just optimizing for cost per conversion at a fixed value). Dynamic values are where Target ROAS truly shines — it can bid more aggressively for high-value conversions and less for low-value ones.
Q. Our values look correct in DevTools but wrong in Google Ads. Why? A. Check the conversion window and attribution model — a conversion might be counted on a different date than when the tag fired. Also check for conversion value rules that modify the raw value. Finally, verify there's no duplicate tag sending a second conversion with a different value.
Q. We pass value in GA4 but import that conversion into Google Ads. Does the value carry over?
A. Yes, if the GA4 event includes a value parameter and you import that event as a conversion action in Google Ads, the value is imported too. But verify in the Google Ads conversion report — currency mismatches or missing value parameters in GA4 can cause the imported value to be zero or default.
Q. How do I handle different currencies across markets?
A. Always pass the currency parameter with each conversion. Google Ads converts to your account currency using the exchange rate at the time of the conversion. If you don't pass currency, it assumes your account currency — which creates errors for international transactions.
Conclusion: garbage values in, garbage ROAS out
Conversion value setup is the bridge between "we track conversions" and "we optimize for revenue." If the values are wrong, every ROAS calculation and every Target ROAS bid is wrong. The fix isn't complicated — pass the right number, in the right currency, on the right event — but it requires verification, not assumption.
Make value verification part of your regular conversion tracking checks — the Conversion Tracking Verification Checklist provides a structured framework for this. Spot-check against your order system monthly. And when ROAS numbers look too good (or too bad) to be true, check the raw value parameter before questioning the bidding strategy.
ConversionOK verifies that the conversion signals your site sends — including the value and currency parameters — actually reach the ad platform with the correct data. Start with a check to confirm your values are flowing before building bidding strategies on top of them.