Skip to content
Automation Squad
HMcMade to order

Data sync & backups

HubSpot contact created or changed → Mailchimp audience member kept in step

Marketing sends to the list HubSpot holds, and unsubscribes never get re-added.

When a HubSpot contact is created or a watched property changes, the same person is created or updated in your Mailchimp audience. Name, company and a lifecycle-stage tag go with them. Anyone who unsubscribed in Mailchimp stays unsubscribed, and that status is written back to the HubSpot record. Sales keeps working in HubSpot; marketing sends to a list that matches it.

How it works

  1. H

    Trigger

    Contact created, or a watched property changed (webhook subscription, with a polling fallback)

    HubSpot

  2. H

    Step 1

    Read the contact's current properties

    Fetches email, firstname, lastname, company, lifecyclestage, hs_email_optout and the custom mailchimp_status property for the contact that fired the trigger.

  3. if

    Step 2

    Stop when there is no email or the contact opted out in HubSpot

    Ends the run for contacts with a blank email or hs_email_optout set to true. Nothing is sent to Mailchimp for them; the reason is written to the execution data so you can see why.

  4. Mc

    Step 3

    Look up the member by email

    Calls the audience's member endpoint with the MD5 hash of the lower-cased email and returns the member's status: subscribed, unsubscribed, cleaned, pending or not found.

  5. if

    Step 4

    Branch on the Mailchimp status

    Routes unsubscribed and cleaned members straight to the write-back step untouched, sends not-found contacts to create, and sends subscribed and pending members to update.

  6. Mc

    Step 5

    Create or update the member with merge fields and tags

    Writes the FNAME, LNAME and COMPANY merge fields and applies a tag named after the HubSpot lifecycle stage; any earlier stage tag is removed. New members get the status you choose once, subscribed or pending for double opt-in.

  7. H

    Step 6

    Write the Mailchimp status back to the contact

    Sets mailchimp_status and mailchimp_synced_at on the HubSpot contact so reps can see list membership without opening Mailchimp.

What changes once it runs

  • A contact created in HubSpot is in the Mailchimp audience before the next campaign goes out.
  • Unsubscribed and cleaned addresses are never re-added, whatever changes in HubSpot.
  • Each member carries exactly one lifecycle-stage tag, so a Mailchimp segment built on the tag matches the HubSpot stage it came from.
  • Reps see list status without opening Mailchimp.
  • Contacts with no email, or opted out in HubSpot, are skipped, and the execution data says why.

What you get

  • n8n workflow export with both the webhook and the polling trigger wired in
  • Guide to the HubSpot private app, the optional developer app, the COMPANY merge field and the Mailchimp API key
  • Property-to-merge-field mapping sheet you can extend with your own custom properties
  • A recorded walkthrough of the first run, including a deliberate unsubscribe test
  • Email support for 30 days

Before you start

  • HubSpot CRM (the free tier works) with a private app token holding crm.objects.contacts read and write scopes
  • For instant webhooks, a HubSpot developer app (the n8n HubSpot Trigger node needs one); without it the workflow polls changed contacts every 15 minutes
  • Mailchimp (the free plan works) with one audience and an API key; FNAME and LNAME exist by default and the guide adds a COMPANY text merge field
  • Two custom contact properties in HubSpot, mailchimp_status and mailchimp_synced_at; the guide shows how to add them

Built for

Questions before you buy

Which HubSpot properties trigger a sync?
Creation always does. For changes, you choose the properties to watch when you set up the webhook subscription or the polling filter; the shipped default is firstname, lastname, company and lifecyclestage. Every other property change is ignored, which keeps the Mailchimp call volume low.
What if the same email exists twice in HubSpot?
Both HubSpot contacts write to the same Mailchimp member, because Mailchimp keys members on email, and the most recent change wins. The guide includes a HubSpot duplicate report to run before you switch the workflow on.
Does it sync Mailchimp changes back into HubSpot?
Only the subscription status, and only when a HubSpot change fires the workflow. An unsubscribe in Mailchimp reaches HubSpot the next time that contact changes, not the moment it happens. A Mailchimp-triggered reverse flow is not in this package.
Do I need a paid n8n plan?
No. n8n Cloud on any plan runs it, and so does the free self-hosted community edition. The HubSpot Trigger node does need a HubSpot developer app for webhooks; if you would rather not create one, the polling trigger is included and uses the private app token alone.
How does it handle Mailchimp's rate limits?
Mailchimp allows 10 simultaneous connections per account. The workflow handles one contact at a time and retries once after a 429 response. A bulk import of an existing list should go through Mailchimp's own CSV import first; the workflow then keeps it current.

Nearby on the shelf

Whole catalog