In this article
So you're moving off Braze. Maybe the renewal quote made you wince, or maybe every new event means a ticket to engineering. Then there's the news that Salesforce plans to acquire Braze, which has plenty of teams wondering what a change in ownership means for their pricing, roadmap, and support. Whatever the reason, you've probably already pictured the worst part, which is rebuilding years of Canvases, segments, and emails while your program keeps running.
Customer.io is built to make this move simple. You bring over your data, your messages, and your apps in clear steps, and your AI Agent in Customer.io, plus our native integrations, make migrating easier than you’d expect.
TLDR
- In an ideal world, you migrate in about eight weeks: apps and mobile channels start in week 1 and run longest, your data lands in weeks 3 to 4, your first program goes live in weeks 4 to 5, and you cut over in weeks 7 to 8.
- Start the long-lead items first: an app release with the Customer.io SDK, a few weeks of email domain warm-up, and, if you use them, WhatsApp template approval, SMS sender setup, and LINE account connection.
- Braze doesn't export all users at once, so you create segments of up to 500,000 users each and carry opt-outs across every channel before your first send. Most Liquid carries over with small edits that can be automated with your AI Agent in Customer.io.
- Enterprise teams should settle the data center region, workspace structure, and permissions before importing anything, and B2B teams can model companies and accounts as objects and relationships.
- Your AI Agent in Customer.io can rebuild a Canvas from a screenshot, turn Braze HTML into a Customer.io email, build segments from a prompt, and set up SDKs through a coding agent, while reverse ETL, native Salesforce and HubSpot syncs, and the Braze destination keep your data in step.
What does a switch from Braze involve?
A switch from Braze involves three parts: your data, your messages, and your apps. You can move your data and messages in any order. Your apps take the longest, because your users have to update to a version of your app that includes the Customer.io SDK before you can send them push and in-app messages from Customer.io.
That timing shapes the whole project. Most teams keep sending from Braze while they build in Customer.io, then move each program over when it's ready. Two other threads run alongside the app work. Email needs a few weeks of warm-up on a new sending domain, and the mobile channels you use beyond push, such as SMS, WhatsApp, and LINE, each have a setup of their own. Larger organizations often run the whole sequence once per brand, region, or business unit.
An eight week migration schedule
In an ideal world, your migration takes about eight weeks, with three tracks running side by side: your apps and mobile channels, your data and messages, and your email sending. Treat it as a best case, because your app release cycle, your contract end date, and the number of programs you keep will all move the weeks, and a longer calendar still follows the same order. The pacing borrows from the gradual rollout in our buyer's guide for CEPs, where you move one use case at a time and keep your old tools running until each one has transitioned.

Start from your Braze contract end date and count backward to set the week 8 cutover. If your date is tighter than that, protect your app release and the email warm-up first. Larger organizations usually run the schedule once per brand, region, or business unit, beginning with the simplest one.
Step 1: Plan the switch and set up your account
When: weeks 1 to 2.
Start by taking inventory of what you run today, creating a workspace, and deciding how Customer.io will identify your people.
Before you build anything, list every Canvas, campaign, segment, Content Block, and integration in your Braze account, along with the channels each one uses, then sort each item into keep, migrate with improvements, or retire. Dormant Canvases and duplicate segments cost you nothing to leave behind and a good chunk of time to rebuild. Rate each program you're keeping from one to five on the value it delivers and from one to five on the effort it takes to move, and start with the high-value, low-effort ones. Our messaging program audit walks through the whole process if you want a template for it.
Then take care of three setup items:
- Create a workspace. If you don't have one yet, see create your workspace.
- Choose your identifiers. Braze identifies users by an
external_id, and many accounts also use email addresses. In Customer.io, you'll use the same value as each person'sid, so the profiles you import match the people your apps and backend identify later. If some of your Braze users only have an email address, turn on email as an identifier in your workspace settings. - Get access to your Braze data. You need permission to export users from the Braze dashboard, or a Braze REST API key with read access to users and segments.
What enterprise teams settle up front
Larger organizations have a few decisions that are easiest to make before any data moves.
- Data center region. You choose between the US and EU data centers when you create your account, and all of your workspaces live in that region. Customer.io doesn't support data center migrations except in extenuating circumstances, so confirm your residency requirements with your security team first.
- Workspace structure. Decide whether each brand, region, or business unit gets its own workspace, and set up a staging workspace for testing before anything touches production.
- Access. SSO and two-factor authentication come with every plan, and custom role-based permissions arrive with Premium and Enterprise, so map your marketers, engineers, and approvers to roles now.
- Account model. If you sell to companies, note how Braze stores company or account details today. In Customer.io, companies and accounts can live as objects related to people, which step 4 covers.
- Reviews. Security and legal reviews run on their own calendars, so start them while you plan. Our enterprise page lists the compliance certifications your reviewers will ask about.
Finally, work backward from the date your Braze contract ends. The app release in step 3 and the domain warm-up in step 6 have the longest lead times, and any WhatsApp template approvals add another, so put those dates on the calendar first and fit everything else around them.
Step 2: Map Braze concepts to Customer.io
When: weeks 1 to 2, alongside step 1.
Most Braze features have a direct equivalent in Customer.io, though some go by different names:
In Braze | In Customer.io | What to know |
|---|---|---|
Canvas | Automation | Build it in the workflow builder |
Scheduled or one-time campaign | Broadcast | A broadcast sends one time to a segment you choose |
API-triggered campaign | API-triggered broadcast | Your backend triggers the send |
Content block | Snippet | Snippets hold reusable content for any message |
Segment | Segment | Data-driven segments update as people's data changes |
| Person | Use the same value so profiles line up |
Custom attributes and events | Attributes and events | Names stay as you send them |
Subscription groups | Subscription preferences | |
Company or account details on user profiles | Objects and relationships | Store each account once and relate people to it |
Step 3: Set up your apps and mobile channels
When: starts in week 1, wraps up by week 4, and your users keep updating through week 8.
Replace the Braze SDK with the Customer.io SDK in every app, release the new version, and connect SMS, WhatsApp, and LINE while the update rolls out, because your users need time to update before you can send them push and in-app messages from Customer.io, and some channels have approval steps that run on someone else's schedule.
Swap the SDK in your apps
- Add your apps and push credentials to your workspace. You'll need your APNs
.p8key for iOS and your Firebase.jsonkey for Android. Use the same Firebase project that your app uses today. - Swap the SDK. Remove the Braze SDK and add ours in each app. The mobile SDK docs cover iOS, Android, React Native, Expo, and Flutter.
- Send the same identify and event calls you send to Braze today. That keeps your profiles and segments current. If your backend sends data to the Braze REST API, point those calls at the Track API or the Pipelines API instead.
- Release the new version and encourage people to update.
When people open the updated app, the Customer.io (http://Customer.io) SDK registers their device, and you can send them push notifications from Customer.io. To track how many of your users have updated, follow the steps in migrate push from another provider.
If your app will carry both SDKs for a release or two, the React Native, Expo, and Flutter docs each include a page on handling multiple push providers, such as this one for React Native. For your website, the JavaScript docs have a page on migrating from another service.
Your engineers can also hand much of this work to a coding agent. When you add an integration in Customer.io, the Set up with an agent tab gives you a prompt for Claude Code, Cursor, Codex, or GitHub Copilot that installs the SDK, identifies people, tracks screen views, sends a test event, and checks that the event arrived. You'll find the details in the AI Agent section below.
If you run several apps or brands, add each app and its push credentials to the workspace that owns it, and give every app its own release and rollout plan. Release cycles vary from team to team, so plan your cutover around the slowest one.
Connect SMS, WhatsApp, and LINE
If you send mobile messages beyond push, set these channels up while the app update rolls out. Each has setup steps that depend on other parties, so an early start keeps them off your critical path.
- SMS. Customer.io sends SMS through Twilio, so you need a Twilio account and sender numbers, such as a phone number, short code, or alphanumeric ID. Your senders sync from Twilio into Customer.io. If you're based in the US or Canada and only send there, Customer.io can manage SMS for you. Either way, registering your sender numbers is part of meeting regulatory requirements, so begin early.
- WhatsApp. You can connect through your Facebook Business Account or through Twilio. You need a WhatsApp-approved phone number, which is separate from your SMS numbers, and your messages use templates that WhatsApp approves. Twilio's approval process may take a few weeks, and Customer.io enables WhatsApp for your account and workspace, so ask your team to switch it on early.
- LINE. Connect a LINE Official Account with the Messaging API enabled by pasting your channel access token into the LINE integration, then point your LINE webhook at Customer.io so delivery metrics and follow and unfollow events flow in. When someone follows your account, Customer.io creates a profile with their LINE ID.
Step 4: Move your audience, preferences, and suppressions
When: weeks 3 to 4.
Export your users from Braze and import them into Customer.io, along with their unsubscribes, subscription preferences, the addresses that bounced or marked your emails as spam, and the opt-outs for any SMS, WhatsApp, or LINE audiences you message. You can do this while the app work in step 3 is still underway.
Pick the fastest path for each data source
Your integrations decide how much of this step you do by hand. Match each source to its shortest route, and mix methods freely.
Where your data comes from | The fastest path into Customer.io |
|---|---|
Braze exports of people and attributes | |
Backend calls to the Braze REST API | The Track API or the Pipelines API |
Your website | The JavaScript snippet, with a guide to migrating from another service |
Your mobile apps | |
A data warehouse | Reverse ETL from sources like Snowflake and BigQuery |
Salesforce or HubSpot | Native two-way syncs, with Salesforce on Premium and Enterprise plans |
Keeping Braze in step during the overlap |
Import in priority order, starting with people and their attributes and events, and keep both platforms open so you can check each import against Braze and settle any differences. Customer.io merges data to a single profile by email or ID, and you don't have to define attributes before you send them.
Export from Braze. Braze doesn't let you export all of your users directly, so you create a segment and export that segment. Exports are limited to 500,000 users at a time, which means a large audience needs several segments. Leave device tokens out of the export, because the Customer.io SDK registers devices when people open the updated app, and that registration is how you'll count who has updated.
Reshape the file. Braze exports attributes and column titles with capital letters. If you store attributes in another format, such as snake_case, rename the columns to match how you want them in Customer.io. Add a column like from_braze too, so you can find the people you migrated later.
Import into Customer.io. You can import a CSV or send people through the Pipelines API. For a CSV import, set it up like this:
- Choose how to identify people. Map the column holding your
external_idtoid, or useemailif some people have no ID. - Set Do you want to add new people? and Do you want to update existing people? to Yes.
- Set What should we do with empty values? to Ignore them.
- Map each column to an attribute, review the errors and warnings, and complete the import.
Bring over consent and suppressions. Moving only your active audience risks messaging people who opted out. Import your email unsubscribes and bounced or spam-complaint addresses, and recreate your subscription groups using subscription preferences. Our docs on managing suppressions show how suppressions work in Customer.io.
Prepare phone numbers and LINE IDs. SMS and WhatsApp need phone numbers in E.164 format, which means a plus sign, the country code, and then the number, so clean that column during the export. Customer.io captures SMS opt-outs from Twilio keywords like STOP, and if you've used Twilio before, you can ask Customer.io about migrating your existing opt-outs. Export your SMS and WhatsApp opt-out status from Braze as well, and share it with your Customer.io team so those opt-outs are in place before your first text.
LINE IDs behave differently from other identifiers. A LINE ID belongs to a LINE provider, which represents your business or one of its subsidiaries, and people who follow your account get a profile holding only that ID. Once they identify themselves on your website or app, Customer.io links the LINE ID to their existing profile, so send new followers an invitation to log in or sign up. If you already have followers, your LINE account must be Verified or Premium for your Customer.io account manager to backfill them.
Model your accounts if you sell to companies. Objects and relationships let you store each company or account once and relate people to it, with relationship attributes such as role, so you can segment and message based on changes to an account. Objects count toward billing, so review unused ones monthly. If Salesforce holds your account data, the Salesforce integration is available on Premium and Enterprise plans and syncs contacts, leads, accounts, and the relationships between them, identifying leads and contacts by email so each person resolves to one profile.
Backfill history you still need. If your segments depend on past events, see backfill historical data. If your customer data lives in a warehouse, reverse ETL can sync it into Customer.io on a schedule.
Step 5: Rebuild your messages and automations
When: weeks 4 to 7, starting with one contained program.
Rebuild in priority order, starting with the programs you marked as keep in step 1, and paste your Braze email HTML into new Customer.io emails to save yourself a round of design work.
Braze and Customer.io both use Liquid, so most of your personalization carries over with small changes to variable names. Paste the HTML of a Braze email into a new email in Customer.io and update its Liquid as you go.
Personalization | In Braze | In Customer.io |
|---|---|---|
First name |
|
|
Custom attribute |
|
|
Reusable Content Blocks become snippets, and you can build and edit your emails in Design Studio with either the visual editor or the code editor.
Here's how a rebuild looks in practice. Say your Braze welcome Canvas enters people when they sign up, waits a day, sends an email, and follows with a push notification to anyone who hasn't opened your app. In Customer.io, that becomes an automation triggered by your sign-up event. You add a delay, an email, a branch that checks for app activity, and a push notification on the branch. Our recipe book has ready-made examples for welcome, onboarding, and cart abandonment programs you can borrow from.
Test each message before it goes live. Send test messages to yourself and your team, check that your Liquid renders with real profile data, confirm links track, and make sure unsubscribe and preference links work. Then turn on the automation or send the broadcast, and keep its Braze twin running until you've confirmed the Customer.io version behaves the way you expect.
Rebuild your SMS, WhatsApp, and LINE messages
Once your channels are connected, rebuild each mobile program the same way as your email programs, inside the automation that owns it. Three details differ by channel.
- SMS and WhatsApp links. You can shorten and track the links in these messages, and a custom short link domain is shared across both channels. One custom domain comes with any plan, and Premium plans and above allow up to 10.
- WhatsApp content. You don't write WhatsApp message content directly in Customer.io. Messages come from templates that you create in WhatsApp or through Twilio and then populate in Customer.io, so rebuild each Braze WhatsApp message as a template and submit it for approval early.
- LINE sends. Once LINE is connected, you send LINE messages as part of your automations alongside your other channels.
Keep enterprise governance in the workflow
Build and test in your staging workspace, then copy approved automations into production. With custom roles on Premium and Enterprise plans, you can separate the people who draft messages from the people who approve and send them.
Use the rebuild to improve your program
A rebuild gives you a natural moment to improve what you migrate, so keep a running list of ideas while you work through your tiers.
- A group of single-channel Canvases can become one automation that branches by channel.
- Account details stored on user profiles can move into custom objects, so B2B messages respond to changes in the account.
- Recurring chores, like deliverability checks and segment audits, can run as Routines.
Step 6: Set up and warm your sending domain
When: starts in week 2 and runs through week 6.
Authenticate your sending domain, choose shared or dedicated IP addresses, and warm up the domain by sending to your most engaged people first, because mailbox providers like Gmail judge a new sending setup on its own history, even when you send the same messages to the same people.
Start this step early and plan it backward from the date your Braze contract ends. Warming takes a few weeks, and you'll want your largest sends running from Customer.io before Braze stops sending for you. If a busy season like Black Friday falls near your cutoff, finish warming before it starts.
Here's the sequence:
- Authenticate your sending domain, so mailbox providers can verify that your messages come from you.
- Decide between shared and dedicated IP addresses.
- Follow the domain warming guidance: send to your most engaged people first, then raise your volume over a few weeks.
- Connect Google Postmaster Tools so you can watch your reputation while volume climbs.
Our docs on transitioning to Customer.io as a sender cover the rest of the deliverability picture. As you warm up, move the programs in your keep tier from step 1 over in order of engagement, so your first volume goes to the people most likely to open and click.
If you send for several brands, each sending domain builds its own history, so give every domain its own authentication and warm-up plan. High-volume senders should also weigh shared against dedicated IP addresses early, since that choice affects how you plan the warm-up.
Step 7: Run both platforms, then turn off Braze
When: weeks 7 to 8, with Braze and Customer.io running side by side from the day your first program goes live.
Move one program at a time, and when an automation or broadcast in Customer.io is ready, turn off its Braze equivalent so people don't receive the same message twice.
During the overlap, Braze keeps sending whatever hasn't moved yet. If your events and profile updates flow through Customer.io, the Braze destination can forward identify, track, and purchase calls to Braze as well, so both platforms see the same activity while you finish.
Large organizations usually cut over one brand, region, or business unit at a time, keeping Braze live for the groups still waiting. Starting with the simplest unit gives you a rehearsal for the rest, and the lessons from each pass go straight into the next one.
You're ready to turn Braze off when each of these is true:
- Every program in your keep tier has a live twin in Customer.io, and its Braze equivalent is paused.
- Your unsubscribes, suppressions, and subscription preferences are imported, including SMS and WhatsApp opt-outs.
- Your largest email sends run from Customer.io on a warmed domain.
- Every other channel you use is connected and sending, with WhatsApp templates approved and your LINE followers linked to profiles.
- Your backend calls point at Customer.io.
- The mobile segment you created in step 3 is close to the size of the audience you exported, which tells you enough of your users have updated your app.
When the list is complete, turn off Braze. If a few users haven't updated your app yet, a last round of messages through Braze can nudge them to download the new version before you go.
How your AI Agent in Customer.io makes migration easier
Your AI Agent in Customer.io can take on the repetitive build work in a migration, like recreating automations, drafting emails, and creating segments, while you stay in charge of what goes live. It works inside Customer.io with your permissions, so it can only see and do what your role allows, and it asks you to confirm high-impact actions.
Rebuild a Canvas
Upload a screenshot of the Canvas and ask: "Recreate this as a draft automation. Trigger it on our sign-up event and keep the same delays. List anything you couldn't map so I can review it."
Rebuild an email
Upload the exported Braze HTML and ask it to help you rebuild the email in Design Studio.
Match your brand
Upload your style guide and ask your Agent to remember it for every email it drafts.
Track app updates
"Create a segment of people with the
from_brazeattribute who have a mobile device."
Find your SMS audience
"Create a segment of people with a phone number who haven't opted out of SMS."
Map Salesforce data
Ask your Agent to suggest fields for your Salesforce sync based on your goals.
Watch warm-up
"Of my migrated automations, which had the lowest deliverability this week?"
Check results
Ask for click-to-open rates on a migrated automation and compare them with what Braze showed you.
For recurring checks, Routines can run tasks like deliverability reviews on a schedule, and custom skills let you teach your Agent your naming conventions. You can also work with it in Slack, where it keeps the same permissions and guardrails.
Enterprise teams get a useful property from that permission model: your marketers gain the speed of the Agent, and your admins keep control, because the Agent can't edit live automations or segments unless an admin turns that on.
Your coding agent can set up the integrations
The app and backend work in step 3 suits a coding agent. When you add a data-in integration, look for the Set up with an agent tab. Customer.io gives you a prompt that you paste into Claude Code, Cursor, Codex, or GitHub Copilot, and your agent sets up the integration from start to finish. For a website, mobile app, or server, that means installing the library, identifying people, tracking page or screen views, sending a test event, and checking that the event arrived. For Salesforce and HubSpot, it checks your setup against the integration's requirements and drafts a mapping plan, and for a database it drafts the query for your sync type.
The prompts work best with the Customer.io MCP server or CLI installed. A prompt for a website, mobile, or server integration includes the integration's API key, so treat a copied prompt like the key itself and keep it out of tickets, chat channels, and shared docs.
Getting started with Customer.io
If you'd rather not move everything yourself, book a demo and bring your Braze setup with you, whether that's one app or a portfolio of brands and channels. Our team can plan the switch with you, help you move your data and messages, and show you how your programs would run in Customer.io. If you'd like to try it on your own data first, start a free trial.
For a side-by-side look at data, pricing, AI, and support, read our Customer.io vs. Braze comparison, where you'll also see why more than 11,000 brands, including Notion, Lovable, and Affirm, run their messaging on Customer.io.
FAQ
How long does it take to migrate from Braze to Customer.io?
Timelines depend on how many campaigns, data sources, and channels you move, and two pieces set the pace: the app release and the domain warm-up, which takes a few weeks. Premium and Enterprise plans offer onboarding support, migration support, and a dedicated technical implementation specialist, and onboarding support is included with all Premium plans.
Can I export all my users from Braze at once?
No. Braze doesn't export all users directly, so you create segments and export each one, and each export is limited to 500,000 users. Large audiences need several segments.
Do I need to export device tokens from Braze?
No. The Customer.io SDK registers each person's device when they open the updated version of your app, and that registration is how you count who has updated.
Will my Liquid templates work in Customer.io?
Most of them will with small edits. Braze and Customer.io both use Liquid, and variable names change, for example {{${first_name}}} becomes {{customer.first_name}}.
Do I have to rebuild every Canvas?
No. Sort your Canvases into keep, migrate with improvements, and retire, as described in our messaging program audit, and rebuild only the first two groups.
Can the Agent migrate my Braze account for me?
It can do a large share of the rebuild, including automations from screenshots, emails from your HTML, and segments from a prompt, as described in the Agent docs. It works inside Customer.io, so it can't reach into Braze, which means you export your audience yourself.
Can I migrate SMS, WhatsApp, and LINE from Braze to Customer.io?
Yes. Customer.io supports SMS, WhatsApp, and LINE alongside email, push, and in-app messages. SMS sends through Twilio, or Customer.io can manage it for you in the US and Canada. WhatsApp messages use approved templates, and LINE connects through your LINE Official Account. You rebuild the messages inside your automations and broadcasts, and you bring your opt-outs with you.
How should an enterprise with several brands or regions approach a Braze migration?
Settle your data center region, workspace structure, and permissions first, then migrate one brand, region, or business unit at a time. Start with the simplest unit so you can rehearse the sequence, and keep Braze running for the groups still waiting. Premium and Enterprise plans offer a dedicated technical implementation specialist.
Does Customer.io work for B2B companies moving off Braze?
Yes. Objects and relationships let you store companies and accounts and relate people to them, and the Salesforce integration on Premium and Enterprise plans syncs your CRM data in both directions with your account structure intact.
What is an ideal timeline for migrating from Braze to Customer.io?
About eight weeks on a realistic schedule. Apps and mobile channels start in week 1 and wrap up by week 4, your data lands in weeks 3 to 4, you launch your first program and rebuild the rest while both platforms run in parallel through week 7, and you cut over in weeks 7 to 8. Your app release cycle and your Braze contract end date move those weeks, so count backward from the date Braze stops sending for you.
Can I run Braze and Customer.io at the same time?
Yes, and most teams do. You keep sending from Braze while you build in Customer.io, then move one program at a time and pause its Braze twin as soon as the Customer.io version is live. If your data flows through Customer.io, the Braze destination can forward identify, track, and purchase calls to Braze so both platforms see the same activity.
Drive engagement with every message
- Omnichannel campaigns
- Behavior-based targeting





