Check out the latest features and fixes for the Customer.io platform. This page covers releases beginning in 2021. Go to our blog to see a history of releases before 2021!
We now support objects—non-people data that you can relate to people, like accounts that people belong to, flights they’ve booked, online courses they’ve enrolled in, and so on. This release is only the beginning. Support in this release is limited to a single object type and they’re limited to Newsletters, but we’re actively working on this feature to add support for more objects, campaigns, and object-to-object relationships.
We’ve added a subscription center feature that can help you manage your audience’s subscription preferences without having to manage a complicated set of preferences on your own. This feature makes it easy to set up your subscription topics, apply those topics to campaigns or broadcasts, and let your audience decide what topics they want to subscribe to.
People login and out of mobile apps all the time, causing device tokens for mobile push services to change. Rather than letting those tokens stack up in your workspace, we’ve started automatically removing ‘devices’ when they’re no longer able to receive push notifications—beginning January 31, 2023.
This helps you maintain a better understanding of your audience’s devices, so you know which devices are relevant and can get a real device count—without having to clean up old devices yourself.Go to the docs
With our original Track API, you’re limited to a single request per person, and a host of different endpoints. Today we’re releasing our v2 track API, which lets you send groups of requests for different people, and different kinds of actions, to our
/v2/batch/ endpoint. Now you don’t have to maintain different calls for different actions; you can just modify your payload to fit different request cases and send requests in batches.
In our quest to support your mobile apps, no matter what platform you build them on, we’ve released an alpha version of our Flutter SDK! While this is an alpha, the SDK contains all of the features of our other SDKs, including support for rich push and in-app messages. The alpha label simply means that we’ve been limited to internal testing, and we need your help to make sure that it performs the way you expect it to.
We’re committed to releasing, maintaining, and supporting Flutter. Try out our new SDK and let us know what you think. Your feedback helps us understand your needs, so that we build our SDK(s) and associated features to fit your needs.Go to the docs
We’ve made page rules for in-app messages easier to use! Before this update, you needed to set up a complicated workaround to limit an in-app message to to your website or mobile app. Now, when you select your web, iOS, and/or Android channels, we’ll automatically limit messages to the platforms you select. If you don’t select any platforms, your message will appear on whichever platform the person visits first.Go to the docs
A holdout test is a type of A/B Test that lets test whether a message is useful or not. In a holdout test, some members of your audience receive a message and some don’t—but we still calculate conversions for the message, helping you see whether your message affects your conversion rate.
In the past, we had a complicated recipe to perform holdout tests, but it involved sending real messages to a black hole address, which wasn’t ideal. Now you can set up holdout tests with a simple checkbox!Go to the docs
In the past, you needed to hunt down the ID of a transactional message before you could use it and actually send messages to your audience. Now you can set a friendly, case-insensitive Trigger Name, and use it to send messages. The Trigger Name makes it easier to find the message you want to send. It can also make your integration more human-readable if you use triggers that represent the kinds of messages you send—like
password reset or
In the past, our database sync integrations ran on an interval plus the time it took to complete an import from your database. So if a minute to sync your database and you set your sync interval to an hour, you effectively had a sync interval of 61 minutes, causing your expected sync interval to drift over time.
Now, we attempt to perform sync operations on your exact interval without regard to the time it takes to complete an import operation; if we’re still importing from your database on a sync interval, we’ll skip it (showing a
skipped status in our UI), and try again at the next interval. This adds predictability to your database sync integrations, so you’ll always know when you can expect to see your data in Customer.io.
We’ve extended multi-language support to our transactional API, so you can easily send transactional messages to your audience in their preferred languages. When you create a transactional message, you can add languages—versions of your email that are localized for different members of your audience. When you send your message, we’ll match your audience’s language attribute to the languages in your message, and people will receive the localized message that best represents them.Go to the docs
You no longer need to upload the same image multiple times to reuse it across messages, nor do you need to host your own images! With our new Asset Library, you can upload images and reuse them across different messages.Go to the docs
When you send an in-app message, you can set a page rule determining the page a person needs to visit to see your message. Now you can use the
* wildcard in page rules, so you can load a message containing a word or under a set path. This makes it easier to control where your in-app messages appear, so your audience receives your message on any relevant screens or pages.
With this feature, you can use a path beginning with a set of characters (
begin*), ending with a set of characters (
*end), or in a path (
In-app messages support an expiry value, so that you only show messages to your audience when they’re relevant. But, in the past, we only allowed you to set expiration values in days. Now you can set messages to expire in hours or minutes, helping you send highly relevant, time-sensitive messages to your audience. It can also make it easier to test your SDK integrations with us!
As a part of this release, we’ve also changed the default expiration period from 365 days to 30 days.Go to the docs
Our first official release of our React Native SDK is now available. With our React Native SDK, you can take advantage of Customer.io in your mobile apps without having to maintain separate native platforms for iOS and Android. Implement our SDK in your React Native app to identify your mobile users, send rich push notifications, and send in-app messages—all without writing your own integration from scratch.Go to the docs
When you set up a campaign conversion, you can now compare your conversion event to your trigger event. This is a great way to determine the success of your campaigns based on related events.
For example, imagine that you start a campaign when someone begins an educational course; maybe your event is called
course_started, and it has a
course_id that you use to identify different courses you offer. Your campaign’s goal is to help someone finish the exercise, so you need to look for an event called
course_completed with the same
course_id. That kind of comparison is now possible, and you can use it to your advantage to pinpoint highly-specific conversion criteria!
We’ve updated our data warehouse integrations to version 4, including a new Delivery Content schema containing message contents—so you can maintain a history of the text and images you sent your audience. When you upgrade to the latest version, you’ll be able to export message contents and confirm the bodies and subjects of messages that were rendered and sent to individual users.
See the Delivery Content schema for information about the new table in v4. Go to the documentation link below for help updating to v4.
Upgrade to v4 to use subjects and outputs
We’ve made some minor changes to subjects and outputs a part of our v4 release. If you’re using a previous schema version, we disabled your subjects and outputs on October 31st, 2022. You need to upgrade to schema version 4, to continue syncing outputs and subjects data.
In the past, if you wanted to reuse a newsletter or broadcast in another workspace, you had to create it from scratch. Now you don’t need to do all that work, you can simply copy your newsletters and broadcasts to other workspaces!Go to the docs
When you go to create a campaign, you’ll notice some changes to our campaign Trigger page. We’ve redesigned this step in the campaign setup process to make it easier to understand how each trigger works and when you should use them.Go to the docs
Have you ever found people with the same email address or phone number in your workspace, and accidentally sent duplicate notifications? Now you can export a list of people who have the same attribute, making it easy to find and deduplicate people or attributes in your workspace.
This feature also adds the ability to export a list of devices. You might export devices to clean up bounced or suppressed devices.Go to the docs
We’re updating our push editor, so you can send rich push notifications containing images, links, and even custom key-value pairs without writing complicated custom JSON payloads. With this update, push previews also update to include images, helping you visualize your push notifications.
We’re rolling the new rich push editor out to accounts over the next week. Contact firstname.lastname@example.org if you want to start using it today.Go to the docs
We recently updated our Wait Until action to support different conditions—including waiting until a person performed an event. Now you can set event properties in wait conditions, helping you wait until a person performs an event matching very specific parameters.
For example, if people enter your campaign when they create an appointment, you might send them a reminder before their appointment. You can use an event parameter-based wait condition to make sure that someone hasn’t cancelled their appointment before you send the reminder!Go to the docs
In a previous release, we exposed the ability to use JSON dot notation to access nested attributes and event properties in segments, filters, etc. But what if you’re not a developer or familiar with JSON? This update adds some simple options that can help folks traverse nested attributes without needing a deep understanding of JSON and related terms!
You can now install and use a React Native version of our SDKs—including rich push and in-app features. We’re confident in the core features and we don’t expect to introduce breaking changes before we officially release it. But, we have a bit more work to do, a few questions to answer, and we need your help to make sure that we build the SDK to fit your needs. Start using it today and send us your feedback!Go to the docs
This release makes it easier to add people to your workspace without making
identify calls for each individual person. Now you can use our App API’s new
/v1/imports endpoints to import a CSV where each row represents a person, letting you add and update a large number of people with a single operation.
We’ve added a preview function for messages in your campaign and broadcast workflows. You can hover over a message action in your workflow to see a preview, so you can always find the right message without clicking into message after message to find the one you really want.
A few weeks ago, we enabled Parcel’s code editor for email as an experimental feature. It’s been so successful that we’ve enabled it for everybody. When you write emails using the code editor, you can now preview your output, take advantage of focus and inspect modes, test your message for responsiveness, and more!Go to the docs
Now that Customer.io has acquired the best coding platform for email, we’ve started integrating it into our platform—beginning with our email code editor. Enable the Parcel Editor experimental feature to take advantage of syntax-aware autocomplete, responsive previews, and focus mode that helps you zero-in on the elements you want to edit.
A standard SMS text message is limited to 160 characters, but a picture is worth a thousand words. Now you can send images in your Twilio SMS messages to increase engagement with your mobile audiences in the United States and Canada.
When you set up an SMS message, you can add the URL of a JPEG, PNG, and GIF image. You can send images up to 1.5MB to people with phone numbers in the United States and Canada. In general, we recommend that you limit images to 1MB or less, so that everybody in your audience can see them regardless of their connection speed.Go to the docs
Earlier this month, we added the ability to track conversions for Campaigns and Broadcasts when someone in your audience performs an event. Now you can do the same with Newsletters. Setting an event-based goal for your newsletters can help you accurately determine how effective your message is based on your audience’s behaviors after they receive your message. You can track conversions over time to improve your messaging strategy.Go to the docs
In the past, you weren’t able to create segments or use complex JSON attributes (arrays, nested objects, and arrays of objects) in filters, branch conditions, etc. This forced you to flatten your attributes and events to fit the sorts of segments you wanted to create, which could take a lot of effort and planning. Now, you can use complex JSON in conditions, making it easier to use your data and segment your audience without reshaping your data.
Now you can upload events your audience performed via CSV. Whether you’re just getting started with Customer.io, or just capturing new types of events on your website or in your app, this feature can help you backfill events and segment or send messages to your audience based on events they’ve already performed.Go to the docs
Now you can export your workflow as a PNG. This makes it easy to share your automations with people outside of Customer.io.
Click in the upper right of the workflow to export your workflow as an image.
We’ve updated our Wait until… campaign action, so you can hold people until they gain an attribute, perform an event, or wait until a timestamp in the event that triggers your campaign. For example, if you send an event when a person signs up for an appointment, you can use a timestamp in the message to hold a person in your campaign until it’s time to send them follow-up reminders!Go to the docs
To localize campaigns or broadcasts in the past, you needed to use liquid or complicate your workflow with multi-split branches. Now, you can use your audience’s language attribute to produce multi-language messages in a simple, in-line workflow.
When you write messages in your campaign, you’ll set up a default message and click Add language to set up localizations of your message. When people enter your campaign, they’ll receive messages matching their language attribute. People who don’t match a language in your newsletter receive the default message.
Localized items in your workflow show the icon.
This makes it easier to localize messages in your campaigns, and generates unified metrics from localized messages, making it easier for you to tell how your message perform with your audience.Go to the docs
We’ve updated our iOS SDK to add support for device attributes—properties that you can use in segments, filters, etc. The SDK automatically gathers a series of device attributes, helping you automatically capture information about the operating system version, your app version, whether a device has push notifications enabled, etc. You can also set your own custom attributes, helping you track custom properties that are important to you and your push audience.Go to the docs
This release adds a processing queue to the SDK and support for device attributes.
- The Processing Queue automatically queues and batches requests, saving your audience’s battery life and automatically handling errors for you.
- The SDK now automatically captures a set of Device Attributes and grants you the ability to set your own, custom attributes for each device you register with Customer.io. You can use these properties in 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., helping you target members of your audience.
If you use a previous version of our SDK, this release introduces breaking changes. See the our migration documentation for help updating your integration.Go to the docs
When you use Customer.io as a Segment Source, you’re no longer limited to just email events. Now you can pipe event information for all of your message channels a Segment Destination, where you can aggregate customer data. To enable other channels, you just need to remove your integration and then add it again.Go to the docs
You can now click the user icon in the upper right corner and go to Experimental Features to try out new features before they’re released. This gives you access to some of the things we’re working on and presents you the opportunity to tell us how you feel about them. Tell us whether you like a feature or not and what might improve it, so that we build the right features for you!Go to the docs
Now you can sync metrics, deliveries, people data, and more to your Microsoft Azure Blob Storage bucket. We sync data up to every 15 minutes to help you keep up with your Customer.io data. Once in your Azure bucket, you can ingest data to your data warehouse and analyze your Customer.io data.Go to the docs
If you wanted to see how your campaigns and messages performed, you used to be limited to custom date ranges within the past 120 days. Now, you can check metrics using any custom date range in the past 12 months, making it easy to see how your campaigns and messages performed over the specific time periods that you care about.Go to the docs
Now you can capture HTML form submissions using your forms’
Like other form integrations, this feature also lets you trigger campaigns when people fill out your form, so you can automatically respond to your audience with information relevant to the forms they submit.Go to the docs
Our new batch update action makes it easy to handle one-to-many relationships, like an account with multiple users or a product update that a group of people are interested in. With a batch update, you can associate a single incoming piece of data with, and even send messages to, a group of people.