ml-connector
QuickBooks DesktopSlack

QuickBooks Desktop and Slack integration

QuickBooks Desktop runs on-site accounting for small to mid-sized businesses. Slack connects your team in a single workspace. When you link the two, accounting events from QuickBooks Desktop automatically notify your team in Slack without manual notification. New vendors, bills, purchase orders, and payments post to designated channels, and your team sees changes as they happen instead of learning about them in monthly reports.

How QuickBooks Desktop works

QuickBooks Desktop is a Windows-installed application that exposes financial data through SOAP and QBXML over HTTPS. Integration requires a customer-hosted Web Connector agent (QBWC) that polls your SOAP endpoint on a configurable interval. ml-connector authenticates using a session-token handshake where QBWC provides credentials and your service returns a session GUID for each polling cycle. Key entities include vendors, bills, purchase orders, invoices, payments, accounts, and employees. Query changes using ModifiedDateRangeFilter and TxnDeletedQueryRq. QuickBooks must be running and logged into the company file for QBWC to process requests, and the Windows machine must have network access to your SOAP endpoint.

How Slack works

Slack is a cloud REST platform where messages and channels are managed through the Web API and Events API. Integration uses OAuth2 Authorization Code flow to obtain a non-expiring bot token (xoxb- prefix) scoped to the workspace. Slack supports both webhooks for real-time event delivery and polling via REST methods. Webhook requests carry an HMAC-SHA256 signature in the X-Slack-Signature header and must be verified and acknowledged with HTTP 2xx within 3 seconds. Slack retries failed webhook deliveries up to 3 times with exponential backoff. The API is organized by method families (conversations, users, chat) and returns JSON responses.

What moves between them

Financial events from QuickBooks Desktop flow into Slack. When QBWC polls for new or modified transactions, ml-connector detects bills, purchase orders, vendor changes, and payments. These events are formatted as Slack messages and posted to designated channels using the chat.postMessage method, where they appear as notifications for the accounting team. The flow is pull-only from QuickBooks Desktop and push-only to Slack; no data writes back to QuickBooks.

How ml-connector handles it

ml-connector acts as the SOAP endpoint that QBWC contacts on its polling schedule (typically 5 to 15 minutes). When QBWC calls authenticate(), ml-connector returns a valid session token. Subsequent poll requests query QuickBooks Desktop using ModifiedDateRangeFilter to fetch changed transactions since the last poll. For each new or modified bill, purchase order, vendor, or payment, ml-connector formats a Slack message and calls chat.postMessage using the stored bot token, routing the message to the appropriate channel based on transaction type. Slack rate limits chat.postMessage at 1 per second per channel, so ml-connector queues rapid posts and spreads them over time. The bot token never expires, so there is no token refresh cycle. Every event is logged with a timestamp and message ID for audit and replay if a Slack post fails. Because QuickBooks Desktop has no idempotency mechanism and QBWC can resend the same request if interrupted, ml-connector deduplicates posts using the QuickBooks transaction ID and polling cycle.

A real-world example

A small accounting services firm runs QuickBooks Desktop on-site to manage client books. The firm uses Slack to coordinate between the accounting staff and clients. Before the integration, the accounting team manually typed notifications into Slack when a new vendor invoice arrived or a bill was due, leading to missed notifications and duplicated messages. With QuickBooks Desktop and Slack connected, every new vendor, purchase order, and bill posts automatically to a designated accounting channel. The team sees changes in real-time, clients receive updates via Slack threads, and the manual notification step is eliminated.

What you can do

  • Post QuickBooks Desktop vendor changes, new bills, purchase orders, and payments to designated Slack channels automatically when QBWC polls for changes.
  • Authenticate to Slack using OAuth2 bot tokens and verify webhook signatures via HMAC-SHA256.
  • Deduplicate rapid Slack posts using QuickBooks transaction IDs and polling cycles to avoid duplicate messages.
  • Handle QBWC polling intervals as short as 1 minute and format financial transactions as readable Slack messages with context.
  • Maintain a full audit trail of every transaction forwarded to Slack and support replay if a post fails.

Questions

How does ml-connector receive updates from QuickBooks Desktop if it has no webhooks?
ml-connector runs as a SOAP web service that QBWC contacts on a polling schedule you configure (minimum 1 minute, typical 5 to 15 minutes). When QBWC calls ml-connector, it queries QuickBooks Desktop for changes since the last poll using ModifiedDateRangeFilter, then posts those changes to Slack. No webhooks are required; QuickBooks Desktop is pull-only.
What happens when QBWC sends a request while QuickBooks Desktop is closed or offline?
QBWC will not process requests if QuickBooks Desktop is not running and logged into the company file on the customer's Windows machine. The polling cycle will fail gracefully, and QBWC will retry on its next scheduled interval. ml-connector handles these transient failures and logs them for troubleshooting.
How does ml-connector prevent duplicate Slack messages if QBWC resends the same poll request?
ml-connector uses the QuickBooks transaction ID combined with the polling cycle timestamp to deduplicate outbound Slack posts. If the same transaction appears in consecutive polls, ml-connector recognizes it as a repeat and does not post it again, avoiding duplicate messages in Slack.

Related integrations

Connect QuickBooks Desktop and Slack

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

Get started