home/migrations/from Campaigner
// migrate from

leave Campaigner. keep the work.

mailexodus reads Campaigner over its API and normalizes subscribers, lists, segments, custom fields into one portable schema — so you move with a report, not a 40-item checklist.

agentUse mailexodus skill: Campaigner → Sequenzy playbook
// try it

see what moves out of Campaigner.

A live route check, computed from Campaigner's real API surface. Pick any destination to compare import support — nothing is written.

analyzing Campaigner
source modePartial automated adapter
source exports5
Mailchimp imports8
destination gapsautomations
data leaves machineno · dry-run
$npx mailexodus@latest migrate --from campaigner --to mailchimp --dry-run
agentUse mailexodus skill: CampaignerMailchimp playbook
// why teams leave

why teams leave Campaigner.

  • Campaigner migrations need an explicit boundary around what the API exposes.
  • Teams want a dry-run report before rebuilding subscribers, lists, segments, custom fields.
  • No documented campaign list/detail endpoint for fetching existing campaigns. No documented template list/detail/body endpoint. Workflow endpoints expose summaries, not full automation steps or email bodies. No first-class tag resource was found in the official API
// transfer boundary

what mailexodus pulls from Campaigner.

can migrate
  • +
    subscribers
  • +
    lists
  • +
    segments
  • +
    custom fields
  • +
    suppressions
needs review
  • ?
    segments
  • ?
    suppressions
cannot migrate
  • x
    tags
  • x
    campaigns
  • x
    templates
  • x
    automations
  • x
    sender reputation and domain warmup
  • x
    historical analytics, revenue attribution, and aggregate reporting
  • x
    contacts already mid-flight inside active automations
  • x
    A/B test results and provider-specific experiment history
  • x
    provider-native design blocks, product widgets, coupons, and private assets that are not exposed by API
source adapter

Partial automated adapter

Contacts map to subscribers using staticFields.email. MailingList records map to lists. StaticSegment and DynamicSegment records map to segment metadata and membership snapshots where contact memberships include them. Custom fields map to subscriber custom attributes. System/static unsubscribe and bounce fields map to suppression state when present

No documented campaign list/detail endpoint for fetching existing campaigns. No documented template list/detail/body endpoint. Workflow endpoints expose summaries, not full automation steps or email bodies. No first-class tag resource was found in the official API

// the playbook

how an agent migrates Campaigner → Sequenzy.

This is exactly what mailexodus hands your agent: authenticate, then for each object type — read it from Campaigner, map it to the portable schema, write it to the destination. mailexodus never writes; your agent does, with this report in hand.

01 · authenticate

Create or copy a Campaigner IntegrationKey with read access to contacts, lists, segments, fields, and suppression-like contact status. Paste the key, or JSON with apiKey

01subscribersmigrates
readGET /contacts (Read subscribers from Campaigner.)
mapContacts map to subscribers using staticFields.email. MailingList records map to lists. StaticSegment and DynamicSegment records map to segment metadata and membership snapshots where contact memberships include them. Custom fields map to subscriber custom attributes. System/static unsubscribe and bounce fields map to suppression state when present mailexodus renders normalized provider data into destination subscribers, lists, segments, campaigns, sequences, and review notes.
writePOST add_subscriber (Write or stage subscribers in Sequenzy.) PATCH update_subscriber (Write or stage subscribers in Sequenzy.)
02listsmigrates
readGET /mailinglists (Read lists from Campaigner.)
mapContacts map to subscribers using staticFields.email. MailingList records map to lists. StaticSegment and DynamicSegment records map to segment metadata and membership snapshots where contact memberships include them. Custom fields map to subscriber custom attributes. System/static unsubscribe and bounce fields map to suppression state when present mailexodus renders normalized provider data into destination subscribers, lists, segments, campaigns, sequences, and review notes.
writePOST create_list (Write or stage lists in Sequenzy.) POST add_subscribers_to_list (Write or stage lists in Sequenzy.)
03segmentsneeds review
readGET /segments/static (Read segments from Campaigner.) GET /segments/dynamic (Read segments from Campaigner.)
mapContacts map to subscribers using staticFields.email. MailingList records map to lists. StaticSegment and DynamicSegment records map to segment metadata and membership snapshots where contact memberships include them. Custom fields map to subscriber custom attributes. System/static unsubscribe and bounce fields map to suppression state when present mailexodus renders normalized provider data into destination subscribers, lists, segments, campaigns, sequences, and review notes.
writePOST create_segment (Write or stage segments in Sequenzy.)
04custom fieldsmigrates
readGET /customfields (Read custom fields from Campaigner.)
mapContacts map to subscribers using staticFields.email. MailingList records map to lists. StaticSegment and DynamicSegment records map to segment metadata and membership snapshots where contact memberships include them. Custom fields map to subscriber custom attributes. System/static unsubscribe and bounce fields map to suppression state when present mailexodus renders normalized provider data into destination subscribers, lists, segments, campaigns, sequences, and review notes.
writePATCH update_subscriber.customAttributes (Write or stage custom fields in Sequenzy.)
05suppressionsneeds review
readGET /contacts?status=unsubscribed (Read suppressions from Campaigner.) GET /contacts?status=bounced (Read suppressions from Campaigner.)
mapContacts map to subscribers using staticFields.email. MailingList records map to lists. StaticSegment and DynamicSegment records map to segment metadata and membership snapshots where contact memberships include them. Custom fields map to subscriber custom attributes. System/static unsubscribe and bounce fields map to suppression state when present mailexodus renders normalized provider data into destination subscribers, lists, segments, campaigns, sequences, and review notes.
writePATCH update_subscriber.status (Write or stage suppressions in Sequenzy.)
stays behind
  • tags
  • campaigns
  • templates
  • automations
  • sender reputation and domain warmup
  • historical analytics, revenue attribution, and aggregate reporting
guardrails
  • Sender reputation is earned at the destination — set up SPF/DKIM/DMARC and a warmup ramp; it does not transfer.
  • Keep the source platform active until authentication, warmup, and in-flight automations have finished.
  • Honor suppressions before the first send.
  • After writing, verify counts per object type against the source before switching live sends.
// run it

guide your agent, or follow it yourself.

Pull the full playbook from the skill prompt, CLI, or MCP server, then work the steps. Start by confirming credentials: Create or copy a Campaigner IntegrationKey with read access to contacts, lists, segments, fields, and suppression-like contact status. Paste the key, or JSON with apiKey

inspect

provider coverage

npx mailexodus@latest info campaigner

guide

agent playbook

npx mailexodus@latest guide --from campaigner --to sequenzy

agentUse mailexodus skill: Campaigner → Sequenzy playbook