Zurück zu Wissen

Google Analytics Measurement Protocol: So verbesserst du deine Tracking-Daten für bessere Marketing-Automation

Tom
Tom
12. März 2026 · 12 Min. Lesezeit

Das GA4 Measurement Protocol sendet Tracking-Daten direkt vom Server an Google Analytics 4 – ohne JavaScript, ohne Browser, ohne Cookie-Abhängigkeit. Du nutzt es, wenn Consent-Ablehnung, AdBlocker oder servergesteuerte Prozesse dazu führen, dass ein Teil deiner Customer Journey in der Standardanalyse unsichtbar bleibt. Das gilt besonders für E-Mail-Events aus ActiveCampaign, Offline-Conversions und CRM-Pipeline-Änderungen.

Das Wichtigste in Kürze

  • Das GA4 Measurement Protocol (v2) unterscheidet sich grundlegend vom veralteten Universal-Analytics-Protokoll (v1), das keine Daten mehr verarbeitet.
  • Jeder Request geht per HTTP-POST an https://www.google-analytics.com/mp/collect mit deiner Measurement-ID (G-XXXXXXXX) und einem API-Secret als Query-Parameter.
  • Der Request-Body ist JSON: client_id, optional user_id, und ein Array von bis zu 25 Events.
  • ActiveCampaign-Webhooks lassen sich als GA4-Events weiterleiten, wenn du die GA4-Client-ID des Kontakts in einem Custom Field speicherst.
  • DSGVO-konform bedeutet: kein Tracking ohne Consent, keine Klarnamen oder E-Mail-Adressen in Event-Parametern, gehashte IDs als Pseudonym.

Was das GA4 Measurement Protocol ist – und was vom alten UA-Protokoll übrig blieb

Das Measurement Protocol gibt es seit den frühen Tagen von Google Analytics, aber die Version, die heute relevant ist, hat mit dem früheren Universal-Analytics-Protokoll nur den Namen gemeinsam. Universal Analytics stellte die Datenverarbeitung ein. Wer noch Code mit https://www.google-analytics.com/collect, dem Parameter tid=UA-XXXXXXX-X oder Hit-Typen wie t=event&ec=...&ea=... im Einsatz hat, sendet ins Leere – die Daten kommen nie in Google Analytics an.

Das GA4 Measurement Protocol (intern auch Measurement Protocol v2 genannt) ist ein eigenständiges Protokoll. Der Endpoint lautet https://www.google-analytics.com/mp/collect, Requests sind JSON statt URL-kodierter Schlüssel-Wert-Paare, und die Authentifizierung läuft über ein api_secret. Tracking-IDs der Form UA-XXXXXXX-X existieren nicht mehr; GA4 verwendet Measurement IDs der Form G-XXXXXXXXXX.

Die konzeptionelle Verschiebung ist genauso relevant wie die technische: GA4 kennt keine vordefinierten Hit-Typen mehr. Stattdessen sendest du frei benannte Events mit beliebigen Parametern. Das macht das Protokoll flexibler, erfordert aber eine bewusstere Planung der Event-Taxonomie, damit GA4-Reports und Explorations später auswertbar bleiben.

Wann server-seitiges Tracking die bessere Wahl ist

Browser-seitiges Tracking über gtag.js oder den Google Tag Manager ist der Standard für Website-Events. Das GA4 Measurement Protocol ist kein Ersatz dafür, sondern eine Ergänzung für Szenarien, in denen kein Browser beteiligt ist oder in denen der Browser nicht vertrauenswürdig ist.

Im DACH-Raum lehnt ein erheblicher Teil der Besucher das Tracking-Consent ab. Ohne gültige Einwilligung darf gtag.js keine Tracking-Cookies setzen und damit auch keine Client-IDs persistent speichern. Das Measurement Protocol ändert an diesem Grundsatz nichts – du darfst auch damit keine Events von Kontakten senden, die kein Consent gegeben haben. Was das Protokoll aber löst: Wenn ein Kontakt auf einer anderen Seite oder zu einem früheren Zeitpunkt Consent gegeben hat und du seine Client-ID bereits gespeichert hast, kannst du nachträgliche Events korrekt zuordnen, ohne auf Cookies im aktuellen Session-Kontext angewiesen zu sein.

