Veröffentlicht: 1. Februar 2025
GTM Template: Calendly Event-Tracking mit GA4 — Buchungen messen
Kostenloses GTM-Template für Calendly Tracking in GA4. Termine als Custom Events messen — mit DataLayer Listener und Custom HTML Tag.
Calendly ist das Standard-Tool für Terminbuchungen. Aber die Tracking-Integration ist nicht trivial — Calendly läuft als Embed oder Pop-up und sendet keine Standard-Events. Dieses GTM-Template löst das.
Was das Template enthält
- 1 Custom HTML Tag — Calendly Event Listener, der auf
message-Events vom Calendly-Embed hört - 1 GA4 Event Tag — feuert bei Calendly-Events (Buchung gestartet, Buchung abgeschlossen)
- 1 Custom Event Trigger —
calendlyEvent - 1 DataLayer Variable —
calendly_eventmit dem Event-Typ
Wie es funktioniert
Calendly kommuniziert über die postMessage-API mit der Elternseite. Der Custom HTML Tag im Template hört auf diese Messages und pusht sie als DataLayer-Events:
window.addEventListener('message', function(e) {
if (e.data.event && e.data.event.indexOf('calendly') > -1) {
dataLayer.push({
event: 'calendly',
calendly_event: e.data.event
});
}
});
Das GA4 Event Tag feuert dann auf das calendly Custom Event und übergibt den Event-Typ als Parameter.
Calendly Events die du tracken kannst
calendly.profile_page_viewed— Calendly-Widget wurde geladencalendly.event_type_viewed— Nutzer hat einen Termintyp angesehencalendly.date_and_time_selected— Datum und Uhrzeit wurden gewähltcalendly.event_scheduled— Termin wurde gebucht (das ist deine Conversion!)
Setup in 2 Minuten
1. Template importieren
Container importieren → JSON hochladen → Zusammenführen.
2. GA4 Measurement ID eintragen
Im GA4 Event Tag deine G-XXXXXXX ID hinterlegen.
3. Testen
- GTM Preview Mode aktivieren
- Calendly-Widget öffnen
- Einen Test-Termin buchen
- Prüfen: Feuert der Tag bei
calendly.event_scheduled?
Tipp: Nur echte Buchungen als Conversion zählen
Im GA4 Event Tag kannst du eine Bedingung hinzufügen, sodass nur calendly.event_scheduled (die tatsächliche Buchung) als Event gesendet wird — nicht jeder Widget-View.
Template herunterladen
Kopiere den JSON-Code, speichere ihn als .json-Datei und importiere sie in deinem Google Tag Manager Container unter Admin → Container importieren.
Kein E-Mail, kein Formular — direkt loslegen.
GTM Container JSON anzeigen
{
"exportFormatVersion": 2,
"exportTime": "2023-05-25 13:50:28",
"containerVersion": {
"path": "accounts/0000000000/containers/000000000/versions/0",
"accountId": "0000000000",
"containerId": "000000000",
"containerVersionId": "0",
"container": {
"path": "accounts/0000000000/containers/000000000",
"accountId": "0000000000",
"containerId": "000000000",
"name": "Calendly GA4 recipe",
"publicId": "GTM-XXXXXX",
"usageContext": [
"WEB"
],
"fingerprint": "0000000000000",
"tagManagerUrl": "https://tagmanager.google.com/#/container/accounts/0000000000/containers/000000000/workspaces?apiLink=container",
"features": {
"supportUserPermissions": true,
"supportEnvironments": true,
"supportWorkspaces": true,
"supportGtagConfigs": false,
"supportBuiltInVariables": true,
"supportClients": false,
"supportFolders": true,
"supportTags": true,
"supportTemplates": true,
"supportTriggers": true,
"supportVariables": true,
"supportVersions": true,
"supportZones": true
},
"tagIds": [
"GTM-XXXXXX"
]
},
"tag": [
{
"accountId": "0000000000",
"containerId": "000000000",
"tagId": "3",
"name": "cHTML - Calendly listener",
"type": "html",
"parameter": [
{
"type": "TEMPLATE",
"key": "html",
"value": "<script>\nwindow.dataLayer = window.dataLayer ||[];\nwindow.addEventListener('message',\n function(e) {\n if (e.data.event && e.data.event.indexOf('calendly') === 0) {\n window.dataLayer.push({\n 'event' : 'calendly',\n 'calendly_event' : e.data.event.split('.')[1]\n });\n }\n }\n);\n</script>"
},
{
"type": "BOOLEAN",
"key": "supportDocumentWrite",
"value": "false"
}
],
"fingerprint": "0000000000000",
"firingTriggerId": [
"2147479553"
],
"tagFiringOption": "ONCE_PER_EVENT",
"monitoringMetadata": {
"type": "MAP"
},
"consentSettings": {
"consentStatus": "NOT_SET"
}
},
{
"accountId": "0000000000",
"containerId": "000000000",
"tagId": "6",
"name": "GA4 event - calendar events - calendly",
"type": "gaawe",
"parameter": [
{
"type": "BOOLEAN",
"key": "sendEcommerceData",
"value": "false"
},
{
"type": "TEMPLATE",
"key": "eventName",
"value": "calendar_{{dlv - calendly_event}}"
},
{
"type": "TEMPLATE",
"key": "measurementId",
"value": "none"
},
{
"type": "TEMPLATE",
"key": "measurementIdOverride",
"value": "{{INSERT YOUR MEASUREMENT ID HERE}}"
}
],
"fingerprint": "0000000000000",
"firingTriggerId": [
"4"
],
"tagFiringOption": "ONCE_PER_EVENT",
"monitoringMetadata": {
"type": "MAP"
},
"consentSettings": {
"consentStatus": "NOT_SET"
}
}
],
"trigger": [
{
"accountId": "0000000000",
"containerId": "000000000",
"triggerId": "4",
"name": "custom - calendly",
"type": "CUSTOM_EVENT",
"customEventFilter": [
{
"type": "EQUALS",
"parameter": [
{
"type": "TEMPLATE",
"key": "arg0",
"value": "{{_event}}"
},
{
"type": "TEMPLATE",
"key": "arg1",
"value": "calendly"
}
]
}
],
"fingerprint": "0000000000000"
}
],
"variable": [
{
"accountId": "0000000000",
"containerId": "000000000",
"variableId": "5",
"name": "dlv - calendly_event",
"type": "v",
"parameter": [
{
"type": "INTEGER",
"key": "dataLayerVersion",
"value": "2"
},
{
"type": "BOOLEAN",
"key": "setDefaultValue",
"value": "false"
},
{
"type": "TEMPLATE",
"key": "name",
"value": "calendly_event"
}
],
"fingerprint": "0000000000000",
"formatValue": {}
}
],
"fingerprint": "0000000000000",
"tagManagerUrl": "https://tagmanager.google.com/#/versions/accounts/0000000000/containers/000000000/versions/0?apiLink=version"
}
}Terminbuchungs-Tracking richtig aufsetzen? Jetzt Beratung anfragen →
Über den Autor
Daniils Visnakovs
Ex-Google-Berater, Speaker (u.a. Nomad World Fest) und Coach. Spezialisiert auf Conversion-Tracking, Google Ads und datenbasiertes Marketing. Hilft Unternehmen, Werbebudgets messbar einzusetzen — in 1:1 Beratung, Workshops oder auf der Bühne.