HubSpot Mailchimp Integration: Sync Contacts Without Undoing Unsubscribes

Connect HubSpot and Mailchimp around three separate jobs: contact details, campaign activity and permission to send. Choose the native app that handles the required data, assign an owner to each field, and test unsubscribe behaviour in both directions before enabling production journeys. Two-way contact sync does not establish two-way consent enforcement, and an old CRM value must never become a new customer opt-in.

Jafrin Akter AloLast updated 13 min read
On this page
A contact-card drawer holds a lime card and white envelope beside a pink stop tab, with Mailchimp Sync: Keep Opt-Outs.

A common operating split is sensible: sales manages relationships in HubSpot while marketing sends through Mailchimp. The failure usually appears at the boundary. A contact changes their email address, leaves an audience or unsubscribes while a delayed sync still carries the previous state. If store purchase flows drive most of your email, compare Klaviyo and Mailchimp before building the sync around Mailchimp.

The integration should preserve both the customer record and the customer's choice. Our CRM and lifecycle implementation work defines those responsibilities before adding another connector or workflow. Otherwise, several working automations can compete to write the same fields.

Which HubSpot–Mailchimp integration should you use?

Start by identifying the exact installed app. HubSpot's Mailchimp Data Sync and Mailchimp Campaign Sync have different purposes; the older forms integration is not a complete bidirectional contact-and-preference system.

Which HubSpot–Mailchimp integration should you use?
Required jobRoute to evaluateBoundary to test
Keep selected contact fields alignedMailchimp Data SyncActual mappings, direction and conflict rules
Show Mailchimp sends, opens, clicks and bounces in HubSpotMailchimp Campaign SyncEligible campaigns and existing contact match
Add new non-HubSpot form submitters to MailchimpThe documented forms connectionLimited fields and no historical form backfill
Enforce a cross-tool subscription policyExplicit preference integrationAudience/type scope, current evidence and acknowledgement

The current Data Sync listing requires Data Hub Starter or above. It supports one- or two-way contact sync and historical records, but excludes groups, tags and email opens/clicks. The listing directs activity requirements to the separate Campaign Sync app. Check the app-specific prerequisite rather than applying the general data-sync page's availability to this connector. Mailchimp Data Sync listing.

Campaign Sync sends email activity to existing HubSpot contacts. Campaign Sync listing. The forms guide limits contact transfer to HubSpot-to-Mailchimp, first name, last name and email. Earlier form submissions are not backfilled, and required Mailchimp merge fields that HubSpot does not supply prevent the sync. Forms integration limits.

Do not remove a required business field merely to make a connector appear healthy. Either collect and map the required value through an appropriate route or choose an audience design that genuinely does not require it. A successful record creation with missing operational context can be worse than a visible error.

How should contact fields and identities be mapped?

Give each field one authoritative writer and make every reverse update deliberate. HubSpot may own sales owner, lifecycle stage and company association, while Mailchimp owns its delivery result and audience subscription state. A customer-facing preference service may own a broader cross-tool decision.

Write the mapping before switching on a two-way connection:

How should contact fields and identities be mapped?
DataSuggested ownerAllowed behaviour
Sales owner and qualificationHubSpotSend only fields needed by the email programme
First and last nameAgreed profile sourceUpdate names without changing subscription status
Mailchimp audience membership and statusMailchimp plus approved preference policyInterpret within the specific audience and channel
HubSpot subscription typeHubSpot preference mechanismUpdate the mapped type, not an unrelated custom boolean
Delivery failuresSending platformPreserve separately from voluntary opt-out

Data Sync normally matches contacts by email. Its default conflict setting chooses which app wins a discrepancy, but does not override the selected sync direction; an empty value in the preferred app does not overwrite the other app. Review each mapping and the actual matching result rather than assuming “HubSpot wins” resolves every edge case. Data Sync configuration.

Email can change, and it is not always a safe universal person identifier. Keep a cross-reference between the HubSpot record, Mailchimp audience/member and the business customer ID where your design needs it. When an address changes, verify whether the configured route updates the intended record or creates another one. Preserve suppression for the old record while resolving the new identity under the approved policy.

The CRM property ownership guide explains how to avoid conflicting writers. Use the single customer view guide when duplicate or shared identities are the underlying problem.

Not by itself. HubSpot's Data Sync filters limit which records initially enter the sync. Once a record is synced, later mapped changes continue to sync. A filter that excluded unsubscribed contacts at setup is therefore not evidence that a future opt-out stops every downstream message. Initial-filter behaviour.

Use filters to control the population you intentionally connect. Use the sending platform's subscription controls and your explicit propagation design to enforce later choices. Test the transition after a record already exists in both tools; testing only whether a new unsubscribed record is excluded misses the more important case.

