Skip to main content

Migrating to Sequenzy

Switching email platforms can feel risky. You don’t want to mess up communications with your existing audience. This guide walks you through a safe, incremental migration that minimizes risk while letting you start benefiting from Sequenzy immediately.

The Migration Philosophy

Don’t do a big-bang migration. Instead:
  1. Start small - Begin with transactional emails
  2. Prove the system - Verify deliverability and tracking work
  3. Expand gradually - Add sequences for new users
  4. Complete the switch - Move your existing audience last
This approach means you’re never “all-in” until you’re confident everything works.

Phase 1: Transactional Emails

Risk: Minimal — These are one-off emails you control completely. Start by moving your transactional emails to Sequenzy. These are the easiest to migrate because:
  • They’re triggered by your code, so you control when the switch happens
  • Each email is independent, no sequences to worry about
  • If something goes wrong, you can quickly revert

What to Move First

Pick 2-3 low-stakes transactional emails:
✓ Welcome email (new signups)
✓ Password reset
✓ Email verification

Later:
  Order confirmation
  Payment receipts
  Shipping notifications

Step-by-Step

1. Create templates in Sequenzy Build your transactional email templates in the dashboard. Use the same content you currently have—don’t redesign yet. 2. Set up your sending domain Add and verify your domain in Settings → Domains. This takes a few hours for DNS propagation. 3. Update your code Replace your current email sending with Sequenzy API calls:
// Before: Using your old provider
await oldProvider.send({
  to: user.email,
  template: "welcome",
  data: { name: user.name },
});

// After: Using Sequenzy
await fetch("https://api.sequenzy.com/api/v1/transactional/send", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.SEQUENZY_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    to: user.email,
    slug: "welcome",
    variables: { firstName: user.name },
  }),
});
4. Run both systems in parallel (optional) For extra safety, send from both systems for a week:
// Send from both during transition
await Promise.all([
  oldProvider.send({ to: user.email, template: "welcome" }),
  sequenzy.send({ to: user.email, slug: "welcome" }),
]);
Watch deliverability metrics on both. When you’re confident, remove the old provider. 5. Monitor and iterate Check Sequenzy analytics:
  • Are emails being delivered?
  • Are open rates comparable to your old system?
  • Any bounce issues?

How Long: 1-2 weeks

Get comfortable with the API, verify deliverability, build confidence.

Phase 2: Sequences for New Users

Risk: Low — Only affects people who haven’t received your old emails yet. Now that transactional emails are working, set up automated sequences for new subscribers.

Key Insight

New users have no expectation of your old email patterns. They won’t notice or care that you switched platforms. This makes them perfect for testing your new sequences.

What to Build

Onboarding Sequence
Trigger: New signup (tag: "new-signup")


Day 0: Welcome email


Day 2: Getting started tips


Day 5: Feature highlight


Day 7: Success story / case study
Post-Purchase Sequence
Trigger: Purchase event (saas.purchase)


Day 0: Thank you + receipt


Day 3: Getting the most from your purchase


Day 7: Feedback request
Trial Nurture Sequence
Trigger: Trial started (saas.trial_started)


Day 0: Trial welcome


Day 3: Key feature walkthrough


Day 7: Trial halfway check-in


Day 12: Trial ending soon


Day 14: Trial expired + offer

Step-by-Step

1. Map your triggers Identify when you want sequences to start:
// On user signup
await sequenzy.subscribers.create({
  email: user.email,
  firstName: user.firstName,
  tags: ["new-signup"],
});

// On purchase
await sequenzy.events.trigger({
  email: user.email,
  event: "saas.purchase",
  properties: { plan: subscription.plan },
});
2. Build the sequences Use the visual editor to create your flows. Start simple—3-5 emails max. 3. Connect your app Add API calls at the right moments:
// During signup flow
async function handleSignup(user) {
  // Create user in your database
  await createUser(user);

  // Add to Sequenzy
  await fetch("https://api.sequenzy.com/api/v1/subscribers", {
    method: "POST",
    headers: {
      Authorization: `Bearer ${process.env.SEQUENZY_API_KEY}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      email: user.email,
      firstName: user.firstName,
      lastName: user.lastName,
      tags: ["new-signup"],
      customAttributes: {
        userId: user.id,
        signupSource: user.source,
      },
    }),
  });
}
4. Let it run Watch the sequences in action. Check:
  • Are emails sending at the right times?
  • Are conditions working correctly?
  • What are open/click rates?

How Long: 2-4 weeks

Build sequences, let them run with real users, iterate based on data.

Phase 3: Migrate Your List

Risk: Medium — Now you’re touching existing subscribers who may notice changes. Once sequences are working for new users, import your existing subscriber list.

Before You Import

Clean your list first Don’t import garbage:
Remove:
  ✗ Hard bounces
  ✗ Spam complaints
  ✗ Unsubscribed (unless legally required to track)
  ✗ Inactive 2+ years
  ✗ Invalid email formats
Preserve subscription preferences Export status from your old system:
  • Subscribed vs unsubscribed
  • Subscription dates
  • Tags/segments

Import Strategy

1. Export from old system Get a CSV with:
email,firstName,lastName,status,createdAt,tags
[email protected],John,Doe,active,2023-01-15,"customer,newsletter"
[email protected],Jane,Smith,unsubscribed,2022-06-20,"churned"
2. Import to Sequenzy Use the dashboard import or API:
// Bulk import via API
for (const subscriber of subscribers) {
  await fetch("https://api.sequenzy.com/api/v1/subscribers", {
    method: "POST",
    headers: {
      Authorization: `Bearer ${process.env.SEQUENZY_API_KEY}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      email: subscriber.email,
      firstName: subscriber.firstName,
      lastName: subscriber.lastName,
      status: subscriber.status,
      tags: subscriber.tags.split(","),
      customAttributes: {
        importedAt: new Date().toISOString(),
        legacyId: subscriber.id,
      },
    }),
  });
}
3. Verify the import Check counts match:
  • Total subscribers
  • By status (active vs unsubscribed)
  • By key tags (customers, trial, etc.)

