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.

Daniils Visnakovs
· Lesedauer: 4 Min.
GTM Calendly Event Tracking Template

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 Triggercalendly Event
  • 1 DataLayer Variablecalendly_event mit 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 geladen
  • calendly.event_type_viewed — Nutzer hat einen Termintyp angesehen
  • calendly.date_and_time_selected — Datum und Uhrzeit wurden gewählt
  • calendly.event_scheduledTermin 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

  1. GTM Preview Mode aktivieren
  2. Calendly-Widget öffnen
  3. Einen Test-Termin buchen
  4. 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 →


Daniils Visnakovs

Ü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.

Beratung anfragen