ml-connector
QuickBooks OnlineFishbowl

QuickBooks Online and Fishbowl integration

QuickBooks Online runs your accounting; Fishbowl runs your inventory and manufacturing. Connecting them keeps costs flowing accurately from the warehouse floor into your general ledger. When Fishbowl records a purchase order for raw materials, ml-connector posts the matching bill into QuickBooks Online with the cost assigned to the right accounts. Inventory movements and vendor payment terms stay synchronized without manual re-keying.

How QuickBooks Online works

Fishbowl Advanced is an on-premise inventory management and light-ERP system that exposes purchase orders, sales orders, parts, inventory levels, and manufacturing orders through a REST API. Authentication uses session tokens obtained via POST /api/login with username and password, then Bearer token on all requests. Fishbowl has no outbound webhooks and must be polled; because it is on-premise, customers supply their own server URL and port, and GL accounts are not natively exposed in Fishbowl--they live in the connected QuickBooks or Xero instance. Data is retrieved via polling endpoints like GET /api/purchase-orders with date filters or GET /api/data-query with SQL queries.

How Fishbowl works

QuickBooks Online is Intuit's cloud accounting platform accessed through the QuickBooks Online Accounting API (v3) over HTTPS. Authentication uses OAuth 2.0 Authorization Code flow; access tokens expire in 1 hour and refresh tokens rotate every 24-26 hours. All requests include a realm_id (company identifier) and require ?minorversion=75. QuickBooks supports both push webhooks on 25+ entity types and pull via a CDC (Change Data Capture) endpoint with 30-day history. Webhook payloads contain only entity ID and operation, so full records must be fetched separately. Key constraints: no hard deletes for vendors, customers, or accounts; stale refresh tokens force re-authentication; and all updates require SyncToken for concurrency control.

What moves between them

Data flows from Fishbowl into QuickBooks Online. ml-connector polls Fishbowl purchase orders, parts, and inventory on a configurable interval (typically 5-15 minutes per Fishbowl best practice), then creates or updates matching bills, line items, and vendors in QuickBooks Online. Vendor master records are synchronized so Fishbowl vendors match QuickBooks vendors. Inventory movements in Fishbowl trigger corresponding inventory accounts and cost-of-goods accounts in QuickBooks. The sync is unidirectional pull: QuickBooks does not push back to Fishbowl.

How ml-connector handles it

ml-connector stores the Fishbowl server URL, username, and password encrypted. At poll time it logs into Fishbowl via POST /api/login, receives a session token, and polls purchase orders with date filters to find new or modified records. For each Fishbowl PO it reads the vendor, line-item parts, and quantities, then fetches the full part records to get unit costs. It then creates a bill in QuickBooks Online, mapping Fishbowl vendor IDs to QuickBooks vendor IDs and part costs to the configured inventory asset and expense accounts. QuickBooks OAuth tokens expire in 1 hour, so ml-connector proactively refreshes the token before each sync window; if a refresh fails it surfaces the error immediately rather than waiting for a 401 mid-sync. Refresh tokens rotate every 24-26 hours and are cached encrypted, so token rotation is seamless. All bill creates and updates include the required SyncToken for concurrency control. Because Fishbowl has no webhook system, polling is required; ml-connector backs off if Fishbowl is slow and tracks each PO's last-sync time to avoid re-processing. Every record is audit-logged with source ID, timestamp, and direction.

A real-world example

A mid-sized manufacturing company runs Fishbowl on-premise for production planning, scheduling, and procurement, and QuickBooks Online for accounting and reporting. Before the integration, the procurement team entered purchase orders in Fishbowl but the accounting team had to manually re-enter vendor invoices and costs into QuickBooks at month-end, creating a two-day lag and frequent discrepancies between inventory in Fishbowl and cost accounts in QuickBooks. The finance team spent the first week of month-end close reconciling inventory and cost accounts instead of closing the books. With Fishbowl and QuickBooks Online connected, each new purchase order in Fishbowl automatically creates a bill in QuickBooks, inventory accounts stay current, and the manual invoice re-entry step is eliminated. Vendors and costs reconcile automatically.

What you can do

  • Poll Fishbowl purchase orders on a schedule and create or update matching bills in QuickBooks Online with cost allocated to the correct accounts.
  • Synchronize Fishbowl vendors to QuickBooks vendor master so invoices and payments reference the same vendor.
  • Map Fishbowl inventory parts to QuickBooks items and track cost-of-goods movements in the right GL accounts.
  • Handle Fishbowl on-premise authentication with encrypted credentials and manage QuickBooks OAuth token rotation and refresh-token lifecycle.
  • Audit every record synced with source ID, timestamp, and direction so billing discrepancies can be traced and replayed if needed.

Questions

Does ml-connector require Fishbowl to be exposed on the internet?
Fishbowl is on-premise, so the customer must ensure their Fishbowl server is accessible from ml-connector's polling agents. This typically means opening a port or setting up a VPN tunnel; it does not require Fishbowl to be public. The customer provides the server URL and port at setup time.
How does ml-connector handle token expiry and refresh?
QuickBooks OAuth access tokens expire in 1 hour and refresh tokens rotate every 24-26 hours. ml-connector proactively refreshes the access token before each sync window and stores the rotating refresh token encrypted. If a refresh fails, the error is surfaced immediately so re-authentication can be triggered; ml-connector does not wait for a 401 mid-sync.
Can ml-connector write back to Fishbowl if something changes in QuickBooks?
No. The sync is unidirectional: Fishbowl into QuickBooks only. Changes in QuickBooks do not propagate back to Fishbowl. If a bill is manually modified in QuickBooks, the next Fishbowl poll will not overwrite it.

Related integrations

Connect QuickBooks Online and Fishbowl

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

Get started