trigger object. This page documents every trigger type and the fields available for each.
Using Trigger Context
Access trigger data in any workflow node that supports Liquid:trigger.type field identifies what triggered the workflow, allowing you to create conditional content that adapts to different trigger sources.
Trigger Types
Form Submissions
Triggered when a contact submits a form.Available Fields
The referrer and UTM values describe the visit the submission belongs to, not the form’s page. They are taken from the first page visit in the same session, so a visitor who arrives on a UTM-tagged link and then navigates to your form still resolves the UTMs of the link that brought them in. A session that starts as a direct or organic visit resolves to empty UTM values, since there was no campaign to attribute it to.When the session has no tracked page visits at all (a visitor who declined cookies, or a form on a page without the tracking pixel), the referrer falls back to the one captured with the submission, and the UTM values fall back to the UTM parameters parsed from the URL the form was submitted on.
Submitted Field Values
Access any field from the form submission through the.fields namespace:
Field values are nested under
.fields to avoid conflicts between submission data and form metadata. For example, if a form has a field named “form_name”, it’s accessible at trigger.form_submission.fields.form_name without overwriting the actual form name.Example
Page Visits
Triggered when a contact visits a tracked page.Available Fields
Example
Email Events
All email event triggers share common email metadata throughtrigger.email. Each event type also has event-specific fields.
Common Email Fields
These fields are available for all email triggers:Email Sent
Triggered when an email is sent to a contact.Email Delivered
Triggered when an email is successfully delivered.Email Opened
Triggered when a contact opens an email.Email Bounced
Triggered when an email bounces.Email Link Clicked
Triggered when a contact clicks a link in an email.Example
Contact Created
Triggered when a new contact is created in Conversion.Available Fields
Thecontact_created trigger has no trigger-specific fields — reference the new contact’s data directly through the contact object.
Example
Contact Updated
Triggered when a contact field value changes.Available Fields
Example
Company Updated
Triggered when a company field value changes.Available Fields
Example
Audience Changes
Triggered when a contact is added to or removed from an audience.Added to Audience
Removed from Audience
Available Fields
Example
Opportunity Events
Triggered when opportunities are created or updated.Opportunity Created
Triggered when a new opportunity is created.Opportunity Updated
Triggered when an opportunity field value changes.Available Fields
For all opportunity triggers:
For
opportunity_updated, access changed field information:
Example
Opportunity Role Events
Triggered when a contact’s relationship to an opportunity changes.Opportunity Role Added
Triggered when a contact is added to an opportunity (given an Opportunity Contact Role).Opportunity Role Changed
Triggered when a contact’s role on an opportunity changes.Available Fields
For
opportunity_role_changed, access changed field information:
Example
Custom Object Events
Triggered when a custom object record’s field value changes (custom_object_updated).
Beyond
trigger.type, the custom object trigger does not currently expose the changed record’s fields to Liquid. To reference custom object data in your content, read it through the relationship field that connects the record to the contact or its company, which resolves at render time.Subscription Changes
Triggered when a contact’s subscription status changes (subscription_change).
Available Fields
Workflow-Triggered Workflows
When a workflow is started by another workflow (automation), the parent run’s trigger context is available through trigger.parent_trigger, which has the same structure as trigger itself — including its own parent_trigger, so chains resolve all the way up.
Custom Events
Triggered when a custom event is tracked for a contact.Available Fields
Custom Properties
Access any custom property sent with the event through the.data namespace:
Custom properties are nested under
.data to avoid conflicts between event data and event metadata.Example
API Triggers
Triggered when a workflow is started via the API.Available Fields
The API trigger exposes a single field: the request payload, undertrigger.api.data.
Request Payload
Access any custom field sent in the API request through the.data namespace:
Request payload fields are nested under
.data to avoid conflicts with request metadata, following the same pattern as form submissions and custom events.Example
Handling Multiple Trigger Types
Usetrigger.type with case statements to handle multiple trigger types in a single workflow:
Frequently Asked Questions
What happens if I reference a trigger field that doesn't exist for this trigger type?
What happens if I reference a trigger field that doesn't exist for this trigger type?
If your Liquid syntax is valid but references a trigger field that doesn’t apply to the current trigger type (e.g., using
trigger.form_submission.form_name when the workflow was triggered by a page visit), the expression evaluates to an empty string. Use trigger.type checks to ensure you’re accessing the right fields.Why are form fields under .fields and event properties under .data?
Why are form fields under .fields and event properties under .data?
These namespaces prevent conflicts between user-provided data and system metadata. For example, if a form has a field named “form_name”, it won’t overwrite
trigger.form_submission.form_name—it’s safely accessible at trigger.form_submission.fields.form_name.How do I check if a specific field changed in an update trigger?
How do I check if a specific field changed in an update trigger?
Use the
_changed namespace. For example, trigger.contact._changed.job_title returns true if the job title field changed. You can then access the previous value with trigger.contact._previous.job_title.Are timestamps in a specific timezone?
Are timestamps in a specific timezone?
All timestamps are returned in UTC in ISO 8601 format. Use the
date filter to format them for display.