ml-connector
QuickBooks DesktopMicrosoft Teams

QuickBooks Desktop and Microsoft Teams integration

Finance teams manage bills and vendor relationships inside QuickBooks Desktop but lose visibility once alerts and approvals are needed. Microsoft Teams is where your team lives and works. Connecting the two brings QuickBooks Desktop activity into Teams channels so bill due dates, payment confirmations, and vendor issues surface where the team already works. No more logging into QuickBooks Desktop to catch a past-due invoice or missed payment.

How QuickBooks Desktop works

QuickBooks Desktop exposes vendors, bills, bill payment checks, purchase orders, invoices, receive payments, accounts, customers, items, employees, and journal entries through QBXML over SOAP. A customer-hosted agent called the QBWC (Web Connector) running on Windows calls a remote SOAP endpoint you specify at a configurable polling interval, typically 5 to 15 minutes. Queries use ModifiedDateRangeFilter to detect changes since the last poll. Edits require the current EditSequence (version counter) to prevent conflicts. No OAuth required; instead, the agent provides a username and password that your service exchanges for a session token.

How Microsoft Teams works

Microsoft Teams exposes teams, channels, messages, and users through the Microsoft Graph REST API, secured with OAuth2 client credentials authenticated against Microsoft Entra ID. Messages are posted via /teams/{id}/channels/{id}/messages endpoints and optionally pushed to Teams via incoming webhooks. Teams also supports change notifications (webhooks) for monitoring resource changes, though subscriptions expire and must be renewed every 1 to 3 days. All calls require tenant ID, client ID, and client secret, and Azure AD admin consent is required for application-level permissions.

What moves between them

The flow runs from QuickBooks Desktop into Microsoft Teams. ml-connector polls QuickBooks Desktop for newly modified bills, invoices, payments, and vendors since the last sync window. For bills due within the next 7 days, payment status changes, and vendor credit holds, ml-connector formats a summary message and posts it to a designated Teams channel. Reference data such as vendor names and invoice amounts are included in each notification. The channel acts as an activity log and real-time alert surface; no data is written back into QuickBooks Desktop from Teams.

How ml-connector handles it

ml-connector stores the QuickBooks QBWC session credentials (username and password) encrypted and submits them to your SOAP endpoint on each polling cycle to obtain a fresh session token. Session tokens expire and must be refreshed every polling interval. For Microsoft Teams, ml-connector stores the Entra ID tenant ID, client ID, and client secret encrypted and uses OAuth2 client credentials to obtain a bearer token, refreshing when a call returns 401 Unauthorized. Because QuickBooks Desktop has no webhooks, polling runs on a configurable schedule (e.g., hourly or every 4 hours). Each Teams message includes a timestamp and record ID so repeated alerts on the same bill are idempotent. EditSequence values are tracked locally to catch concurrent edits; if a bill is modified in QuickBooks Desktop while ml-connector is polling, the re-query retrieves the updated EditSequence before any attempt to update metadata in Teams. QBWC imposes a 60-second timeout on XML queries, so large bill lists are paginated by date range. Microsoft Teams rate limits are not separately documented, but ml-connector backs off on 429 responses. Every alert carries an audit trail so the team can see what triggered the notification and when.

A real-world example

A mid-sized professional services firm runs QuickBooks Desktop on a Windows machine at the office to manage vendor bills, purchase orders, and accounts payable. The finance team uses Microsoft Teams for daily communication and project updates. Before the integration, the accounting manager had to log into QuickBooks Desktop multiple times per day to check for overdue bills and upcoming payment deadlines, then send Slack-style messages to alert the team. With QuickBooks Desktop and Teams connected, each new bill, invoice, and payment status change sends an alert directly to the AP channel with the vendor name, amount, and due date. The team sees past-due bills instantly and can discuss payment options in the same channel without hunting through email or desktop software.

What you can do

  • Alert your finance team to bills due in the next 7 days with vendor names, amounts, and due dates posted to a Teams channel.
  • Notify the team of payment status changes and confirmations as bills are paid in QuickBooks Desktop.
  • Post alerts when vendors are placed on credit hold or payment terms change, keeping approvals and discussions in Teams.
  • Track invoice aging and payment history via a continuous Teams channel log with full audit trails on each alert.
  • Handle QBWC session token lifecycle and OAuth2 credential refresh automatically, with encrypted storage and zero manual intervention.

Questions

How often does ml-connector poll QuickBooks Desktop for new bills and payments?
Polling runs on a configurable schedule, typically every 4 hours or hourly depending on your cash flow velocity. QBWC itself polls at a minimum interval of 1 minute but is usually set to 5 to 15 minutes by the customer's IT policy. ml-connector respects the QBWC agent's schedule and queries the local Windows machine for changes since the last sync.
Does the integration require QuickBooks Desktop to be open 24/7 on a Windows machine?
Yes. QuickBooks Desktop and the QBWC Web Connector agent must both be running on a Windows machine with the company file open. If either closes, polling stops until they restart. This is a constraint of QuickBooks Desktop architecture, not ml-connector. The customer's IT team typically runs this on a server-grade machine or via Remote Desktop to ensure uptime.
What happens if a bill is modified in QuickBooks Desktop while ml-connector is sending an alert to Teams?
ml-connector tracks EditSequence (the version counter) for each bill and retrieves the current value before processing any bill in the polling cycle. If a bill is edited concurrently in QuickBooks Desktop, the EditSequence changes and ml-connector detects it on the next poll, avoiding duplicate or conflicting alerts. The Teams channel log captures the history so the team sees all updates to a bill.

Related integrations

Connect QuickBooks Desktop and Microsoft Teams

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

Get started