How Sleep Reset migrated 21 automated journeys from Klaviyo to Customer.io — without dropping a single send
Discover how Sleep Reset successfully migrated 21 automated journeys from Klaviyo to Customer.io, enhancing their engagement strategy without losing a single send.

The challenge: outgrowing a platform
Sleep Reset is a digital sleep improvement platform serving tens of thousands of subscribers across the US. Over time, their engagement stack — built on Klaviyo — had evolved into a complex web of automated email journeys, A/B-tested campaigns, SMS broadcasts, and daily push notification sequences inherited from a prior Braze setup.
As the product scaled, the team needed something more event-driven and API-first — a platform that could unify their multi-channel messaging under one roof. Customer.io was the answer. But migrating a live, revenue-critical system is never as simple as copying and pasting.
Optiblack was brought in to plan and execute the full migration.
"Sleep Reset runs one of the more sophisticated consumer engagement programmes we've migrated — 65–70% open rates on broadcast emails, A/B-tested journeys with 10+ message variants, and a legacy push stack inherited from Braze. The challenge wasn't just moving assets; it was recreating complex audience filter logic in a fundamentally different data model."
Scope: three parallel tracks
The migration was broken into three independent workstreams, each running in parallel to avoid cross-channel delays.

Key journeys migrated included the free trial drop-off re-engagement flow (24 messages, A/B tested), subscription cancellation confirmation, post sign-up onboarding drip, renewal reminder sequences (3-day, 7-day, 14-day), a 7-day new user push sequence, daily morning and bedtime reminders, an abandoned cart SMS flow, and transactional emails such as magic login links.
How time estimates went from 12 hours to 1 hour
Initial scoping assumed a near 1:1 rebuild of each journey. After completing Stage 01, the team identified repeatable build patterns — and slashed per-journey time by 80–90% on simpler automations.

Technical challenges — and how they were resolved
- Challenge
Klaviyo filters users by subscription end date using profile attributes — a method that doesn't translate directly to Customer.io's data model, requiring audience-based workarounds.
ResolutionSubscription expiry logic was rebuilt using Customer.io audience segments with event-based entry conditions. Behaviour was confirmed to match before any journey went live.
- Challenge
Email templates export cleanly from Klaviyo as HTML — but Customer.io doesn't support direct HTML template imports. This platform gap was discovered mid-migration.
ResolutionAll HTML was exported and archived from Klaviyo and handed to the client for manual import at their convenience. Template hours were excluded from the migration timeline.
- Challenge
The trial drop-off journey contained 24 individual messages — significantly more than estimated — each requiring separate setup in Customer.io.
ResolutionAfter completing the first three messages, the team templated the structure and created a repeatable build pattern, cutting per-message time significantly for the remainder of the journey.
- Challenge
Early journeys were uploaded to the wrong Customer.io workspace — 40 hours of work had to be validated and re-uploaded to the correct account.
ResolutionA workspace verification step was added at project kick-off. All subsequent uploads were confirmed against client-provided workspace IDs before any build work began.
The process that made it work
1. Audit & inventory
Full catalogue of existing journeys, campaigns, user lists, and segments. Every asset is tagged with channel, status, and complexity before a single line is rebuilt.
Assets sorted into Stage 01 (revenue-critical, live journeys) and Stage 02 (recurring, simpler automations). Deprecated assets flagged upfront — not migrated unnecessarily.
Email, SMS, and push are handled as separate workstreams with independent timelines. No cross-channel dependency blocks a channel from going live.
Audience filters, segment criteria, and A/B structures are re-engineered for the target platform — not copy-pasted. Platform gaps flagged and resolved with the client before build.
User events are verified live in Customer.io before journeys activate. All audience filters are tested against real user profiles before going live.
Migration tracker delivered alongside the live workspace. Any asset requiring client action is flagged clearly, with pre-prepared assets ready to use.
The result
In approximately two weeks, Sleep Reset's full engagement stack was live in Customer.io — 21 automated journeys across email, push, and SMS, rebuilt without a missed send. The structured approach turned a project initially scoped at 200+ hours into a 54-hour execution, saving roughly 73% of the estimated effort.
The migration also surfaced and resolved four significant technical issues before they could affect subscribers — including a workspace error that could have derailed weeks of work.
