Online Marketing Blog

GA4: Gross or net for value and price?

Table of contents

For a long time, many teams were unsure whether gross or net amounts should be transferred in Google Analytics 4 (GA4) – and used gross amounts “to be on the safe side”. This still leads to incorrect sales in GA4 today. Google has now clearly specified that value and price should be net.

According to GA4 documentation values for "value" and "price" - net

Google has clarified this in the official event reference:

“Set value to the sum of (price × quantity) for all elements in items. Do not specify shipping or tax.
Google for Developers

GA4: Gross or net for value and price? 1

This makes it clear that value & price should be specified net. This is necessary for a clean view of the data in GA4.

purchase - Event parameters (event scope)

Name
Type
Required
Example value
Description
currency
string
Yes*
EUR
The currency of the items assigned to the event in three-letter ISO 4217 format. Value measures for the view_item event do not contribute to sales. * If you set value, currency is required for sales measures to be calculated accurately.
value
number
Yes*
30,03
The monetary value of the event. * Set value to the sum of (price * quantity) for all elements in items. Do not specify shipping or tax. * value is usually required for meaningful reports. If you mark the event as a key event, you should specify value. * currency is required if you specify value.
customer_type
string (new / returning)
No
new
Does the conversion come from a new or returning customer? new: New customer – has not purchased anything in the specified period (time window of 540 days recommended and set as standard, but not mandatory) returning: A returning customer who has purchased something in the specified period. Do not enter a value if the classification is not certain, e.g. if the user paid as a guest.
transaction_id
string
Yes
T_12345
The unique ID of a transaction. The transaction_id parameter can be used to avoid duplicate events being recorded for a purchase.
coupon
string
No
SUMMER_FUN
The name/code of the voucher assigned to the event. coupon parameters at event and item level are independent of each other.
shipping
number
No
3,33
The shipping costs assigned to a transaction.
tax
number
No
1,11
The taxes for a transaction.
items
Array
Yes
The articles for the event.

purchase - Item parameters (item scope)

Name
Type
Required
Example value
Description
item_id
string
Yes*
SKU_12345
The ID of the article. *Either item_id or item_name is required.
item_name
string
Yes*
“Stan and Friends T-shirt
The name of the article. *Either item_id or item_name is required.
affiliation
string
No
Google Store
A product affiliation to specify a supplier or store Note: “affiliation” is only available at element level.
coupon
string
No
SUMMER_FUN
The name/code of the voucher assigned to the item. coupon parameters at event and item level are independent of each other.
discount
number
No
2,22
The monetary value of the discount per unit assigned to the item.
index
number
No
5
The index or the position of the item in a list.
item_brand
string
No
Google
The brand of the article
item_category
string
No
Clothing
The category of the item If it is used as part of a category hierarchy or taxonomy, this is the first category.
item_category2
string
No
Adult
The second category hierarchy or additional taxonomy of the article.
item_category3
string
No
Shirts
The third category hierarchy or additional taxonomy of the article.
item_category4
string
No
Crew
The fourth category hierarchy or additional taxonomy of the article.
item_category5
string
No
Short sleeve
The fifth category hierarchy or additional taxonomy of the article.
item_list_id
string
No
related_products
The ID of the list in which the item was presented to the user If set, item_list_id is ignored at event level. If not set, the item_list_id is used at event level, if available.
item_list_name
string
No
Similar products
The name of the list in which the item was presented to the user If specified, item_list_name is ignored at event level. If not specified, the item_list_name is used at event level, if available.
item_variant
string
No
Green
The item variant or the unique code or description for additional item details/options.
location_id
string
No
ChIJIQBpAG2ahYAR_6128GcTUEo (the Google Place ID for San Francisco)
The physical location assigned to the item, e.g. the location of the store. We recommend using the Google Place ID that corresponds to the associated item. A user-defined location ID can also be used. Note: `location id` is only available at item level.
price
number
No
10,01
The price of the item in the specified currency. If a discount is applied to the item, set price to the reduced unit price and specify the unit price discount in the discount parameter.
quantity
number
No
3
Item quantity. If not specified, quantity is set to 1.

Why the gross confusion arose

In practice (especially in DACH e-commerce), store prices are usually displayed including VAT. Many implementations have transferred these gross prices 1:1 to GA4 as price and value – and sometimes also tax and shipping. However, this contradicts the current specification and can overstate sales and make reports inconsistent. Google explicitly shows in its purchase example: value, tax, shipping are event parameters, price & quantity depend on the item.

How to set up GA4 correctly today

1) Map fields correctly
    
     gtag("event","purchase",{
  transaction_id: "T_1001",
  currency: "EUR",
  value: 100.00,        // Netto-Warenwert (Summe aus price*quantity)
  tax: 19.00,           // USt. separat
  shipping: 5.00,       // Versand separat
  items: [{
    item_id: "SKU_1",
    item_name: "T-Shirt",
    price: 50.00,       // Netto-Einzelpreis nach Rabatt
    quantity: 2,
    discount: 5.00      // optional: pro Einheit
  }]
});
    
   
  • value = (price × quantity) of all items – without tax/shipping.
  • currency is mandatory as soon as value is set.
  • Item parameters (e.g. price, quantity) vs. event parameters (e.g. value, tax, shipping) are clearly separated.
