Sage X3 and Fishbowl integration
Sage X3 runs enterprise finance, procurement, and inventory. Fishbowl manages on-premise inventory tracking and manufacturing operations for discrete producers. Connecting the two keeps your master data aligned: new purchase orders and supplier changes in Sage X3 sync to Fishbowl without duplicate entry, and inventory counts flow from Fishbowl back to Sage X3 at agreed intervals. ml-connector handles the different REST authentication models on each side and polls on a schedule you control.
What moves between them
The main flow runs from Sage X3 into Fishbowl. Purchase orders, supplier records, and part masters created or modified in Sage X3 are read on your schedule and pushed to Fishbowl as new vendors, purchase orders, and inventory part records. Inventory levels flow in both directions: Fishbowl inventory counts can be written back to Sage X3 at month-end close or on-demand so the general ledger reflects actual stock. Both systems use poll-based detection on timestamp fields, so no real-time sync but full audit trail on every transaction.
How ml-connector handles it
ml-connector stores the Sage X3 authentication credentials (OAuth2 client credentials or Basic Auth username and password) and the Fishbowl login credentials (username, password, appId) encrypted at rest. Because Sage X3 tokens expire in 5 minutes, ml-connector refreshes the OAuth2 bearer token before each call sequence and falls back to Basic Auth if OAuth2 is not configured. Fishbowl session tokens are reused within a request batch and refreshed when /api/login returns 401. Both systems are polled on your schedule; Sage X3 queries the REST or GraphQL endpoints filtered by updatedDate, while Fishbowl uses GET /api/purchase-orders or /api/data-query with SQL to fetch recent changes. Suppliers in Sage X3 are matched to vendors in Fishbowl by external identifier or name, and purchase orders are mapped to Fishbowl PO records with line items and delivery schedules preserved. Part SKUs and descriptions are synchronized so Fishbowl inventory counts reference the same product master as Sage X3. Retries handle transient failures, and every record carries a full audit trail with timestamps, user source, and change reason so any sync can be replayed if a downstream system fails.
A real-world example
A mid-sized contract manufacturer with 50 employees runs Sage X3 on-premise for accounting and procurement, and Fishbowl on-premise for inventory and shop-floor control. Before integration, the procurement team exported approved purchase orders from Sage X3, manually re-entered them into Fishbowl, and then matched inventory receipts between the two systems during monthly close, a 2-day process. After integration with ml-connector, new purchase orders from Sage X3 flow to Fishbowl automatically, supplier records stay in sync, and month-end inventory counts from Fishbowl post back to Sage X3 so the GL is ready to close. The procurement team now spends 4 hours instead of 16 on the sync, and the accounts payable clerk has accurate inventory quantities at close time without re-keying.
What you can do
- Sync purchase orders, suppliers, and parts from Sage X3 to Fishbowl, keeping procurement master data aligned across systems.
- Map Sage X3 product SKUs to Fishbowl part numbers and maintain supplier relationships between Sage X3 vendors and Fishbowl vendors.
- Write inventory counts from Fishbowl back to Sage X3 at month-end or on-demand, so the general ledger reflects actual stock without manual spreadsheet work.
- Authenticate Sage X3 via OAuth2 or Basic Auth and Fishbowl via session token, and refresh credentials on expiry so polling runs uninterrupted.
- Poll both systems on your schedule with full audit trail, delta detection on timestamp fields, and error replay if a downstream call fails.
Questions
- Which direction does data move between Sage X3 and Fishbowl?
- The main flow is Sage X3 into Fishbowl. Purchase orders, suppliers, and part masters sync from Sage X3 to Fishbowl so procurement data is single-source. Inventory counts flow in both directions: Fishbowl can push stock levels back to Sage X3 at month-end so the general ledger is accurate without manual re-entry. Both systems support polling only, so the cadence is controlled by your schedule, not real-time push.
- How does ml-connector handle the different authentication between Sage X3 and Fishbowl?
- Sage X3 uses either OAuth2 client credentials with 5-minute token lifetimes or HTTP Basic Authentication depending on the deployment. ml-connector encrypts both credential sets and refreshes the OAuth2 bearer token before each batch of API calls, or falls back to Basic Auth if OAuth2 is not configured. Fishbowl uses a session token from POST /api/login, which ml-connector obtains once and reuses within a request batch, then refreshes when needed.
- What happens if a purchase order or inventory count fails to sync?
- Every record carries a timestamp, source identifier, and change reason in the audit trail. If a sync attempt fails, ml-connector retries with exponential backoff and logs the failure. Once the downstream system is healthy, the same record can be replayed from the audit trail without duplication, because the system uses the Sage X3 or Fishbowl record ID to deduplicate on replay.
Related integrations
More Sage X3 integrations
Other systems that connect to Fishbowl
Connect Sage X3 and Fishbowl
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started