ml-connector
Sage 50BigCommerce

Sage 50 and BigCommerce integration

Sage 50 keeps the books on the customer's Windows machine. BigCommerce runs the online store in the cloud. Connecting the two turns paid storefront orders into Sage 50 sales invoices and receipts without anyone re-typing them, and keeps the BigCommerce catalog showing the stock counts that Sage 50 tracks. Because Sage 50 has no cloud API, ml-connector runs a small local agent next to the Sage installation and moves data between it and BigCommerce on a schedule you control.

How Sage 50 works

Sage 50 is desktop, on-premise accounting software with no REST API and no webhooks. Integration goes through a local Windows agent that uses the Sage 50 .NET SDK on the US edition or Sage Data Objects (SDO) on the UK edition. The agent authenticates with a dedicated Sage user name and password verified against the local company data files, and it must run in an interactive Windows session rather than as a service. It can read and write customers, sales invoices, sales orders, customer receipts, inventory items, and GL accounts, but only one process may open the company file at a time, so the agent detects changes by polling modified records rather than receiving any push.

How BigCommerce works

BigCommerce is a cloud e-commerce platform exposed through its REST Management API, with v2 and v3 both active. Every request carries a static access token in the X-Auth-Token header from a store-level API account. Orders are read and created on v2, while order transactions are read-only on v3 and refunds are created on v3. Customers and catalog products, including inventory levels, are full read and write. BigCommerce also pushes webhooks signed with HMAC-SHA256 in the X-BC-Signature header, but each payload carries only a resource type and ID, so the full record must be fetched from the REST API after each event.

What moves between them

Orders and customers move from BigCommerce into Sage 50. ml-connector reads paid BigCommerce orders and writes them into Sage 50 as sales invoices, creating or matching the customer record first, and posts the captured payment as a customer receipt. Inventory moves the other direction: Sage 50 inventory counts are pushed up to the matching BigCommerce catalog products so the store reflects what is in stock. Order line items map to Sage inventory items by SKU. Refunds recorded in BigCommerce are read and applied against the corresponding Sage invoice. The cadence is a scheduled poll, since Sage 50 cannot be triggered by an external event.

How ml-connector handles it

ml-connector stores both credential sets encrypted. The BigCommerce side uses the store hash and access token in the X-Auth-Token header; the Sage side hands the company data folder path, user name, and password to the local agent, which opens the company file through the SDK. Because Sage 50 is pull-only and locks the company file to one session, the agent polls BigCommerce orders, customers, and refunds on a schedule, typically every few minutes, rather than waiting on a push, and it must not run while a person is logged into Sage interactively under the same user. BigCommerce webhooks can shorten the lag by signaling that an order changed, but since the payload is only a type and ID, ml-connector still calls the BigCommerce REST API to fetch the full order before handing it to the agent. Customers are matched by email and orders by order number so the same storefront order is never invoiced twice, which matters because Sage has no idempotency key. Inventory writes go to the BigCommerce variant or product by SKU. BigCommerce rate limits return HTTP 429, so ml-connector reads the reset header and backs off, and the local agent reconnects when the company file is briefly locked. Every record carries a full audit trail and can be replayed if a downstream step fails.

A real-world example

A home and garden retailer with around forty staff sells through a BigCommerce store and keeps its books in Sage 50 US on a back-office Windows PC. Before the integration, a bookkeeper exported the day's online orders to a spreadsheet each morning and re-keyed every invoice, customer, and payment into Sage 50, then manually adjusted stock counts in BigCommerce whenever a warehouse count changed. With Sage 50 and BigCommerce connected, paid orders post into Sage as invoices and receipts on a short poll, new shoppers become Sage customers automatically, and the stock counts Sage tracks flow back to the storefront. The morning re-keying is gone and the books match the store.

What you can do

  • Turn paid BigCommerce orders into Sage 50 sales invoices and post the payment as a customer receipt.
  • Create or match Sage 50 customer records from BigCommerce shoppers by email.
  • Push Sage 50 inventory counts to the BigCommerce catalog so the store shows current stock.
  • Read BigCommerce refunds and apply them against the matching Sage 50 invoice.
  • Run a local Sage agent that polls BigCommerce on a schedule, with retries and a full audit trail on every record.

Questions

Why does Sage 50 need a local agent instead of a cloud connection?
Sage 50 is desktop accounting software with no cloud REST API and no webhooks, so there is nothing to call over the internet. ml-connector runs a small agent on the same Windows machine as Sage 50, using the .NET SDK on the US edition or Sage Data Objects on the UK edition. The agent reads and writes the company file locally and syncs to BigCommerce over HTTPS.
How are BigCommerce orders kept from being invoiced twice in Sage 50?
Sage 50 has no idempotency key, so ml-connector matches on stable references before it writes. Customers are matched by email and orders by their BigCommerce order number against the Sage invoice already created from them. If a match exists, the record is updated rather than duplicated.
Does the integration use BigCommerce webhooks or polling?
It uses polling as the backbone because Sage 50 cannot be triggered by an outside event and only one process can open the company file at a time. BigCommerce webhooks can be added to signal that an order changed sooner, but the webhook payload carries only a resource type and ID, so ml-connector still calls the BigCommerce REST API to fetch the full order before the agent writes it into Sage 50.

Related integrations

Connect Sage 50 and BigCommerce

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

Get started