Die meisten E-Commerce-Tracking-Setups senden Umsatz als Conversion-Wert an Google Ads, GA4 und andere Plattformen. Das bedeutet auch, dass deine Bidding-Algorithmen auf Umsatz optimieren — aber Umsatz sagt dir nicht, ob ein Verkauf tatsächlich profitabel war.
Eine Bestellung über 200 € mit 5 % Marge ist für dein Unternehmen weniger wert als eine Bestellung über 50 € mit 60 % Marge.
Profit-Tracking ersetzt Umsatz durch Profit als Conversion-Wert. Statt auf ROAS (Return on Ad Spend) zu optimieren, optimieren deine Kampagnen auf POAS (Profit on Ad Spend) — und richten die Werbeausgaben so an echten Geschäftsergebnissen aus.
Server Side GTM macht das möglich, ohne dass du deinen Website-Code anfassen musst — und vor allem, ohne sensible Margendaten im Browser offenzulegen. Gewinnmargen und Einkaufspreise sind vertrauliche Geschäftsdaten, die für Endnutzer niemals sichtbar sein sollten.
Beim serverseitigen Ansatz passiert der Lookup vollständig auf deinem SGTM-Server: Deine Profit-Daten tauchen weder im dataLayer noch in Netzwerkanfragen oder sonst irgendwo auf, wo ein Nutzer sie einsehen könnte.
Die Idee: Du pflegst ein einfaches Google Sheet mit deinen Produkt-Profit-Daten und lässt deinen SGTM Container den Profit für jedes Produkt in Echtzeit nachschlagen. Die Conversion-Tags senden dann Profit statt Umsatz.
Diese Anleitung führt dich durch das gesamte Setup mit owntag und dem Google Sheets Lookup Variable-Template.
So funktioniert es
Das Setup besteht aus drei Teilen:
- Ein Google Sheet mit deinen Produktdaten — mindestens eine Produktkennung (z. B. eine SKU) und der zugehörige Profit pro Stück.
- Eine Lookup-Variable in deinem Server Side GTM Container, die das Sheet bei jedem Conversion-Event abfragt.
- Deine Conversion-Tags (GA4, Google Ads, Meta CAPI usw.), konfiguriert mit dem nachgeschlagenen Profit-Wert statt dem ursprünglichen Umsatz.
Wenn ein purchase-Event in deinem Server Container eintrifft, nimmt die Lookup-Variable die Produkt-SKU aus dem Event, findet die passende Zeile in deinem Google Sheet und gibt den Profit-Wert zurück. Deine Tags senden diesen Profit dann als Conversion-Wert.
Voraussetzungen
Bevor du loslegst, stelle sicher, dass du Folgendes hast:
- Einen laufenden Server Side GTM Container bei owntag (siehe Erste Schritte, wenn du noch keinen eingerichtet hast)
- Einen Google Service Account, der mit deinem owntag Container verbunden ist
- Die Google Sheets API, aktiviert in deinem Google Cloud-Projekt (unter APIs & Dienste → Bibliothek in der Google Cloud Console)
- Ein Google Sheet mit deinen Produkt-Profit-Daten (richten wir im nächsten Schritt ein)
Der Google Service Account wird benötigt, damit sich dein SGTM Container gegenüber der Google Sheets API authentifizieren kann. Du brauchst keine speziellen IAM-Rollen für den Sheets-Zugriff — stattdessen teilst du die Tabelle direkt mit der E-Mail-Adresse des Service Accounts. Die vollständige Einrichtungsanleitung findest du in unserer Google Service Account Dokumentation.
Schritt 1: Profit-Tabelle erstellen
Erstelle ein neues Google Sheet (oder nutze ein vorhandenes) mit mindestens zwei Spalten:
- Spalte A — die Produktkennung (SKU, Artikel-ID oder was dein Tracking verwendet)
- Spalte B — der Profit pro Stück für dieses Produkt
Die erste Zeile sollte Überschriften enthalten. Hier ein Beispiel:
Der Profit-Wert sollte der Nettogewinn pro verkauftem Stück sein — nach Abzug von Warenkosten, Versandkosten, Zahlungsabwicklungsgebühren oder was auch immer du berücksichtigen möchtest. Wie detailliert du das aufschlüsselst, liegt an dir und deinem Finanzteam.
Notiere dir diese Werte aus deiner Tabelle — du brauchst sie später:
- Spreadsheet-ID: Die lange Zeichenkette in der URL zwischen
/d/und/edit(z. B.1KfxE7VtsY-ctpFA70g42DUtxow7NUPV5YtG-GDGeeAs) - Blattname: Der Reitername unten in der Tabelle (z. B.
products)
Tabelle mit dem Service Account teilen
Öffne die Freigabeeinstellungen deiner Tabelle und füge die Client Email-Adresse des Service Accounts als Betrachter hinzu. Du findest diese E-Mail-Adresse in der owntag Console unter dem Abschnitt Google Service Account deines Containers:
Das funktioniert genauso wie das Teilen einer Tabelle mit einem Kollegen — die Service-Account-E-Mail sieht für Google Sheets wie ein normales Google-Konto aus.
Schritt 2: Lookup-Template importieren
Lade die Datei template.tpl aus dem owntag Google Sheets Lookup Repository auf GitHub herunter.
In deinem Server Side GTM Container unter tagmanager.google.com:
- Gehe im linken Menü auf Vorlagen.
- Klicke unter Variablenvorlagen auf Neu.
- Klicke auf das Dreipunktmenü (oben rechts) und wähle Importieren.
- Lade die heruntergeladene Datei
template.tplhoch. - Klicke auf Speichern.
Schritt 3: Lookup-Variable erstellen
Erstelle nun eine Variable, die das importierte Template nutzt, um Profit-Werte nachzuschlagen.
- Gehe in deinem Server Container auf Variablen.
- Klicke unter Benutzerdefinierte Variablen auf Neu.
- Wähle das owntag Google Sheets Lookup-Template als Variablentyp.
- Konfiguriere die Felder:
| Feld | Wert | Beispiel |
|---|---|---|
| Spreadsheet ID | Die ID aus der URL deines Sheets | 1KfxE7VtsY-ctpFA70g42DUtxow7NUPV5YtG-GDGeeAs |
| Sheet Name | Der Reitername in deiner Tabelle | products |
| Lookup Value | Eine GTM-Variable, die zur Produkt-SKU aufgelöst wird | {{ecommerce.0.item_id}} |
| Key Column (number) | Spaltennummer für die Suche (A = 1, B = 2, …) | 1 |
| Return Column (number) | Spaltennummer mit dem Profit-Wert | 2 |
| Return type | Number | — |
Setze den Return type auf Number. So wird sichergestellt, dass der zurückgegebene Profit-Wert als Zahl und nicht als String behandelt wird — das ist notwendig, wenn du ihn in Conversion-Wert-Feldern oder Berechnungen verwendest.
Der Lookup Value ist das zentrale Element. {{ecommerce.0.item_id}} löst sich zur item_id des ersten Artikels in den E-Commerce-Daten des Events auf. Stelle sicher, dass dieser Wert mit dem übereinstimmt, was dein Tracking als Produktkennung sendet und was du in Spalte A deines Sheets eingetragen hast.
Caching aktivieren
Aktiviere in der Variablenkonfiguration das Caching. Mit aktiviertem Caching werden die Sheet-Daten einmal abgerufen und für nachfolgende Lookups innerhalb des Cache-Fensters wiederverwendet. Das reduziert API-Aufrufe erheblich und beschleunigt deinen Container.
Passe die Cache-Dauer daran an, wie oft sich deine Profit-Daten ändern. Wenn du Margen wöchentlich aktualisierst, reicht ein 60-Minuten-Cache. Wenn sie sich mehrmals täglich ändern, wähle eine kürzere Dauer.
Benenne die Variable aussagekräftig, z. B. sheets.product_profit, und speichere sie.
Schritt 4: Profit in deinen Conversion-Tags verwenden
Mit der Lookup-Variable kannst du sie jetzt in deinen Tags referenzieren, um Profit statt Umsatz zu senden.
Google Analytics 4
Nutze in deinem GA4-Tag, der das purchase-Event trackt, den Abschnitt Parameter hinzufügen / bearbeiten unter Event-Parametern, um das Feld value zu überschreiben:
| Parametername | Wert |
|---|---|
value | {{sheets.product_profit}} |
Das ersetzt den ursprünglichen Umsatzwert durch den Profit aus deinem Google Sheet. GA4 wird diesen Wert dann als Event-Wert anzeigen, und alle Umsatzmetriken in deinen GA4-Berichten spiegeln stattdessen den Profit wider.
Wenn du den ursprünglichen Umsatz in GA4 behalten und den Profit separat erfassen möchtest, verwende statt value einen eigenen Parameternamen wie profit. Du kannst dann in GA4 eine benutzerdefinierte Metrik erstellen, um darüber zu berichten. Für Value-Based Bidding in Google Ads wird allerdings der Parameter value verwendet — wenn POAS-Bidding dein Ziel ist, überschreibe also value.
Google Ads
Setze in deinem Google Ads Conversion Tracking-Tag das Feld Conversion Value auf deine Lookup-Variable:
| Feld | Wert |
|---|---|
| Conversion Value | {{sheets.product_profit}} |
Google Ads nutzt diesen Profit-Wert für seine Bidding-Algorithmen. Wenn du auf die Gebotsstrategie Conversion-Wert maximieren oder Ziel-ROAS wechselst, optimiert Google effektiv auf POAS — da der „Wert”, den es sieht, dein Profit ist.
Meta Conversion API
Wenn du die Meta Conversion API (CAPI) nutzt, kannst du den Conversion-Wert in deinem CAPI-Tag ebenfalls auf die Profit-Variable setzen. Der genaue Feldname hängt vom verwendeten Tag-Template ab, ist aber typischerweise mit Event Value oder Value beschriftet.
Bestellungen mit mehreren Artikeln
Das obige Setup funktioniert gut für Events mit einem einzelnen Produkt — wie add_to_cart, view_item oder Einzelartikel-Käufe. Bei purchase-Events mit mehreren Artikeln wird die Profit-Berechnung aufwendiger: Du musst den Profit für jeden Artikel nachschlagen, mit der jeweiligen Menge multiplizieren und die Ergebnisse summieren.
Die Google Sheets Lookup-Variable gibt pro Lookup einen einzelnen Wert zurück. Um den Gesamtprofit einer Bestellung über alle Artikel hinweg zu berechnen, benötigst du ein eigenes Variable-Template im SGTM, das:
- Das Items-Array aus den Event-Daten liest.
- Für jeden Artikel den Google Sheets Lookup aufruft, um den Profit pro Stück zu ermitteln.
- Jeden Profit mit der Menge des Artikels multipliziert.
- Die Gesamtsumme zurückgibt.
Ein eigenes Variable-Template zu erstellen geht über den Rahmen dieser Anleitung hinaus, ist aber ein gut dokumentiertes Muster in der GTM-Community.
Best Practices
Tabelle aktuell halten
Deine Profit-Daten sind nur so gut wie die Daten in deinem Google Sheet. Etabliere einen regelmäßigen Aktualisierungsprozess — sei es ein manueller wöchentlicher Export aus deinem ERP-System, eine automatisierte Synchronisierung per Google Apps Script oder eine direkte Anbindung an deine Produktdatenbank.
Eindeutige Produktkennungen verwenden
Stelle sicher, dass die Produktkennung in deinem Google Sheet exakt mit dem übereinstimmt, was dein Tracking sendet. Wenn dein dataLayer item_id mit Werten wie SKU-1234 verwendet, muss dein Sheet dasselbe Format nutzen — nicht sku-1234 oder 1234. Der Lookup unterscheidet Groß- und Kleinschreibung und erwartet eine exakte Übereinstimmung.
Fallback-Wert setzen
Überlege, was passieren soll, wenn ein Produkt nicht im Sheet gefunden wird — zum Beispiel ein neu hinzugefügtes Produkt, das noch nicht in die Tabelle eingetragen wurde. Die Variable gibt undefined zurück, wenn kein Treffer gefunden wird. Je nach Tag-Konfiguration könnte das dazu führen, dass die Conversion ohne Wert gesendet wird.
Du kannst das mit einer Lookup-Tabelle oder RegEx-Tabelle-Variable in GTM abfangen: Wenn die Profit-Variable einen Wert zurückgibt, verwende ihn; andernfalls falle auf den ursprünglichen value aus dem Event zurück (damit du zumindest Umsatz statt gar nichts trackst).
Im Vorschaumodus prüfen
Überprüfe nach der Einrichtung immer im Vorschaumodus des Server Side GTM, bevor du veröffentlichst. Löse ein Test-Event aus und kontrolliere:
- Die Lookup-Variable löst sich zum erwarteten Profit-Wert auf (sichtbar im Variablen-Tab).
- Deine Conversion-Tags senden den korrekten Wert (sichtbar in den ausgehenden Anfragen).
- Die Konsolen-Logs zeigen erfolgreiche Google Sheets-Lookups ohne Fehler.
Fehlerbehebung
Wenn die Lookup-Variable keinen Wert zurückgibt, prüfe Folgendes:
- Google Service Account: Ein gültiger Schlüssel muss in der owntag Console hinterlegt sein. Siehe unsere Google Service Account Anleitung.
- Google Sheets API: Muss in deinem Google Cloud-Projekt unter APIs & Dienste → Bibliothek aktiviert sein.
- Sheet-Freigabe: Die Tabelle muss mit der E-Mail-Adresse des Service Accounts geteilt sein.
- Spreadsheet-ID: Muss exakt übereinstimmen — kopiere sie aus der URL zwischen
/d/und/edit. - Blattname: Groß- und Kleinschreibung wird beachtet. Muss exakt mit dem Reiternamen unten im Sheet übereinstimmen.
- Spaltennummern: Beginnen bei 1 (Spalte A = 1, Spalte B = 2).
- Lookup-Wert: Überprüfe, ob die GTM-Variable, die du verwendest (z. B.
{{ecommerce.0.item_id}}), tatsächlich einen Wert auflöst, der in deinem Sheet existiert.
Für die vollständige Template-Dokumentation und weitere Fehlerbehebung siehe die Google Sheets Lookup Template-Seite.