Microsoft Dynamics 365 Business Central and Fishbowl integration
Microsoft Dynamics 365 Business Central runs finance, purchasing, and the item master. Fishbowl runs warehouse inventory and light manufacturing on the customer's own server. Connecting the two means the parts and vendors a warehouse works from match what finance maintains in Business Central, purchase orders and sales orders move between the systems without re-keying, and the on-hand quantities and receipts recorded in Fishbowl flow back into Business Central. ml-connector handles the very different APIs and auth on each side and moves the data on a schedule you control. Because Fishbowl has no GL account endpoint of its own, the general ledger stays in Business Central.
What moves between them
Items and vendors flow from Microsoft Dynamics 365 Business Central into Fishbowl, so the parts, products, and vendor records a warehouse works from stay in step with what finance maintains. Purchase orders move from Business Central into Fishbowl for receiving, and sales orders sync so each order references a real part and customer. On-hand inventory quantities, receipts, and inventory adjustments flow from Fishbowl back into Business Central to keep stock and item availability current. The general ledger stays in Business Central because Fishbowl has no GL account resource, so ml-connector never writes ledger entries into Fishbowl. Business Central change notifications trigger the work as records change, and a scheduled poll of the Fishbowl server picks up everything created or modified on the warehouse side.
How ml-connector handles it
ml-connector stores both credential sets encrypted. On the Business Central side it requests an OAuth 2.0 client credentials token from Microsoft Entra ID, refreshes it before expiry, and builds the base URL from the tenant and environment name the customer supplies. On the Fishbowl side it logs in with the username and password to obtain the UUID session token, attaches it as a Bearer token, and re-logs in when a call returns an auth error, since the token has no documented expiry. Items and vendors are mapped first, so every purchase order and sales order line resolves to a part that already exists in Fishbowl and an item that already exists in Business Central. Business Central webhook notifications are change signals only and do not carry the record, so on each notification ml-connector fetches the changed resource by id; it also renews the three-day subscriptions on a cron before they lapse, and it answers the mandatory validation handshake on subscription creation. Because Fishbowl cannot push events, the Fishbowl server is polled on a schedule, paging through the totalPages envelope and filtering recent records, with reads of customers and other entities that lack a dedicated endpoint done through the Fishbowl data-query interface. Neither side offers a true idempotency key, so ml-connector dedupes on the Business Central record id and document number and on the Fishbowl part and order number, and carries a stable BullMQ jobId, which avoids creating a duplicate when a record is re-read. Fishbowl runs on customer hardware that is often behind a firewall, so reads are paced with conservative backoff and a local polling agent is supported where the server is not reachable directly. Every record carries a full audit trail and can be replayed if a downstream call fails.
A real-world example
A mid-sized manufacturer of finished goods with roughly 150 employees runs Microsoft Dynamics 365 Business Central for finance and purchasing and uses Fishbowl on a server in the plant for warehouse inventory and work orders. Before the integration, a coordinator re-keyed each new item and vendor from Business Central into Fishbowl, typed purchase orders into both systems, and at month-end exported inventory counts from Fishbowl to adjust stock values in Business Central by hand. That meant part numbers drifted apart, receiving worked from stale data, and the inventory on the balance sheet rarely matched the floor. With Microsoft Dynamics 365 Business Central and Fishbowl connected, items and vendors stay aligned, purchase orders reach the warehouse for receiving without re-entry, and on-hand quantities and receipts post back into Business Central within the polling window, so stock values reconcile and the manual count export is gone.
What you can do
- Keep the Business Central item and vendor masters aligned with Fishbowl parts, products, and vendors.
- Move purchase orders from Business Central into Fishbowl for receiving and sync sales orders between the two.
- Write Fishbowl on-hand inventory, receipts, and adjustments back into Business Central to keep stock current.
- Bridge Microsoft Entra ID OAuth 2.0 on the Business Central side with the Fishbowl session token from username and password.
- Subscribe to Business Central change notifications and poll the on-premise Fishbowl server, with retries and a full audit trail.
Questions
- Which direction does data move between Microsoft Dynamics 365 Business Central and Fishbowl?
- Items and vendors flow from Business Central into Fishbowl, and purchase orders and sales orders sync between the two so every line references a real part and customer. On-hand inventory, receipts, and adjustments flow from Fishbowl back into Business Central to keep stock values current. The general ledger stays in Business Central because Fishbowl has no GL account endpoint, so ml-connector never writes ledger entries into Fishbowl.
- Does Fishbowl push changes, or does ml-connector poll for them?
- Fishbowl polls. The Fishbowl Advanced REST API has no outbound webhooks or event push, so ml-connector reads the Fishbowl server on a schedule, paging through the results and filtering recent records. Business Central, by contrast, supports change notifications that ml-connector subscribes to and renews before their three-day expiry, then fetches each changed record by id because the notification carries only the signal, not the data.
- How does the integration reach a Fishbowl server that runs on-premise?
- Fishbowl runs on the customer's own server at a host and port they configure, so ml-connector treats the server URL as a per-customer credential rather than a fixed address. Where the server is reachable, it calls the REST API directly with conservative pacing; where it sits behind a firewall, a local polling agent inside the network is supported. Reads pace themselves with backoff because Fishbowl runs on customer hardware with no published rate limits.
Related integrations
More Microsoft Dynamics 365 Business Central integrations
Other systems that connect to Fishbowl
Connect Microsoft Dynamics 365 Business Central and Fishbowl
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started