TL;DR
Two of the three biggest destinations do not tell you what to put in the conversion value. GA4 does, and its answer is item subtotal with tax and shipping excluded [1], while Meta's and Google Ads' documentation define the field as a monetary amount and stop there [2][3]. So "follow the platform's guidance" is not available as an answer, which is why this question keeps getting asked. The workable rule is consistency: one composition across every destination, reconcilable to one Shopify field.
Key Takeaways
- Shopify's
total_priceis documented as the sum of line item prices, discounts, taxes and shipping [4], which makes it the easiest basis to audit. - GA4's purchase spec asks for the item sum and says not to include
shippingortaxinvalue, with both available as separate optional parameters [1]. Meta'scustom_data.valueis defined only as a monetary amount with an ISO 4217 currency [2]. Google Ads' conversion-value page shows syntax and no composition rule [3]. - In GA4, item revenue is built from per-unit line prices while purchase revenue carries the event value, so the two legitimately differ by tax plus shipping minus discounts. That is not a tracking bug.
- Composition and denomination are different questions. Sending 128 when you meant 100 is composition; sending 128 EUR labelled as USD is denomination.
- On an illustrative store in a 21% VAT market with shipping averaging 6% of the item subtotal, the order total runs about 28% above that subtotal, and reported ROAS moves by the same 28% on the composition choice alone.
- Compute your own multiplier rather than borrowing that one: order total divided by item subtotal across your last 30 days. The result depends on your tax rate, tax-inclusive or tax-exclusive pricing, shipping mix and discount profile.
- Switching composition mid-quarter creates a step change in every ROAS series and in the training data of every value-based bidding strategy. The step is not performance.
What do the platforms actually say?
Less than you would expect, and they do not agree.
| Destination | What its own documentation states about composition | Source |
|---|---|---|
| GA4 | For purchase, set value to the sum of price * quantity for all items, and "don't include shipping or tax". Both exist as separate optional parameters. currency is required whenever value is set. |
[1] |
| Meta |
custom_data.value is "a numeric value associated with the event", required for purchase events and value optimization, and "must represent a monetary amount", with currency in ISO 4217. Taxes and shipping are not mentioned. |
[2] |
| Google Ads | The conversion-value guidance shows only syntax, for example 'value': 120.50, 'currency': 'USD'. No rule about revenue versus profit versus tax versus shipping. |
[3] |
One explicit instruction, two silences. The silences are the finding. A merchant reading the docs to settle this question finds an answer for one platform out of three and nothing for the others, and then discovers that following the one answer makes that platform the odd one out.
Note what GA4's rule implies about auditing: if you follow it, GA4's purchase value will never equal the Shopify order total, by design, and any spreadsheet comparing the two will show a permanent gap the size of your tax and shipping. That gap gets reported as a tracking failure regularly.
What a consistent implementation sends
One figure, every destination, matched to its currency. WeltPixel Conversion Tracking sends the Shopify order's total price, in the shop's base currency, on all nine integrations, with discounts already netted and tax and shipping included. No integration sends a subtotal and none recomputes the value from line items.
That is a deliberate departure from GA4's stated convention, and the trade is worth naming rather than hiding. Following GA4's rule on GA4 alone would leave one destination whose purchase value cannot be compared to the Shopify order or to any other platform's number. The choice is one comparable number everywhere, and the cost is that GA4's purchase value is the order total rather than Google's recommended item sum.
The reader-useful half of that: your GA4 purchase revenue reconciles to Shopify's order total, and when you need the pre-tax figure you take it from GA4's item revenue instead of from the purchase value. Which brings up the thing people most often mistake for a bug.
Shopify makes every component available separately, which is why this is a choice rather than a constraint. totalPriceSet is the total before returns including taxes and discounts, and totalTaxSet, totalShippingPriceSet and totalDiscountsSet exist as their own fields [5]. Nothing forces the total; it is picked.
Why GA4 item revenue and purchase revenue disagree
Because they are built from different fields. GA4 items carry the Shopify line item's per-unit price, and the event value carries the order total. The difference between the two is tax plus shipping minus discounts, every time, on every order.
Open GA4 → Reports → Monetization → Ecommerce purchases and put item revenue next to purchase revenue for the same date range. On the illustrative store below, at 21% VAT with shipping charged at 6% of the subtotal, purchase revenue sits about 28% above item revenue and stays there. Nothing is double counting. One number is the goods, the other is the invoice.
This is the most common false alarm in this whole area, and it costs stores real time. Before you open a support ticket about it, subtract: if the gap equals your tax plus shipping for the period, the tracking is behaving exactly as specified.
While you are in there, one distinction that prevents a different wasted week. Composition is what goes into the number. Denomination is which currency the number is in. A store whose values look inflated by a factor of four is not in a composition argument, it is in a currency one, and that diagnosis is multi-currency Shopify and wrong conversion values. Cart-stage value errors, where a line total gets multiplied by quantity twice, are a third and separate thing, covered in why your add-to-cart value is wrong on Shopify.
How much does the composition choice move your ROAS?
Run the arithmetic on an illustrative store. Item subtotal 100 before tax and shipping, VAT at 21%, shipping charged averaging 6% of the subtotal. The order total is 1.21 x 1.06 = 1.2826 times the subtotal, so about 28% higher.
Same spend, same orders, same clicks: reported ROAS moves by that same 28% depending only on which figure you send. A store at 3.0 on subtotal reads 3.85 on order total. Neither number is a lie and neither describes a change in the business.
That 28% is a method, not a benchmark. It falls out of two stated inputs and it will be wrong for your store. Compute yours:
- Shopify admin → Orders, filtered to the last 30 days. Record two figures across those orders: the sum of the order totals, and the sum of the line item prices before tax and shipping.
- Divide the first figure by the second. That ratio is your composition multiplier.
- Repeat on a stretch with heavy discounting and one without, because discounts move the ratio in the opposite direction to tax.
- Compare against what your platforms currently report per order. Pick one order, open it in the admin, and find the same order in Meta Events Manager or the GA4 purchase event by transaction id. If the value matches the order total, you are on total. If it is lower by roughly your multiplier, you are on subtotal.
- Write the answer down somewhere the next person will find it.
Two consequences follow from the size of that number. A store that switches conventions mid-quarter puts a step change into every ROAS series and into the training data of every value-based bidding strategy, and that step will be read as performance. And a store whose destinations disagree with each other, one on subtotal and one on total, cannot compare channels at all, because part of the per-channel ROAS difference is definitional. That second case is common in stores running one app for one platform and a second app for another.
So which should you pick?
Total, including tax and shipping, unless you have a specific reason not to. The reasoning is auditability rather than theory: the Shopify order total has a published definition [4], it is one field, and any platform's number can be checked against it in under a minute by opening the order.
Two situations change the answer. If your tax rate varies widely across markets and you use value-based bidding across separate accounts per market, a tax-inclusive value trains each account on a differently inflated scale, and you cannot compare across accounts. Pick once, per store, and never revisit it. And if a stakeholder's ROAS target was set on a subtotal basis, converting to totals without restating the target hands them an improvement the size of your composition multiplier, and it is entirely definitional. Restate the target in the same commit as the change.
What does not change the answer: which platform you care about most, or what any one platform's field definition prefers. Consistency across destinations beats matching each platform's preferred convention, because the comparison you make every week is between platforms and the order, not between a platform and its own documentation. Where the ratio itself is the question, how to calculate Shopify ROAS and why platforms disagree and why ad platforms disagree on ROAS accuracy pick up from here, and the event-level canon of what should be sent when is in GA4 recommended ecommerce events on Shopify.
Refunds are the other half of value and they behave differently, because the reversal is a separately dated event rather than an edit to the original. That is Shopify server-side GA4 refund tracking.
FAQ
Does GA4 want tax and shipping in the purchase value or not?
Not, according to its own spec: set value to the sum of price * quantity for the items and do not include shipping or tax, both of which are separate optional parameters [1]. Sending the order total instead is a deliberate trade for cross-platform comparability, and it means GA4 purchase revenue reconciles to the Shopify order.
Why does my GA4 item revenue not match my purchase revenue?
Because item revenue comes from per-unit line prices and purchase revenue comes from the event value. The difference is tax plus shipping minus discounts. Check the arithmetic for one date range before treating it as a defect.
Will including tax inflate my ROAS?
It raises the reported number without changing the business, by roughly your composition multiplier. On the illustrative 21% VAT and 6% shipping store above that is about 28%. Set targets on the same basis you report, or the comparison is meaningless.
Should I send tax and shipping as separate fields instead?
GA4 accepts them as optional parameters on the purchase event [1]. If nothing in your stack reads them, they add payload without adding insight, and the pre-tax figure is already available from item revenue. Decide based on whether something downstream actually consumes them.
What about gift cards and store credit?
Gift cards sold as products are excluded from Shopify's sales reports while an item paid for with a gift card counts at full value, which makes them a composition question of their own. Gift cards and store credit in Shopify conversion tracking covers what the ad platforms end up seeing.
If you would rather not audit this per platform, WeltPixel Conversion Tracking [6] sends the same basis, the Shopify order total in the shop's base currency, to all nine integrations, so one order gives one value to check against.
Do the divide before you argue about it. Order total over item subtotal, last 30 days, one number. Whatever it comes out at on your store is the entire size of the question.
Sources
- Google, GA4 recommended events reference,
purchaseevent (setvalueto the sum ofprice * quantityfor all items; "don't includeshippingortax";shippingandtaxas optional parameters;currencyrequired whenvalueis set), developers.google.com/analytics/devguides/collection/ga4/reference/events, accessed September 10, 2026 - Meta, Conversions API
custom_dataparameters (valuerequired for purchase events and value optimization, "a numeric value associated with the event", must represent a monetary amount;currencyin ISO 4217; no statement on taxes or shipping), developers.facebook.com/docs/marketing-api/conversions-api/parameters/custom-data, accessed September 10, 2026 - Google Ads Help, conversion value setup (
'value': 120.50, 'currency': 'USD'syntax, no composition rule stated), support.google.com/google-ads/answer/6386790, accessed September 10, 2026 - Shopify, Admin REST API Order resource (
total_priceis the sum of all line item prices, discounts, taxes and shipping, in shop currency, read-only), shopify.dev/docs/api/admin-rest/latest/resources/order, accessed September 10, 2026 - Shopify, Admin GraphQL API
Orderobject (totalPriceSetis the total price before returns including taxes and discounts;totalTaxSet,totalShippingPriceSetandtotalDiscountsSetare separate fields), shopify.dev/docs/api/admin-graphql/latest/objects/Order, accessed September 10, 2026 - WeltPixel Conversion Tracking, Shopify App Store listing, apps.shopify.com/weltpixel-conversion-tracking, accessed September 10, 2026