How do Mailchimp audiences map to HubSpot subscriptions?

Map the communication's purpose and scope, not just similar labels. Mailchimp treats audiences independently: an unsubscribe from one audience does not automatically unsubscribe the person from another. It recommends one primary audience with tags when a single organisation would otherwise create overlapping audiences. Mailchimp unsubscribe scope.

HubSpot subscription types represent categories of communication, with Subscribed, Unsubscribed and Not specified states. Not specified behaves differently with data privacy settings enabled or disabled; do not translate it into a verified opt-in. HubSpot's email-sending requirements also require appropriate direct permission and exclude people who opted out or marked mail as spam in another tool. Subscription states, sending requirements.

For example, suppose Mailchimp audience brand_a_news represents Brand A newsletters. Map it to the corresponding HubSpot brand and newsletter subscription type. Do not map it to every subscription in the account unless that is the approved scope the customer was promised.

How do Mailchimp audiences map to HubSpot subscriptions?
Mailchimp conditionWhat it meansIntegration action to design
SubscribedAn opt-in is recorded for that channel/audienceCheck its scope and evidence before any corresponding permission increase
UnsubscribedA previous subscriber opted outPropagate the restriction to the matching purpose
Non-subscribedNo marketing opt-in recordedKeep outside marketing sends; do not treat as subscribed
CleanedAddress is undeliverablePreserve delivery suppression separately from preference

These contact definitions come from Mailchimp's contact model. An archive or deletion is another lifecycle action; neither should be casually substituted for a subscription update.

HubSpot also has broader opt-out states and brand-specific subscription context. Read both the relevant type and the applicable wider restriction. A blank global-opt-out property does not prove that a specific newsletter is permitted. HubSpot subscription inspection.

How should opt-outs travel between the two tools?

Capture the restrictive change durably, map its scope, apply it to the affected sender and record the sender's acknowledgement. Keep ordinary profile updates out of that path. A name correction or sales-stage change must not include a default subscription value.

For each direction, define four things:

  1. Which customer interaction or source state creates the change.
  2. Which audience, channel, brand and subscription type it affects.
  3. Which destination operation enforces the restriction.
  4. What happens to queued optional messages until enforcement is confirmed.

A contact update in HubSpot is not the same operation as a communication-preference update. HubSpot provides a dedicated API for reading and updating subscription states, including brand context. Use that supported preference mechanism for the intended scope, then read back the resulting state. HubSpot communication-preferences API.

Do not assume an automation called “update contact” has changed the subscription type. Inspect the actual destination fields and the contact's communication subscriptions. A custom property named mailchimp_unsubscribed can be useful evidence, but it only suppresses HubSpot sends if the designed sending rules actually use it.

When a restrictive change cannot reach a sender, hold the affected optional messages according to the operating policy, retry the update and alert the owner. If the chosen native tools cannot provide that hold, the limitation needs a different design or a narrower rollout. The customer preference-centre guide covers authority, durable delivery and acknowledgement across senders.

These holds belong before dispatch. HubSpot says a deferred marketing or transactional send cannot be manually stopped after the initial attempt. Do not promise recall after handing a message to the sender; preserve the attempt and preference-change evidence when investigating an already-started delivery. HubSpot delivery boundary.

How should resubscription work?

Treat resubscription as a new, explicit customer action with appropriate evidence. Mailchimp says contacts who unsubscribed themselves must sign up again through its hosted signup form. Manually unsubscribed contacts have a different administrative route. An old subscribed value copied from HubSpot is neither of those actions. Mailchimp resubscription rules.

Preserve the source, scope and accepted version of a new choice. Do not use the arrival time of a delayed CSV import as proof that the customer recently changed their mind. A new authorised action can change a preference; replaying a stale mirror should not.

What should a custom integration keep separate?

Use separate profile and preference operations. For profile updates, allow only the intended ordinary fields. For preferences, require explicit scope, current evidence, source verification and enforcement acknowledgement. This separation makes accidental permission changes easier to prevent and review.

Mailchimp's member API distinguishes merge_fields, current status and status_if_new. The latter applies when creating a member; it is not a command to update an existing member's status. Do not place status: subscribed into every routine upsert. Mailchimp member API.

This Python helper builds only a name-update body for an already verified, existing Mailchimp member. It makes no network request, performs no identity matching and changes no subscription state. FNAME and LNAME must be the actual configured merge tags in the target audience; the 128-character bound is this example's local validation choice, not a Mailchimp platform limit.

