Sage 100 and WooCommerce integration
Sage 100 runs your accounting and inventory; WooCommerce powers your online store. The two need to stay aligned so that new web customers appear in AR, web orders update your inventory, and reconciliation is automatic. ml-connector reads customers and GL accounts from Sage 100 and listens for orders from WooCommerce, posting them into AR as invoices or debit memos without manual re-entry. It handles the very different interfaces - SOAP on one side, REST on the other - and keeps the audit trail clean.
What moves between them
The main flow combines polling and push. ml-connector polls Sage 100 for AR customers and GL accounts once per day and caches them as reference data. When a customer places an order on WooCommerce, the order webhook fires immediately, and ml-connector reads the order details, looks up the customer in the cached Sage 100 customer list, and writes the order as an AR invoice or debit memo into Sage 100. Customer updates from WooCommerce are also received via webhook and flow into Sage 100's AR customer master. The direction is primarily WooCommerce into Sage 100; Sage 100 data (customers, GL accounts, item codes) flows into WooCommerce only as reference for mapping and validation.
How ml-connector handles it
ml-connector maintains encrypted storage of both the Sage 100 username and password and the WooCommerce Consumer Key and Consumer Secret. For every SOAP call to Sage 100, it includes the credentials in the envelope and specifies the customer's company code. Because Sage 100 has no webhooks, ml-connector polls the AR customer list and GL accounts at a cadence tied to your business cycle, typically daily for account masters. On the WooCommerce side, ml-connector registers a webhook for order and customer events and validates the HMAC-SHA256 signature on each incoming notification using the webhook secret. When an order arrives, ml-connector looks up the customer ID in its cached Sage 100 AR master, maps WooCommerce line items to Sage 100 items and GL accounts, and posts the invoice via SOAP or BOI. Sage 100's COM record-locking requires exponential backoff and retry on write conflicts. ml-connector tracks the mapping between WooCommerce order IDs and Sage 100 invoice numbers to prevent duplicate posting if a webhook retries. Every record carries a full audit trail and can be replayed if a downstream call fails.
A real-world example
A small-to-mid-size retail business runs Sage 100 on a Windows server for accounting and inventory, and uses WooCommerce on its own domain to sell online. Before the integration, the store manager received orders from WooCommerce, manually entered them into Sage 100 as AR invoices, and re-keyed customer information when a new buyer signed up. Inventory quantities in Sage 100 lagged behind actual sales, and month-end reconciliation required chasing differences between WooCommerce revenue and AR invoices. With Sage 100 and WooCommerce connected, each online order automatically posts into AR as an invoice to the correct customer, mapped to the right GL accounts and inventory items. New customers from WooCommerce are added to the AR master, and the sales numbers in Sage 100 match the web store's revenue without manual entry.
What you can do
- Sync AR customers from Sage 100 to WooCommerce so order lookups find the right customer code and billing address.
- Post WooCommerce orders into Sage 100 as AR invoices or debit memos, mapped to GL accounts and item codes.
- Poll Sage 100 customer and GL account masters daily to keep reference data current and validate order mappings.
- Receive WooCommerce order and customer webhooks in real time, validate signatures, and queue them for posting.
- Track order-to-invoice mappings and retry failed posts with exponential backoff, with a full audit trail on every record.
Questions
- Does ml-connector work with Sage 100 on-premises, or does it require the cloud version?
- ml-connector works only with on-premises Sage 100 and requires either SOAP Web Services enabled at the customer site or a local Windows agent wrapping the BOI COM layer. Sage 100 has no native cloud API, so a customer-hosted endpoint is necessary. The agent runs as a Windows service on the Sage 100 server and exposes a secure interface that ml-connector calls over HTTPS.
- How does the integration handle WooCommerce webhooks that fail or retry?
- ml-connector validates the HMAC-SHA256 signature on every incoming webhook using the webhook secret, and returns 2xx immediately if the signature is valid or 401 if invalid. WooCommerce automatically disables webhooks after five consecutive non-2xx responses, so ml-connector queues valid orders for posting asynchronously and retries with exponential backoff if Sage 100 is temporarily unavailable. The order-to-invoice mapping prevents duplicates if a webhook retries.
- What happens when Sage 100's COM layer locks a record during a concurrent write?
- Sage 100's BOI COM interface uses record-level locking, so concurrent writes can fail with a lock timeout. ml-connector implements exponential backoff and retry on these failures, with a configurable maximum retry count. If all retries fail, the record is marked for manual review and an alert is sent so the team can resolve the conflict before customers are billed.
Related integrations
More Sage 100 integrations
Other systems that connect to WooCommerce
Connect Sage 100 and WooCommerce
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started