Campaign Triggers
Campaign 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.
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 (or what) enters your campaign and when. Most triggers are based around people: people enter your campaign when they match certain criteria, and these people are the subject of your campaign—you’ll send them messages, set their attributes, and so on.


When a person moves in or out of a segment lets you create a segment or specify existing segmentsA 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. 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.
When someone performs 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>}}
helps you respond to a person’s activity in your app or website. They’re helpful for behavioral messages like abandoned cart reminders and responding to page views or transactional messages like receipts and confirmations.When a specific date occurs triggers a campaign 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. 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.
When someone submits a form lets you take advantage of form 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.
Create your own trigger from a webhook creates a special, webhook-triggered campaigns based around data rather than people. The purpose of your campaign is to manipulate this data and associate it with people—like 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.
When a person moves in or out of a segment
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.
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. your audience has, events they’ve performed, making this one of our more flexible campaign types.


You can set multiple segments using and or or conditions. Using and means that people need to match all the segments before they enter the campaign; Using or means that a person can be a member of any one segment to trigger your campaign.
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.
Campaign 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:


Changing frequency
Like other trigger settings, you can change your campaign’s frequency settings while your campaign is running.
Re-match to off: After the change, people will only enter the campaign once. Anyone who might have re-entered in the future will no longer do so.
Re-match to fixed interval: Only new people who match your settings will restart. This does not apply to people who have already been through the campaign.
Fixed interval to off: Any people who are scheduled to re-enter this campaign will not do so, but those who are already in the campaign will continue their journey.
Interval to re-match: People who are scheduled to re-start your campaign will not do so. They will need to stop matching the trigger conditions and re-match them to enter again. Those who are already in the campaign will continue their journey.
When a person performs an 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.
Event-triggered 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.
When someone fills out a form on your website
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.


Form-triggered filters
You can apply segment-based filters to determine additional properties a person should (or should not) have before they receive messages. For example, if your campaign is designed to nurture leads, you might filter out people who’ve already paid for your services.
Form-triggered campaign 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.
A date stored on a profile
This option lets you triggers 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. 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.
Nested Date Attributes
Unfortunately, nested date attributes like appointments.follow_up_date
or account_details.renewal_date
can’t trigger campaigns yet. But we’re working on a solution to this problem, and hope to support nested dates as campaign triggers in the near future.
Trigger your campaign from a 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!