ml-connector
Zoho BooksMicrosoft Teams

Zoho Books and Microsoft Teams integration

Zoho Books handles invoicing, bills, and expense accounting for your business. Microsoft Teams is where your teams collaborate and stay informed. Connecting the two means finance events from Zoho Books flow into Teams channels as they happen, so your team sees new invoices, bills due, and payment confirmations without leaving Teams. ml-connector manages the regional Zoho API endpoints and both OAuth2 credential sets, ensuring each message arrives with the full transaction detail needed for quick action.

How Zoho Books works

Zoho Books is a REST API with region-specific base URLs and requires OAuth2 credentials (client ID, client secret, and user refresh token) plus an organization ID on every call. It exposes invoices, bills, purchase orders, vendor and customer payments, items, and journal entries. Zoho Books supports outgoing webhooks configured via the API for events such as invoice creation, bill updates, and payment completions, with HMAC signature verification. Polling is also available via offset-based pagination on list endpoints. Access tokens expire after one hour and refresh tokens do not expire. Regional base URLs vary by customer location (US, EU, India, Australia, Japan, Canada, China, Saudi Arabia), determined at authentication time.

How Microsoft Teams works

Microsoft Teams is accessed through Microsoft Graph REST API using OAuth2 client credentials (tenant ID, client ID, and client secret) for machine-to-machine authentication. Teams allows posting messages to channels and sending direct chats to users, along with reading team, channel, and user metadata. Teams also supports webhooks via Microsoft Graph change subscriptions, which expire every three days and must be renewed. Teams is a notification and collaboration surface only; it has no native financial data objects such as invoices, bills, or GL accounts, so it serves as the downstream recipient of Zoho Books events rather than a data source.

What moves between them

The main flow is one-way, from Zoho Books into Microsoft Teams. When an invoice or bill is created or updated in Zoho Books, ml-connector receives the webhook event and posts a formatted message to a designated Teams channel. The message includes the transaction type, amount, customer or vendor name, and due date. Vendor payments and customer payment confirmations also flow to Teams as notifications. Because Teams is messaging-only, no data flows back to Zoho Books.

How ml-connector handles it

ml-connector stores OAuth2 credentials for both systems encrypted. It subscribes to Zoho Books webhooks by configuring the webhook endpoint and shared secret via the Zoho API, handling HMAC signature verification on incoming events. For each event type (invoice created, bill updated, payment received), ml-connector maps the event payload to a Teams message template, substituting transaction details such as amount, party name, and due date. It resolves the correct Teams channel ID from configuration, then posts via Microsoft Graph using its client-credentials bearer token. Regional routing is handled by reading the api_domain field from Zoho's token response and routing all subsequent Zoho calls to the correct regional endpoint. Every notification carries the originating Zoho transaction ID as a reference for audit purposes. If a Teams API call fails, ml-connector retries with exponential backoff.

A real-world example

A boutique consulting firm uses Zoho Books for invoicing and expense tracking across three regional offices. The accounting team works primarily in Microsoft Teams and needs to be notified immediately when client invoices are created, when vendor bills arrive, and when customer payments are received, so they can stay on top of cash flow without context-switching to Zoho. Before the integration, accountants checked Zoho manually several times per day. With Zoho Books and Teams connected, each accounting event posts automatically to the accounting channel, including the key details, so the team stays informed and can drill into Zoho for full details when needed.

What you can do

  • Post invoice creation and update events from Zoho Books to Microsoft Teams channels with transaction details and amounts.
  • Notify Teams channels when vendor bills are received or customer payments are collected, with due date and party name.
  • Verify Zoho Books webhook signatures using HMAC to ensure event authenticity.
  • Route messages to the correct Teams channel based on transaction type or team configuration.
  • Maintain audit trails linking each Teams notification back to the originating Zoho transaction ID.

Questions

Why does data only flow from Zoho Books to Teams and not the other way?
Microsoft Teams is a collaboration and messaging platform, not an accounting system. It has no native invoice, bill, purchase order, or GL account objects, so it cannot serve as a source for financial data. ml-connector sends Zoho Books events to Teams as notifications so your team stays informed, but all financial record creation and updates happen in Zoho Books.
How does ml-connector handle Zoho Books' regional base URLs?
Zoho Books is deployed across multiple regions with different base URLs for US, EU, India, Australia, Japan, Canada, China, and Saudi Arabia. During OAuth2 authentication, Zoho returns an api_domain field that tells ml-connector which region the customer's organization is in. All subsequent API calls are routed to that regional endpoint, so multi-region deployments are handled transparently per customer.
What happens if the Teams notification fails to post?
ml-connector tracks the delivery status of each notification and retries failed posts to Teams with exponential backoff. If a Teams API call fails due to rate limits or temporary unavailability, the retry loop ensures the message is delivered. Every notification includes the Zoho transaction ID so it can be traced back to the source record for manual follow-up if needed.

Related integrations

Connect Zoho Books and Microsoft Teams

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

Get started