Sage 100 and ShipStation integration
Sage 100 runs accounting and order management on-premises. ShipStation runs order fulfillment and carrier management in the cloud. Connecting them keeps orders flowing from Sage 100 into ShipStation for packing and shipping, and brings shipment tracking back into Sage 100's sales orders and AR records. New sales orders in Sage 100 move to ShipStation within minutes, inventory levels stay aligned, and customers see accurate tracking data without re-keying.
What moves between them
Sales orders and inventory flow from Sage 100 into ShipStation. Each new sales order in Sage 100 triggers a poll that reads the order, associated line items, and item master records, then creates a shipment record in ShipStation with the customer and line detail. Inventory levels from Sage 100 are synced to ShipStation warehouses on a schedule. Shipment tracking flows back to Sage 100 by polling ShipStation's order status and carrier tracking data; ml-connector updates the sales order header and AR invoice record with the tracking number and estimated delivery date.
How ml-connector handles it
ml-connector stores the Sage 100 SOAP endpoint URL, username, and password (encrypted), and the ShipStation V1 and V2 API keys (encrypted). For Sage 100, it passes the company code on every SOAP call and parses the COM response structure when using the local agent. For ShipStation, it constructs HTTP Basic Auth headers for V1 calls, manages rate limit backoff by reading the X-Rate-Limit-Remaining header, and converts all V1 timestamps from PST/PDT to UTC on ingest. When a webhook arrives from ShipStation with a shipment event pointer, ml-connector immediately fetches the full shipment record using the authenticated GET, extracts carrier and tracking number, and then queries Sage 100 for the matching sales order to update it. For outbound syncs, ml-connector polls Sage 100's sales orders table (by DateCreated or DateLastUpdated), reads the order header and lines, looks up item master records for pricing and GL account mappings, and posts the order to ShipStation as a new fulfillment request. High-frequency polls (orders every 15 minutes, shipments every 5 minutes) require connection pooling and backoff on Sage 100's COM locking behavior; ml-connector retries with exponential backoff. Every record carries a full audit trail.
A real-world example
A mid-sized wholesale distributor runs Sage 100 on-premises for AP, AR, GL, inventory, and order management, and uses ShipStation to consolidate orders from three e-commerce channels and automate carrier selection and label printing. Before the integration, warehouse staff printed orders from Sage 100 by hand, entered them manually into ShipStation, then monitored ShipStation for tracking numbers and re-entered them back into Sage 100's AR records. With Sage 100 and ShipStation connected, each order in Sage 100 moves to ShipStation automatically within minutes, warehouse staff scan barcodes and print labels from ShipStation's picking lists, and shipment tracking flows back into the AR invoice, so the customer-facing portal shows accurate status. Inventory adjustments in Sage 100 sync to ShipStation warehouses so overselling and stockouts are prevented.
What you can do
- Sync sales orders and line items from Sage 100 to ShipStation for fulfillment as soon as they are created.
- Keep inventory levels aligned between Sage 100 item masters and ShipStation warehouses on a configurable schedule.
- Capture shipment tracking numbers and carrier information from ShipStation and update the Sage 100 sales order and AR invoice record with delivery date and tracking.
- Handle Sage 100's company code requirement, SOAP authentication, COM record locking, and ShipStation's rate limits, timezone conversion, and API Key rotation.
- Store all API credentials encrypted and provide a full audit trail of every sync, with manual replay capability if a downstream update fails.
Questions
- Does ml-connector connect to Sage 100 over the network or on the customer server?
- ml-connector connects over HTTPS to the Sage 100 SOAP endpoint, which runs on the customer's on-premises IIS server. For AP, GL, and PO data that SOAP does not expose, ml-connector requires a local Windows agent running on the customer's Sage 100 server that wraps the COM (BOI) layer and exposes it as a secured local API. The agent authenticates with Windows service credentials plus an API key or mTLS certificate.
- What happens when ShipStation returns a webhook event?
- ShipStation webhook payloads contain only a resource pointer (a URL) and resource type (order or shipment), not the full data. ml-connector immediately fetches the full record by making an authenticated GET call to the resource URL, extracts the tracking number and carrier, and then updates the matching Sage 100 sales order and AR invoice record. This is done within a tight time window before the shipment state can change again.
- How does ml-connector handle Sage 100's lack of webhooks and ShipStation's rate limits?
- ml-connector polls Sage 100 on a fixed schedule (typically every 15 minutes for orders, hourly for inventory) because Sage 100 has no webhooks. For ShipStation, ml-connector reads the rate limit response headers on every request, backs off with exponential jitter if approaching the limit, and resumes once the reset window passes. Both systems are monitored for failures, and ml-connector provides a replay mechanism so a failed sync can be restarted from the audit log.
Related integrations
More Sage 100 integrations
Other systems that connect to ShipStation
Connect Sage 100 and ShipStation
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started