Drift Chat GTM Event Listener
Track 18 Drift chat interactions in Google Tag Manager including meeting bookings, email captures, playbook firings, and GDPR clicks. Complete dataLayer reference.
Event fired
driftchat_actionDrift Chat
Overview
Drift is a conversational marketing and sales platform. This listener is one of the most comprehensive chat listeners available, capturing 18 distinct interactions including meeting bookings, email captures, playbook firings, campaign interactions, GDPR consent clicks, and phone number provision.
Event fired: driftchat_action
Primary variable: chatAction (interaction description)
Why Use This Listener
Drift is often the critical conversion point in a B2B buying journey. Meeting bookings and email captures from Drift are high-intent signals that should be tracked as primary conversions, not just engagement events.
Common Use Cases
- Track Drift meeting bookings as pipeline conversions in GA4 and Google Ads
- Fire Meta
Leadevents on email capture - Build audiences of users who engaged with Drift playbooks
- Track GDPR consent as a compliance event
- Measure bot campaign effectiveness by tracking playbook firings
- Correlate chat engagement with downstream revenue
Tracked Events (18 Total)
| Event | chatAction Value |
|---|---|
| Conversation started | user started conversation |
| Campaign opened | user opened campaign |
| Campaign clicked | user clicked campaign |
| Campaign dismissed | user dismissed campaign |
| Campaign submitted | user submitted campaign |
| Widget opened | chat widget opened |
| Widget closed | chat widget closed |
| Playbook fired | playbook fired |
| Playbook clicked | playbook clicked |
| Playbook dismissed | playbook dismissed |
| Meeting requested | meeting request initiated |
| Meeting booked | meeting booked |
| Phone provided | phone number provided |
| First interaction | first interaction in conversation |
| Welcome opened | welcome message opened |
| Welcome closed | welcome message closed |
| Button clicked | button clicked in chat |
| Email captured | email captured |
| GDPR clicked | gdpr clicked |
Installation
<!-- GTM Custom HTML Tag: Drift Chat Listener -->
<script>
(function() {
var driftEvents = [
['startConversation', 'user started conversation'],
['campaign:open', 'user opened campaign'],
['campaign:click', 'user clicked campaign'],
['campaign:dismiss', 'user dismissed campaign'],
['campaign:submit', 'user submitted campaign'],
['sidebarOpen', 'chat widget opened'],
['sidebarClose', 'chat widget closed'],
['conversation:playbookFired', 'playbook fired'],
['conversation:playbookClicked', 'playbook clicked'],
['conversation:playbookDismissed', 'playbook dismissed'],
['scheduling:requestMeeting', 'meeting request initiated'],
['scheduling:meetingBooked', 'meeting booked'],
['phoneCapture:phoneNumberProvided', 'phone number provided'],
['conversation:firstInteraction', 'first interaction in conversation'],
['welcomeMessage:open', 'welcome message opened'],
['welcomeMessage:close', 'welcome message closed'],
['conversation:buttonClicked', 'button clicked in chat'],
['emailCapture:emailCaptured', 'email captured'],
['gdpr:clicked', 'gdpr clicked']
];
function driftReady() {
driftEvents.forEach(function(eventDef) {
drift.on(eventDef[0], function(data) {
var push = {
'event': 'driftchat_action',
'chatAction': eventDef[1],
'chatWidgetID': drift.config && drift.config.appId,
'chatSessionID': data && data.sessionId
};
if (data) {
if (data.conversationId) push.chatConversationID = data.conversationId;
if (data.playbookId) push.chatPlaybookID = data.playbookId;
if (data.campaignId) push.chatCampaignID = data.campaignId;
if (data.email) push.chatVisitorEmail = data.email;
if (data.teamMemberId) push.chatTeamMemberID = data.teamMemberId;
if (data.buttonText) push.chatButtonText = data.buttonText;
if (eventDef[0] === 'scheduling:meetingBooked') {
push.chatMeetingTime = data.meetingTime;
push.chatMeetingDuration = data.duration;
push.chatMeetingTimeZone = data.timeZone;
push.chatTeamMemberName = data.teamMemberName;
}
}
window.dataLayer = window.dataLayer || [];
window.dataLayer.push(push);
});
});
}
if (window.drift) {
drift.on('ready', driftReady);
} else {
window.addEventListener('load', function() {
if (window.drift) drift.on('ready', driftReady);
});
}
})();
</script>Data Layer Output
Meeting Booked (High-Value Conversion)
{
"event": "driftchat_action",
"chatAction": "meeting booked",
"chatWidgetID": "abc123",
"chatSessionID": "session_xyz",
"chatConversationID": "conv_456",
"chatTeamMemberID": "agent_789",
"chatTeamMemberName": "Sarah Johnson",
"chatMeetingTime": "2024-02-15T14:00:00Z",
"chatMeetingDuration": 30,
"chatMeetingTimeZone": "America/New_York"
}Email Captured
{
"event": "driftchat_action",
"chatAction": "email captured",
"chatVisitorEmail": "prospect@company.com",
"chatWidgetID": "abc123"
}Trigger Strategy
| Priority | Action | Trigger | Tags |
|---|---|---|---|
| 🔴 High | Meeting Booked | chatAction = "meeting booked" | GA4 conversion, Google Ads, Meta Lead |
| 🟠 Medium | Email Captured | chatAction = "email captured" | GA4 generate_lead |
| 🟡 Medium | Conversation Started | chatAction = "user started conversation" | GA4 engagement |
| 🟢 Low | Widget Opened | chatAction = "chat widget opened" | GA4 engagement |
Variables to Capture
| Variable Name | DL Key | Example |
|---|---|---|
| DLV – Drift Action | chatAction | "meeting booked" |
| DLV – Drift Widget ID | chatWidgetID | "abc123" |
| DLV – Drift Session ID | chatSessionID | "session_xyz" |
| DLV – Drift Email | chatVisitorEmail | "user@company.com" |
| DLV – Drift Playbook ID | chatPlaybookID | "playbook_123" |
| DLV – Drift Meeting Time | chatMeetingTime | "2024-02-15T14:00" |
GA4 Mapping
| GA4 Event | Trigger | Parameters |
|---|---|---|
book_appointment | meeting booked | chat_platform, team_member, meeting_time |
generate_lead | email captured | chat_platform, email |
chat_widget_open | widget opened | chat_platform |
Debugging
| Problem | Cause | Fix |
|---|---|---|
drift is not defined | Drift not loaded | Use Window Loaded trigger + check |
| Events not firing | Drift API version mismatch | Check Drift's event name documentation |
| Meeting booked not tracking | Drift scheduling not enabled | Enable Drift Meetings in settings |
Best Practices
- Prioritize meeting bookings, this is the primary B2B conversion signal from Drift
- Gate email captured events by consent status before pushing to GA4
- Use Drift's visitor API to enrich pushes with company/email data when available
- A/B test playbooks, use
chatPlaybookIDto compare playbook performance in GA4