ml-connector
DeltekFishbowl

Deltek and Fishbowl integration

Deltek runs project-based accounting and finance. Fishbowl runs inventory, purchasing, and light manufacturing on the shop floor. Connecting the two means the goods a customer buys and receives in Fishbowl turn into vendor bills and ledger entries in Deltek without re-keying. Vendor master data stays aligned so both systems point at the same firms, and received purchase orders flow into Deltek as AP invoices and journal entries against the correct project and GL account. ml-connector handles the very different login and data styles on each side and moves records on a schedule you control.

How Deltek works

Deltek Vantagepoint exposes firms (vendors and clients), projects, employees, AP invoices, AR invoices, journal entries, cash receipts, and GL accounts through a REST API on a tenant-specific URL of the form company.deltekfirst.com. It authenticates with OAuth2 using the password grant, which must be explicitly enabled in newer versions, and the bearer token expires hourly. Vantagepoint has only workflow-driven outbound callbacks with no signature header, so finance records are read by polling and there is no native idempotency key. Older Costpoint sites use SOAP web services and flat-file preprocessor imports instead, and have no outbound webhooks at all.

How Fishbowl works

Fishbowl is on-premise software, so its REST API runs on the customer's own server and port rather than a shared cloud address, and the connector must accept that server URL per customer. It exposes vendors, purchase orders, sales orders, parts, products, inventory, and manufacture orders, with bulk writes going through a case-sensitive import endpoint and customers and payments reachable through a SQL data-query route. Authentication is a session token: the connector posts an app name, app id, username, and password to the login route and receives a UUID it sends as a bearer token. Fishbowl has no outbound webhooks, so all change detection is poll-based.

What moves between them

The main flow runs from Fishbowl into Deltek. ml-connector reads issued and received purchase orders and their line items from Fishbowl and creates the matching AP invoices and journal entries in Deltek, mapped to the right project, firm, and GL account. Vendor records are aligned in both directions so a supplier added in either system appears in the other, with Fishbowl vendors becoming Deltek firms of vendor type. Reading runs on a polling schedule because neither side pushes reliable events, and Fishbowl PO numbers are matched against existing Deltek invoices so a record posts once. GL accounts live in Deltek, not Fishbowl, so the ledger is owned on the Deltek side.

How ml-connector handles it

ml-connector stores both credential sets encrypted. For Fishbowl it logs in with the app id, username, and password against the customer's server URL, holds the returned UUID as a bearer token, and re-logs in when a call returns an auth error, since Fishbowl tokens have no documented expiry. For Deltek it runs the OAuth2 password grant against the tenant deltekfirst.com URL and refreshes the hourly bearer token on a 401. Both sides are polled on your chosen cadence because Fishbowl has no webhooks and Vantagepoint offers only unsigned workflow callbacks. Fishbowl pages are walked using pageNumber and pageSize until the total is reached, and Deltek paging uses page and pagesize. Vendors map to Deltek firms, and received purchase orders map to AP invoices with their lines tied to a project and GL account. Because Deltek has no idempotency key, ml-connector checks for an existing invoice by PO number before creating one, so a re-poll does not duplicate a bill. Failed calls are retried with backoff, and Deltek AP invoice approval rules may hold a posted invoice in draft until a reviewer releases it.

A real-world example

A mid-sized engineering and fabrication firm of about 120 people runs Deltek Vantagepoint for project accounting and bills time and materials back to clients by project. The shop floor runs Fishbowl on a server in the building for purchasing raw stock, receiving against purchase orders, and tracking inventory. Before the integration, a purchasing clerk received goods in Fishbowl and then a second person re-typed each vendor bill into Deltek and guessed which project to charge, which left month-end close chasing unbilled materials and mismatched vendor names. With Deltek and Fishbowl connected, each received purchase order becomes a Deltek AP invoice tied to the right project and GL account, vendors stay consistent across both systems, and the duplicate data entry is gone.

What you can do

  • Turn received Fishbowl purchase orders into Deltek AP invoices and journal entries against the right project and GL account.
  • Keep vendor records aligned both ways, mapping Fishbowl vendors to Deltek firms of vendor type.
  • Log in to a customer Fishbowl server with its session token and to Deltek with the OAuth2 password grant, refreshing each token as it expires.
  • Poll both systems on your schedule because neither offers reliable event push.
  • Match Fishbowl PO numbers to existing Deltek invoices so a record is never posted twice.

Questions

Which direction does data move between Deltek and Fishbowl?
The main flow is Fishbowl into Deltek. Received purchase orders become AP invoices and journal entries in Deltek against the correct project and GL account. Vendor records are aligned in both directions so the same firms exist on each side, and the chart of accounts stays owned by Deltek because Fishbowl does not expose GL accounts.
Does Fishbowl being on-premise change how the connection works?
Yes. Fishbowl runs on the customer's own server and port rather than a shared cloud address, so ml-connector takes that server URL as a required setting per customer. If the server sits behind a firewall, a local polling agent inside the network is often the realistic path, and HTTPS should be enabled before exposing the port to the internet.
How does the integration avoid posting the same bill twice?
Deltek Vantagepoint has no native idempotency key, so ml-connector checks Deltek for an existing invoice by Fishbowl PO number before creating a new one. Because both systems are polled rather than pushed, this matching is what keeps a re-poll from creating a duplicate. Deltek approval rules may also hold a new AP invoice in draft until a reviewer releases it.

Related integrations

Connect Deltek and Fishbowl

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

Get started