Customer.io Release Notes

Newsletter split testing

Test and improve your newsletter performance with split testing! You can now set up multiple variations for every newsletter, and compare performance metrics for different subject lines, from addresses, layouts, or content.

All your metrics are broken down by variation, and available in a default summary view. This includes opens, clicks (including individual links), and conversions.

And you can even send your test newsletter to a sample percentage of your recipients first, so that you can choose a winner and send that to the rest.

Who clicked on that link?

Thanks to our click tracking feature, you can now segment by users who have clicked on a specific link in an email. Copy and paste the URL from your email template, or use a wildcard (e.g. .\*account/signup* for any link including “account/signup”).

Bug fixes

When first editing a new email or newsletter, our save bar would say you had unsaved changes even before you did anything. This was due to our UI being understandably confused between the difference between missing and blank email body. The code has been fixed to cope with this, so no more unnecessary save bar.

When viewing segments for a person who doesn’t belong to any, we previously showed a blank white page. This looked like something was broken, so we added a message here to explain that the person doesn’t belong to any segments.

Finally, last week’s 5.7.0 release had a couple of bugs with showing A/B test results and using the WYSIWYG editor. As a result, we rolled it back and carefully fixed those up. Pardon our dust!

Contributors

Finding recent segments

Just edited a segment and can’t find it in the list? Us too! To fix that, segments are now sorted so that the most recently edited one is at the top of the page. We’ve also added the date & time that the segment name or conditions were last edited, so you can see when you last made changes.

Bug fix

Some event triggered campaigns with no event data filter were causing crashes when you tried to update the recipient settings. This didn’t affect the operation of the campaign, but meant that changes could not be made. We fixed the bug and all’s well now.

Contributors

Segment builder beta ends soon

We’ve turned on the new segment builder by default. This is now in its final beta phase, which lasts one week. During this time, you can still use the existing segment builder by clicking the “Leave beta” button. For more information, check out our introductory post on the new segment builder.

We’ll be migrating fully to the new, improved version by Friday 11th December. Send us your feedback by dropping an email to win@customer.io.

Email popover: your campaign email details, at a glance

We’ve updated our triggered campaign page to add a new email popover. Hover over an email icon to see more information about that email, right on the same page. And you can click on the preview link to see the full email.

Bugs

If you browsed back through your email logs for a campaign with a completed A/B test, you might have seen that viewing email logs for the losing side of the test would show an error page. We have squashed that bug!

Before, when you searched for emails or drafts and there are no matches, we would show the message: “No sent emails”. This description was misleading (you probably do have some sent emails!) so we’ve clarified it to read: “No sent emails matching your filters”.

Contributors

New segment builder beta

We’ve been working on this for a while, and we’re so excited to release our new segment builder public beta! It’s now easier for you to build segments, and there are a couple of useful new features too. To find out more, check out our detailed announcement post.

Enhancements

Our test email function now gives you visibility into failures. Previously some email rendering failures would happen silently and result in no email being sent. These are now reported in the subject and body of the test email itself when it is delivered. Note: some previously failed test emails may be delivered retroactively due to the nature of retries in our system.

The create and edit environment pages have been refreshed to be easier to use, up to date with the rest of the application, and to improve error checking.

Exports are a popular feature with humans as well as robots, so we’ve added human-readable timestamps to make it easier for the fleshy ones to read and understand the data.

We’ve also been refreshing tiny pieces of UI all through the application, making everything more consistent and up to date.

Bug squashing

Our activity logs are useful for tracking all sorts of events, including when an email is drafted for a customer. We found a bug where if you sent or deleted the draft, the activity logs would display a “Drafted email” row but with a blank name. This has been fixed to read “Draft deleted”, so that you know what happened.

If an email fails to send due to some missing Liquid data or another error, we give you the option of adding data for the customer, or editing the email. Recently those features stopped working, so we’ve fixed that, added comprehensive test coverage, and tidied up the code behind the scenes.

Contributors

User Interface Polish

We made it easier to set a delivery window for your emails. Want your messages to be sent only on weekdays during business hours, US Eastern time? No problem!

