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
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.
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.
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 areEmail Address,First Name,Last Nameand any custom fields you have defined.Filter out unsubscribed contacts
The Mailchimp CSV contains all statuses:
subscribed,unsubscribed,non-subscribed,cleaned. Filter onsubscribedbefore importing into Mautic to avoid importing contacts who have requested to unsubscribe.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
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/mauticCreate the
docker-compose.ymlfile 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:Create the environment variables file
Create the
.envfile in the same folder:DB_ROOT_PASSWORD=strong-root-password DB_PASSWORD=strong-mautic-passwordReplace the values with long random passwords. Never commit this file to a repository.
Start the containers
Launch the stack:
docker compose up -dWait one minute, then check that the containers are running:
docker compose psBoth the
dbandmauticservices should show therunningstate.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.comComplete the installation via the web interface
Open
https://mailing.your-domain.comin 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
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).
Upload the CSV file
Select the CSV file filtered to
subscribedcontacts. Mautic accepts UTF-8 CSV files. If your file contains special characters (accented letters, Arabic), verify the encoding before importing.Map the columns
Mautic shows a column-by-column mapping screen. Map
Email Address→Email,First Name→First name,Last Name→Last name. For custom Mailchimp fields, create the corresponding fields in Mautic (Settings → Contact fields) before the import.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.
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
| Criterion | Mailchimp | Self-hosted Mautic (VPS) |
|---|---|---|
| Cost | By contact tiers; increases automatically | Fixed VPS cost (`{{vps.start.price}}`/month), no software surcharge |
| Data and GDPR | Storage on US servers; transfer to declare | Data on your VPS (European datacenters); a single sub-processor |
| Technical control | Limited interface; DNS not modifiable | Full root access; SMTP, DKIM, reverse proxy configured as you choose |
| Deliverability | Shared IP with other senders | Dedicated IP; reputation built by you |
| Automations | Limited by tier | Workflows and scoring with no cap, open source |
| Maintenance | None (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.