ml-connector
Oracle NetSuiteFishbowl

Oracle NetSuite and Fishbowl integration

Oracle NetSuite manages your enterprise resource planning and general ledger. Fishbowl Advanced tracks inventory and manufacturing on-premise. When the two are connected, purchase orders created in Fishbowl flow into Oracle NetSuite without manual re-keying, and your inventory master stays aligned between systems. ml-connector reads from Fishbowl's on-premise REST API and writes into NetSuite's cloud ERP, handling the different authentication models and the polling cadence.

How Oracle NetSuite works

Fishbowl Advanced runs on premises and exposes purchase orders, sales orders, parts, inventory levels, and manufacturing orders through a REST API hosted at a customer-provided server URL and port, typically 2456 but customer-configurable. Authentication requires a session token obtained by posting username, password, application name, and app ID to the login endpoint, and the token is included as a Bearer token in all requests. Fishbowl has no outbound webhooks, so ml-connector must poll the API at regular intervals, typically every 5 to 15 minutes. The API supports date filters for incremental reads.

How Fishbowl works

Oracle NetSuite is a SaaS cloud ERP exposing records through SuiteTalk REST Web Services at tenant-specific URLs including vendor bills, purchase orders, inventory items, invoices, customers, accounts, and vendors. Requests are authenticated with OAuth 2.0 client credentials, which requires a certificate and returns a token valid for 60 minutes with no refresh token in the M2M flow. NetSuite supports inbound event subscriptions on create and edit of certain record types, but does not provide HMAC signatures on webhook payloads, so ml-connector can use IP allowlisting or integrate with existing business logic. Alternatively, ml-connector can poll via SuiteQL for bulk reads.

What moves between them

Purchase orders and inventory items flow from Fishbowl Advanced into Oracle NetSuite. When a PO is created or updated in Fishbowl, ml-connector reads it along with the associated part details and inventory levels, maps the Fishbowl part to a NetSuite inventory item, and writes or updates the purchase order record in NetSuite. Inventory item masters sync in the same direction so your NetSuite catalog reflects Fishbowl stock levels and part numbers. Fishbowl does not have a general ledger, so financial entries do not cross. Sales orders and manufacturing orders in Fishbowl are read-only at this stage and may be extended in future integrations.

How ml-connector handles it

ml-connector stores the Fishbowl server URL and credentials per customer and obtains a session token by calling the login endpoint at each sync cycle. It then polls purchase orders and parts from the configured Fishbowl API endpoints, filtering by created or modified date to detect changes. For each new or changed PO, ml-connector maps the associated Fishbowl part to a matching NetSuite inventory item by comparing part numbers and descriptions, creating a new item in NetSuite if no match is found. It then writes the purchase order into NetSuite using OAuth 2.0 client credentials, obtaining a fresh token for each request since the 60-minute M2M tokens do not refresh. Because Fishbowl is on-premise, the integration requires the customer to open their firewall to the ml-connector polling address and to provision a Fishbowl user with purchase order and part read permissions. NetSuite rate limits are rare but ml-connector retries with exponential backoff. An audit trail records every PO and part sync so failed records can be re-run.

A real-world example

A mid-sized wholesale distributor runs Fishbowl Advanced on-premise for inventory and purchase order management across three warehouses. Their NetSuite general ledger tracks supplier payments and cost accounting. Before the integration, the procurement team entered each Fishbowl PO by hand into NetSuite once daily, a 30-minute task prone to typos and out-of-sync item numbers. With Fishbowl and NetSuite connected, each PO that a buyer creates in Fishbowl appears in NetSuite's purchase order module within minutes, and the inventory items sync automatically so NetSuite always reflects the correct Fishbowl part numbers and stock levels. The daily manual entry is gone and the accounts payable team gets POs into NetSuite for matching invoices immediately.

What you can do

  • Sync purchase orders from Fishbowl Advanced into Oracle NetSuite, mapping Fishbowl parts to NetSuite inventory items.
  • Automatically create missing inventory items in NetSuite when a Fishbowl part has no matching NetSuite record.
  • Poll Fishbowl on a schedule you define, typically every 5 to 15 minutes, filtering by created or modified date.
  • Authenticate Fishbowl with session tokens and Oracle NetSuite with OAuth 2.0 client credentials, refreshing both on each cycle.
  • Maintain a complete audit trail of every purchase order and inventory item sync, with error replay for failed records.

Questions

Which direction does data flow between Fishbowl Advanced and Oracle NetSuite?
The main flow is Fishbowl into NetSuite. Purchase orders and inventory items created or changed in Fishbowl are read by ml-connector and written into Oracle NetSuite. NetSuite is the system of record for financial GL entries and supplier master data, while Fishbowl is the source for inventory and operational PO detail. A future integration phase may write back inventory adjustments or closed purchase receipts from NetSuite to Fishbowl if needed.
Does the integration require changes to the customer's Fishbowl firewall or user account?
Yes. Fishbowl runs on-premise, so the customer must open HTTP or HTTPS access from ml-connector to their configured Fishbowl server URL and port. They must also create or assign a Fishbowl user account with read permissions on purchase orders, parts, and inventory, and provide the username and password to ml-connector at setup. The integration never modifies Fishbowl data, only reads.
What happens if a Fishbowl part number does not have a match in Oracle NetSuite?
ml-connector automatically creates a new inventory item record in NetSuite using the Fishbowl part number, description, and UOM. The item is created in a default NetSuite subsidiary and class, both configurable at setup. The new item is tagged with its origin (Fishbowl) so the finance team can review and adjust GL accounts and tax categories after creation if needed.

Related integrations

Connect Oracle NetSuite and Fishbowl

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

Get started