ml-connector
Microsoft Dynamics GPFishbowl

Microsoft Dynamics GP and Fishbowl integration

Microsoft Dynamics GP runs your financials and inventory on-premises. Fishbowl Advanced manages procurement and inventory on its own on-premises server. Connecting the two keeps your purchase orders, inventory transactions, and supplier payments aligned across both systems without manual data entry. New purchase orders in Fishbowl flow into GP as payables invoices and GL journal entries, and inventory movements post as receipts. ml-connector handles the very different authentication models and moves data on a schedule you control.

How Microsoft Dynamics GP works

Microsoft Dynamics GP is an on-premises ERP that exposes vendors, purchase orders, payables invoices, payments, GL accounts, GL journal entries, customers, receivables invoices, and inventory items through either REST Service Based Architecture endpoints at https://<server>:<port>/GPService/Tenants(<TenantName>)/Companies(<CompanyName>)/<Module>/<Resource> or SOAP/WCF Web Services at http://<server>:<port>/Dynamics/GPService/GPService?singleWsdl. Authentication requires Windows domain credentials (Negotiate, Kerberos, or NTLM) tied to Active Directory, with role-based security applied to the GP User account. The company name parameter is the actual SQL Server database name, not a human-readable label. Dynamics GP does not support webhooks or push notifications, so connectors must poll with ModifiedDate filters at customer-defined intervals, respecting a practical limit of 2-5 concurrent requests with 100-200ms delays to avoid degrading end-user performance. Write operations only succeed on unposted (Work) transactions; posted records are read-only. Fiscal periods must be open in the GP calendar to create new transactions.

How Fishbowl works

Fishbowl Advanced is an on-premises inventory and procurement system exposing vendors, purchase orders, sales orders, payments, parts, products, inventory levels, customers, manufacturing orders, and users through a REST API at http://{FISHBOWL_SERVER}:{PORT}/api where the port is customer-configurable (typically 2456). Authentication uses a session token obtained by POST /api/login with username, password, appName, appDescription, appId, and optional mfaCode; all subsequent requests present the Bearer token in the Authorization header. Fishbowl does not expose GL accounts directly (those live in the accounting system integration like QuickBooks or Xero) and does not offer Users through a write endpoint. Like Dynamics GP, Fishbowl does not support outbound webhooks; connectors must poll endpoints like GET /api/purchase-orders with date filters or GET /api/data-query with SQL, typically at 5-15 minute intervals with no documented rate limits. Communication is HTTP by default on-premises, not HTTPS.

What moves between them

The main flow runs from Fishbowl into Dynamics GP. Purchase orders created or updated in Fishbowl flow into GP as payables invoices and GL journal entries, allocated to the correct GL accounts and vendors. Inventory movements in Fishbowl post into GP as goods receipts and inventory adjustments. Vendor and part master data flows in both directions so Fishbowl purchase orders reference vendors and items that already exist in GP. Payments recorded in Fishbowl align with AP payments in GP so cash reconciliation stays clean. Because both systems are polling-only, ml-connector reads on a schedule tied to your procurement cycle and inventory cutoff dates rather than relying on push notifications.

How ml-connector handles it

ml-connector stores both credential sets encrypted and manages the Windows domain account for Dynamics GP calls while maintaining a Fishbowl session token and refreshing it when it expires. On the Fishbowl side it polls purchase orders, inventory, and payments using date filters to detect new and changed records. For each purchase order, ml-connector maps the Fishbowl vendor to the matching GP vendor, reads line items with part numbers and quantities, and creates an unposted payables invoice in GP wrapped in the required Payload envelope. It then posts the invoice to open the transaction for posting. Inventory movements trigger unposted goods receipts in GP. The company database name in GP is the actual SQL Server name, not a display label, so ml-connector accepts the literal database name per customer. Windows Authentication requires a dedicated domain account with GP User privileges created by the customer. If a fiscal period is closed in GP, the invoice creation returns a validation error that ml-connector logs and retries on the next poll. Fishbowl communication may be HTTP on-premises, not HTTPS, so certificates are not required. Both systems lack idempotency mechanisms, so ml-connector tracks purchase order identifiers across syncs to prevent duplicate invoices. If a Fishbowl call times out or returns an error, ml-connector backs off and retries on the next scheduled interval, carrying a full audit trail of every record matched, created, or skipped.

A real-world example

A mid-sized manufacturing company runs Dynamics GP on Windows Server for general ledger, accounts payable, and inventory valuation, and uses Fishbowl Advanced on its own on-premises server for purchase order management, procurement tracking, and manufacturing orders. Before the integration, the procurement team entered purchase orders in Fishbowl, then the accounting team manually re-entered them into Dynamics GP as unposted invoices, matching vendors and GL accounts by hand. Month-end close required line-by-line reconciliation between Fishbowl POs and GP AP to find missing or duplicate entries. With Fishbowl and Dynamics GP connected, each new purchase order flows automatically into GP as an unposted payables invoice, routed to the correct vendor and GL account. Inventory receipts in Fishbowl post as goods receipts in GP without re-keying. The manual entry step vanishes, month-end reconciliation starts with AP already aligned, and the procurement team can focus on supplier relationships instead of data entry.

What you can do

  • Sync purchase orders from Fishbowl into Dynamics GP as unposted payables invoices, mapped to the correct vendors and GL accounts.
  • Post inventory receipts and adjustments from Fishbowl into GP as goods receipts and inventory transactions.
  • Align vendor and part master data in both directions so purchase orders reference matching entities in both systems.
  • Authenticate to Dynamics GP with Windows domain credentials and to Fishbowl with session tokens, handling expiry and renewal automatically.
  • Poll on a schedule tied to your procurement and inventory calendar, with retry logic on network gaps and a full audit trail on every record.

Questions

How does ml-connector handle Windows Authentication for Dynamics GP?
ml-connector stores the Windows domain account credentials encrypted and presents them on every call to Dynamics GP as Negotiate or NTLM credentials. The customer provides the domain account with GP User privileges; ml-connector does not create or manage the account itself. If the password changes, update it in ml-connector's credential store.
Why are purchase orders created as unposted invoices in Dynamics GP?
Unposted transactions in GP can be edited and validated before posting. ml-connector creates the invoice unposted so the accounting team can review it, verify the GL accounts and vendor are correct, and post it when ready. Once posted, the record is read-only and would require a journal entry to correct.
What happens if a fiscal period is closed in Dynamics GP when ml-connector tries to post a purchase order?
If the fiscal period is closed, Dynamics GP returns a validation error. ml-connector logs the error with the full invoice details, skips the record, and retries it on the next scheduled poll. The accounting team must open the period in GP before the invoice can be created, then ml-connector will retry automatically.

Related integrations

Connect Microsoft Dynamics GP and Fishbowl

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

Get started