Migrate › Klaviyo

Move from Klaviyo to Relayly

Used by 30+ ecommerce + B2B teams who hit Klaviyo's pricing wall and decided their list belonged somewhere they didn't have to ration spend.

Why teams leave Klaviyo

What carries across

Klaviyo conceptRelayly equivalentAuto-migrates?
ProfilescontactsYes — full export with custom properties. Source ID preserved as external_id.
ListslistsYes — preserves names + opt-in setting (single vs double).
List membershipslist_membersYes — direction preserved (subscribed / unsubscribed / pending-confirm).
Segment definitionsPredicate-based segmentsKlaviyo segment DSL → Relayly JSON predicates. ~80% auto-translate; complex temporal logic flagged.
Email templatesemail_templatesHTML pulled inline. Klaviyo Liquid → Relayly Liquid (~99% identical syntax).
Suppression listSuppressionsBounces + unsubs + complaints all carry. Hard-bounced profiles never re-mailed.
Campaigns (drafts + queued)CampaignsMigrated and pointed at the new lists/templates.
Sent campaign analyticsRead-only archiveOptional. For analytics continuity only — never re-delivered.
FlowsFlowsKlaviyo flows use a custom DSL we partially translate. Linear flows convert; branched logic gets a manual review checklist.
Metrics + eventsCustom eventsLast 90 days of Opened / Clicked / Bounced events imported for segment continuity.

The codebase swap

API shapes are similar enough that find/replace handles most call sites. The key differences:

// Klaviyo Node SDK
import { ApiKeySession, EventsApi } from "klaviyo-api";
const session = new ApiKeySession(process.env.KLAVIYO_API_KEY);
const events = new EventsApi(session);

await events.createEvent({
  data: { type: "event",
    attributes: {
      profile: { email: "u@example.com" },
      metric:  { name: "Welcome Sent" },
      properties: { plan: "pro" }
    }
  }
});
// Relayly Node SDK
import Relayly from "@relayly/node";
const r = new Relayly({ apiKey: process.env.RELAYLY_API_KEY });

await r.events.create({
  email: "u@example.com",
  metric: "Welcome Sent",
  properties: { plan: "pro" }
});

Segment translation table

The trickiest part of any Klaviyo migration is segment translation. Our exporter writes each Klaviyo segment to segments.json verbatim, then auto-translates the common predicates to Relayly's DSL. Here's the mapping it uses:

Klaviyo predicateRelayly predicate
profile-group-membership groupIds=[id]{"list_member_of": "<list_id>"}
profile-metric Opened Email count > 0 last 90 days{"event_within_days": {"event": "opened", "days": 90}}
profile-metric Clicked Email count > 0 last 30 days{"event_within_days": {"event": "clicked", "days": 30}}
profile-marketing-consent email canReceiveMarketing=true(implicit — every contact in subscribed status)
timeframeFilter in-the-last 14 days on group membership{"joined_within_days": 14}
Boolean AND across predicates{"all": […]}
Boolean OR{"any": […]}

The cutover playbook

  1. Run the export script. It's read-only against Klaviyo and re-runnable.
  2. Review the manifest. Anything flagged as "needs review" gets a copy-paste remediation snippet.
  3. Apply to Relayly. Idempotent SQL + REST imports. Re-run safely.
  4. Dual-send for a week. Compare inbox rates at Gmail / O365 / Yahoo through the dashboard.
  5. Flip the API key. Search-and-replace your codebase, deploy, monitor 24h.
  6. Pause Klaviyo. Don't delete the account — keep it for 30 days as an unsubscribe-list reciprocity reference.
  7. After 30 quiet days, terminate Klaviyo. You're done.

Pricing-side check

VolumeKlaviyoRelaylyAnnual delta
10k active profiles, 50k sends/mo$45/mo (Email + SMS)$25/mo+ $240/year
50k active profiles, 200k sends/mo$175/mo$100/mo+ $900/year
200k active profiles, 1M sends/mo$720/mo$130/mo+ $7,080/year
500k active profiles, 5M sends/mo$1,700/mo$249/mo (overage)+ $17,412/year

Klaviyo pricing as of 2026-05 from klaviyo.com/pricing. Active-profile pricing is the dominant cost driver — Relayly bills by send volume only, so the savings compound as your list grows.

Start the migration

Sign up free, run the export script, dual-send for a week. We'll spot you 10,000 verification sends.

Start free