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
- H
Trigger
Contact created, or a watched property changed (webhook subscription, with a polling fallback)
HubSpot
- 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.
- 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.
- 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.
- 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.
- 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.
- 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- JfDrGSMade to order
Jotform submission → its own Google Drive folder with every upload filed inside
Each application gets a Drive folder, the uploads inside it, and a row in the index sheet.
Data sync & backups$99 - QB{}In build
New QuickBooks Online customer → record created in any app with an API
Add a customer in QuickBooks once; the same record lands in your CRM by API.
Data sync & backups$49 - ShGSMade to order
Shopify product created or updated → one row per variant in Google Sheets
Your product sheet matches the Shopify store, one row per variant, minutes after an edit.
Data sync & backups$49
