Cognito Form GTM Event Listener
Track Cognito Form submissions in Google Tag Manager. Capture form ID, form name, email, and user data. Fire GA4 events on cognito_form_submit_successful.
Key variable
cogformIDCognito Form
Overview
Cognito Forms is a powerful form builder with conditional logic, multi-step support, and payment integrations. This listener tracks two events: a click on the submit button (to detect attempted submissions) and a confirmed successful submission. It captures form ID, name, email, user name, and error status.
Events fired:
cognito_form_submit_button, submit button clicked (pre-success)cognito_form_submit_successful, successful submission confirmed
Variables: cogformID, cogformName, cogInternalFormName, cogformEmail, cogFormNameObj, cogformHasError
Important: Works for embedded Cognito forms. Iframe embeds require alternative approaches.
Why Use This Listener
Two-event tracking gives you both conversion measurement (cognito_form_submit_successful) and error detection (cogformHasError on cognito_form_submit_button). You can calculate error rates and optimize form UX.
Common Use Cases
- Track form submissions as lead conversions
- Monitor submission error rates for form UX optimization
- Capture email for Enhanced Conversions in Google Ads
- Segment conversions by form name
Installation
<!-- GTM Custom HTML Tag: Cognito Form Listener -->
<script>
(function() {
function cognitoPush(eventName, form) {
window.dataLayer = window.dataLayer || [];
var entry = form.entry;
window.dataLayer.push({
'event': eventName,
'cogformID': form.id,
'cogformName': form.name,
'cogInternalFormName': form.name.replace(/\s+/g, ''),
'cogformEmail': entry ? (entry.Email || entry.EmailAddress || '') : '',
'cogFormNameObj': entry ? (entry.Name || {}) : {},
'cogformHasError': form.hasError || false
});
}
Cognito.on('beforeSubmit', function(event) {
cognitoPush('cognito_form_submit_button', event.data.form);
});
Cognito.on('afterSubmit', function(event) {
cognitoPush('cognito_form_submit_successful', event.data.form);
});
})();
</script>Fire on: DOM Ready.
Data Layer Output
Success Event
{
"event": "cognito_form_submit_successful",
"cogformID": "1",
"cogformName": "Contact Us",
"cogInternalFormName": "ContactUs",
"cogformEmail": "user@example.com",
"cogFormNameObj": { "First": "Jane", "Last": "Smith" },
"cogformHasError": false
}Triggers to Create
| Trigger | Event Name |
|---|---|
| CE – Cognito Submit Success | cognito_form_submit_successful |
| CE – Cognito Submit Attempt | cognito_form_submit_button |
Variables to Capture
| Variable Name | DL Key | Example |
|---|---|---|
| DLV – Cognito Form ID | cogformID | "1" |
| DLV – Cognito Form Name | cogformName | "Contact Us" |
| DLV – Cognito Email | cogformEmail | "user@example.com" |
| DLV – Cognito Has Error | cogformHasError | false |
GA4 Mapping
| GA4 Event | Trigger | Parameters |
|---|---|---|
generate_lead | Cognito Submit Success | form_id, form_name, email |
form_error | Cognito Submit Attempt (with error) | form_id |
Debugging
| Problem | Cause | Fix |
|---|---|---|
Cognito is not defined | Form not loaded | Switch to Window Loaded trigger |
| Only works on embedded | Using iframe embed | Add alternate approach for iframes |