Our email layouts can contain Liquid tags. Until now, if you made a mistake when typing your Liquid logic, you couldn’t save your layout, but the app didn’t say why. We’ve now added clearer error handling so that you can find the mistake and fix it.

We updated our pagination controls to make it easier for you to go to the start or end of a list of drafts, emails, or campaigns. While we were at it, we made a couple of other visual improvements:

We’ve polished up the UI for editing the name of campaigns, newsletters, emails, and segments. It’s now consistent across the app, and it copes better with any network or validation errors that may occur.

The auto refresh button on email and activity logs wasn’t working reliably if you left the page open for several hours. Tracked that down and fixed it, and also replaced the button itself with a snazzy new switch:

Link tracking security

We’re continuing to improve the robustness and security of our link tracking. This week we improved the link tracking redirector to prevent other people from creating working links that looked like they were from Customer.io. We also now ensure that invalid or JavaScript links are not tracked.

Bug fixes

We caught and fixed a few bugs this week:

Links from a layout page to its associated campaign emails were broken. Fixed that.

If you clicked an email or draft from the activity logs stream, the app would sometimes display a blank page. Fixed that.

The person attribute editor would let you leave the page without saving your changes. The app now lets you know that you should either discard the edits, or save them.

Contributors

Communication and Confidence

Before, when the app failed to load, you would get stuck on a “Loading” screen that didn’t tell you anything else. This wasn’t very helpful, so Ami now lets you know that something is wrong and that we’re investigating. We added quick links to get in touch with support and to check our status page for any updates.

Of course, we hope that you never have to see this screen, so here’s a peek at what it looks like:

You might have noticed that Ami bedazzles you with her virtuosic sign-spinning skills while you wait a few seconds for the rest of the app to load:

You can now be more confident when sending newsletters. When you click send, we’ll refresh and display the latest key information — most importantly recipient and filter counts. This helps prevent mistakes like sending a newsletter to the wrong people (which could happen if you’d changed the recipients settings in another browser tab).

Other small improvements

We’re continuing to improve our dropdowns throughout the app. In this release, we updated the newsletter scheduling interface to use a native select with some awesome styling on top of it. This helps render this interface faster for you while also providing keyboard support and better accessibility.

We’ve also made several invisible changes to our event capturing servers, improving stability and increasing monitoring. This ensures that everything runs even more smoothly in this critical part of the application.

Contributors

Faster Event Processing

When it comes to event-processing, we feel the need for speed. We’ve been working on the efficiency of our event tracking servers and have boosted the capacity for receiving events significantly. The new event processing is almost ten times faster, which will reduce system latency especially at peak hours when we’re receiving lots of events.

Bug Fixes

If you deleted an email in a series, all following emails would have their delays moved forward to fill the gap. This was more confusing than helpful. Now when you delete one email, the timing of the other emails in your campaign series won’t change at all.

Contributors

View receipts in your account settings

You can view invoices and payment history right in the account settings of the app. Previously we would only send receipts via email to the person who registered an account. Now you can simply head to the “Billing History” of your Account Settings to access paid invoices.

You’ll see a table with each row summarizing the main points of each invoice, plus a link to see a more detailed receipt that includes the invoice number, subscription period, and a breakdown of each invoice line item. You can also save this page as a PDF.

Bug Fixes

We fixed a minor issue where it was possible to set a negative delay on emails. Since we haven’t cracked backwards time travel (and setting a negative delay didn’t do anything), we simply made sure that you can’t schedule an email with a negative time delay in the first place.

We performed some header cleanup to fix the visual alignment of header items and properly link the Customer.io logo back to the environment dashboard.

We patched up a bug where JSON attributes wouldn’t expand properly on a person’s overview or attribute pages. This was due to a deprecation in the JavaScript framework that we used, so we made sure to update that functionality to allow you to expand those lovely JSON attributes.

Contributors

Test Event-Triggered Emails With Event Data

You can now send a test email with merged-in event data from the last user who triggered the event.

