A conversion without a value tells the ad platform that every outcome is worth the same. For an ecommerce store that means a $20 order equals a $900 one. For a lead business it means a newsletter signup equals a quote request. Value-based bidding, Target ROAS and Maximise Conversion Value only work when the values are real or at least rank-ordered correctly. This guide covers how to send them, how to assign them for leads, how to refine them, and when to switch bidding.
Purchases: Send the Real Number
The purchase dataLayer carries the value and currency, and every platform tag reads it:
window.dataLayer.push({ ecommerce: null });
window.dataLayer.push({
event: 'purchase',
ecommerce: {
transaction_id: '10234',
value: 129.90,
tax: 11.81,
shipping: 9.95,
currency: 'AUD',
items: [ /* ... */ ]
}
});
In GTM:
- Google Ads Conversion Tracking: Conversion Value
{{dlv - ecommerce.value}}, Currency Code{{dlv - ecommerce.currency}}, Transaction ID{{dlv - ecommerce.transaction_id}}. In Google Ads the action is set to use different values for each conversion. - Meta Purchase:
valueandcurrencyparameters,eventIDfor deduplication. - GA4 purchase: reads value from the ecommerce object automatically.
Decide once whether value includes tax and shipping. Order subtotal after discounts is the most common choice and matches what finance considers revenue.
Refunds and Cancellations
Google Ads supports conversion adjustments: upload a retraction or a restated value for a transaction ID within the window. GA4 supports a refund event. Meta has no refund event; most businesses accept the gap or restate through offline uploads. For stores with meaningful return rates, a weekly refund upload keeps ROAS honest.
Leads: Assign Values That Rank Correctly
Leads do not come with a price tag. Assign one per lead type using a simple formula:
value = close rate × average first-order or first-year value
| Lead type | Close rate | Average value | Assigned value |
|---|---|---|---|
| Quote request, replacement | 25% | $12,000 | 3,000 |
| Quote request, repair | 40% | $600 | 240 |
| Phone call over 60s | 20% | $2,500 | 500 |
| Contact form, general | 8% | $2,500 | 200 |
| Newsletter signup | 1% | $2,500 | 25 |
The absolute numbers matter less than the ranking. The account needs to know a replacement quote is worth more than a newsletter signup, not the exact margin.
Send the value with the lead event from a Lookup Table in GTM keyed on the form or service type:
// Pushed by the form success handler
window.dataLayer.push({
event: 'form_submit_success',
form_name: 'Quote request',
lead_service: 'replacement',
user_email: 'name@example.com'
});
GTM Lookup Table LT - lead value: input {{dlv - lead_service}}, rows replacement to 3000, repair to 240, default 200. Use it as the Conversion Value in the Google Ads tag, as value on the GA4 generate_lead event with currency, and as value on the Meta Lead event.
Refining Values After the Fact
Assigned values are estimates. Two mechanisms replace them with reality:
- Offline conversion uploads with values. When the deal closes, upload Closed Deal with the actual amount. Over time, make Closed Deal the primary conversion and the account bids on real revenue. The Offline Conversion Import guide on this site covers the workflow.
- Conversion value rules. In Google Ads, under Goals, then Conversions, then Value rules, add multipliers for conditions your site cannot see at conversion time: a region with higher margins, a returning-customer audience, a device that correlates with larger orders. Keep them few and justified.
Settings That Make Values Count
- Conversion action set to use different values for each conversion, with a default for when none is sent.
- Primary conversions only where the value is meaningful. A secondary conversion's value is ignored by bidding.
- Currency consistent per action; Google converts to the account currency.
- Count: Every for purchases, One for leads.
- Transaction IDs on purchases so a refresh does not double the value.
Switching to Value-Based Bidding
- Confirm values are flowing: open the conversion action and check the Conversion value column over the last 30 days.
- Confirm volume: at least 15 valued conversions in 30 days for the campaign, ideally 30 or more.
- Move the campaign to Maximise Conversion Value with no target for two to three weeks.
- Read the achieved ROAS, then set a Target ROAS slightly below it to let the campaign scale, and tighten gradually.
- Review monthly. Reassign lead values twice a year as close rates change.
Meta's equivalent is value optimisation on Purchase or on a custom event with value, which needs sufficient valued events in the last week to be eligible.
Testing
- GTM Preview: complete a purchase or lead and confirm the Google Ads request carries the value and currency, and the Meta request carries
valueandcurrency, using a tag debugger such as the Insighter Debugger extension. - GA4 DebugView:
purchaseorgenerate_leadshows value and currency. - The next day, each platform's conversion report shows a non-zero value for the test conversion.
Common Mistakes
- Values as strings with symbols, silently dropped.
- Different value definitions per platform, so ROAS never reconciles.
- Switching to Target ROAS with too few conversions, then concluding it does not work.
- Lead values set once and never revisited.
- Secondary conversions carrying the only values.
Outcome
Every conversion carries a value that is either real or correctly ranked, bidding optimises toward revenue, and the platforms agree on what a good customer looks like. For most accounts this is where return on ad spend starts to move.
