ml-connector
Sage 300Fishbowl

Sage 300 and Fishbowl integration

Sage 300 runs your accounting and procurement. Fishbowl manages your inventory and orders. Connecting the two keeps your purchase order data and vendor master synchronized across both systems. New purchase orders and vendor changes in Sage 300 flow into Fishbowl automatically, eliminating manual entry and keeping order and procurement processes aligned. ml-connector handles the different authentication schemes on each side and moves the data on a schedule you control.

How Sage 300 works

Sage 300 is an on-premise ERP system running on Windows IIS with a SQL Server backend, exposing accounts payable, accounts receivable, general ledger, purchase orders, order entry, and inventory through REST and OData APIs. Every request uses HTTP Basic Authentication with a base64-encoded uppercase username and password. Sage 300 publishes no webhooks or change-data-capture mechanism, so polling is the only way to detect new or modified records. The API supports OData filtering and pagination to retrieve only changed records since the last sync.

How Fishbowl works

Fishbowl Advanced is an on-premise inventory and order management platform for manufacturers, wholesalers, and distributors. It exposes purchase orders, vendors, parts, inventory, and sales orders through REST APIs on a customer-supplied server and port. Authentication uses session tokens obtained via POST with username and password, then included as Bearer tokens on all subsequent requests. Fishbowl has no webhook system, so ml-connector must poll for new or updated records.

What moves between them

The main flow is from Sage 300 into Fishbowl. Purchase orders and vendor data from Sage 300 are read via polling and synced into Fishbowl's purchase order and vendor entities. The sync runs on a schedule you set, typically every 5 to 15 minutes, and uses date filters to retrieve only records changed since the last poll. Vendor master data in Sage 300, such as APVendors, flows into Fishbowl's Vendor entity to keep both systems consistent.

How ml-connector handles it

ml-connector stores the Sage 300 HTTP Basic Auth credentials encrypted and includes them on every request, encoding the uppercase username and password as required by Sage 300's API contract. For Fishbowl, it authenticates once via the POST /api/login endpoint to obtain a session token, then includes that token as a Bearer token on all subsequent calls, refreshing the token when it expires. On the Sage 300 side, it polls the APVendors and POPurchaseOrders endpoints using OData $filter parameters to retrieve only records modified since the previous sync, and uses $skip and $top to handle pagination. On the Fishbowl side, it polls purchase-orders and vendor endpoints and maps Sage 300 vendor IDs to Fishbowl vendor IDs so incoming purchase orders reference the correct suppliers. Both systems are pull-only, so ml-connector never relies on push notifications and handles the two different authentication and pagination models transparently. Every record carries a full audit trail and can be replayed if a downstream call fails.

A real-world example

A mid-sized distributor runs Sage 300 for accounting, vendor management, and purchase order tracking, and uses Fishbowl Advanced to manage inventory and warehouse operations across two distribution centers. Before the integration, the procurement team entered purchase orders manually in both systems after creating them in Sage 300, which introduced delays and data entry errors. Warehouse staff often worked with stale inventory counts because purchase orders had not been reflected in Fishbowl. With Sage 300 and Fishbowl connected, each new purchase order created in Sage 300 flows automatically into Fishbowl, and vendor master changes such as new suppliers or payment terms are reflected in both systems immediately. Warehouse visibility to incoming orders is instant, reducing the time to receive and put away inventory.

What you can do

  • Sync purchase orders from Sage 300 to Fishbowl automatically on a polling schedule, keeping order data current in your inventory system.
  • Keep vendor master data aligned between Sage 300 APVendors and Fishbowl Vendor entities so procurement and inventory use the same suppliers.
  • Handle Sage 300 HTTP Basic Auth and Fishbowl session token auth transparently, refreshing tokens and managing credentials securely.
  • Retrieve only changed records using OData filters and pagination so polling is efficient and does not re-import historical data.
  • Provide a full audit trail on every record and replay capability if a sync step fails.

Questions

Which direction does data move between Sage 300 and Fishbowl?
The primary flow is from Sage 300 into Fishbowl. Purchase orders and vendor master records from Sage 300 are polled and synced into Fishbowl's purchase order and vendor entities. This is a one-directional flow to keep Fishbowl's procurement and supplier data current.
How does ml-connector handle the different authentication methods?
Sage 300 requires HTTP Basic Authentication with uppercase credentials on every request; ml-connector encodes and includes these on each call. Fishbowl uses session tokens obtained via POST /api/login; ml-connector obtains a token, includes it as a Bearer token on all subsequent calls, and refreshes it when it expires.
Since both systems are poll-only, how often does the sync run?
ml-connector polls on a schedule you set, typically every 5 to 15 minutes. It uses OData date filters on the Sage 300 side to retrieve only records changed since the last sync, so each poll is efficient and does not re-import historical data.

Related integrations

Connect Sage 300 and Fishbowl

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

Get started