Improved Error Handling

Previously, any errors in your “From:” address would result in the display of a cryptic Ruby error. Now it says something meaningful to help you fix the problem.

Sending certain types of data to our public API servers was causing the connection to be closed with no response. We handle that situation better now, responding properly with a 400 error and explaining what to do to prevent errors in the future.

We caught a bug where trying to save an email without any content would fail. Even worse, we wouldn’t warn you about what was going on. We patched our API to return this error, so you’ll see what the problem is if you try to save an email that’s invalid.

Scalability and Reliability

Bug Fixes

You can edit existing attributes on a person’s profile page. Previously, if you edited the name or value, the save bar wouldn’t show up. This was our mistake with the new implementation of the save bar, but we’ve fixed it up!

The button styles found on the “Create a new campaign” page were briefly broken. They rendered white instead of green, making the text difficult to read. We fixed the visual styles of the buttons and did a code sweep in the app to make sure other buttons weren’t affected.

We had a nasty bug that allowed you to send a newsletter with no content. This was a bad regression on our part. We patched the bug and added more tests to ensure this doesn’t happen again.

A bug was fixed that prevented processing data sent to our API when the customer_id contained an escaped slash character.

Contributors

Help Form Update

If you use an ad blocker, or some JavaScript failed to load, our feedback form would quietly fail to send us your messages. This meant we couldn’t help you with your questions because we didn’t receive them! We’ve fixed this. (If you sent us a support request through the form and didn’t receive a reply within 24 hours, please send us another message!)

Reliability

We’ve been improving our search infrastructure, building a better performing and more reliable way of filtering and discovering users in your account. This has been rolling out over the past week, and we’re seeing some big improvements already.

There have been a few bumps as we update the search indexes to the newer faster versions, and we’re continuing to work on this. Please pardon our dust!

In our database cluster, two nodes have recently begun to fail regularly with hardware issues, which caused brief outages over the past few weeks. We’ve provisioned two new machines to take their place, and haven’t experienced any problems since.

When we’re having trouble with our indexing engine, we want you to know what’s going on immediately. A few weeks ago, we added an automatic degraded operation notice in the people listing page. We now include the notice on the newsletter recipients page too, since the UI would not display the correct recipients.

If you see this message and want to get the data immediately to double-check that your recipient segments are correct — the best thing to do is to generate an export. Export data is always up to date, though it can take a couple minutes to build.

Enhancements

Previously we had multiple ways to save across the application, which was a super bad idea! We have now synced this up across the app, with a single save bar at the bottom of the screen. When you make changes (to a campaign, newsletter, etc…) this new bar will pop up to let you save your work. Hopefully you’ll find this a lot easier than before!

Until now, our delivery metrics export files contained only numeric IDs. This was not very useful, unless you really enjoy digging through your account and translating IDs into readable information. We’ve now added the names of campaigns and emails to these exports, so they make more sense to regular humans.

Bug fixes

For drafts or email logs, changing the “page” parameter in the URL bar would not work if you had other filters applied (e.g. template, campaign). This made it difficult to skip through lots of pages of emails by editing the URL. Now fixed.

Due to what appears to be sorcery within our Ruby code, some wrong events were being passed to deliveries (where the event data did not match the event ID on the delivery). Event data caching is the suspected culprit. We now fetch the event directly from our main data store, and double-check that the ID matches.

A bug with the draft deletion job caused deleted drafts not to be removed properly from the UI. This has been fixed.

When clicking on an unsubscribe link from a test email, you used to be directed to whatis.customer.io — which wasn’t very helpful and made it look like the link was broken. After this update, you’ll be directed to a page that will show an example of what a user would see when clicking on the unsubscribe link.

There was a bug in segment triggered campaigns where the settings page wouldn’t show you how many triggers were applied to the campaign. We fixed it up so you should now see the total number of triggers applied to your campaign on the settings page.

We’ve removed the ability to filter drafts by email address. The feature was not working consistently, and we don’t want to confuse you when filtering your results. We’re going to be re-evaluating this feature in the future.