> ## Documentation Index
> Fetch the complete documentation index at: https://docs.brew.new/llms.txt
> Use this file to discover all available pages before exploring further.

# Migrate From Mailchimp to Brew

> Move contacts, consent states, segments, templates, and automations from Mailchimp into Brew, with a cutover order that avoids double-sends.

A cutover, not a sync. Contacts, consent, templates, segments, and automations move once, then nothing stays connected to Mailchimp. The rule behind every step below: **only one platform sends live email to a given contact at a time.**

This guide assumes your Brew brand and sending domain are already set up. If not, [verify your domain](/get-started/verify-your-sending-domain) first. DNS can take up to 72 hours.

<Note>
  Looking to go the other way, designing in Brew and sending from Mailchimp? See the [Mailchimp integration](/integrations/export/mailchimp) instead.
</Note>

<Tip>
  Not ready to commit? Leave your Mailchimp automations running and route one new one-off email through Brew instead. Steps 1 to 5 cover contacts and a template, which is all you need for a single test send.
</Tip>

## Concepts

| Mailchimp                             | Brew                                                |
| ------------------------------------- | --------------------------------------------------- |
| Audience / List                       | [Audience](/audience/create-audiences)              |
| Tag                                   | Custom property                                     |
| Group (opt-in categories)             | Custom property plus an Audience filter, see Step 4 |
| Saved segment                         | Audience (dynamic filter)                           |
| Merge field                           | Custom property                                     |
| Merge tag, `*\|FNAME\|*`              | `{{ firstName \| there }}`                          |
| Campaign                              | [Email](/create-emails/emails)                      |
| Customer Journey / Classic Automation | [Automation](/create-emails/automations)            |

## 1. Export Contacts From Mailchimp

<Warning>
  Every marketing recipient must have opted in to hear from you. Importing or syncing contact data into Brew is not permission to email it. See [What You Can Send](/get-started/what-you-can-send).
</Warning>

**Audience** → pick the audience → **Export audience** → **Export CSV**. For a saved segment, tag, or group, open its dropdown → **Export segment** → **Export CSV**.

Mailchimp splits the export into four files by status. Treat each differently:

| File                                                   | What to do                                                                                        |
| ------------------------------------------------------ | ------------------------------------------------------------------------------------------------- |
| Subscribed                                             | Import normally                                                                                   |
| Unsubscribed                                           | Import, marked `Subscribed: false`                                                                |
| Non-subscribed (Mailchimp calls these "transactional") | Leave out, or import marked `Subscribed: false` if you need the contact record for another reason |
| Cleaned (hard bounces)                                 | Leave out entirely                                                                                |

Non-subscribed is the one people miss. It's Mailchimp's term for contacts you have a relationship with, mostly customers, who never opted into marketing email. They aren't the same as unsubscribed contacts, they just never consented in the first place.

Importing them as subscribed means sending marketing mail to people who never agreed to receive it. Treat them with the same caution as unsubscribed contacts and leave them out of your marketing audience.

Bring them in explicitly unsubscribed only if you need the contact record for another reason. A paying customer you'll later send transactional email to is a good example.

Cleaned contacts are addresses Mailchimp already flagged permanently undeliverable. They've done the suppression work, so there's nothing to bring over.

Mailchimp doesn't export engagement history (opens, clicks). Pull that from a campaign report if you need it. Either way, Brew's engagement-based audiences start counting from your import date.

## 2. Map Your CSV

| Column                                         | Required                                |
| ---------------------------------------------- | --------------------------------------- |
| `Email`                                        | Yes                                     |
| `First Name`, `Last Name`                      | Recommended                             |
| `Subscribed` (`true`/`false`, defaults `true`) | No                                      |
| Anything else                                  | Becomes a custom property automatically |

Notes:

* Empty cells don't overwrite existing data on update imports
* Duplicate rows: the last one wins, so dedupe first
* These names are reserved and can't be used for custom properties: `email`, `first_name`, `last_name`, `subscribed`, `created_at`, `updated_at`, `validation_status`, `last_validated_at`, `import_id`
* Save as UTF-8. Garbled characters at the mapping step usually mean it wasn't

Full import behavior lives in [Add Contacts](/audience/add-contacts).

**Personalization.** `*|FNAME|*` becomes a Brew merge tag, `{{ firstName | there }}`. The property name is case-sensitive, and the fallback after the pipe shows for contacts with nothing on file. See [contact properties](/audience/manage-contacts#custom-properties) for the full list.

## 3. Import Into Brew

**Audience → Add contacts → CSV Upload.** Map columns, review, then import. Tick the [validation checkbox](/audience/validate-contacts) first if the list hasn't been checked recently. It costs 2 credits per address, which is worth it before warming up a new domain.

Upload each file from Step 1 separately. That keeps `Subscribed` set correctly per batch instead of forcing one merged file to carry every status.

## 4. Rebuild Segmentation

[Audiences](/audience/create-audiences) are dynamic filters over contact properties, email engagement, and subscription status, not fixed lists. Describe one in plain English or build the filters by hand.

**Mailchimp groups don't have a direct equivalent.** Brew has one subscription state per contact, subscribed or unsubscribed. There are no opt-in categories and no subscriber-facing preference center. Marketing emails and automations respect that flag, and transactional sends bypass it.

Rebuild each group as a custom property plus an Audience filtered on it. You keep the targeting, but membership is yours to manage.

Contacts can't pick categories for themselves, and unsubscribing opts them out of all marketing email rather than one category. If your Mailchimp groups carried real consent distinctions, decide how to honor them before your first send.

Before cutover, spot-check that a recreated Audience's membership count is in the right ballpark against the original segment. A wrong translation can undercount or overcount who gets an email, and that isn't always visible in the UI.

## 5. Rebuild Templates

| You have          | Use                               | Result                                            |
| ----------------- | --------------------------------- | ------------------------------------------------- |
| A campaign's HTML | Upload HTML                       | Editable email, imports the original markup as-is |
| A Figma frame     | Connect with Figma                | Responsive email                                  |
| A screenshot      | Upload image to recreate          | Rebuilt structure and styling                     |
| A live campaign   | Forward to `hello@email.brew.new` | Lands in **Templates → Forwarded**                |

Open **Emails** in the sidebar, then use the **Import** tools on the right side of the canvas. See [Importing existing designs](/create-emails/emails#importing-existing-designs).

For most templates, use the HTML or screenshot as reference. Prompt Brew to rebuild it against your brand rather than treating the import as finished. It's faster, and the result inherits your [brand identity](/brand/brand-identity) automatically.

Running a long parallel test instead of a fast cutover? You can design in Brew and still send from Mailchimp.

Click **Send** in the top right, choose **Export template**, and pick Mailchimp (keep GIFs under 2MB). That pushes the finished email through the [Mailchimp integration](/integrations/export/mailchimp) and keeps a new visual direction consistent on both platforms while you migrate.

## 6. Rebuild Automations

| Mailchimp                               | Brew node                                                      |
| --------------------------------------- | -------------------------------------------------------------- |
| Signup / tag-added / e-commerce trigger | Integration event, custom HTTP trigger, or manual-audience run |
| Delay                                   | Wait                                                           |
| If/else branch                          | Filter or Split                                                |
| Email step                              | Send Email, pointed at your rebuilt template                   |

Test-fire before publishing. Leave every rebuilt automation unpublished until cutover day, which is what prevents a double-send. [Build an Automation](/create-emails/build-an-automation) covers the trigger setup and the test step.

## 7. Cut Over

1. Warm up your sending domain first. No history means no reputation, even on a verified domain. Start with your most engaged contacts and ramp over several days. [Gradual send](/create-emails/send-options#gradual-send) does the ramping for you, so you don't need a dedicated warmup campaign. Ask Brew in chat to [preview inbox rendering](/create-emails/preview-in-real-inboxes) before that first send.
2. Do the rest of the rebuild, contacts, templates, and automations, while Mailchimp keeps sending normally. None of it touches live sending.
3. Keep every Brew automation unpublished until cutover day.
4. On cutover day, in order: pause Mailchimp's automations and scheduled campaigns, publish the matching Brew automations, then point signup forms and app events at Brew.
5. Re-export and re-import contacts if meaningful time passed since Step 1.
6. Keep Mailchimp active but silent for a week or two as a safety net, then downgrade or cancel.

Never run both live at once "just in case". That's exactly what causes a double-send.

## Quick Reference

| Task                            | Where in Brew                        |
| ------------------------------- | ------------------------------------ |
| Import contacts                 | Audience → Add contacts → CSV Upload |
| Manage unsubscribes and bounces | Audience tab, contact detail view    |
| Build a segment                 | Audience → Create Audience           |
| Import a template               | Emails → canvas → Import             |
| Build a flow                    | Emails → Automations tab             |
| API keys                        | Settings → API                       |

## Need Help?

Our team is ready to support you at every step of your journey with Brew. Choose the option that works best for you:

<Tabs>
  <Tab title="Self-Service Tools">
    <CardGroup cols="2">
      <Card title="Search Documentation" icon="magnifying-glass" color="#c44925">
        Type in the "Ask any question" search bar at the top left to instantly find relevant documentation pages.
      </Card>

      <Card title="ChatGPT/Claude Integration" icon="robot" color="#c44925">
        Click "Open in ChatGPT" at the top right of any page to explore it further with ChatGPT or Claude.
      </Card>
    </CardGroup>
  </Tab>

  <Tab title="Talk to Our Team">
    <CardGroup cols="2">
      <Card title="Schedule a Call" icon="calendar" color="#c44925" href="https://calendar.google.com/calendar/u/0/appointments/schedules/AcZssZ1iYoRUG1J792XQpbuQLjSRRDupr7MwraFK-HQRCtTYdBmrQi8nZu2qXfzKQigb8gbKJK3KN3-R">
        Book time with our founders for personalized guidance on strategy, best practices, or complex implementation questions.
      </Card>

      <Card title="Call Us Directly" icon="phone" color="#c44925">
        Need immediate assistance? Reach us at **+1-(332)-203-2145** for urgent issues or time-sensitive questions.
      </Card>

      <Card title="Slack Channel" icon="slack" color="#c44925">
        Our preferred support channel. You'll receive an invite after signup for direct founder support and fast responses.
      </Card>

      <Card title="Email Support" icon="envelope" color="#c44925" href="mailto:support@brew.new">
        Contact us at **[support@brew.new](mailto:support@brew.new)** for detailed inquiries or if you prefer not to use Slack.
      </Card>
    </CardGroup>
  </Tab>
</Tabs>
