QuickBooks Online and Microsoft Teams integration
QuickBooks Online runs your accounting. Microsoft Teams connects your team. When bills arrive in QuickBooks, approvers see them in Teams instantly instead of waiting for email. Customer invoices, expense transactions, and journal postings flow directly into the channel you choose, rich-formatted with amounts, vendor names, and due dates so context is never missing. ml-connector handles the OAuth2 handshake on both sides and maps QuickBooks webhook events into Teams message payloads without manual setup.
What moves between them
Data flows one direction: from QuickBooks into Teams. When a vendor bill, invoice, customer payment, or journal entry is created or updated in QuickBooks, the webhook fires and ml-connector fetches the full record. It formats the transaction details (vendor name, amount, GL account, date, reference number) and posts a message to the channel configured for that event type. This keeps the finance team, approvers, and executives synchronized without forwarding email or copying details by hand. Deletions and voids are also posted so the channel history reflects the true state.
How ml-connector handles it
ml-connector registers a webhook with QuickBooks for a curated set of entity types (Invoice, Bill, Payment, JournalEntry, etc.). When an event fires, QuickBooks delivers the entity ID; ml-connector then fetches the full record using the OAuth2 access token and formats it into a Teams message. The message includes the transaction amount, parties involved, due date (for bills), and GL account mapping so recipients understand impact immediately. Teams messages are posted using Microsoft Graph with the app's Client Credentials token. OAuth2 access tokens are cached and refreshed when expired, and QuickBooks refresh tokens (which rotate every 24-26 hours) are stored encrypted and reused on the next auth refresh cycle. ml-connector validates every message against the channel's configuration so sensitive data like PII or cost allocations can be masked or split across multiple channels by rule.
A real-world example
A regional accounting firm manages multiple small-business client QuickBooks instances. Before the integration, the firm's staff saw bills and invoices arriving in QB but had to email transaction summaries to client approvers and stakeholders who often missed the messages or replied with old questions. Now, each QB instance is mapped to a Teams channel or DM thread, and when a bill arrives, a formatted message with vendor name, amount, due date, and account code posts automatically. Approvers see the transaction immediately, can ask questions in-thread, and the message stays in the channel history for audit. Deletions and voids are logged the same way, so no changes slip past unnoticed.
What you can do
- Post QuickBooks vendor bills, customer invoices, and payments to Teams channels the moment they are created or updated.
- Format transaction details including amount, party names, GL accounts, and due dates in readable Teams messages.
- Route different event types to different channels so finance approvals stay separate from executive reports.
- Refresh OAuth2 tokens on both sides automatically so the connection never breaks mid-month.
- Track all posted messages in the audit log with full record IDs for downstream dispute resolution and compliance.
Questions
- Does this integration move data from Teams back into QuickBooks?
- No. Data flows only from QuickBooks into Teams as notifications and messages. Teams is used as an approval surface and communication hub, not a data source. QuickBooks records remain the system of record.
- How does the integration handle the fact that QuickBooks webhook payloads contain only an entity ID, not the full transaction?
- ml-connector receives the webhook event and entity ID from QuickBooks, then immediately fetches the full record (invoice, bill, payment) using a separate GET request with the OAuth2 access token. This ensures the Teams message includes all relevant details like amount, vendor name, GL account, and due date without user involvement.
- What happens when QuickBooks OAuth2 tokens expire or refresh tokens rotate?
- ml-connector caches access tokens and automatically refreshes them when a request returns an auth error. QuickBooks refresh tokens rotate every 24-26 hours by design; ml-connector stores the new token securely and uses it on the next refresh cycle. If the entire auth chain breaks, the user re-authorizes once via the Intuit consent screen and the connection restarts.
Related integrations
More QuickBooks Online integrations
Other systems that connect to Microsoft Teams
Connect QuickBooks Online and Microsoft Teams
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started