AdBlocker sind ein anderes Problem. Sie blockieren Requests an www.google-analytics.com zuverlässig, wenn sie im Browser ausgeführt werden. Ein server-seitiger Request über das Measurement Protocol läuft außerhalb des Browsers und wird nicht geblockt. Für Events, die ohnehin am Server entstehen – ein gesendeter E-Mail, eine abgeschlossene Automation, eine Pipeline-Änderung im CRM – ist server-seitiges Tracking deshalb die logische Wahl.

Server-seitige Prozesse und Offline-Events

E-Mail-Öffnungen, Webhook-Calls von ActiveCampaign, Bestellbestätigungen über externe Payment-Provider, Telefonabschlüsse nach einem Beratungsgespräch – diese Events haben keinen Browser-Kontext. Kein Script kann sie automatisch erfassen. Das Measurement Protocol ist der direkte Weg, sie trotzdem in GA4 zu senden und damit die Lücke zwischen Marketing-Tool und Analytics zu schließen.

Wann das Measurement Protocol nicht passt

Für Standard-Seitenaufrufe, Formular-Submits und Klicks auf der Website ist gtag.js einfacher und vollständiger. Das Protokoll kennt keine automatische Session-Erkennung, keine URL-Parameter-Auswertung und kein automatisches Pageview-Tracking. Wer das Measurement Protocol als vollständigen Ersatz für das Client-seitige Tracking einsetzt, verliert mehr Daten als er gewinnt. Die richtige Rolle ist die des Lückenfüllers.

Technische Einrichtung: Endpoint, API-Secret und Request-Aufbau

