Sage 300 and Cleo integration
Sage 300 runs finance, procurement, and order entry for mid-market businesses. Cleo transforms those transactions into EDI messages and delivers them to trading partners. Connecting the two keeps your supply chain partners in sync without manual EDI mapping or file uploads. Purchase orders created in Sage 300 reach EDI partners automatically, supplier invoices received through Cleo post into Sage 300's Accounts Payable, and shipment confirmations flow both directions so your inventory is current and your audit trail is complete.
What moves between them
The primary flow is Sage 300 into Cleo. ml-connector polls Sage 300 for new purchase orders, invoices, and inventory changes at intervals you set, then pushes them into Cleo as files or API payloads tagged with metadata for EDI translation. Cleo translates those payloads into EDI 850, 810, or 856 messages and sends them to trading partners through configured channels. Inbound EDI messages received by Cleo flow back to Sage 300: supplier invoices land in Accounts Payable as APInvoiceBatches, and shipment confirmations update inventory in Sage 300's ICItems. Because Sage 300 is self-hosted with no webhooks, ml-connector runs on a polling cadence rather than waiting for a push, typically every 1 to 4 hours depending on your transaction volume and partner SLAs.
How ml-connector handles it
ml-connector stores Sage 300 credentials encrypted and presents them as uppercase Basic Auth on every API call, since Sage 300 requires uppercase usernames and passwords and will reject lowercase variants. For Cleo, it caches the OAuth Bearer token after the first password grant exchange and refreshes it when it expires or a call returns 401, reducing credential traffic. ml-connector polls Sage 300 using OData filters on DocumentDate and creation timestamps, with skip and top pagination to handle large result sets without IIS AppPool timeouts. It maps Sage 300 entities to Cleo transaction types: purchase orders from POPurchaseOrders become EDI 850 messages, AP invoices become 810, and inventory updates become availability snapshots. Cleo's tenant administrator must configure outbound webhooks or HTTP actions in CIC Studio for EDI translation and partner delivery; ml-connector itself does not control those transformations. Every record carries a full audit trail in both systems, and if a downstream EDI translate or partner delivery fails, ml-connector can replay the transaction from Sage 300 without re-polling.
A real-world example
A mid-sized manufacturing company runs Sage 300 for finance and procurement on an in-house server, and uses Cleo to manage EDI communication with ten key suppliers and two large customers. Before the integration, the procurement team exported purchase orders from Sage 300 weekly, manually mapped fields to EDI 850 format in a spreadsheet, uploaded the file to Cleo, and waited for the EDI team to confirm delivery. When suppliers sent invoices via EDI 810, the company received them through Cleo but re-keyed critical fields into Sage 300's AP module by hand, introducing keying errors and delays. After Sage 300 and Cleo are connected, each purchase order flows from Sage 300 into Cleo automatically, is translated to EDI 850, and lands in the supplier's mailbox within minutes. Inbound supplier invoices arrive via EDI 810, Cleo translates them back to structured data, and ml-connector posts them directly into Sage 300's APInvoiceBatches, eliminating the manual re-key. The procurement team now spends time on exception handling and strategic sourcing instead of data entry and file uploads.
What you can do
- Poll Sage 300 for new purchase orders, invoices, and inventory changes on a schedule you control, with OData filtering and pagination.
- Push Sage 300 transactions into Cleo as structured payloads tagged for EDI 850, 810, or 856 translation.
- Receive inbound EDI messages from Cleo and post supplier invoices directly into Sage 300's Accounts Payable as APInvoiceBatches.
- Handle Sage 300's HTTP Basic Auth with mandatory uppercase credentials and Cleo's OAuth 2.0 token refresh on 401 responses.
- Carry a full audit trail on every transaction in both systems and replay any record if a downstream delivery fails.
Questions
- Does ml-connector configure Cleo's EDI translation or outbound webhooks?
- No. ml-connector pushes structured data from Sage 300 into Cleo, but Cleo's EDI translation and outbound delivery to trading partners must be configured by your Cleo tenant administrator in CIC Studio. ml-connector orchestrates the data flow; Cleo's studio controls the transformation rules and partner channels.
- How does the integration handle Sage 300's requirement for uppercase credentials?
- ml-connector stores Sage 300 credentials encrypted and converts them to uppercase before constructing the Basic Auth header on every API call. Sage 300 rejects lowercase variants, so this conversion is mandatory and happens transparently.
- What happens if Sage 300's IIS AppPool times out during a large poll?
- ml-connector uses OData $skip and $top pagination to fetch records in smaller batches, which prevents IIS from choking on a single large request. If a call does timeout, ml-connector retries with exponential backoff and adjusts the batch size downward on the next poll cycle to keep requests under the IIS timeout threshold.
Related integrations
More Sage 300 integrations
Other systems that connect to Cleo
Connect Sage 300 and Cleo
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started