ml-connector
QuickBooks OnlineMailchimp

QuickBooks Online and Mailchimp integration

QuickBooks Online manages customer records, invoices, and payments for small business accounting. Mailchimp runs email marketing to those customers and captures email engagement events. Connecting the two keeps your customer master in QuickBooks aligned with your email audience in Mailchimp, and lets you see which customers are engaged on email or have bounced. ml-connector automates the credential bridge and handles both systems' concurrency and auth refresh requirements.

How QuickBooks Online works

QuickBooks Online exposes customers, vendors, employees, items, accounts, bills, invoices, payments, purchase orders, and journal entries through the QuickBooks Online Accounting API (REST v3) over HTTPS. Each request targets a company realm ID and requires an OAuth 2.0 access token that expires in 1 hour, with refresh tokens rotating every 24 to 26 hours. QuickBooks publishes webhooks for creates, updates, deletes, merges, and voids on customers, vendors, invoices, bills, payments, accounts, and other entities, though webhook payloads contain only the entity ID and operation type - the full record must be fetched via GET. All creates and updates require the exact object representation plus a SyncToken for concurrency control, and customers and accounts can only be marked inactive, not hard-deleted.

How Mailchimp works

Mailchimp exposes email lists, list members, e-commerce customers, orders, products, and campaign reports through the REST API v3.0, accessed at a data center-specific endpoint (e.g., https://us6.api.mailchimp.com/3.0/). Authentication uses HTTP Basic Auth with an API key or OAuth 2.0 bearer token, with OAuth tokens having no expiry and no refresh token. Mailchimp publishes push webhooks for subscribe, unsubscribe, profile change, and list clean events on marketing lists, but webhooks have no cryptographic signature verification - they rely on HTTPS and a secret URL. Mailchimp has no general ledger accounts, invoices, or purchase orders, making it a messaging and audience system only.

What moves between them

Customer records flow from QuickBooks Online into Mailchimp lists on a schedule or triggered by QuickBooks webhook events. When a new customer is created or updated in QuickBooks, ml-connector creates or updates the matching email contact in Mailchimp. Mailchimp list member events (subscribe, unsubscribe, profile change) flow back to QuickBooks as activity records linked to the customer, giving the accounting team visibility into which customers are engaged on email. The sync runs at least once per day and more often if webhook notifications arrive from QuickBooks.

How ml-connector handles it

ml-connector stores both API keys encrypted and refreshes the QuickBooks bearer token every 50 minutes (well before the 1-hour expiry) using the refresh token, rotating the refresh token whenever QuickBooks issues a new one. For every customer create or update, ml-connector fetches the current customer object from QuickBooks, wraps it with the latest SyncToken, and writes it to Mailchimp with the same sync behavior - any concurrent write from QuickBooks triggers a new fetch to get the current SyncToken before retry. Mailchimp list webhooks (subscribe, unsubscribe, profile change) are received at a registered endpoint and recorded in an audit log; since Mailchimp does not provide cryptographic signatures on its webhooks, ml-connector validates webhook authenticity by confirming the webhook URL matches a registered secret. Customer email address is used as the primary key; if a customer email changes in QuickBooks, ml-connector treats it as a new contact in Mailchimp and archives the old one. Mailchimp's lack of financial entities means the integration is uni-directional for accounting data - no invoices, payments, or account balances flow to Mailchimp. Rate limits from either system trigger exponential backoff with jitter and are logged; the full record state and any errors appear in an audit trail for replay if a downstream operation fails.

A real-world example

A small e-commerce and consulting firm uses QuickBooks Online to manage invoicing and customer records and Mailchimp to run monthly newsletter and campaign emails. Before the integration, the operations team manually maintained an export of customer names and emails from QuickBooks and uploaded it to Mailchimp every time a new customer signed up, creating duplicates and stale records. Sales could not see which customers had unsubscribed from email or bounced. With QuickBooks and Mailchimp connected, each new customer in QuickBooks automatically lands in the Mailchimp audience, and the operations team gets an audit log of subscription changes on each customer record in QuickBooks, making unsubscribe and bounce issues visible during follow-up calls.

What you can do

  • Sync customers from QuickBooks Online to Mailchimp lists on a schedule or on webhook notification, using email as the unique key.
  • Manage QuickBooks OAuth 2.0 token refresh on the 1-hour cycle and handle token rotation without service interruption.
  • Apply SyncToken concurrency control on every customer update so concurrent writes do not cause conflicts.
  • Capture Mailchimp list member events (subscribe, unsubscribe, profile change) and record them as activity on the QuickBooks customer record.
  • Maintain a full audit trail of every sync, including record state before and after, error details, and retry counts for investigation and replay.

Questions

Does the integration sync QuickBooks invoices and payments to Mailchimp?
No. Mailchimp is an email and audience system - it has no invoices, payments, accounts, or purchase orders. The integration syncs customer contact records in both directions so Mailchimp has the right audience and QuickBooks sees subscription activity, but financial data stays in QuickBooks.
How does ml-connector handle QuickBooks' 1-hour token expiry and token rotation?
ml-connector refreshes the QuickBooks OAuth 2.0 bearer token every 50 minutes, well before the 1-hour expiry, using the refresh token. When QuickBooks rotates the refresh token (every 24 to 26 hours), ml-connector captures the new token on the next API call so the next refresh uses the fresh credentials. This prevents auth failures between refresh cycles.
What happens if a customer email address changes in QuickBooks?
ml-connector treats the email address as the primary key for the Mailchimp contact. If the email changes, ml-connector creates a new contact in Mailchimp with the new email and archives the old one. The QuickBooks customer record remains unchanged - it is tracked by customer ID, not email.

Related integrations

Connect QuickBooks Online and Mailchimp

Free to use. Add your credentials, ping your real systems, and see if we fit.

Get started