Bevor du den ersten Request sendest, brauchst du ein API-Secret aus der GA4-Oberfläche. Das Secret authentifiziert deinen Server gegenüber Google Analytics und verhindert, dass externe Quellen Daten in deine Property schreiben.

  1. Öffne Google Analytics und wähle deine GA4-Property aus.
  2. Navigiere zu Verwaltung (Zahnrad-Symbol unten links) → Datenerfassung und -änderung → Datenströme.
  3. Klicke auf deinen Web-Datenstrom. Du siehst dort die Measurement ID in der Form G-XXXXXXXXXX.
  4. Scrolle auf derselben Seite nach unten zu Measurement Protocol API-Secrets und klicke auf Erstellen.
  5. Vergib einen beschreibenden Namen (z.B. „ActiveCampaign-Server") und kopiere das generierte Secret. Es wird nur einmal angezeigt; speichere es als Umgebungsvariable auf deinem Server, nie im Frontend-Code.

Der vollständige Endpoint für Produktivbetrieb lautet:

https://www.google-analytics.com/mp/collect?measurement_id=G-XXXXXXXXXX&api_secret=DEIN_SECRET

Für Tests steht ein Debug-Endpoint zur Verfügung, der validiertes JSON-Feedback zurückgibt:

https://www.google-analytics.com/debug/mp/collect?measurement_id=G-XXXXXXXXXX&api_secret=DEIN_SECRET

Aufbau des Request-Body

Der Request-Body ist ein JSON-Objekt mit drei Feldern auf der obersten Ebene: client_id (Pflicht), user_id (optional, für Cross-Device-Zuordnung) und events (Array mit bis zu 25 Event-Objekten). Jedes Event hat einen name und ein optionales params-Objekt.

Ein minimales Beispiel für ein Custom Event aus einer AC-Automation:

{"client_id": "1234567890.9876543210", "events": [{"name": "automation_completed", "params": {"automation_name": "Lead Nurturing Q4", "contact_id": "AC_12345"}}]}

Wichtige Regeln für den Request-Body:

  • Der client_id-Wert muss dem GA4-Client-ID des Kontakts entsprechen, damit die Events der richtigen Person zugeordnet werden.
  • Mit timestamp_micros kannst du Events bis zu 72 Stunden rückdatieren – praktisch für Batch-Verarbeitung, aber Events älter als 72 Stunden werden von GA4 stillschweigend verworfen.
  • Event-Namen und Parameter dürfen keine personenbezogenen Daten wie E-Mail-Adressen oder Klarnamen enthalten.
  • Das Measurement Protocol antwortet immer mit HTTP 204 No Content, auch wenn die Daten ungültig sind. Validierung läuft ausschließlich über den Debug-Endpoint.

ActiveCampaign mit dem GA4 Measurement Protocol verbinden

Die Verbindung zwischen ActiveCampaign und dem GA4 Measurement Protocol braucht eine Brücke: die GA4-Client-ID des Kontakts. Ohne sie kannst du Events senden, aber GA4 ordnet sie keiner bekannten User-Journey zu. Das folgende Setup löst das systematisch.

GA4-Client-ID im ActiveCampaign-Kontakt speichern

Die GA4-Client-ID steckt im Cookie _ga, den gtag.js beim ersten Website-Besuch setzt. Das Format ist GA1.2.XXXXXXXXXX.XXXXXXXXXX – die Client-ID sind die letzten beiden Teile nach dem zweiten Punkt: XXXXXXXXXX.XXXXXXXXXX.

  1. Erstelle in ActiveCampaign ein Custom Field: Kontakt → Felder verwalten → Feld hinzufügen → Typ Text, Name „GA4 Client ID".
  2. Lese auf jeder Seite mit einem Formular den _ga-Cookie per JavaScript aus und schreibe die Client-ID in ein verstecktes Formularfeld.
  3. Übergib diesen Wert beim Formular-Submit an ActiveCampaign, sodass das Custom Field befüllt wird. Bei nativen AC-Formularen geht das über Hidden Fields; bei eigenem Forms-Setup über die AC-API beim Kontakt-Update.
  4. Alternativ: Wenn du ActiveCampaign SiteTracking nutzt, kannst du die Client-ID beim Identify-Call als Custom Field mitsenden.

Ab diesem Moment hast du die Client-ID als festes Attribut am Kontakt und kannst sie bei jedem Measurement-Protocol-Request verwenden.

Webhooks in ActiveCampaign einrichten

ActiveCampaign sendet Webhooks für eine Vielzahl von Events: E-Mail-Öffnungen, Klicks, Abmeldungen, Tag-Änderungen, Automation-Starts und -Abschlüsse sowie Deal-Änderungen im CRM. Du empfängst diese Daten auf einem eigenen Server-Endpoint und leitest sie als GA4-Events weiter.

  1. Öffne in ActiveCampaign die Einstellungen → Entwickler → Webhooks.
  2. Klicke auf Webhook hinzufügen und trage die URL deines Server-Endpoints ein.
  3. Wähle die Events aus, die du tracken willst (z.B. „E-Mail öffnen", „Automation abgeschlossen", „Deal-Status ändert sich").
  4. Speichern. ActiveCampaign sendet beim nächsten entsprechenden Event einen POST-Request an deinen Endpoint mit den Kontaktdaten und dem Event-Typ.
  5. Dein Endpoint liest die AC-Kontakt-ID aus, fragt darüber die GA4-Client-ID aus deinem Custom Field ab (entweder direkt aus dem Webhook-Payload, wenn du sie dort mit übergibst, oder per AC-API-Call), und sendet den GA4-MP-Request.

Welche Events den größten analytischen Mehrwert bringen

Nicht jedes AC-Event lohnt sich als GA4-Event. Diese Kombination bringt in der Praxis den klarsten Mehrwert:

  • E-Mail geklickt: Event-Name email_click, Parameter campaign_name und link_url. Zeigt in GA4, welche Kampagnen zu Website-Besuchen führen, auch wenn kein UTM-Parameter übergeben wurde.
  • Automation abgeschlossen: Event-Name automation_completed, Parameter automation_name. Damit siehst du, welche Automationen mit welchen Traffic-Quellen korrelieren.
  • Deal gewonnen: Event-Name purchase (GA4-Reserviertes Event für Conversions), Parameter value und currency. Dieser Event-Name landet automatisch in den GA4-Conversion-Reports.
  • Deal-Stage-Wechsel: Event-Name deal_stage_change, Parameter from_stage und to_stage. Ermöglicht Funnel-Analysen in GA4 Explorations.

Bei purchase-Events ist das Format strenger als bei Custom Events. GA4 erwartet mindestens den Parameter currency (ISO-4217-Code, z.B. „EUR") und value (Dezimalzahl). Ohne diese Parameter erscheint der Event zwar in GA4, aber nicht in den E-Commerce-Reports.

Offline-Conversions korrekt attributieren

Telefonabschlüsse und persönliche Beratungsgespräche sind klassische Offline-Conversions. Das Problem: Der Abschluss passiert außerhalb jedes digitalen Systems, aber der Lead kam über eine E-Mail-Kampagne oder eine Google-Ads-Kampagne. Ohne Attribution sieht es aus, als hätte der Lead nichts gebracht.

Das GA4 Measurement Protocol schließt diese Lücke, wenn der Kontakt zuvor im digitalen Kanal identifiziert wurde – also eine GA4-Client-ID im ActiveCampaign-Kontaktprofil liegt. Wenn dein Vertrieb einen Telefonabschluss in ActiveCampaign als „Deal gewonnen" markiert, feuert der Webhook, dein Server liest die Client-ID aus dem Kontaktprofil und sendet ein purchase-Event mit dem Dealwert an GA4. Das Event bekommt per timestamp_micros den Zeitstempel des tatsächlichen Abschlusses, nicht den des API-Calls.

GA4 ordnet diesen Abschluss damit der ursprünglichen Traffic-Quelle des Kontakts zu, sofern die Client-ID noch im System bekannt ist und die Session-Daten nicht abgelaufen sind. Die Attribution läuft über das gewählte GA4-Attributionsmodell – Standard ist datengetriebene Attribution. Je vollständiger deine Client-ID-Abdeckung im CRM ist, desto akkurater wird die Zuordnung.

Ein konkretes Zahlenbeispiel: Du sendest in einem Monat 50 Deals aus ActiveCampaign als purchase-Events an GA4. Für 38 davon liegt eine Client-ID im Kontaktprofil. Diese 38 Events werden in GA4 Conversions sichtbar und beeinflussen die Attribution. Die restlichen 12 gehen als unattribuierbare Conversions verloren – ein Argument dafür, die Client-ID-Erfassung so früh wie möglich im Funnel zu starten, nicht erst beim Formular-Submit kurz vor dem Kauf.

DSGVO-konforme Umsetzung im DACH-Raum

Server-seitiges Tracking ist keine datenschutzrechtliche Abkürzung. Auch über das Measurement Protocol darfst du nur Daten verarbeiten, für die eine Rechtsgrundlage vorliegt. Im DACH-Raum bedeutet das in der Regel: Consent des Kontakts oder berechtigtes Interesse mit Widerspruchsrecht, je nach Nutzungskontext.

Bevor dein Endpoint einen Measurement-Protocol-Request absetzt, prüfst du, ob der Kontakt Tracking-Consent gegeben hat. Speichere den Consent-Status in ActiveCampaign als Custom Field oder Tag (z.B. Tag „analytics_consent") und lies ihn im Webhook-Handler aus. Events ohne Consent werden nicht gesendet – nicht etwa mit anonymisierten Daten gesendet, sondern gar nicht. Die Anonymisierung ändert nichts an der Frage, ob das Event überhaupt gesendet werden darf.

Keine personenbezogenen Daten in Event-Parametern

GA4-Event-Parameter werden in Google-Servern gespeichert. E-Mail-Adressen, Klarnamen, Telefonnummern und IP-Adressen haben in Event-Parametern nichts zu suchen. Verwende als Referenz auf den Kontakt eine gehashte ID: Die SHA-256-Hash der ActiveCampaign-Kontakt-ID ist pseudonymisiert und trotzdem eindeutig. Sie verbindet Events desselben Kontakts, ohne personenbezogene Daten zu übertragen.

Das Measurement Protocol akzeptiert IP-Adressen nicht als expliziten Parameter, aber Google könnte die Server-IP nutzen. Du kannst im Request den Parameter uip (User IP) mit einem leeren Wert oder einer pseudonymisierten IP setzen, um das zu unterbinden – oder du routest deinen Server hinter einem Proxy, dessen IP keine Rückschlüsse auf den Kontakt erlaubt.

Google Consent Mode v2 definiert, wie GA4 mit Daten umgeht, wenn der Consent partiell ist oder fehlt. Für das Measurement Protocol kannst du die Consent-Parameter gcs (Google Consent State) im JSON-Body mitsenden. Der Wert G100 signalisiert vollständiges Consent, G110 nur Analytics-Consent ohne Ads-Consent. Google nutzt diese Information, um die Daten entsprechend dem Consent-Level zu verarbeiten. Dieser Mechanismus ist vor allem relevant, wenn du das Measurement Protocol mit einer Google-Ads-Property kombinierst, die Conversion-Tracking über GA4 macht.

Typische Fehler beim Measurement Protocol und wie du sie vermeidest

Das Measurement Protocol gibt keinen sprechenden Fehlercode zurück – im Produktivbetrieb erhältst du immer HTTP 204, egal ob die Daten korrekt waren oder nicht. Das macht Fehlersuche schwieriger als bei den meisten APIs. Diese Fehler tauchen regelmäßig auf:

Falsche oder zufällige Client-ID

Wer die Client-ID nicht aus dem GA4-Cookie liest, sondern per uuid.v4() oder Math.random() generiert, erzeugt in GA4 für jeden Event einen neuen, unbekannten Nutzer. Die Events erscheinen zwar in GA4, aber ohne Verbindung zu den Website-Sessions desselben Kontakts. Attribution ist damit unmöglich. Die einzige valide Client-ID ist die aus dem _ga-Cookie – oder, wenn du gar keinen Website-Besuch hast, eine stabil gespeicherte ID, die du bei der ersten Begegnung erzeugst und konsequent weiterverwendest.

Events älter als 72 Stunden

Das Measurement Protocol verarbeitet nur Events, deren Timestamp maximal 72 Stunden in der Vergangenheit liegt. Wer Batch-Verarbeitung baut und Events aus der Vorwoche nachliefern will, verliert diese Daten stillschweigend. Wenn du Batches verzögerst, prüfe immer den Timestamp und verwerfe Events, die zu alt sind – mit einer entsprechenden Log-Meldung, damit du weißt, was verloren gegangen ist.

Event-Namen, die GA4 intern verwendet

GA4 reserviert bestimmte Event-Namen: page_view, session_start, first_visit und andere. Diese Namen sendest du nicht selbst; GA4 generiert sie intern. Wenn du einen reservierten Namen als Custom Event sendest, ignoriert GA4 ihn. Eine vollständige Liste der reservierten Event-Namen steht in der GA4-Entwicklerdokumentation. Eigene Event-Namen beginnen am besten mit einem kurzen Präfix, das deinen Kontext beschreibt: ac_automation_completed statt automation_completed.

Fehlende Validierung vor dem Produktiv-Deploy

Der Debug-Endpoint gibt ein JSON zurück, das für jeden Parameter aufzeigt, ob er valide ist und welche Validierungsregeln getroffen haben. Bevor du Measurement-Protocol-Code in Produktion bringst, testest du jeden Event-Typ mindestens einmal gegen den Debug-Endpoint und prüfst die Antwort. Erst wenn kein Validierungsfehler zurückkommt, geht es auf den Produktiv-Endpoint. Das spart stundenlange Fehlersuche in GA4-Echtzeit-Reports.

Rate-Limiting bei E-Mail-Kampagnen

Google Analytics begrenzt die Trefferrate pro Property. Bei großen E-Mail-Kampagnen, bei denen viele Webhooks innerhalb kurzer Zeit eintreffen, kann eine ungedrosselte Weiterleitung an das Measurement Protocol zu verworfenen Events führen. Baue eine Queue mit Rate-Limiting ein: verarbeite Events sequenziell oder in kleinen Batches (pro Request bis zu 25 Events) und füge ein Retry-Backoff für Fehler ein, die auf Überlastung hindeuten.

Häufige Fragen

Brauche ich das GA4 Measurement Protocol, wenn ich bereits Server-Side-Tagging über den Google Tag Manager nutze?

Nicht unbedingt. Server-Side-Tagging im Google Tag Manager leitet Client-seitige Events durch einen eigenen Server und umgeht damit AdBlocker, die auf Domain-Ebene blockieren. Das Measurement Protocol ist die bessere Wahl für Events, die keinen Browser-Ursprung haben: Webhooks, Offline-Conversions, automatisierte CRM-Prozesse. Beide Ansätze schließen sich nicht aus; in komplexen Setups arbeiten sie parallel.

Wie erkenne ich in GA4, welche Events über das Measurement Protocol eingegangen sind?

Es gibt kein automatisches Label. Du erkennst Measurement-Protocol-Events daran, dass du ihnen beim Senden einen Parameter mitgibst, der sie kennzeichnet – etwa event_source: "server". Diesen Parameter kannst du in GA4 Explorations als Filter nutzen. Eine sorgfältige Benennung der Event-Namen (Präfix-Konvention) macht die Unterscheidung in Reports dauerhaft einfacher als nachträgliche Filterarbeit.

Kann ich mit dem Measurement Protocol nachträglich Daten in GA4 importieren?

Nur bedingt. Events mit timestamp_micros können bis zu 72 Stunden rückdatiert werden und erscheinen dann im historischen Bericht zum jeweiligen Datum. Ältere Daten akzeptiert das Measurement Protocol technisch nicht – sie werden ohne Fehlermeldung verworfen. Für Backfills größerer historischer Datensätze gibt es in GA4 den Data Import über BigQuery; das Measurement Protocol ist dafür nicht der richtige Kanal.

Was ist der Unterschied zwischen client_id und user_id im Measurement Protocol?

Die client_id identifiziert ein Browser-Gerät, meist aus dem _ga-Cookie abgeleitet. Die user_id identifiziert einen authentifizierten Nutzer geräteübergreifend – typischerweise die interne Benutzer-ID deines CRM oder deiner App. Wenn beide vorhanden sind, priorisiert GA4 die user_id für die Cross-Device-Zuordnung. Für Cross-Device-Tracking in ActiveCampaign ist die Kombination beider IDs die sauberste Lösung: client_id für die Sitzungszuordnung, user_id für die geräteübergreifende Person.

Wie teste ich das Measurement Protocol, ohne Echtdaten zu verschmutzen?

Nutze eine separate GA4-Property für Tests oder den Debug-Endpoint https://www.google-analytics.com/debug/mp/collect. Der Debug-Endpoint schreibt keine Daten in deine Property, antwortet aber mit einem validierten JSON, das zeigt, ob Parameters korrekt interpretiert wurden. Alternativ prüfst du im GA4-Echtzeit-Report mit einer Fake-Client-ID, die du nachher herausfilterst – aber der Debug-Endpoint ist der sauberere Weg.

Wer das GA4 Measurement Protocol produktiv einsetzt, bekommt ein vollständigeres Bild seiner Customer Journey: E-Mail-Events, CRM-Änderungen und Offline-Abschlüsse fließen in dieselbe Analytics-Property wie Website-Daten. Die Attribution über Google Analytics wird dadurch messbar zuverlässiger, weil weniger Conversions dem „unbekannten" Kanal zugeordnet werden. Der Aufwand für ein solides Setup liegt bei einem bis drei Entwicklertagen, je nach Komplexität der ActiveCampaign-Webhook-Architektur – danach läuft der Datenstrom automatisch.

Tom Wenk, Gründer der Advertal GmbH

Kostenloses Erstgespräch

Du weißt jetzt, wie es geht. Sollen wir dir bei der Umsetzung helfen?

Zwanzig Minuten, ohne Verkaufsgespräch: Wir schauen gemeinsam auf dein Marketing – was schon trägt, was liegen geblieben ist und was sich automatisieren lässt. Du hast danach drei konkrete nächste Schritte. Ob du ActiveCampaign schon nutzt oder noch nach dem passenden Werkzeug suchst: Wir richten es so ein, dass es zu deinem Unternehmen passt – und zeigen deinem Team, wie es damit weiterarbeitet.

Jetzt kennenlernen

Kostenlos und unverbindlich · Offizieller ActiveCampaign-Partner · über 200 Unternehmen im Advertal Partner-Netzwerk