Preserving Your Reputation

Your sender reputation is tied to your domain, not your email provider. As long as you’re using the same sending domain, your reputation carries over. If you’re setting up a new domain:
  • Warm it up gradually
  • Start with your most engaged subscribers
  • Increase volume over 2-4 weeks

How Long: 1 week

Import is usually quick, but budget time for verification.

Phase 4: Move Marketing Campaigns

Risk: Higher — Bulk emails to your full list. This is the final step. You’ve proven the system works with transactional emails, sequences, and your imported list.

Strategy: Don’t Recreate Everything

You don’t need to move every old campaign. Focus on:
✓ Move: Ongoing campaigns (newsletter, product updates)
✓ Move: High-performing templates
✓ Archive: One-time campaigns that won't repeat
✓ Rebuild: Underperforming campaigns (chance to improve)

Running Your First Campaign

1. Start with your most engaged segment Don’t blast your entire list. Send to subscribers who:
  • Opened an email in the last 30 days
  • Are tagged as “engaged” or “active”
  • Have been customers for 6+ months
Recipients: Filtered
Tags: contains "engaged"
Added: more_than 30 days ago
2. Use a familiar format Your first campaign should look like your previous emails. Don’t redesign—subscribers should feel continuity. 3. Monitor closely Watch metrics in real-time:
  • Bounces (should be < 2%)
  • Complaints (should be < 0.1%)
  • Opens (should match historical rates)

Sunsetting Your Old System

Once you’ve sent 2-3 successful campaigns:
  1. Stop sending from old system — Sequenzy is now primary
  2. Keep old system in read-only — For historical data access
  3. Update any integrations — Webhooks, Zapier, etc.
  4. Cancel old subscription — After 30-60 days of success

How Long: 2-4 weeks

Build confidence with engaged segments before expanding.

The Complete Timeline

WeekPhaseFocus
1-2TransactionalSet up domain, move 2-3 transactional emails
3-4SequencesBuild onboarding + post-purchase sequences
5ImportMigrate subscriber list
6-7CampaignsFirst campaigns to engaged segments
8+CompleteFull migration, sunset old system
Total: 6-8 weeks for a careful migration.

Migration Checklist

Before Starting

  • Export full subscriber list from old provider
  • Document your current email templates
  • List all triggered/transactional emails
  • Map your subscriber tags/segments
  • Note any integrations (Stripe, Zapier, etc.)

Domain Setup

  • Add sending domain in Sequenzy
  • Configure DNS records (SPF, DKIM, DMARC)
  • Verify domain
  • Create sender profiles

Transactional Emails

  • Create transactional templates
  • Update API calls in your code
  • Test with internal emails
  • Monitor deliverability for 1 week

Sequences

  • Design sequence flows on paper first
  • Build sequences in dashboard
  • Connect triggers in your code
  • Test with new signups
  • Monitor for 2 weeks

List Import

  • Clean your list (remove bounces, spam complaints)
  • Export with all fields and tags
  • Import to Sequenzy
  • Verify counts match
  • Check tag assignments

Campaigns

  • Send first campaign to engaged segment
  • Monitor metrics closely
  • Gradually expand to full list
  • Update any automation tools

Cleanup

  • Disable sending from old provider
  • Update webhook URLs
  • Document new system for team
  • Cancel old provider subscription

Common Migration Pitfalls

1. Moving Too Fast

Problem: Migrating everything at once, something breaks, scrambling to fix. Solution: Follow the phased approach. Each phase should run smoothly before moving on.

2. Not Cleaning Your List

Problem: Importing old bounces and spam traps tanks your reputation. Solution: Clean before importing. Remove anyone who hasn’t engaged in 2+ years.

3. Changing Design During Migration

Problem: Subscribers notice dramatic changes, engagement drops, you can’t tell if it’s the new platform or new design. Solution: Keep designs identical during migration. Redesign after you’re settled.

4. Losing Subscriber Preferences

Problem: Subscribers who unsubscribed start getting emails again. Solution: Export and respect subscription status. Never email someone who opted out.

5. Not Monitoring

Problem: Issues go unnoticed until they’re serious. Solution: Check metrics daily during migration. Set up alerts for bounces and complaints.

Need Help?

Migration questions? Reach out: We’ve helped many teams migrate and are happy to review your migration plan.