Python
def profile_only_update(fields):
    allowed = {"FNAME", "LNAME"}
    if not isinstance(fields, dict) or not fields:
        raise ValueError("Provide a non-empty field dictionary")
    if not set(fields).issubset(allowed):
        raise ValueError("Only FNAME and LNAME are allowed")

    result = {}
    for name, value in fields.items():
        if not isinstance(value, str):
            raise ValueError("Name values must be strings")
        if not value.strip() or len(value) > 128:
            raise ValueError("Name values must contain 1 to 128 characters")
        result[name] = value
    return {"merge_fields": result}

The helper deliberately rejects blank values rather than silently clearing existing names. Add a separately reviewed clearing operation if the business needs it. New-contact creation, address changes and preference commands need their own validation and permission rules.

Mailchimp webhooks can notify an integration about subscription, address and other audience changes. Its current webhook documentation supports HMAC signing over the timestamp and raw request body. Enable and verify that mechanism when using a custom receiver, retain the unmodified body for verification and reject invalid or stale deliveries according to the documented method. Mailchimp webhook handling.

Do not turn that transport check into permission to trust every field indefinitely. Validate the audience mapping, deduplicate processing, retrieve current state when needed and avoid writing a response that immediately triggers an equal-and-opposite update. Record the accepted business change separately from retry attempts.

How do you test stale writes and partial failures?

Use a controlled contact already present in both systems, then introduce the changes in an order that can expose a broken design. The most important result is what the sender will do after the sync, not whether the connector reports success.

Consider a synthetic Brand A newsletter contact. HubSpot initially holds an old subscribed mirror. The contact then unsubscribes in Mailchimp. Before the restriction finishes propagating, a routine CRM update changes their last name. The correct result is the new last name with the newsletter still suppressed.

How do you test stale writes and partial failures?
TestExpected resultEvidence to inspect
Mailchimp opt-out followed by profile updateRestriction survivesDestination subscription plus changed name
Same opt-out delivered twiceOne effective preference changeAccepted change and retry records
Older subscribed export arrives laterNo new opt-inRejected stale write or profile-only handling
A different audience remains subscribedOnly mapped scope changesAudience and subscription-type states
Destination update failsAffected optional sends waitHold, retry and alert record
Customer completes the supported resubscription routeOnly the authorised scope reopensNew evidence and sender acknowledgement

Include a message already queued before the opt-out. The sender must apply the latest effective restriction before dispatch. Also test a cleaned address, a missing subscription mapping, a changed email and a duplicate CRM record. Each needs an explicit outcome rather than a guessed default.

How the workflow fits together
Incoming profile or opt-out changes split: profiles apply allowed fields only; opt-outs require valid scope and current evidence, then sender restriction and acknowledgement. Failed scope or acknowledgement holds the change for reconciliation, while accepted enforcement triggers a queued-send recheck.
Read diagram as text
  • Incoming profile or opt-out change to Opt-out change?.
  • Opt-out change? to Apply allowed profile fields only: No.
  • Opt-out change? to Scope and current evidence valid?: Yes.
  • Scope and current evidence valid? to Hold and reconcile the change: No.
  • Scope and current evidence valid? to Apply scoped sender restriction: Yes.
  • Apply scoped sender restriction to Sender acknowledges current state?.
  • Sender acknowledges current state? to Hold and reconcile the change: No.
  • Sender acknowledges current state? to Record enforcement and recheck queued sends: Yes
Open full diagram

The preference branch above represents the restriction-propagation path. Permission increases use the separate supported resubscription process. Do not interpret the diagram as an instruction to subscribe a contact whenever a source field looks positive.

Why are contacts or campaign activities missing?

Classify the missing item before reconnecting the apps. A field, an audience member and a campaign event have different requirements. Reinstalling a connector can obscure the evidence and restart work without fixing the cause.

Why are contacts or campaign activities missing?
SymptomFirst investigationUseful next step
Existing form submitters never appearedWas the form connected after those submissions?Plan a controlled historical import with correct status
Required-field error in MailchimpDoes the route supply every required merge field?Fix the schema or choose a suitable route
Tags or groups absentIs the app Data Sync?Use an explicitly supported alternative for those fields
Contact sync works but opens/clicks do notIs Campaign Sync installed and enabled?Inspect campaign eligibility and contact match
Contact unexpectedly still receives emailWhich sender and subscription scope permitted it?Trace actual enforcement, not just the CRM mirror

The forms integration's activity sync includes only qualifying campaigns: no earlier than 30 days before connection, with non-empty subject and title, outside A/B tests and Customer Journeys. Enabling it retrieves only the previous month's historical campaign data. Those are coverage limits, not evidence that the campaign failed to send. Campaign activity conditions.

For Data Sync, inspect the record-level In Sync, Failing and Excluded views and the error detail. Initial indexing can take time, and saving the configuration restarts initial sync. Make a targeted correction and preserve the failing record's evidence before changing the entire connection. Data Sync operation and record states.

