Sage 100 and Basware integration
Sage 100 runs accounting and procurement for smaller to mid-sized manufacturers and distributors. Basware automates the full three-way match and invoice-to-payment process. Connecting the two keeps your AP workflow fed with fresh vendor and invoice data from Sage 100 without manual re-entry into Basware. When invoices land in Basware through the integration, Basware can match them to POs and receipt lines, route them for approval, and post payments back to Sage 100 accounts payable when the flow is complete.
What moves between them
Sage 100 AP Invoices, Purchase Orders, and Vendors are polled from Sage 100 every 15 minutes and 1 hour respectively and pushed into Basware's P2P API via OAuth2-authenticated REST calls. The vendor master is synced hourly so Basware always has a current supplier list. Basware matches incoming invoices to POs and receipt lines using its three-way match engine; payment confirmations and posting confirmations are pulled back from Basware using the Data Access API or webhook push. GL postings from Basware payment runs can be mapped back to Sage 100 GL accounts and posted as journal entries to complete the cycle.
How ml-connector handles it
ml-connector stores Sage 100 credentials (username, password, Windows service account details) and Basware OAuth2 secrets encrypted, then obtains a Bearer token from Basware before each polling cycle. It polls Sage 100 using the BOI COM layer via the customer's local Windows agent, passing the company code and polling dates per entity. Invoices and POs include line-level details; Vendors are fetched as a master list. Each incoming record is checked for existence in Basware using vendor ID or invoice number to avoid duplicates. Regional endpoint routing is controlled by the customer's Basware region; ml-connector uses the corresponding regional base URL (eu, us, au, ca). Sage 100 has no idempotency keys, so ml-connector tracks imported records in its audit log and skips re-sends. The BOI COM layer has record-locking constraints on concurrent writes, so ml-connector backs off and retries on lock conflicts. Webhook signatures from Basware are validated using the shared secret before processing, and payment confirmations are parsed to update invoice status in both systems.
A real-world example
A mid-sized industrial distributor runs Sage 100 for accounting and purchase orders across three regional branches, with hundreds of invoices arriving each week. Before the integration, invoices were printed, scanned, and manually entered into Basware, a process that consumed 6 to 8 hours per week and introduced frequent data-entry errors. With Sage 100 connected to Basware, invoices are automatically pushed within minutes of receipt, Basware's three-way match runs on fresh PO and receipt data, approval routes are automated, and payment confirmation posts back to Sage 100 accounts payable at settlement. The distributor now processes invoices in Basware without any manual data re-keying, reduces approval turnaround from weeks to days, and gains immediate visibility into the AP pipeline.
What you can do
- Push Sage 100 AP Invoices into Basware's P2P API every 15 minutes, with line-level detail and GL coding.
- Sync Sage 100 Vendors as a master list into Basware hourly so purchase orders reference current supplier data.
- Automatically match incoming invoices to Sage 100 purchase orders and receipt lines using Basware's three-way match engine.
- Bridge Sage 100's on-premises architecture by accepting SOAP and BOI COM credentials and polling on a schedule, then pushing to Basware's cloud REST API.
- Track payment confirmations from Basware and post them back to Sage 100 accounts payable to close the cycle.
Questions
- How does ml-connector handle Sage 100 being on-premises with no cloud API?
- ml-connector accepts Sage 100 SOAP credentials and BOI COM agent credentials from the customer's local Windows server, then polls Sage 100 on a schedule (AP Invoices every 15 minutes, Vendors every hour) using the BOI layer via the local agent. The agent acts as a bridge so ml-connector can read Sage 100 data without requiring direct remote HTTP access to the on-premises system.
- Which Sage 100 records move into Basware and how often?
- AP Invoices (with line detail), Purchase Orders, and Vendors are polled from Sage 100 and pushed into Basware. AP Invoices and POs are synced every 15 minutes to catch new transactions quickly, while Vendors are synced hourly as a master list. Polling uses DateLastUpdated fields so only changed records are pulled and re-sent.
- What happens when Basware matches an invoice to a PO, and how does payment confirmation flow back?
- Basware matches incoming invoices to POs and receipt lines using its three-way match engine. When an invoice is approved and payment is confirmed in Basware, ml-connector polls the Basware Data Access API or receives a webhook notification, then posts the payment confirmation and GL posting back into Sage 100 accounts payable so the invoice is marked paid and the GL is updated.
Related integrations
More Sage 100 integrations
Other systems that connect to Basware
Connect Sage 100 and Basware
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started