ml-connector
Sage 100Fishbowl

Sage 100 and Fishbowl integration

Sage 100 runs your accounting and general ledger. Fishbowl runs your inventory and purchasing. Connecting them closes the loop between what you receive and what you owe. Purchase orders created in Fishbowl automatically create accruals in Sage 100. Vendor invoices recorded in Sage 100 sync back to Fishbowl to match against receipts. Your inventory and accounts payable stay aligned without manual re-keying.

How Sage 100 works

Sage 100 is on-premises accounting software exposing customers, sales orders, purchase orders, vendors, AP invoices, and GL accounts through either SOAP Web Services (eBusiness Web Services for AR and sales orders) or a local BOI COM layer wrapped by a Windows agent. Authentication is username and password passed per call with no tokens or OAuth. Sage 100 publishes no webhooks, so integrations poll using DateLastUpdated fields on core entities like AP invoices, purchase orders, and vendors. The system requires a company code with every call and GL accounts use multi-segment formats that vary by customer. Access is entirely on-premises behind the customer firewall.

How Fishbowl works

Fishbowl is an on-premises inventory and procurement platform exposing purchase orders, sales orders, parts, vendors, manufacturing orders, and inventory levels through REST APIs. Authentication is a session token obtained by POST to /api/login with username, password, and application metadata, then included as a Bearer token on all requests. Fishbowl publishes no webhooks, so integrations poll using date-filtered queries like GET /api/purchase-orders. The system requires the customer to provide their local server URL and network access; there is no multi-tenant SaaS endpoint. Fishbowl does not expose GL accounts, which are handled by its QuickBooks or Xero integrations.

What moves between them

The primary flow is Fishbowl to Sage 100. New purchase orders created in Fishbowl are polled and mapped to vendors in Sage 100, then create matching PO records and expense accruals in the GL. When Sage 100 records vendor invoices against those POs, ml-connector polls Sage 100's AP invoice register and syncs the invoice details back to Fishbowl to close purchase orders and update receipts. Reference data such as vendors and part numbers are aligned so new vendors in Fishbowl can be created in Sage 100, and part numbers in Fishbowl match Sage 100 item codes.

How ml-connector handles it

ml-connector stores credentials for both systems encrypted and handles the very different auth on each side: for Sage 100, it passes username and password per SOAP or agent call with the required company code; for Fishbowl, it manages the session token and refreshes it when it expires. Because both are on-premises polling systems with no webhooks, ml-connector polls both on configurable intervals tied to your purchasing and receiving cycle, typically every 15 minutes for POs and invoices and hourly for vendor masters. Purchase orders in Fishbowl are mapped to Sage 100 vendors using standardized matching rules, and new POs create both a PO record and an expense accrual at the GL account level. When Sage 100 records AP invoices, ml-connector reads the invoice details and syncs them back to Fishbowl to record the invoice against the original PO, closing the receipt loop. Both systems require network access to the customer's local servers and credentials are never shared; all communication is direct from ml-connector to each system using their native APIs.

A real-world example

A mid-sized manufacturer runs Sage 100 for general ledger and accounts payable, and Fishbowl for purchasing and inventory. Before the integration, the procurement team created purchase orders in Fishbowl, and the accounting team manually keyed those orders into Sage 100 to create GL accruals. When vendors shipped goods, the receiving team recorded receipts in Fishbowl, but the accounting team had to manually match those receipts to the POs in Sage 100 and record AP invoices separately. With Fishbowl and Sage 100 connected, new POs in Fishbowl automatically flow to Sage 100 and create the GL accrual, and when invoices are recorded in Sage 100, they sync back to Fishbowl to close the PO and record the received goods. Month-end close is faster because procurement and accounting data are already aligned.

What you can do

  • Create purchase orders in Sage 100 automatically from purchase orders created in Fishbowl, with the correct vendor and expense account.
  • Sync vendor invoices from Sage 100 back to Fishbowl to match against received goods and close purchase orders.
  • Align vendors between Sage 100 and Fishbowl so new vendors can be created in Sage 100 and used immediately in Fishbowl.
  • Poll both systems on schedules aligned with your purchasing cycle, handling Sage 100 SOAP authentication and Fishbowl session tokens securely.
  • Track all purchase orders and invoices with a full audit trail and replay any record if a sync fails.

Questions

Which direction does data move between Sage 100 and Fishbowl?
The main flow is Fishbowl to Sage 100. Purchase orders created in Fishbowl are synced to Sage 100 to create POs and GL accruals. Vendor invoices recorded in Sage 100 are then synced back to Fishbowl to close purchase orders and record receipts. Vendors and part numbers are aligned in both directions so both systems stay current.
How does ml-connector handle the different authentication systems?
Sage 100 uses username and password per call with a required company code; Fishbowl uses session tokens obtained at login and refreshed when they expire. ml-connector stores both credential sets encrypted and manages each system's auth independently, presenting the correct credentials and format on every call to each system.
Since Sage 100 and Fishbowl are on-premises, how does the integration work?
Both systems require the customer to provide network access to their local servers. ml-connector polls each system directly using their native APIs at configurable intervals, typically every 15 minutes for purchase orders and invoices. There are no webhooks or shared multi-tenant endpoints, so ml-connector calls each system at the customer's own server URLs using the credentials you provide.

Related integrations

Connect Sage 100 and Fishbowl

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

Get started