Quick Answer
Wrong conversion values in Google Ads usually come from one of five causes: a static value instead of dynamic order total, currency mismatches between Shopify and Google, inconsistent tax/shipping inclusion, incorrect data layer variable mapping, or JavaScript type-conversion bugs. Each cause produces a specific pattern — $0 values, inflated ROAS, or values that are consistently off by a percentage. Identify the pattern first, then apply the targeted fix below.
What Wrong Conversion Values Look Like
Wrong conversion values are more dangerous than missing conversions — because everything looks like it's working. Google Ads reports conversions, your campaigns appear to be performing, and Smart Bidding optimizes based on the data. The problem is that the data is wrong, which means every optimization decision is based on fiction.
Here are the most common patterns that indicate wrong conversion values:
Every conversion shows $0 or $1
This almost always means a static default value is being sent instead of the actual order total. Google Ads received the conversion event but got no meaningful value — or the value field contains a hardcoded placeholder.
ROAS is unrealistically high or low
If your reported ROAS is 20x but your actual profit margins say otherwise, the conversion values being sent to Google are likely inflated. Conversely, if ROAS looks terrible despite strong Shopify revenue, values are deflated or missing.
Values are consistently off by a fixed percentage
If Google Ads values are always ~15-25% higher than Shopify order subtotals, tax and/or shipping is being included in one system but not the other. A consistent offset points to a systematic inclusion/exclusion mismatch.
Values differ by a constant multiplier
If Google Ads shows values roughly 1.3x or 0.75x of Shopify, you likely have a currency mismatch — the presentment currency (what the customer pays in) differs from the settlement currency (what you receive), and the wrong one is being sent.
Some conversions have correct values, others don't
Intermittent value issues often point to data layer timing problems — the conversion tag fires before the order value variable has been populated, so some orders send the correct value and others send undefined or zero.
How to Diagnose Value Mismatches
Before fixing anything, you need to know exactly what's wrong. Here's a systematic process to identify the root cause.
Note
The test order is your most powerful diagnostic tool. Use a product with a distinctive price (not a round number like $50.00) so you can easily find it in both Shopify and Google Ads. Compare the exact value sent vs. the exact order total in Shopify — any discrepancy reveals the issue.
How to Diagnose:
- In Google Ads, go to Tools → Conversions and click on your purchase conversion action. Look at the 'All conv. value' column — note the total for the last 7 days.
- In Shopify Admin, go to Analytics → Reports and pull the total sales for the same 7-day period. Compare the two totals.
- If Google Ads is significantly higher or lower, export individual conversion values from Google Ads (Segment → Conversions → Conversion action) and compare against specific Shopify orders.
- Place a test order with a known value (e.g., a $47.00 product). Wait 24-48 hours, then check what value Google Ads recorded for that specific conversion.
- Use Google Tag Assistant or GTM Preview mode on your thank-you page to inspect the exact value being passed in the conversion tag — is it the number you expect?
Cause #1: Static Value Instead of Dynamic Value
This is the most common cause and the easiest to fix. When you set up a Google Ads conversion action, Google asks for a conversion value. If you enter a fixed number (like $1.00 or your average order value), that same number is sent for every single conversion — regardless of the actual order amount.
We see this constantly with merchants who set up tracking through Google Ads directly rather than through GTM or a tracking app. The setup wizard asks 'What's this conversion worth?' and the merchant types in their AOV. From that point on, every conversion reports the same static value. A $15 order and a $500 order both report as the same number.
The giveaway is perfect uniformity: if you look at individual conversion values in Google Ads and they're all identical, you have a static value problem.
How to Fix:
- In Google Ads, go to Tools → Conversions → click your purchase conversion action → Edit settings. Under 'Value,' select 'Use different values for each conversion' instead of 'Use the same value for each conversion.'
- If using GTM, verify your Google Ads Conversion Tracking tag has the 'Conversion Value' field populated with a data layer variable (like {{dlv - transaction.total}}) — not a hardcoded number.
- Confirm the data layer on your thank-you page includes the order total. In Shopify, this typically comes from the checkout object: Shopify.checkout.total_price or the purchase event in the Web Pixel API.
- Test by placing an order and checking Tag Assistant — the conversion value shown should match the actual order total.
Cause #2: Currency Mismatch
Shopify stores selling internationally deal with multiple currencies, and this creates a subtle but significant tracking problem. There are three different 'values' for every international order: the presentment currency (what the customer sees and pays), the settlement currency (what you actually receive after currency conversion), and whatever value gets sent to Google Ads.
Here's where it gets complicated. If your store is based in the US (settlement in USD) but a customer in Germany pays €85.00 for a product, what value should Google Ads receive? If the conversion tag sends 85 (the presentment amount) but your Google Ads account currency is USD, Google records $85.00 — not the actual USD equivalent. Your ROAS calculations are wrong because the values don't reflect real revenue.
The reverse is equally problematic. If the tag converts to USD before sending but uses a stale exchange rate, or if it sends the settlement amount while your Google Ads account is set to a different currency, the values will be consistently off.
Warning
Google Ads will not auto-convert currencies. If you send a value of 85 with no currency code, Google assumes it's in your account currency. If your account is in USD, Google records $85.00 — even if the actual order was €85.00 (worth ~$92 USD). Always include the currency code parameter.
How to Fix:
- Determine your Google Ads account currency (Settings → Account settings → Currency). This is the currency Google expects conversion values in.
- Ensure your conversion tag sends values in your Google Ads account currency. If your Shopify settlement currency matches your Google Ads currency, send the settlement amount — not the presentment amount.
- If using GTM, add the 'Currency Code' parameter to your conversion tag. Set it to the three-letter ISO code (e.g., 'USD') that matches the value you're sending. This tells Google exactly what currency the value represents.
- For multi-currency stores, verify the data layer includes both the order value and the currency code. Shopify's Web Pixel API provides both in the purchase event payload.
- Test with an international order if possible. Place a test purchase in a non-default currency and verify the value Google Ads records matches what you expect.
Get accurate conversion values
ScaleUp syncs the exact Shopify order total to Google Ads — correct currency, tax handling, and dynamic values out of the box.
Install Free on ShopifyRated 5.0 on Shopify App Store
Cause #3: Tax and Shipping Included/Excluded Inconsistently
This is the most common cause of conversion values that are 'close but not quite right.' The conversion value you send to Google Ads includes tax and shipping, but the revenue you compare against in Shopify does not — or vice versa. The result is a consistent percentage offset that can make your ROAS look 15-25% better or worse than reality.
There's no single 'right' answer for whether to include tax and shipping. What matters is consistency: use the same definition of 'value' in both Google Ads and whatever you compare it against. Most experienced advertisers track the order subtotal (product revenue only, before tax and shipping) because that's closest to actual gross revenue and isn't affected by varying tax rates across states or countries.
The problem usually arises because different data sources in Shopify report different numbers. Shopify.checkout.total_price includes everything. Shopify.checkout.subtotal_price excludes tax and shipping. The Web Pixel API's purchase event reports total_price by default. If you're pulling the value from one source for tracking and comparing against a different source in your reports, you'll always see a discrepancy.
Note
For most Shopify stores, we recommend tracking the order subtotal (products only). Tax rates vary by location, and shipping costs vary by method — including them adds noise to your value data. Smart Bidding performs better with clean, consistent product revenue signals.
How to Fix:
- Decide on a consistent value definition: subtotal (product revenue only) or total (including tax and shipping). Document this decision.
- Verify which Shopify checkout field your conversion tag reads. Common fields: subtotal_price (products only), total_price (everything), total_tax (just tax), and shipping lines.
- If using GTM, check your data layer variable mapping. The variable feeding your conversion value might pull total_price while you're comparing against subtotal in Shopify reports.
- Update your Google Ads conversion action description to note whether the value includes or excludes tax/shipping — this helps future-you (or your team) maintain consistency.
- After making changes, run a 7-day comparison between the value Google Ads records and the corresponding Shopify metric (using the same inclusion/exclusion rules).
Cause #4: Data Layer Variable Mapping Errors
If you're using Google Tag Manager, the conversion value flows through a chain: Shopify checkout → data layer → GTM variable → conversion tag parameter. A break or mismatch at any point in this chain produces wrong values — or no value at all.
The most frequent data layer mapping errors we encounter are surprisingly basic. The data layer pushes the order value under one key name (like ecommerce.purchase.actionField.revenue), but the GTM variable is configured to read a different key (like transactionTotal). The variable returns undefined, GTM sends no value or sends the default, and the conversion records with $0.
Another common scenario: the data layer fires the purchase event, but the order value is populated in a separate data layer push that happens milliseconds later. The GTM trigger catches the purchase event and fires the tag, but at that moment the value variable hasn't been set yet. This creates intermittent issues — sometimes the timing works out and sometimes it doesn't.
How to Diagnose:
- Open GTM Preview mode and complete a test purchase on your store.
- In the GTM debug panel, find the event that triggers your conversion tag (usually a 'purchase' or 'transaction' event).
- Click on the event and check the 'Variables' tab. Find the variable mapped to your conversion value — what value does it show?
- If the variable shows 'undefined,' 'null,' or an empty string, the data layer key name doesn't match what your variable is configured to read.
- Compare the data layer structure (visible in the 'Data Layer' tab) against your variable configuration (Variables → your value variable → Data Layer Variable Name).
How to Fix:
- In GTM, go to Variables → User-Defined Variables → find the variable used for conversion value. Verify the 'Data Layer Variable Name' matches the exact key path in your data layer.
- Common Shopify data layer paths: ecommerce.purchase.actionField.revenue, ecommerce.transaction.value, or for the GA4 ecommerce schema, ecommerce.value.
- If using a third-party data layer app, check its documentation for the exact key names it pushes. Don't assume — verify in GTM Preview.
- For timing issues, configure your conversion tag trigger to fire on a more reliable event, or use a 'Tag Sequencing' rule to ensure the data layer is fully populated before the conversion tag executes.
- Test again after changes: place an order, check GTM Preview, confirm the value variable shows the correct order total.
Cause #5: JavaScript Rounding and Type Errors
This is the most technical cause and often the hardest to spot. JavaScript handles numbers in ways that can silently corrupt your conversion values — and you won't notice unless you inspect the actual values being sent at the tag level.
The classic example: Shopify returns the order total as a string ('47.99'), but the conversion tag expects a number. In some configurations, string concatenation can happen instead of addition. If the tag attempts to add tax to a subtotal and one value is a string, '29.99' + 5.00 becomes '29.995' (string concatenation) instead of 34.99 (numeric addition). The conversion records $29,995 instead of $34.99.
Floating-point precision is another trap. JavaScript stores all numbers as 64-bit floats, which means 0.1 + 0.2 === 0.30000000000000004 in JavaScript. For a $19.99 order, you might send 19.990000000000002 to Google. While Google typically handles small floating-point discrepancies gracefully, larger calculation chains can accumulate errors that produce meaningfully wrong values.
Warning
A common GTM mistake: setting the conversion value variable to {{Page URL}} query parameter extraction. URL parameters are always strings. If your URL contains ?value=47.99, the variable returns the string '47.99' — not the number 47.99. Always parse it with parseFloat() in a Custom JavaScript variable.
How to Fix:
- Always convert string values to numbers explicitly before passing to the conversion tag. In GTM, use a Custom JavaScript variable that returns parseFloat(value) or Number(value).
- Round conversion values to two decimal places before sending: Math.round(value * 100) / 100. This eliminates floating-point artifacts.
- Never perform arithmetic on values within the tag configuration itself. Calculate the final conversion value in a dedicated variable, then reference that variable in the tag.
- If your data layer provides the value in cents (e.g., 4799 for $47.99), divide by 100 and round: Math.round(centsValue) / 100. This avoids string/number confusion entirely.
- Use GTM Preview to inspect the actual value being sent in the tag. Click on your conversion tag in the debug panel, expand the tag parameters, and verify the value is a number (not a string) and is correct to two decimal places.
The Reliable Fix: Automated Value Tracking
Each of the five causes above has a specific fix — but they all share a common problem: they require manual configuration that can silently break. A Shopify update changes the data layer structure. A theme update modifies the checkout scripts. A GTM container change accidentally overwrites a variable. The value goes wrong again, and you don't notice for weeks because conversions are still being recorded — just with wrong amounts.
This is where automated tracking solutions like ScaleUp provide the most value. ScaleUp reads the order total directly from Shopify's backend via the Web Pixel API and server-side events — it doesn't rely on data layer variables, GTM configurations, or client-side JavaScript calculations. The value is always the correct order subtotal, in the correct currency, properly formatted as a number.
Stop Guessing About Conversion Values
ScaleUp sends the exact Shopify order value to Google Ads automatically — correct currency, proper tax handling, no data layer mapping required, no JavaScript type issues. When Shopify changes their checkout or data layer structure, ScaleUp adapts. Your conversion values stay accurate without ongoing maintenance.
Install Free on ShopifyHow to Verify Your Fix Worked
After applying any of the fixes above, verify that conversion values are now accurate:
- 1Place a test order with a distinctive price (e.g., $47.53) so you can easily identify it in both systems. Use a real payment method and refund afterward.
- 2Immediately check Google Tag Assistant or GTM Preview to confirm the value sent in the conversion tag matches the order total you expect.
- 3Wait 24-48 hours, then find the conversion in Google Ads (Tools → Conversions → click your action → view individual conversions). The recorded value should match your test order.
- 4For currency issues, place a test order in a non-default currency if possible and verify the value converts correctly.
- 5Run a 7-day comparison: total conversion value in Google Ads vs. total revenue in Shopify (using the same tax/shipping inclusion rules). The numbers should align within 5-10%.
- 6Set a monthly calendar reminder to re-run this comparison. Value drift is subtle and can go unnoticed for months.
Sources

Written by Jamie Scott
Founder & CEO, ScaleUp
Jamie specializes in e-commerce conversion tracking, helping Shopify merchants improve their Google Ads performance through better data accuracy.
Google Ads & Shopify conversion tracking experts
Have questions about this article? Check our FAQ or contact us.
Related Resources
Ready to fix your tracking?
Get accurate Google Ads conversion tracking on Shopify in under 5 minutes.