Skip to content

Migration wizard: import from Mailchimp / EmailOctopus / ConvertKit #74

Description

@JuansesDev

Problem

The strongest lead profile for SendDock is the person frustrated with their current email provider's pricing: someone paying Mailchimp $135/mo at 10k contacts, or ConvertKit $104/mo, or hitting the EmailOctopus tier wall. They are ready to switch — but their list, custom fields, suppressions, and segmentation logic are stuck inside the old tool.

Today, switching to SendDock requires:

  1. Manually exporting subscribers as CSV from the source platform
  2. Mapping columns by hand on import
  3. Re-creating suppression list entries
  4. Losing tags / segments / custom field structure entirely

This friction is enough to make the user give up or postpone forever.

Proposal

A one-screen migration wizard that pulls data from common platforms via their API and replays it into a SendDock project.

Supported sources (first batch)

Source Auth What we import
Mailchimp API key Audiences → project mapping, subscribers (active + unsubscribed), merge fields → custom fields, tags, suppression list
EmailOctopus API key Lists → projects, subscribers, custom fields, suppression list
ConvertKit / Kit API key Subscribers, tags, custom fields, sequences (metadata only — drips do not migrate)
CSV (generic) File upload Already exists, but the wizard should reuse the same column-mapping UI

Flow

  1. User chooses Settings → Import subscribers → From another platform
  2. Selects source, pastes API key (validated immediately)
  3. App lists the source's audiences/lists with subscriber counts; user picks which to import into which SendDock project
  4. App shows a preview: "This will import 12,847 subscribers, 14 custom fields, 3 tags, and 209 suppressions"
  5. User confirms; background job runs the import with a progress bar
  6. Final report: imported / skipped (duplicates) / failed (invalid emails) with downloadable error CSV

Implementation notes

  • Reuses existing custom fields system (Custom fields for subscribers (typed attributes beyond email/name) #72) — source's merge fields / custom attributes become SendDock field definitions automatically
  • Reuses existing tags system (Subscriber tags and segmentation #40) — source's tags become SendDock tags
  • Imports are idempotent on (project_id, email) — re-running skips duplicates instead of erroring
  • Each adapter is an isolated package under backend/internal/migrators/ so adding a new source is purely additive
  • Rate-limited to be polite to source APIs (Mailchimp: 10 req/s, EmailOctopus: 5 req/s, etc.)

Acceptance criteria

  • Wizard UI selectable from Subscribers section header or onboarding flow
  • Adapters for Mailchimp, EmailOctopus, ConvertKit (CSV uses existing import)
  • Custom fields created automatically from source schema
  • Tags imported and applied to subscribers
  • Suppression list entries copied
  • Background job with progress, cancellable, resumable
  • Error CSV download for skipped/failed rows
  • Adapter pattern documented so community can request more sources

Tier

Core — this is acquisition. Gating it behind Pro would defeat its purpose (lowering switching cost). Could limit free tier to 1,000 imported subs and unlock full imports above that on Cloud Starter, but the feature itself stays in Core.

Blocked by

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions