Deployment guide

Migrating from Mailchimp to self-hosted Mautic on VPS

Deploy on a VPS Cloud →

Tutorial

Migrating from Mailchimp to self-hosted Mautic on VPS

Business Email9 min read15 steps

Every new Mailchimp pricing tier means a higher invoice, regardless of how active your contacts actually are. Mautic, deployed on a VPS, removes that ceiling: you manage your lists, automations and sender reputation on your own infrastructure. This guide covers the export from Mailchimp, the Docker installation of Mautic, the segmented import and the DNS configuration before the first send.

Contents· Why leave Mailchimp now1/11
  1. 01Why leave Mailchimp now
  2. 02Concrete benefits of self-hosted Mautic
  3. 03Minimum requirements
  4. 04Exporting contacts from Mailchimp
  5. 05Installing Mautic via Docker on a VPS
  6. 06Importing contacts into Mautic
  7. 07DNS configuration before the first send
  8. 08Running Mailchimp and Mautic side by side during the switch
  9. 09Common troubleshooting
  10. 10Mailchimp vs self-hosted Mautic
  11. 11Next steps

Why leave Mailchimp now

Mailchimp bills by tiers of active contacts. An unsubscribed contact still counts in your total until manually deleted, and the upgrade to the next tier triggers automatically as soon as the list crosses the threshold. For an agency managing ten clients, each list is a separate subscription: the total quickly exceeds what the service justifies.

Mautic is an open-source marketing automation platform. Deployed on a VPS, it has no contact ceiling and no software surcharge. You keep full access to your data, you choose the sending server and you control the entire DNS authentication configuration.

Concrete benefits of self-hosted Mautic

  • Predictable cost — the VPS costs {{vps.start.price}} per month, regardless of the number of contacts or sends.
  • Full data control — lists, segments and engagement history stay on your infrastructure; no third-party provider accesses them.
  • Simplified GDPR compliance — a single sub-processor (your VPS host), no transfers to undeclared non-EU servers.
  • Dedicated IP reputation — your sending IP address is not shared with thousands of other senders, eliminating neighbourhood effects on deliverability.
  • No cap on automations — workflows, lead scoring, embedded forms, A/B testing: no feature is gated behind a paid tier.
  • Native integration — REST API, webhooks, CRM connectors: Mautic integrates with existing tools at no extra cost.

Minimum requirements

Mautic requires at least 2 vCPU and 2 GB of RAM for a modest-sized list. For lists above 50,000 contacts or frequent sends, plan for 4 vCPU and 4 GB of RAM. The {{vps.start.name}} plan is sufficient to get started; the {{vps.power.name}} plan is recommended for higher volumes.

Required software: Docker and Docker Compose (included in ServOrbit VPS images), a domain pointed at the VPS, a MySQL 8 or MariaDB 10.6+ database (provided in the Docker stack below).

Plan a dedicated subdomain for Mautic, for example mailing.your-domain.com, separate from the main domain. This makes managing the DNS authentication records easier without risking changes to your website's records.

Exporting contacts from Mailchimp

  1. Access the list to export

    In Mailchimp, click Audience in the left sidebar, then select All contacts. If you manage multiple audiences, repeat the process for each one.

  2. Launch the CSV export

    Click Export Audience (button in the top right), then choose Export as CSV. Mailchimp prepares the file and sends you a download link by email. Download the file and open it in a spreadsheet to check the columns.

  3. Identify the columns to keep

    The Mailchimp CSV typically includes: Email Address, First Name, Last Name, MEMBER_RATING, OPTIN_TIME, OPTIN_IP, CONFIRM_TIME, UNSUB_REASON, TAGS. For Mautic, the essential columns are Email Address, First Name, Last Name and any custom fields you have defined.

  4. Filter out unsubscribed contacts

    The Mailchimp CSV contains all statuses: subscribed, unsubscribed, non-subscribed, cleaned. Filter on subscribed before importing into Mautic to avoid importing contacts who have requested to unsubscribe.

  5. Prepare one file per segment if needed

    If Mailchimp manages multiple segments or tags on the same audience, export segments separately (filter by Tag in the Contacts view, then export). This makes it easier to recreate segments in Mautic at import time.

Installing Mautic via Docker on a VPS

  1. Create the project folder and docker-compose.yml

    Connect to your VPS via SSH and create a dedicated folder:

    mkdir -p /opt/mautic && cd /opt/mautic

    Create the docker-compose.yml file with the following content:

    version: '3.8'
    services:
      db:
        image: mysql:8.0
        restart: unless-stopped
        environment:
          MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
          MYSQL_DATABASE: mautic
          MYSQL_USER: mautic
          MYSQL_PASSWORD: ${DB_PASSWORD}
        volumes:
          - db_data:/var/lib/mysql
    
      mautic:
        image: mautic/mautic:5
        restart: unless-stopped
        depends_on:
          - db
        ports:
          - "8080:80"
        environment:
          MAUTIC_DB_HOST: db
          MAUTIC_DB_USER: mautic
          MAUTIC_DB_PASSWORD: ${DB_PASSWORD}
          MAUTIC_DB_NAME: mautic
          MAUTIC_TRUSTED_PROXIES: "0.0.0.0/0"
        volumes:
          - mautic_data:/var/www/html
    
    volumes:
      db_data:
      mautic_data:
  2. Create the environment variables file

    Create the .env file in the same folder:

    DB_ROOT_PASSWORD=strong-root-password
    DB_PASSWORD=strong-mautic-password

    Replace the values with long random passwords. Never commit this file to a repository.

  3. Start the containers

    Launch the stack:

    docker compose up -d

    Wait one minute, then check that the containers are running:

    docker compose ps

    Both the db and mautic services should show the running state.

  4. Configure the nginx reverse proxy

    Create an nginx vhost pointing to port 8080 and add SSL via Certbot. Minimal example for mailing.your-domain.com:

    server {
        listen 80;
        server_name mailing.your-domain.com;
        location / {
            proxy_pass http://127.0.0.1:8080;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }

    Then obtain the SSL certificate:

    certbot --nginx -d mailing.your-domain.com
  5. Complete the installation via the web interface

    Open https://mailing.your-domain.com in a browser. The Mautic installation wizard asks you to confirm the database settings (pre-filled from the environment variables) and to create the administrator account. Store the credentials in a password manager.

Importing contacts into Mautic

  1. Access the import in Mautic

    In the Mautic interface, click Contacts in the top menu, then click the Import button (upload icon, top right of the contacts list).

  2. Upload the CSV file

    Select the CSV file filtered to subscribed contacts. Mautic accepts UTF-8 CSV files. If your file contains special characters (accented letters, Arabic), verify the encoding before importing.

  3. Map the columns

    Mautic shows a column-by-column mapping screen. Map Email AddressEmail, First NameFirst name, Last NameLast name. For custom Mailchimp fields, create the corresponding fields in Mautic (Settings → Contact fields) before the import.

  4. Enable the Update if exists option

    Check the Update existing contacts option. This option is essential for successive or corrective imports: without it, Mautic creates duplicates instead of merging data. It uses the email address as the upsert key.

  5. Verify the absence of duplicates after import

    Once the import is complete, search for an imported contact by their email address. Verify that the profile is unique and that the fields are correctly populated. To detect any duplicates in bulk, use the Duplicate contacts filter in the segments module.

DNS configuration before the first send

Sending campaigns without DNS authentication leads to SMTP rejections or spam classification. The three records to set up are SPF, DKIM and DMARC.

SPF — publish a TXT record at the root of your sending domain. If your VPS sends directly via Postfix, the value looks like v=spf1 ip4:<YOUR-VPS-IP> ~all. Replace <YOUR-VPS-IP> with your server's IPv4 address.

DKIM — in Mautic, go to Settings → Configuration → Email settings → DKIM signature. Click Generate a DKIM key. Mautic shows the public key to publish as a TXT record in your DNS zone, on the selector mautic._domainkey.your-domain.com.

DMARC — create a TXT record on _dmarc.your-domain.com with the value v=DMARC1; p=none; rua=mailto:[email protected]. The p=none mode is the right starting point: it generates reports without blocking any emails during the warm-up period.

After two to four weeks of reports, move to p=quarantine and then to p=reject once all legitimate sources pass alignment.

Running Mailchimp and Mautic side by side during the switch

Do not shut down Mailchimp on the day of the import. Keep active campaigns running on Mailchimp while Mautic warms up its sending IP. The reputation of a new IP builds gradually: start by sending small volumes to your most engaged contacts (recent openers), then increase gradually over two to four weeks. During this period, the two platforms coexist without conflict: a contact may receive emails from both; what matters is that unsubscribes are processed in both systems in parallel.

Common troubleshooting

Hard bounces due to missing SPF. If the SPF record does not include your VPS IP, receiving servers reject emails with a 550 code. Verify with dig TXT your-domain.com that the SPF record is published and that the VPS IP is listed.

SMTP error: port 25 blocked. Most VPS hosts block outbound port 25 by default to limit spam. Use an SMTP relay (port 587 with STARTTLS authentication) such as Amazon SES, Mailgun or Brevo as a sending gateway. In Mautic, configure this relay under Settings → Configuration → Email settings → SMTP transport.

Images not loading in emails. Mautic hosts email images on its own domain. Verify that the Mautic base URL is set to your public subdomain (https://mailing.your-domain.com) and not localhost. This setting is changed in Settings → Configuration → System settings → Base URL.

DKIM signature not verified. A poorly published DKIM key or incorrect selector gives dkim=fail in headers. Check with dig TXT mautic._domainkey.your-domain.com that the record is present and matches the key shown in Mautic.

403 error or blank page after update. Mautic 5 requires PHP 8.1+. If you use the official Docker image, the PHP version is managed automatically. After an upgrade, clear the Mautic cache: docker compose exec mautic php bin/console cache:clear.

Mailchimp vs self-hosted Mautic

Scroll the table

CriterionMailchimpSelf-hosted Mautic (VPS)
CostBy contact tiers; increases automaticallyFixed VPS cost (`{{vps.start.price}}`/month), no software surcharge
Data and GDPRStorage on US servers; transfer to declareData on your VPS (European datacenters); a single sub-processor
Technical controlLimited interface; DNS not modifiableFull root access; SMTP, DKIM, reverse proxy configured as you choose
DeliverabilityShared IP with other sendersDedicated IP; reputation built by you
AutomationsLimited by tierWorkflows and scoring with no cap, open source
MaintenanceNone (SaaS)Docker updates to plan; backups to configure

Next steps

Once Mautic is running and the first warm-up sends have succeeded, the next step is configuring subscription forms on your website to feed Mautic directly, and creating the automation segments that replace Mailchimp journeys.

For agencies managing multiple clients, the ServOrbit reseller offering allows you to provision one Mautic VPS per client from a single management space, with separate WHM access and centralised billing. Each client has their own isolated infrastructure, dedicated IP and individual DNS authentication configuration.

See the agencies solutions page for details on the reseller offering.

Manage your clients' email infrastructure from a single space

With the ServOrbit reseller offering, each client has their own Mautic VPS, dedicated IP and separate billing. You hold the infrastructure, you manage the relationship.

Need help?

Browse our help center and FAQ, or reach our team — callback, WhatsApp or email. Support in French, English and Arabic.

Message us on WhatsAppopens in a new tab