Viele Teams waren lange unsicher, ob in Google Analytics 4 (GA4) Brutto- oder Netto-Beträge übergeben werden sollen – und haben „zur Sicherheit“ Brutto genommen. Das führt bis heute zu fehlerhaften Umsätzen in GA4. Google hat inzwischen klar spezifiziert, dass value und price Netto angegeben werden sollten.
Laut GA4 Doku Werte für "value" und "price" - Netto
Google hat in der offiziellen Event-Referenz klargestellt:
„Setzen Sie value auf die Summe von (price × quantity) für alle Elemente in items. Geben Sie nicht shipping oder tax an.“
Google for Developers
Damit ist klar, dass value & price Netto angegeben werden sollten. Dies ist für eine saubere Ansicht der Daten in GA4 notwendig.
purchase – Event-Parameter (event scope)
Name | Typ | Erforderlich | Beispielwert | Beschreibung |
|---|---|---|---|---|
currency | string | Ja* | EUR | Die Währung der Artikel, die dem Ereignis zugewiesen sind, im ISO 4217-Format mit drei Buchstaben. Wertmesswerte für das view_item-Ereignis tragen nicht zum Umsatz bei. * Wenn Sie value festlegen, ist currency erforderlich, damit Umsatzmesswerte genau berechnet werden können. |
value | number | Ja* | 30,03 | Der Geldwert des Ereignisses. * Legen Sie value auf die Summe von (price * quantity) für alle Elemente in items fest. Geben Sie nicht shipping oder tax an. * value ist in der Regel für aussagekräftige Berichte erforderlich. Wenn Sie das Ereignis als Schlüsselereignis markieren, sollten Sie value festlegen. * currency ist erforderlich, wenn Sie value festlegen. |
customer_type | string (new / returning) | Nein | neuen | Stammt die Conversion von einem neuen oder wiederkehrenden Kunden? new: Neukunde – hat im angegebenen Zeitraum nichts gekauft (Zeitfenster von 540 Tagen empfohlen und als Standard festgelegt, aber nicht vorgeschrieben) returning: Ein wiederkehrender Kunde, der im angegebenen Zeitraum etwas gekauft hat. Geben Sie keinen Wert an, wenn die Klassifizierung nicht sicher ist, z. B. wenn der Nutzer als Gast bezahlt hat. |
transaction_id | string | Ja | T_12345 | Die eindeutige ID einer Transaktion. Mit dem Parameter transaction_id lässt sich vermeiden, dass doppelte Ereignisse für einen Kauf erfasst werden. |
coupon | string | Nein | SUMMER_FUN | Der Name/Code des Gutscheins, der dem Ereignis zugewiesen ist. coupon-Parameter auf Ereignis- und Artikelebene sind voneinander unabhängig. |
shipping | number | Nein | 3,33 | Die Versandkosten, die einer Transaktion zugewiesen sind. |
tax | number | Nein | 1,11 | Die Steuern für eine Transaktion. |
items | Array | Ja | Die Artikel für das Ereignis. |
purchase – Item-Parameter (item scope)
Name | Typ | Erforderlich | Beispielwert | Beschreibung |
|---|---|---|---|---|
item_id | string | Ja* | SKU_12345 | Die ID des Artikels. *Entweder item_id oder item_name ist erforderlich. |
item_name | string | Ja* | „Stan and Friends“-T-Shirt | Der Name des Artikels. *Entweder item_id oder item_name ist erforderlich. |
affiliation | string | Nein | Google Store | Eine Produktzugehörigkeit zur Angabe eines Lieferanten oder Ladengeschäfts Hinweis: „affiliation“ ist nur auf der Ebene des Elements verfügbar. |
coupon | string | Nein | SUMMER_FUN | Der Name/Code des Gutscheins, der dem Artikel zugewiesen ist. coupon-Parameter auf Ereignis- und Artikelebene sind voneinander unabhängig. |
discount | number | Nein | 2,22 | Der Geldwert des Rabatts pro Einheit, der dem Artikel zugewiesen ist. |
index | number | Nein | 5 | Der Index bzw. die Position des Artikels in einer Liste. |
item_brand | string | Nein | Google | Die Marke des Artikels |
item_category | string | Nein | Bekleidung | Die Kategorie des Artikels Wenn sie als Teil einer Kategoriehierarchie oder ‑taxonomie verwendet wird, ist dies die erste Kategorie. |
item_category2 | string | Nein | Adult | Die zweite Kategoriehierarchie oder zusätzliche Taxonomie des Artikels. |
item_category3 | string | Nein | Hemden | Die dritte Kategoriehierarchie oder zusätzliche Taxonomie des Artikels. |
item_category4 | string | Nein | Crew | Die vierte Kategoriehierarchie oder zusätzliche Taxonomie des Artikels. |
item_category5 | string | Nein | Kurzarm | Die fünfte Kategoriehierarchie oder zusätzliche Taxonomie des Artikels. |
item_list_id | string | Nein | related_products | Die ID der Liste, in der dem Nutzer der Artikel präsentiert wurde Wenn festgelegt, wird item_list_id auf Ereignisebene ignoriert. Wenn nicht festgelegt, wird die item_list_id auf Ereignisebene verwendet, sofern vorhanden. |
item_list_name | string | Nein | Ähnliche Produkte | Der Name der Liste, in der dem Nutzer der Artikel präsentiert wurde Wenn festgelegt, wird item_list_name auf Ereignisebene ignoriert. Wenn nicht festgelegt, wird die item_list_name auf Ereignisebene verwendet, sofern vorhanden. |
item_variant | string | Nein | Grün | Die Artikelvariante oder der eindeutige Code oder die Beschreibung für zusätzliche Artikeldetails/-optionen. |
location_id | string | Nein | ChIJIQBpAG2ahYAR_6128GcTUEo (die Google Place-ID für San Francisco) | Der dem Artikel zugeordnete physische Standort, z.B. der Standort des Ladengeschäfts. Wir empfehlen, die Google Place-ID zu verwenden, die dem zugehörigen Artikel entspricht. Es kann auch eine benutzerdefinierte Standort-ID verwendet werden. Hinweis: `location id` ist nur auf Artikelebene verfügbar. |
price | number | Nein | 10,01 | Der Preis des Artikels in der angegebenen Währung. Wenn ein Rabatt auf den Artikel angewendet wird, legen Sie price auf den reduzierten Stückpreis fest und geben Sie den Stückpreisrabatt im Parameter discount an. |
quantity | number | Nein | 3 | Artikelmenge. Wenn nicht festgelegt, wird quantity auf 1 gesetzt. |
Warum die Brutto-Verwirrung entstand
So setzt du GA4 heute korrekt auf
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) aller Items – ohne Steuer/Versand.
- currency ist Pflicht, sobald value gesetzt wird.
- Item-Parameter (u. a. price, quantity) vs. Event-Parameter (u. a. value, tax, shipping) sind klar getrennt.
Da value aus price × quantity gebildet werden soll und Steuer/Versand nicht enthalten darf, muss price netto (nach Rabatt, aber ohne Steuer) sein – sonst würdest du automatisch Brutto in value „hineinrechnen“. Die Vorgabe, Steuer/Versand nicht in value zu addieren, ist explizit dokumentiert.
Was passiert, wenn du weiter Brutto schickst?
- Überhöhte Umsatz-KPIs: Event-level-Umsatzkennzahlen in GA4 basieren auf dem value-Parameter. Ist der Brutto, weichen Total/Purchase-Revenue von deiner Buchhaltung ab.
- Inkonsistenzen im Bericht „E-Commerce-Käufe“: Item-Umsatz wird aus price × quantity berechnet. Wenn price fälschlich Brutto ist, aber zusätzlich tax als Event-Parameter gesendet wird, bekommst du logische Brüche zwischen Item- und Event-Ebene.
- Falsche Conversion-Werte in Ads & Bidding-Systemen: Google empfiehlt, bei Key Events value zu setzen. Ist der Wert zu hoch, verzerrst du ROAS/CPA.
Prüf- & Fix-Checkliste
- Data Layer prüfen: Kommen items[].price netto (nach Rabatt) und items[].quantity korrekt?
- value server-/clientseitig berechnen: Σ(price × qty) über alle Items; kein Steuer/Versand.
- tax & shipping separat als Event-Parameter mitsenden.
- currency immer mitsenden, wenn value vorhanden ist.
- DebugView & Realtime nach Deployment prüfen; bei fehlenden Umsätzen: Leitfaden „Missing revenue data“ beachten.
Welche Events gibt es in Google Analytics
Für alle Properties
Ereignis | Auslösen, wenn ein Nutzer… |
|---|---|
ad_impression | eine Anzeige sieht (nur App). |
earn_virtual_currency | eine virtuelle Währung erhält, z. B. Münzen, Edelsteine oder Tokens. |
generate_lead | ein Formular oder eine Informationsanfrage sendet. |
join_group | einer Gruppe beitritt. |
login | sich anmeldet. |
purchase | etwas kauft. |
refund | eine Erstattung erhält. |
search | auf Ihrer Website oder in Ihrer App sucht. |
select_content | Inhalte auf Ihrer Website oder in Ihrer App auswählt. |
share | Inhalte von Ihrer Website oder App teilt. |
sign_up | sich auf Ihrer Website oder in Ihrer App für ein Konto registriert. |
spend_virtual_currency | virtuelle Währung ausgibt, z. B. Münzen, Edelsteine oder Tokens. |
tutorial_begin | ein Tutorial während des Onboardingprozesses startet. |
tutorial_complete | ein Tutorial während des Onboardingprozesses abschließt. |
Für Onlineverkäufe
Ereignis | Auslösen, wenn ein Nutzer… |
|---|---|
add_payment_info | Zahlungsinformationen während des Bezahlvorgangs sendet. |
add_shipping_info | Versandinformationen während des Bezahlvorgangs sendet. |
add_to_cart | Artikel in den Einkaufswagen legt. |
add_to_wishlist | einer Wunschliste Artikel hinzufügt. |
begin_checkout | den Bezahlvorgang startet. |
purchase | etwas kauft. |
refund | eine Erstattung erhält. |
remove_from_cart | Artikel aus dem Einkaufswagen entfernt. |
select_item | einen Artikel aus einer Liste von Artikeln oder Angeboten auswählt. |
select_promotion | ein Angebot auswählt. |
view_cart | den Einkaufswagen ansieht. |
view_item | einen Artikel ansieht. |
view_item_list | eine Liste der Artikel oder Angebote ansieht. |
view_promotion | sich ein Angebot auf Ihrer Website oder in Ihrer App ansieht. |
Für Lead-Generierung
Ereignis | Auslösen, wenn ein Nutzer… |
|---|---|
generate_lead | ein Formular online sendet oder Informationen offline bereitstellt. |
qualify_lead | als den Kriterien für einen qualifizierten Lead entsprechend gekennzeichnet wird. |
disqualify_lead | aus einem von mehreren Gründen nicht als Lead gekennzeichnet wird. |
working_lead | sich an einen Mitarbeiter wendet oder vom jemandem aus Ihrem Unternehmen kontaktiert wird. |
close_convert_lead | zu einem Lead mit Conversion (einem Kunden) wird. |
close_unconvert_lead | aus einem von mehreren Gründe nicht als konvertierter Lead gekennzeichnet wird |
Für Spiele
Ereignis | Auslösen, wenn ein Nutzer… |
|---|---|
earn_virtual_currency | eine virtuelle Währung erhält, z. B. Münzen, Edelsteine oder Tokens. |
join_group | einer Gruppe beitritt. |
level_end | ein Level in einem Spiel beendet. |
level_start | ein neues Level in einem Spiel beginnt. |
level_up | das nächste Level in einem Spiel erreicht. |
post_score | seine Punktzahl postet. |
select_content | Inhalte auswählt. |
spend_virtual_currency | virtuelle Währung ausgibt, z. B. Münzen, Edelsteine oder Tokens. |
tutorial_begin | ein Tutorial während des Onboardingprozesses startet. |
tutorial_complete | ein Tutorial während des Onboardingprozesses abschließt. |
unlock_achievement | einen Erfolg verbucht. |
FAQ
Setze price auf den rabattierten Netto-Einzelpreis und zusätzlich discount pro Item (optional).
Für „aussagekräftige Berichte“ ist value typischerweise erforderlich; bei Key Events wird es empfohlen.
Sie sind Event-Parameter und sollen nicht in value einfließen – so bleiben Item- und Event-Ebene sauber und vergleichbar.
Alle DataLayer mit Quell Code Kopieren
Fazit
Die frühere Brutto-Praxis war nachvollziehbar, ist heute aber nicht mehr GA4-konform. Stelle auf Netto-price und value = Σ(price × qty) ohne Steuer/Versand um. So stimmen deine Umsätze in GA4 mit Shop/ERP überein – und deine Reporting- & Bidding-Signale werden verlässlich.
Quellen (Auszug): GA4 Event-Referenz (Tag Platform) mit value-Regel und Reporting-Hinweis; GA4 E-Commerce-Beispiele für Parameter-Scopes; Leitfaden zu fehlenden Umsätzen.