Mailchimp
Mailchimp is one of the most widely used email marketing platforms, especially among small and mid-sized businesses: newsletters, product announcements, onboarding sequences, abandoned-cart reminders, and other automated customer journeys. Marketing teams work in its editor and campaign tools; engineering teams usually own the integration — syncing contacts and consent from the product, sending events that trigger journeys, and keeping unsubscribes consistent across systems.
Integration mistakes here have legal and reputational consequences. Re-adding someone who unsubscribed violates anti-spam and privacy laws; importing old purchased lists ruins sender reputation; and mixing marketing with password resets means users who opt out stop receiving essential mail. A careful integration respects contact status as sacred, keeps consent records, and protects deliverability.
TL;DR
- Use one audience with tags, groups, merge fields, and segments, rather than many duplicate audiences.
- Contact status — subscribed, unsubscribed, cleaned, pending — must never be overwritten by a sync; use
status_if_new. - Use double opt-in where required and record consent (source, time, wording).
- Upsert contacts by subscriber hash (MD5 of the lowercase email), add tags, and send events to trigger journeys.
- Receive webhooks for unsubscribes and cleaned addresses, and mirror them in your systems.
- Send transactional email through a transactional service; authenticate your domain (SPF, DKIM, DMARC), support one-click unsubscribe, and keep complaint rates low.
Quick Example
Syncing a consenting user from the product with the Mailchimp Marketing API — without resubscribing anyone who opted out:
Receiving unsubscribes and cleaned addresses (Mailchimp checks the URL with a GET request and does not sign webhooks, so keep the URL secret):
Core Concepts
Audiences and Organization
Mailchimp bills by contact count and recommends a single audience with tags and segments; duplicate audiences double-count contacts and fragment unsubscribe status.
Contact Status and Consent
When upserting with PUT, setting status overwrites the existing status — which can resubscribe someone who opted out. Use status_if_new so only new contacts get a status. Record consent in your own system too: source, timestamp, the wording shown, and IP or account. Double opt-in is recommended and in some jurisdictions effectively required. See Consent Management.
Journeys and Events
Customer journeys automate sequences — welcome series, onboarding, re-engagement — triggered by audience changes, tags, dates, or events sent from your product ("trial_started", "project_created"). Send events for meaningful milestones, not every click, and keep naming consistent with your analytics events. See Marketing Automation.
Webhooks and Synchronization
Mailchimp can call a webhook on subscribes, unsubscribes, profile updates, cleaned addresses, and email changes. Mirror unsubscribes and cleaned statuses into your product and CRM so other systems do not email those people. Decide which system owns each field, and avoid sync loops where two systems overwrite each other. See Webhooks and HubSpot.
Deliverability
- Authenticate your sending domain in Mailchimp (DKIM) and publish SPF and DMARC records; sending from a free-mail address fails modern authentication checks.
- Large mailbox providers require bulk senders to authenticate mail, support one-click unsubscribe, and keep spam complaint rates very low (Google's guidance is below 0.3%).
- Never import purchased or scraped lists; Mailchimp's terms prohibit it and spam traps will damage your reputation.
- Clean regularly: remove hard bounces (Mailchimp does this automatically) and re-engage or suppress long-inactive contacts.
- Keep transactional email (receipts, password resets) on a dedicated transactional service — such as Mailchimp Transactional (Mandrill) or another provider — so marketing opt-outs never block essential messages.
See Email Marketing.
Best Practices
Treat Unsubscribes as Final
Never overwrite contact status in syncs, and propagate opt-outs to every system that sends email.
Record Consent at the Source
Store when, where, and how each person agreed to marketing email, independent of Mailchimp.
Sync Selectively
Send only contacts who consented and only the fields marketing needs; minimize personal data in a third-party tool.
Monitor Engagement and Complaints
Watch bounce, complaint, and unsubscribe rates per campaign and pause sending when they rise.
Common Mistakes
Resubscribing Through the API
One Audience per Campaign
Transactional Mail Through Marketing Lists
FAQ
How do I add contacts to Mailchimp from my application?
Use the Marketing API to upsert members by subscriber hash with PUT /lists/{audience_id}/members/{hash}, setting status_if_new and merge fields, and add tags or events as needed.
What is the subscriber hash?
The MD5 hash of the lowercase email address, used to identify a contact in Mailchimp API URLs.
Should I use double opt-in?
It is recommended: it confirms addresses are valid and owned by the person, improves deliverability, and provides stronger consent records, which some jurisdictions effectively require.
Can Mailchimp send transactional emails?
Through Mailchimp Transactional (formerly Mandrill), a separate product with its own API. Keep transactional messages separate from marketing audiences and statuses.
How do I keep unsubscribes in sync across systems?
Configure Mailchimp webhooks for unsubscribes and cleaned addresses, update your product and CRM when they arrive, and never overwrite Mailchimp contact status from other systems.
Related Topics
- Email Marketing — Campaigns, consent, and deliverability
- Marketing Automation — Automated campaigns and journeys
- Consent Management — Recording and honoring consent
- Webhooks — Receiving status changes
- HubSpot — A CRM with its own marketing email tools
- CRM — Customer relationship management