CROSS·Cross-Source·critical

Dynamic Value Passing Validation

Your account is set up for dynamic conversion values (each order ships its real revenue from the dataLayer to Google Ads), but one of the links in the chain is broken. Either a GTM conversion tag has a hardcoded value where it should reference a Data Layer Variable, the value parameter is malformed, or the Ads conversion action is configured for fixed values while GTM is sending dynamic ones. The pipeline pretends to work; the bidding signal is wrong.

CL
By Christopher LandaverdeCreator of AdLint · ad-tech tracking specialistUpdated

Why It Matters

Dynamic value passing depends on three layers agreeing. The site dataLayer pushes the real order total. The GTM tag reads the dataLayer through a Data Layer Variable and writes it into the `conversionValue` (or `value`) parameter. The Google Ads action is set to "Use different values for each conversion" so it accepts the value the tag sends. When any link breaks, the symptom is the same: Google Ads reports conversion volume that looks healthy, but the value field is zero, garbage, or stuck on a fixed amount that does not reflect the real order. Target ROAS strategies cannot work against this signal. They optimize toward whichever order happens to have a non-zero value, biasing budget toward whatever traffic pattern fed those orders. The common failure modes: a developer set a placeholder value during QA (`conversionValue: "1"`) and never replaced it with the variable. A Data Layer Variable reference is misspelled (`{{ecommerce.value}}` vs `{{DLV - ecommerce.value}}`) and resolves to an empty string. The Google Ads action was left on "Use the same value for every conversion" because the migration to dynamic values was only ever half-completed.

How To Fix It

  1. Open the AdLint details and review each flagged tag. Issues fall into three buckets: hardcoded values where dynamic was expected, malformed variable references, and configuration mismatches between GTM and Ads.
  2. Replace any hardcoded `conversionValue` with a Data Layer Variable that resolves to the order total. In GTM, the binding is `{{DLV - ecommerce.value}}` against a Data Layer Variable Name of `ecommerce.value`.
  3. Open each Google Ads action in Tools and Settings > Measurement > Conversions and set the value option to "Use different values for each conversion."
  4. In GTM Preview, complete a test purchase. Confirm the conversion request shows the real order total in the value field.
  5. Wait one reporting cycle and confirm reported values match the commerce backend within rounding.

Example

Configuration
Tag: 'AW - Purchase'
ConversionValue parameter: '1' (hardcoded, was meant to be {{DLV - ecommerce.value}})
Ads action: 'Use different values for each conversion'
Result: every order counts as $1 of revenue.
For Your Client Report

This account is configured to use dynamic conversion values but the value pipeline has a break in it. Per Google's value-based-bidding documentation, dynamic values require three layers to agree: a dataLayer that pushes the real order total, a GTM conversion tag that reads it via a Data Layer Variable, and a Google Ads action set to accept different values per conversion. When any link breaks, Google Ads reports healthy conversion volume with the wrong values, and Target ROAS strategies optimize against a signal that does not reflect business revenue. The common causes are placeholder values left in during QA, misspelled Data Layer Variable references, and Ads actions left on the static value setting after a half-completed migration. Fix: replace hardcoded values with verified Data Layer Variable references, set each Ads action to "Use different values for each conversion," and verify in GTM Preview that real order totals reach Google Ads. Source: support.google.com/google-ads/answer/13064107.

Drop this paragraph into your client deliverable. Sources back to the canonical platform documentation linked below.

References

Audit your own files for this check

AdLint runs this check (and 177 others) against your GTM, Google Ads, Meta, TikTok, LinkedIn, Pinterest, Twitter/X, and Snapchat exports. Everything stays in your browser. No uploads, no accounts.

Run a free audit