Inconsistent Currency Codes
Your conversion actions are reporting values in more than one currency. USD, EUR, sometimes blank. Google Ads doesn't normalise across currencies for bidding — Smart Bidding sums €100 and $100 as 200, and your aggregate ROAS column is meaningless until you fix this.
Why It Matters
Google Ads supports per-conversion currency codes. It assumes the team configures them consistently. When that assumption breaks, two problems compound. Value-based bidding compares conversion values directly, without exchange-rate normalisation. A Target ROAS strategy that sees €100 and $100 treats them as economically equivalent. They aren't. Depending on the day, €100 is anywhere from $105 to $115. The optimisation signal is corrupted by exactly the exchange-rate noise the team assumed Google was handling. Aggregate reports also stop reconciling: the "conversion value" total in Google Ads is a sum of mixed currencies, so it won't match any single number in the e-commerce backend. The mixed-currency state usually shows up in one of three places. Multi-region e-commerce that pushes the local currency without normalising before it hits dataLayer. GTM containers where the Currency Code field is hardcoded to USD but the actual transaction value is in EUR or GBP, so the value matches the customer's purchase but the currency lies. And Google Ads conversion imports where the Currency column was left blank or filled differently across upload sessions. Until this is fixed, every Target ROAS decision and every cross-region comparison runs on suspect numbers.
How To Fix It
- Decide the account-level reporting currency. Usually this is the company's functional currency, not the customer's.
- For GTM-managed conversions, open the Google Ads Conversion Tracking tag. Set Currency Code to a Data Layer Variable that resolves to the right ISO code, typically `{{DLV - ecommerce.currency}}`. Do not hardcode it.
- For multi-region sites, pick one of two approaches and document it. Either (a) pass the local currency consistently and let Google Ads convert at the daily exchange rate, or (b) normalise to the reporting currency on the site before pushing to dataLayer. Both are valid. Mixing them is not.
- For Google Ads conversion imports, standardise the Currency column on every upload. An empty Currency column means Google falls back to the account default, which can be different from what the import data was actually in.
- Run a test conversion. Verify in Google Ads → Conversions that the Currency column shows the expected ISO code.
Example
Expected currency code: USD
GTM Currency Code field: {{DLV - ecommerce.currency}}
dataLayer value: ecommerce.currency = "USD"This account has Google Ads conversion actions reporting values in more than one currency code. Per Google's conversion-value documentation, value-based bidding and aggregate reporting assume consistent currency within each conversion action. Mixed currencies are summed without exchange-rate normalisation, so Target ROAS optimisation is corrupted and aggregate totals do not reconcile against backend revenue. Fix: standardise on the account reporting currency or pass per-conversion currency consistently from the site, and verify in Google Ads reports. Source: support.google.com/google-ads/answer/2998565.
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