2) Why net price is crucial

Since value is to be formed from price × quantity and must not include tax/shipping, price must be net (after discount, but without tax) – otherwise you would automatically “add” gross to value. The requirement not to add tax/shipping to value is explicitly documented.

What happens if you keep sending gross?

  • Excessive sales KPIs: Event-level sales KPIs in GA4 are based on the value parameter. If it is gross, total/purchase revenue deviates from your accounting.
  • Inconsistencies in the “E-commerce purchases” report: Item revenue is calculated from price × quantity. If price is incorrectly gross, but tax is also sent as an event parameter, you will get logical breaks between item and event level.
  • Incorrect conversion values in ads & bidding systems: Google recommends setting a value for key events. If the value is too high, you distort ROAS/CPA.

Check & fix checklist

  1. Check data layer: Are items[].price net (after discount) and items[].quantity correct?
  2. Calculate value on the server/client side: Σ(price × qty) across all items; no tax/shipping.
  3. tax & shipping separately as an event parameter.
  4. currency if value is available.
  5. Check DebugView & Realtime after deployment; if revenue is missing: Follow the “Missing revenue data” guide.

What events are there in Google Analytics

For all properties

Event
Trigger when a user…
ad_impression
sees a display (app only).
earn_virtual_currency
receives a virtual currency, e.g. coins, gemstones or tokens.
generate_lead
sends a form or a request for information.
join_group
joins a group.
login
registers.
purchase
buys something.
refund
receives a refund.
search
searches on your website or in your app.
select_content
selects content on your website or in your app.
share
shares content from your website or app.
sign_up
registers for an account on your website or in your app.
spend_virtual_currency
virtual currency, e.g. coins, gemstones or tokens.
tutorial_begin
a tutorial starts during the onboarding process.
tutorial_complete
completes a tutorial during the onboarding process.

For online sales

Event
Trigger when a user…
add_payment_info
sends payment information during the payment process.
add_shipping_info
Sends shipping information during the payment process.
add_to_cart
item in the shopping cart.
add_to_wishlist
adds items to a wish list.
begin_checkout
starts the payment process.
purchase
buys something.
refund
receives a refund.
remove_from_cart
Item removed from shopping cart.
select_item
selects an item from a list of items or offers.
select_promotion
selects an offer.
view_cart
the shopping cart.
view_item
an article.
view_item_list
a list of articles or offers.
view_promotion
views an offer on your website or in your app.

For lead generation

Event
Trigger when a user…
generate_lead
sends a form online or provides information offline.
qualify_lead
is marked as meeting the criteria for a qualified lead.
disqualify_lead
is not marked as a lead for one of several reasons.
working_lead
contacts an employee or is contacted by someone from your company.
close_convert_lead
becomes a lead with conversion (a customer).
close_unconvert_lead
is not marked as a converted lead for one of several reasons

For games

Event
Trigger when a user…
earn_virtual_currency
receives a virtual currency, e.g. coins, gemstones or tokens.
join_group
joins a group.
level_end
completed a level in a game.
level_start
a new level in a game begins.
level_up
reaches the next level in a game.
post_score
posts his score.
select_content
Selects content.
spend_virtual_currency
virtual currency, e.g. coins, gemstones or tokens.
tutorial_begin
a tutorial starts during the onboarding process.
tutorial_complete
completes a tutorial during the onboarding process.
unlock_achievement
a success.

FAQ

Set price to the discounted net unit price and additionally discount per item (optional).

Value is typically required for “meaningful reports”; it is recommended for key events.

They are event parameters and should not be included in value – this keeps the item and event levels clean and comparable.

Conclusion

The previous gross practice was understandable, but is no longer GA4-compliant. Change to net-price and value = Σ(price × qty) without tax/shipping. This means your sales in GA4 match your shop/ERP – and your reporting & bidding signals are reliable.

Sources (excerpt): GA4 event reference (tag platform) with value rule and reporting note; GA4 e-commerce examples for parameter scopes; guide to missing sales.

More articles about - Uncategorized

Alexander Kern
The Google Tag Manager acts as a container through which code snippets such as tracking codes or conversion pixels can be implemented in the website or mobile app.
Julian Schweizer
It's finally that time again. The SEO contest starts anew and this year MISSION OM is once again on an exploration mission to reach for the stars in SEO heaven. Full of zest for action and fully loaded energy containers, our spaceship will take off on 03.05.2022 in new scouts of the SEO universe.
Julian Schweizer
Keyword analysis is an important building block in search engine optimization. It is one of the first steps and forms the basis for further optimization.
Alexander Kern
Well-functioning conversion tracking is essential for successful Google Ads campaigns. But what should you do if the message "Tag Failed" appears for all Google Ads conversion tags and remarketing tags in Google Tag Manager (GTM)? In this article, you will find out what is behind this error and how you can fix it.

Leave a Reply

Your email address will not be published. Required fields are marked *