Monitor four outcomes separately: profile changes delivered, preference changes acknowledged, queued messages suppressed and unresolved failures. A high contact-sync success rate can coexist with an unsafe preference path if that path is not measured.

What should pass before production rollout?

Release a small, controlled population after the actual sender obeys the mapped choices. Expand only when the operating owner can explain both a successful update and a failed one.

Checklist

  • The installed apps and their separate jobs are recorded.
  • App-specific plan and permission requirements are satisfied.
  • Each ordinary field has an authoritative source and direction.
  • Audience, channel, brand and subscription-type scopes are mapped.
  • Ordinary profile updates cannot set subscription status.
  • Unsubscribe and resubscribe routes are distinct and supported.
  • Stale imports cannot restore an old opt-in.
  • Failed enforcement holds the affected optional sending path.
  • Queued messages use current restrictions before dispatch.
  • Address changes, duplicates and cleaned contacts have tested outcomes.
  • Activity coverage is understood independently of contact sync.
  • An owner monitors failures and can stop or roll back the integration.

If the stack is connected but the customer choices do not agree, get the $99 martech audit. Bring the field map, audience/type map and one redacted failure trace. A useful repair targets the specific ownership or enforcement gap instead of adding another full-contact sync that can repeat it.

Keep reading

Browse all CRM & Lifecycle guides

Questions people ask

Can HubSpot and Mailchimp both send the same newsletter?

They can technically be configured to send, but assign one owner to each customer-facing message. If both systems remain active during migration, define the audience split and suppression path explicitly. Test customers present in both tools and a person who opts out while a message is queued. Two independent send schedules should not accidentally become two copies of the same campaign.

Does a Mailchimp tag mean a person has subscribed?

No. A tag is organisational metadata, while subscription status determines the relevant sending state. Use tags for segmentation only after checking the audience and channel permission. A tag such as “newsletter” may describe an old import or internal interest classification. It should not be treated as a new customer instruction or used to overwrite an unsubscribe.

Is a HubSpot marketing contact automatically eligible for Mailchimp email?

No. Marketing-contact status concerns the relevant HubSpot product and billing model; it does not establish permission in another sender. HubSpot marketing contacts. Check the Mailchimp audience state and the underlying approved permission evidence. Keep the commercial population estimate separate from the subscription mapping, so an import intended to support sales does not silently become a marketing list.

Can we fix a mismatch by deleting and recreating the contact?

Avoid that as a routine repair. Deletion can remove identity, history and suppression evidence while leaving the original mapping defect unresolved. Inspect the current records, source of the conflicting write and supported recovery route first. Preserve the customer choice during any authorised repair, then verify the intended person, audience and subscription state before allowing messages again.

How should we measure whether the integration works?

Measure the delay and success of both profile updates and restrictive preference changes, then inspect actual sends after an opt-out. Track unresolved mapping errors, duplicate records and stale-write attempts. Keep campaign-activity coverage separate because missing history may reflect connector limits. The useful success measure is correct customer-facing behaviour, supported by traceable records, rather than the number of contacts copied.

Sources

  1. HubSpot: Mailchimp forms and activity integration.
  2. HubSpot: Mailchimp Data Sync.
  3. HubSpot: Mailchimp Campaign Sync.
  4. HubSpot: Data Sync configuration.
  5. Mailchimp: Contact types.
  6. Mailchimp: Unsubscribe scope.
  7. HubSpot: Subscription types and states.
  8. HubSpot: Marketing-email requirements.
  9. HubSpot: Inspect subscription status.
  10. HubSpot: Communication-preferences API.
  11. Mailchimp: Resubscribe a contact.
  12. Mailchimp: Member-update fields.
  13. Mailchimp: Audience webhooks and signatures.
  14. HubSpot: Marketing-contact classification.
Portrait of Jafrin Akter Alo

Written by

Jafrin Akter Alo

Data Engineer and Co-founder at Martechdevs and Growth and Analytics Partners

Jafrin writes practical guides to marketing technology, customer data, analytics and AI workflows. Martechdevs is a Growth and Analytics Partners company.

View LinkedIn profile

Book a Free Call

Thirty minutes on your stack and what it needs. Free, and no pitch.

Thirty minutes, and you leave with a plan

We look at what you have, what it is costing you and what to do about it first.

  • 30 minutes
  • Video call, link on booking
  • No obligation

What we'll cover

  • Your current stack and where it hurts
  • Quick wins we can ship first
  • An integration roadmap
  • Timeline, scope and next steps

Calendar not loading? Open it in a new tab or email hello@martechdevs.com.