Campaign Triggers
UpdatedCampaign triggers determine who enters your campaigns and when. This page describes different kinds of triggers and why you might use them.
If you’re just getting started, we’ve created a quick video to help you understand what each campaign trigger does. To learn about object and relationship triggers, read on.
How it works
A campaign trigger determines who enters your campaign and when. You can set up filters to narrow your trigger criteria. People need to meet your trigger and filter criteria to enter your campaign. You can also set your exit conditions to make people exit your campaign when they quit matching your trigger and filter criteria, ensuring that your campaign is relevant to your audience.
If you want to let people experience a campaign multiple times, you can set frequency settings, determining how often a person can trigger a campaign.
trigger conditions?}-->|yes|c{Does person meet
filter conditions?} c-->|yes|d[person enters
campaign] a-.->|no|i[person doesn't
enter campaign] c-.->|no|i
What kinds of actions trigger a campaign?
Your campaign trigger determines who enters your campaign and when. Most triggers are based around people, like when they match certain criteria. Typically, these people are the subject of your campaign—you’ll send them messages, set their attributes, and so on.
Trigger options
You have seven types of triggers to choose from:
Segment change
Segment change lets you create a segmentA segment is a group of people in your audience that you want to target with campaigns, messages, etc. You can join groups of people manually, or by attribues and event data. or specify existing segments that people must be in (or not in) to trigger a campaign. You can set segment criteria based on your audience’s attributes, events, etc. This option is best for things like recurring NPS surveys, onboarding drip campaigns, inactivity reminders, and so on.
Event
An eventSomething that a person in your workspace did. Events can trigger campaigns, add people to segments, etc. You can access event properties in liquid with {{event.<property>}}
-triggered campaign helps you respond to a person’s activity in your app or website. For instance, you could trigger a campaign based on a user abandoning their cart, viewing a specific page on your app, or completing an order.
Form submission
Form submission lets you take advantage of formConnected Forms in Customer.io allow you to automatically trigger campaigns, send data to other services, and add or update people when they submit forms on your website or in your app. responses to trigger campaigns. You can connect a form to your workspace or integrate with Facebook Lead Ads. Use this type of campaign to send messages to nurture new leads or respond to support requests.
Object updated
Use Object updated when you want people to enter the campaign every time an objectNot to be confused with a JSON object, an object in Customer.io is a non-person entity that you can associate with one or more people—like a company, account, or online course. You can use objects to message people based on changes to their company, account, or course itinerary. is updated in your workspace. For instance, if you were tracking accounts as objects and updated the name of one, you could notify everyone that managed the account that the account went through a rebrand. Keep in mind, only people enter into journeys, not objects.
You’ll see this as “Object_type_name updated” in your trigger list.
When you use objects to trigger campaigns, you can choose who enters into the campaign. The audience could be:
- every person in the object
- certain people related to the object
Relationship added or changed
A relationship is the association between an objectNot to be confused with a JSON object, an object in Customer.io is a non-person entity that you can associate with one or more people—like a company, account, or online course. You can use objects to message people based on changes to their company, account, or course itinerary. and a person. Use this trigger type when you want people to enter a campaign after their relationship to an object has changed. For instance, if you track accounts as objects, this could mean they joined an account (person added), or they are now a manager (relationship changed).
You’ll see this as “Person added” or “Relationship changed” in your trigger list.
When you use relationships to trigger campaigns, you can choose who enters into the campaign. That is, the recipient of the message in this kind of campaign doesn’t have to be the person in the relationship that triggered it. The audience could be:
- the person whose relationship to the object is updated (default)
- every person in the object
- certain people related to the object
Important date
An important date triggers campaigns on a specific or relative date based on an attributeA key-value pair that you associate with a person or an object—like a person’s name, the date they were created in your workspace, or a company’s billing date etc. Use attributes to target people and personalize messages. Attributes are analogous to traits in Data Pipelines. that people in your audience have. You can trigger based on any customer attributes that are properly formatted dates. This is useful for recurring campaigns like birthdays, anniversaries, subscription renewals, and payment reminders.
Webhook
A webhook triggers a campaign based on data from an external service. The purpose of your campaign is to manipulate this data and associate it with people, much like you can with Zapier or Segment, but entirely within a campaign. Because data, not people, is the subject of your campaign, webhook-triggered campaigns don’t typically send messages directly; rather, they let you associate data with people, which can trigger subsequent campaigns.
Webhook campaigns help you perform one-to-many interactions with your audience, like notifying a group of people when you post a job or a product becomes available that a cohort of your audience is interested in.
Segment change
Segments are based on audience criteria—attributesA key-value pair that you associate with a person or an object—like a person’s name, the date they were created in your workspace, or a company’s billing date etc. Use attributes to target people and personalize messages. Attributes are analogous to traits in Data Pipelines. your audience has, events they’ve performed, making this one of our more flexible campaign types.
Click Choose Segment to get started:
We’ll prompt you to choose one or more segments that your audience is in or not in. If you haven’t created a segment yet, you can click Create a new data-driven segment to set conditions for a new segment.
You cannot create campaigns with only a not in condition
A segment-triggered campaign must have at least one in condition for you to save it. We do not trigger campaigns solely off of people not belonging to a segment.
You can set multiple segments using and or or conditions. Use and to trigger campaigns only when people meet all of your conditions. Click + Add condition to create an and condition.
Use an or condition to trigger a campaign based on a person belonging to any of the segments. Add segments to the same field to create an or condition:
You can use JSON dot notation in condition logic
If you store attributes or event data in JSON objects or arrays, you can use JSON dot notation in your branch conditions to evaluate these properties. Use array[]
to represent any item in an array or array[0]
to represent the first item in the array. See Storing and using JSON for more information about dot notation in Customer.io.
Filter
With segment-triggered campaigns, you can also add a segment filter. You should weave your segment filter criteria into your segment trigger conditions as much as possible, but if you find you cannot accomplish what you need without a segment trigger AND segment filter, please let us know! We want to account for this use case as we develop the next generation of campaigns.
Frequency
By default, people will enter your campaign once. If your campaign does not use a Filter, you can let customers enter your campaign multiple times with the Frequency setting. When you enable Frequency settings, you’ll use one of these options to determine how often a person can re-enter your campaign:
We start to measure the interval when a person enters the campaign
Even if your campaign includes a delay, the interval window begins when a person matches your campaign conditions.
Frequency settings apply to people you manually remove from campaigns
You can manually remove people from campaigns, but this won’t necessarily cause them to re-enter the campaign. For example, if a person can only enter a campaign once ever, and you remove a person from the campaign, they’ll never re-enter the campaign.
Change frequency in a live campaign
Like other trigger settings, you can change your campaign’s frequency settings while your campaign is running. Go to Making changes to campaigns and broadcasts for information on the impact of changing frequency types or wait times for At fixed intervals and Every re-match.
Object change
You can trigger a campaign when an objectNot to be confused with a JSON object, an object in Customer.io is a non-person entity that you can associate with one or more people—like a company, account, or online course. You can use objects to message people based on changes to their company, account, or course itinerary. is updated in your workspace. This type of campaign only triggers for future additions; that is, only people who match the trigger, audience, frequency, and filter conditions AFTER you start the campaign will enter into a journey.
On the Trigger step of setting up a campaign, you will see a list of all object types in your workspace. Underneath each object type, you’ll see object triggers listed as “Object_name updated,” like “Account updated.”
To use an object trigger, you must create at least one object.
If you select Object updated, you must specify which attributes to target. This type of campaign triggers when specific attributes change, not when any attribute changes. For instance:
You can use a variety of operators like “equal to” or “exists.” You cannot use operators like greater than, less than, etc. If you need other operators, consider adding a segment filter or passing your information to Customer.io so the existing operators work.
We only evaluate trigger conditions before a person enters a journey
This means a person could continue to move through your object-triggered campaign if the object were deleted or their relationship to the object was removed or changed. If they shouldn’t, add filters to your campaign (see below).
It also means messages could fail to send if you reference this deleted relationship or object in liquid, so make sure you provide a liquid fallback.
Frequency
For now, campaigns with custom object triggers only support the “every time” frequency. Stay tuned for more frequency options in upcoming releases.
Audience
You have the flexibility to decide who your audience is. The audience could be:
- every person related to the object
- certain people related to the object based on profile or relationship attributes
Your audience cannot exceed 1,000 people each time the campaign triggers.
If it does, the people will not start a journey. You will see “Failed Journeys for Object/Relationship Campaign” in your activity log. Keep this in mind anytime you choose “Every person in the object” or “Certain people in the object” as your audience settings.
Check out Considerations for audiences over 1,000 for more information.
Filters
You can apply filters to further refine who should enter and stay in the campaign. We evaluate filters when the person first meets the trigger criteria and before action items in your workflow. For example, if your campaign is designed to nurture leads, you might filter out people who’ve already paid for your services.
Exit Conditions
You can decide when a person exits an object-triggered campaign. You can find these on the Goal & Exit tab of campaigns. You can choose that:
- they never exit.
- they only exit when they achieve the conversion goal.
- they exit when they stop matching filter criteria.
- they exit when they stop matching filter criteria OR achieve the conversion goal.
We evaluate exit conditions before every journey and before action items in your workflow. We do not evaluate whether people meet the trigger criteria after they’ve entered the campaign.
Relationship change
You can trigger a campaign based on a relationship by targeting people that were added to an object or targeting a change in the relationship. A relationship is the association between an objectNot to be confused with a JSON object, an object in Customer.io is a non-person entity that you can associate with one or more people—like a company, account, or online course. You can use objects to message people based on changes to their company, account, or course itinerary. and a person.
This type of campaign only triggers for future additions; that is, only people who match the trigger, audience, frequency, and filter conditions AFTER you start the campaign will enter into a journey.
On the Trigger step of setting up a campaign, you will see a list of all object types in your account. Underneath each object type, you’ll see relationship triggers listed as “Person added” or “Relationship changed.”
To use a relationship trigger, you must create at least one object.
If you select Person added, you can optionally refine the audience by relationship attributes to funnel the right people into the campaign. Otherwise, the campaign will trigger when any person is added to any object within the specified object type.
If you select Relationship changed, you must specify which relationship attributes to target. For instance:
You can use a variety of operators like “equal to” or “exists.” You cannot use operators like greater than, less than, etc. If you need other operators, consider adding a segment filter or passing your information to Customer.io so the existing operators work.
You cannot target any change to a relationship; you must specify what a relationship attribute is specifically changing to or changing from (role is equal to admin
or role is not equal to admin
, for instance).
We only evaluate trigger conditions before a person enters a journey
This means a person could continue to move through your relationship-triggered campaign if the object were deleted or their relationship to the object was removed. For example, imagine a campaign triggered by a relationship matching role equal to admin
for an object. If a person matches this criteria then their role changes to member
, the person would continue their journey. If they shouldn’t, add filters to your campaign (see below).
It also means messages could fail to send if you reference this deleted relationship or object in liquid, so make sure you provide a liquid fallback.
Frequency
For now, campaigns with relationship triggers only support the “every time” frequency. Stay tuned for more frequency options in upcoming releases.
Audience
You have the flexibility to decide who your audience is. The audience could be:
- the person that was added to the object (default)
- every person in the object
- certain people related to the object based on profile or relationship attributes
Your audience cannot exceed 1,000 people each time the campaign triggers.
If it does, the people will not start a journey. You will see “Failed Journeys for Object/Relationship Campaign” in your activity log. Keep this in mind anytime you choose “Every person in the object” or “Certain people in the object” as your audience settings.
Check out Considerations for audiences over 1,000 for more information.
Filters
You can apply filters to further refine who should enter and stay in the campaign. You can find these on the Goal & Exit tab of campaigns. We evaluate filters when the person first meets the trigger criteria and before every non-delay action item after that. For example, if your campaign is designed to nurture leads, you might filter out people who’ve already paid for your services.
Exit Conditions
You can decide when a person exits a relationship-triggered campaign. You can find these on the Goal & Exit tab of campaigns. You can choose that:
- they never exit.
- they only exit when they achieve the conversion goal.
- they exit when they stop matching filter criteria.
- they exit when they stop matching filter criteria OR achieve the conversion goal.
We evaluate exit conditions before every journey and before every action that impacts a person (message delivery, attribute updates, static segment updates, collection queries, create event actions, or batch updates). We do not evaluate whether people meet the trigger criteria after they’ve entered the campaign.
Form submission
You can connect forms—Facebook Lead Ads, Jotform, Typeform, your own custom web forms, etc—to your workspace. You can trigger a campaign when someone fills out your form. This can help you nurture new leads or respond to support requests.
When you select the When someone fills out a form on your website option, you can either connect a new form or select an existing form—if you’ve already added forms to your workspace.
Filters
You can apply segment-based filters to determine whether someone in the campaign should receive messages. For example, if your campaign is designed to nurture leads, you might filter out people who’ve already paid for your services.
Frequency
Much like event-triggered campaigns, a person enters your campaign every time they fill out your form by default. You can limit the campaign frequency if you don’t want to send your audience a campaign every time they fill out your form.
Toggle frequency to limit how often people move through your campaign.
- Once ever: people will only enter the campaign the first time they fill out your form.
- Once within a time period: people can only enter the campaign once within a time period, no matter how many times they fill out your form.
Event
Event-triggered campaigns help you respond to your audience’s behavior in your app or on your website—like encouraging people to complete their purchase when they abandon your cart, or messaging people who visit a product page on your website to let them know when the product goes on sale.
When you use this kind of trigger, you can choose the event that you want to use to trigger your campaign. If you don’t see the event, you can type the event name
in the box. If the event occurred recently, click View
You can narrow your trigger criteria based on properties in your event. If you have a particular event attribute you want to use as a filter—like if you only want to target people who bought a specific product—click Add event data filter and set the event properties you want to match for your trigger.
You can use JSON dot notation in condition logic
If you store attributes or event data in JSON objects or arrays, you can use JSON dot notation in your branch conditions to evaluate these properties. Use array[]
to represent any item in an array or array[0]
to represent the first item in the array. See Storing and using JSON for more information about dot notation in Customer.io.
Frequency
By default, a person enters an event-based campaign every time they perform the trigger event. You can limit the campaign frequency if you don’t want to send your audience a campaign every time they perform your event.
Toggle frequency to limit how many times people can move through campaigns and set your frequency options.
Once ever: people will only enter the campaign the first time they perform the event. For example, if you’d like to congratulate someone the first time they complete a lesson in your eLearning app, you can use this setting. This way, you’ll ensure they don’t receive the email again once they’re a seasoned student and flying through lessons regularly.
Once within a time period: people will only receive the campaign once within a time period. For example, you want to send an email to someone when they receive notifications in your app. You only want them to receive the email once a day, regardless of how many application notifications they receive. Setting Frequency to “at most once within 24 hours” will ensure that, no matter how many new notifications people get, they will only get an email once.
Important date
This option lets you trigger a campaign based on a date-time attributeA key-value pair that you associate with a person or an object—like a person’s name, the date they were created in your workspace, or a company’s billing date etc. Use attributes to target people and personalize messages. Attributes are analogous to traits in Data Pipelines. that people in your audience have. The attribute must contain a date in either Unix timestamp or ISO 8601 format. If a person doesn’t have this attribute, or the attribute isn’t in the right format, they’ll never trigger the campaign.
You can trigger your campaign using a relative or static date based on this attribute:
- Relative: Remind your audience to renew their subscription 14 days before their subscription anniversary.
- Static: Wish your audience a happy birthday on their birthdate.
When you set up a date-triggered campaign, there are four things you need to choose. When you pick your date-time attribute, you’ll see a preview panel that lets you test your choices with people from your workspace.
Determine how frequently people enter your campaign. These values are all based on your date attribute.
- Only once, on this date: A person triggers the campaign based on the entire date, including month, day, and year. This date must be in the future.
- Every year: A person triggers the campaign once per year on the month and day in their date attribute. The year is ignored. For example, if the date attribute is June 5th, 1977, the campaign will trigger once per year on June 5th.
Pick your audience’s date-time attribute. Customer.io schedules your campaign based on the date value in this attribute, but we don’t use the time. You’ll pick the time in the next step.
Attributes updated on the same day as the campaign
When you set the Person’s attribute value on the same day specified as the trigger, if it is set before the specified trigger time for the campaign, it will fire on that same day since the date in the attribute match the criteria and the trigger time has not passed yet.
Let’s say today is July 1st, 2020 and you update a Person’s value for the trigger attribute to July 1st. If the time specifed in the trigger condition has already passed, the Person will not trigger this campaign today. For the campaign to be triggered, the attribute value must be set before the specified trigger time for the campaign. For example, if the campaign is supposed to trigger at 1pm on the date, then the campaign will not trigger if the attribute is updated at 2pm on the same date.Pick the time of day that you want to trigger this campaign. We won’t use the time stored in the date attribute. But, if you store your audience’s
timezone
as an attribute, you can selectthe user's time zone
to trigger your campaign in your audience’s time zone.
Supported date formats
We can trigger campaigns based on a Unix timestamp or a date-time in the ISO 8601 format. These are the ISO 8601 date-time formats we support:
ISO 8601 Format | Example |
---|---|
YYYY-MM | 2024-03 (This will default to the first of the month.) |
YYYY-MM-DD | 2023-11-15 |
YYYY-MM-DDThh:mm:ssZ | 2023-11-15T23:14:37Z |
YYYYMMDDThh:mm:ssZ | 20231115T231437Z |
YYYY-MM-DDThh:mm:ss.ms | 2007-11-22T12:30:22.321 |
YYYY-MM-DDThh:mm:ss+/-< UTC offset > | 2024-02-07T12:30:22-08:00 |
Nested date attributes
When picking the date attribute that will trigger your campaign, you can also type in nested date-time attributes, such as appointments.follow_up_date
or account_details.renewal_date
.
Unfortunately, we cannot preview the number of people that will receive a message when you use a nested attribute. Instead, we’ll show you how many people have the parent attribute (i.e. appointments
or account_details
).
Webhook
Most campaigns are triggered by people, and people are the subjects of the campaign—you set their attributes, send them messages, etc. Webhook-triggered campaigns are different: they’re triggered by data, and data (that may or may not be related to people in your audience) is the subject of the campaign.
In general, you’ll use these campaigns to manipulate incoming data and associate it with people in your audience. For example, if people are interested in a product that’s out of stock, you might use a webhook to notify Customer.io when that item is back in stock. In your campaign, you can send an event to everybody who was interested in the product, triggering a campaign to let these people know that their product is back in stock!
When you set up a campaign and select the Trigger your campaign from a webhook option, you’ll get a webhook URL. You’ll provide this URL to the service that you want to collect data from.
Your campaign runs whenever this URL is called. The data from your external service can take any shape. You’ll manipulate the data and associate it people as a part of your campaign. This lets you perform Zapier-like transformations on your data without having to build an integration.
Right now, you can’t filter or otherwise limit webhook-triggered campaign triggers within Customer.io. You’ll have to make sure that your external service is set up to call your webhook-triggered campaign’s webhook URL with a relatively uniform data set and only when you want it to call the URL.
Because webhook-triggered campaigns aren’t associated with people—at least not directly—they don’t have many of the options that you’ll see in other types of campaigns. They have a much more streamlined workflow: data comes in, you convert it to the format you want, and the campaign ends. You won’t set a Conversion goal, Frequency, etc.
Why can’t I change my campaign trigger?
Your trigger affects other settings throughout your campaign, like the actions available in your workflow, the types of liquidA syntax that supports variables, letting you personalize messages for your audience. For example, if you want to reference a person’s first name, you might use the variable {{customer.first_name}}
. variables you can use, and so on.
After you pass the trigger step, we “create” a campaign based on your trigger type with all the related settings, liquid scopes, and campaign actions. We don’t allow you to change your trigger type after this point, because it would almost certainly break subsequent settings and workflow actions in your campaign—many of which are specific to the trigger.
If you want to change triggers, you’ll need to create a new campaign. If you’ve already filled out a campaign workflow, you can copy workflow items to your new campaign!