ml-connector
Sage 100Mailchimp

Sage 100 and Mailchimp integration

Sage 100 runs your on-premises accounting and order management. Mailchimp runs your email campaigns and audience. Connecting the two keeps your customer records in Mailchimp fresh from Sage 100, so every campaign reaches the current contact list without manual exports and re-uploads. New customers in Sage 100 appear in Mailchimp within minutes, customer contact updates sync automatically, and dormant or inactive accounts can be unsubscribed in batch.

How Sage 100 works

Sage 100 is an on-premises ERP covering accounts receivable, accounts payable, general ledger, inventory, purchasing, and sales orders. It exposes AR customers, contacts, sales orders, AP vendors, and GL accounts through two paths: SOAP Web Services (eBusiness) at a customer-specific IIS server, covering only AR customers and sales orders; or the BOI COM layer wrapped by a local Windows agent for full access to AP, GL, PO, and vendor records. Authentication is username and password per call with no OAuth or token refresh. Sage 100 has no webhooks, so all data is retrieved by polling with DateLastUpdated and DateCreated fields. The SOAP surface requires IIS SSL certificates, company codes (3-character), and individual user enablement in Sage admin. Concurrent writes trigger COM record locking, so retries with backoff are essential.

How Mailchimp works

Mailchimp is a REST API for email marketing and audience management. It supports list members, contacts, e-commerce customers, orders, and campaigns through REST endpoints at https://{dc}.api.mailchimp.com/3.0/, where the data center prefix is extracted from the API key. Authentication uses HTTP Basic Auth with an API key or OAuth 2 Authorization Code flow. Mailchimp exposes push webhooks for Marketing API events (subscribe, unsubscribe, profile update, cleaning, email change, campaign delivery) and Transactional API events (send, bounce, delivered, open, click, spam report, unsubscribe, reject) using HTTPS and secret URL protection for Marketing API, and HMAC-SHA1 signatures for Transactional API. E-commerce orders carry financial status (paid, pending, refunded) and totals with currency, offering the closest financial analog in Mailchimp.

What moves between them

Customer data flows from Sage 100 into Mailchimp. ml-connector polls Sage 100 every 15 minutes for AR customer and contact changes, reading the DateLastUpdated field to find records modified since the last sync. For each new or updated customer, ml-connector upserts a matching contact in the designated Mailchimp list, mapping Sage 100 customer name, address, phone, and email to Mailchimp contact fields. If a Mailchimp webhook signals an unsubscribe or permanent hard bounce, ml-connector can flag the customer record in Sage 100 or stop syncing that contact, depending on your configuration. E-commerce orders from Sage 100 sales transactions can also be posted to Mailchimp as e-commerce orders, tagged with Sage 100 order numbers and customer references.

How ml-connector handles it

ml-connector stores both credential sets encrypted: Sage 100 username and password (plus company code and SOAP or agent endpoint URL), and Mailchimp API key (from which the data center prefix is extracted automatically). On every poll cycle, ml-connector calls Sage 100's SOAP endpoint or local agent to fetch AR customers and contacts with DateLastUpdated greater than the last sync timestamp. If Sage 100 returns a COM locking conflict (typically due to concurrent user access), ml-connector backs off exponentially and retries. Each customer record is normalized: multi-segment GL account codes are parsed to extract dimension fields, contact email is validated, and phone is cleaned to a standard format. The customer is then upserted to the target Mailchimp list using email as the unique key, with Sage 100 customer number stored in a custom Mailchimp field for two-way lookup. Mailchimp webhooks for unsubscribe and hard bounce are registered if supported by your Mailchimp plan, and ml-connector can consume those webhooks to suppress future syncs for that contact. Every record carries an audit timestamp, sync status, and failure reason, so failed records can be replayed once the conflict is resolved.

A real-world example

A mid-sized goods distributor runs Sage 100 on-premises to manage AR, AP, and inventory across three warehouses. The marketing team sends monthly account reviews and new product notifications via Mailchimp campaigns. Before the integration, the marketing coordinator manually exported the current customer list from Sage 100 every month, cleaned duplicate emails in a spreadsheet, and re-uploaded the list to Mailchimp by hand. This process took 2-3 hours and often shipped stale data, so campaigns bounced or reached old contacts. After syncing Sage 100 and Mailchimp, every new customer added in Sage 100 appears in Mailchimp within 15 minutes, contact updates flow automatically, and inactive accounts are marked do-not-email by audit rules. The monthly campaign now always targets the current customer set with no manual work.

What you can do

  • Poll Sage 100 for new and updated AR customers every 15 minutes and upsert them to Mailchimp lists with full contact details.
  • Map Sage 100 customer names, addresses, phone numbers, and email addresses to Mailchimp contact fields, storing the Sage 100 customer number for two-way lookup.
  • Extract the Mailchimp data center prefix from the API key automatically and route all Mailchimp calls to the correct regional endpoint.
  • Handle Sage 100 COM record locking with exponential backoff retries, so concurrent user access does not break synchronization.
  • Consume Mailchimp hard bounce and unsubscribe webhooks to suppress future sends and optionally flag customer records in Sage 100.

Questions

Does ml-connector require Sage 100 to be on a public IP or cloud server?
No. Sage 100 is on-premises only and cannot be accessed remotely without a local Windows agent. ml-connector works with both SOAP Web Services (if available at your IIS hostname) or a local agent that wraps the BOI COM layer. Your network must be configured to reach the agent or SOAP endpoint from ml-connector's deployment location, typically through a VPN or firewall rule.
Which Sage 100 records sync to Mailchimp, and what about GL accounts and invoices?
AR customers and contacts sync to Mailchimp list members and e-commerce customers. Mailchimp has no GL accounts, invoices, or vendor records - it is an audience management platform, not an ERP. If you need to sync AP vendors, invoices, or GL entries, those require a different connector paired with an accounting-specific system.
How does ml-connector handle Sage 100's company code and multi-segment GL account structure?
ml-connector accepts the 3-character company code per customer configuration and includes it in every Sage 100 API call. Multi-segment GL account codes (e.g. 4000-01-00) are parsed automatically using customer-supplied mapping rules, so the same integration logic works across different Sage 100 configurations. Customer contact email is used as the unique key in Mailchimp, while the Sage 100 customer number is stored in a custom field for reference and replay.

Related integrations

Connect Sage 100 and Mailchimp

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

Get started