Skip to main content

Customer.io

Learn how to integrate your project with Customer.io.

Ilya Krukowski avatar
Written by Ilya Krukowski
Updated yesterday

This app is currently in beta.

Customer.io is a customer engagement and marketing automation platform that allows you to send targeted emails, push notifications, SMS, and in-app messages based on user behavior and data. It’s widely used for lifecycle messaging, segmentation, and automated workflows.

In this guide, we’ll walk you through how to integrate Customer.io with Lokalise, so you can manage your multilingual content efficiently and keep your communications consistent across all languages.

What you can localize with the Customer.io app

The Customer.io app in Lokalise supports three content types:

  • Transactional messages

  • Newsletters

  • Campaign actions (for example, email or push actions inside a campaign)

These are the three sources you’ll see when listing content in the app.

The screenshots below show the flow using a single content type for simplicity, but the steps are identical for all three.


Prerequisites

Create a Lokalise project

If you haven’t already, create a Marketing and support project in Lokalise.

Enter a project name, select the base and target languages, and choose Customer.io from the Content integration dropdown.

Click Create project to complete the setup.

Сheck languages in Customer.io

Before you start translating, make sure that all target languages exist in Customer.io for each message you plan to localize. This applies to newsletters, campaign emails, and transactional messages.

In the Customer.io editor, each language appears as a separate tab at the top of the message (for example: Default, fr, pl).

The Lokalise app can update the content of these language versions, but it cannot create new ones. If a language tab does not exist in Customer.io, any export from Lokalise into that language will fail until you add it manually.

Obtain Customer.io API key and authorize the app

To connect Customer.io with Lokalise, you’ll need a Customer.io API key with permissions to read and update Campaign actions, Newsletters, and Transactional messages. Lokalise will validate the key when you add it during setup.

To obtain the key, go to Account settings > API Credentials and create a new App API key. Copy the key and paste it into the API key field in Lokalise under the Content management tab of your project.

Then click Authorize to complete the connection.


Fetch content from Customer.io

After installing the app, the Ready for import list under the Content management tab may initially be empty. To fetch items from Customer.io, click the Refresh button.

The refresh process runs in the background. Once it’s completed, the Ready for import list will be populated with the latest items from Customer.io, including their basic details (ID, name, type, and created/updated timestamps).

Use the search box to quickly find a specific campaign action, newsletter, or transactional message by name. You can also apply filters to narrow the list by content type or other criteria and focus on the items you want to import.

When the list is ready and optionally filtered, you can proceed to import the selected items into Lokalise.


Import content from Customer.io to Lokalise

To import content from Customer.io into Lokalise, go to the Content management tab in your Lokalise project, open the Ready for import section, and select one or more items. Then click Import from Customer.io.

You’ll see the import dialog:

  • Import languages — select the languages you want to import.

  • Overwrite existing keys (optional) — enable this option if the item was imported before and you want to pull updated source content. When enabled, existing keys will be updated, and their review status may reset to reflect the new changes.

Click Import when you’re ready. The operation runs in the background, and once completed, the imported items will appear under the Imported tab.

Reimport updated content

If an item in Customer.io is updated after you’ve imported it into Lokalise (even if you’ve already exported translations), you can reimport the latest version. To do this, go to Content management and click Refresh to update the timestamps.

Under the Imported tab, select one or more items and click Reimport from Customer.io:

In the dialog, enable Overwrite existing keys if you want to update previously imported strings with the latest source.


Translate imported content in the editor

Once your content has been imported, open the editor to translate it as usual. You can review and update translations, search for specific keys, apply filters, and make any necessary edits.

The integration maintains the link between each key and its original Customer.io source (campaign, newsletter, or transactional message). This ensures you always know what you're translating and where the content will be sent when you export it.


Export content from Lokalise to Customer.io

When your translations are ready to be sent back to Customer.io, go to Content management, open the Imported tab, and select the items you want to export. Then click Export to Customer.io.

Choose the languages you want to export and confirm. Customer.io stores separate language variants for each message, and the connector updates the appropriate variant for every language you select.

The app can only update languages that already exist for that message in Customer.io. If you select a language that does not yet have a corresponding tab in Customer.io, the export for that language will fail. Add the missing language in Customer.io first, then run the export again.

Behind the scenes, the export updates the correct language variant for your transactional messages, newsletters, and campaign actions. This is why you select languages in the export dialog rather than choosing individual templates for each locale.


Troubleshooting and tips

  • Don’t see a specific item under the Content management tab?
    Click Refresh, then check your filters and search query.

  • Not sure about the column names?
    They map to standard Customer.io fields (ID, name, content type, created, updated) to keep the list consistent and predictable.

  • Working with different content types?
    The steps are identical for transactional messages, newsletters, and campaign actions. Just use filters to choose the type you want and continue as usual.


Known limitations and caveats

Languages must already exist in Customer.io

The app can only update languages that are already added to your messages in Customer.io as separate tabs (for example: Default, fr, pl). It does not create new language versions.


If a language tab is missing, add it in Customer.io first, then run the import or export again.

Drag-and-drop emails (Design Studio) are not supported

Customer.io’s visual drag-and-drop editor is not fully supported by their API. Emails created exclusively in Design Studio will not be fetched into Lokalise or updated automatically.


If you need to translate these emails, export them to HTML from Customer.io, translate the HTML, and paste the translated version back into the code-based editor.

Not all channels are covered

The app focuses on email and push content inside campaigns, newsletters, and transactional messages.

Some channels (for example, certain transactional SMS or in-app messages) are not exposed via the current Customer.io API, and therefore will not appear in Lokalise or be updateable through the integration.

Campaign A/B tests with multiple languages

In Customer.io, adding multiple languages to a campaign message automatically disables A/B testing for that message — and this remains disabled even if you later remove extra languages.


If you rely on A/B tests, consider keeping these messages single-language or creating separate language-specific messages or campaigns.

HTML and formatting behavior

You might be interested in setting up custom HTML parsing rules.

Lokalise sends your HTML back to Customer.io mostly as is. It does not attempt to clean up, normalize, or restructure the markup.


If the original message contains complex HTML, mixed editors, or malformed tags, the Customer.io preview may look different after export. Always double-check the message preview in Customer.io once translations have been pushed.

Did this answer your question?