ml-connector
Zoho BooksSalesforce

Zoho Books and Salesforce integration

Salesforce holds your customer relationships and deals. Zoho Books holds your invoices and purchase orders. Connecting the two means new Accounts in Salesforce automatically appear as customers in Zoho Books, and customer contact changes sync bidirectionally. Your sales team in Salesforce stays focused on deals while accounting has up-to-date customer records in Zoho Books, eliminating manual lookups and duplication.

How Zoho Books works

Salesforce exposes Accounts, Contacts, Opportunities, Orders, and Invoices through its REST API using OAuth2 client credentials flow. The API base URL includes the customer's My Domain URL (e.g., https://<MyDomain>.my.salesforce.com/services/data/v63.0/). Salesforce supports Change Data Capture (CDC) via Pub/Sub API for real-time push events on Account, Contact, and Opportunity objects, as well as polling via GET /sobjects/<Object>/updated/ with datetime ranges. Tokens expire after 2 hours and new tokens must be obtained via client credentials; there are no refresh tokens in this flow.

How Salesforce works

Zoho Books is a cloud accounting platform that exposes Contacts, Invoices, Bills, Purchase Orders, Items, Chart of Accounts, and Journals through REST APIs requiring OAuth2 Authorization Code flow with user-delegated refresh tokens. The API uses region-specific base URLs (US, EU, India, Australia, Japan, Canada, China, Saudi Arabia) returned in the token response. Every API call requires an organization_id query parameter. Zoho Books supports outgoing webhooks configured via the API, as well as offset-based polling with page and per_page parameters. Access tokens expire after 1 hour and refresh tokens have no expiry but are limited to 20 per user.

What moves between them

Salesforce Accounts sync into Zoho Books as Contacts in the customer list. Salesforce Contacts sync as additional customer records or linked contact roles. The primary flow is one-way from Salesforce into Zoho Books on a schedule tied to your sales cycle. When an Account name, email, or billing address changes in Salesforce, the corresponding Zoho Books contact record is updated. Reference data such as contact types and customer categories are mapped during initial setup.

How ml-connector handles it

ml-connector stores both credential sets encrypted and handles the different authentication schemes: Salesforce client credentials (stored directly) and Zoho Books user-delegated OAuth2 (stored with refresh token). It routes all Zoho Books API calls to the correct regional base URL as determined by your organization's region. The connector polls Salesforce for Account and Contact changes via SOQL queries on a schedule, translating Salesforce Account names to Zoho Books customer names and matching Salesforce Contact emails to Zoho Books contact emails for deduplication. Salesforce tokens are refreshed on every request cycle (they expire after 2 hours), while Zoho Books tokens are refreshed proactively near the 55-minute mark. The connector respects Zoho Books' 100-request-per-minute rate limit and backs off on 429 responses. Every record carries a full audit trail and stores a Salesforce Account ID in Zoho Books as an external_id reference for future syncs.

A real-world example

A mid-sized B2B SaaS company uses Salesforce as the system of record for customer accounts and deals, with sales reps entering all new prospects and managing pipeline. The finance team uses Zoho Books to invoice those customers and track payments. Before the integration, new Accounts entered in Salesforce sat in limbo until someone manually created a matching customer record in Zoho Books, and address or contact changes in Salesforce were often missed in the accounting system, leading to invoices sent to outdated addresses and customer emails bouncing. With the integration live, every new Account syncs automatically to Zoho Books, address and contact updates flow through within minutes, and the finance team has a single source of truth for each customer's location and contact person.

What you can do

  • Sync Salesforce Accounts to Zoho Books Contacts as customers, matched by email for deduplication.
  • Automatically create new customer records in Zoho Books when Accounts are added to Salesforce.
  • Update customer names, billing addresses, and contact emails in Zoho Books when Salesforce Accounts change.
  • Bridge Salesforce OAuth2 client credentials with Zoho Books OAuth2 user-delegated flow and route to the correct regional API endpoint.
  • Poll Salesforce on a schedule and back off on rate limits, with full audit trail and external ID mapping for every sync.

Questions

Can I sync billing and shipping address data from Salesforce to Zoho Books?
Yes. The integration maps Salesforce Account BillingStreet, BillingCity, BillingState, BillingPostalCode to Zoho Books contact address fields during the sync. If Salesforce has a ShippingAddress, that is mapped to a separate contact record or address field depending on your Zoho Books configuration.
How does the integration handle the two different OAuth2 flows?
Salesforce uses client credentials flow (server-to-server), which requires only client_id and client_secret stored encrypted. Zoho Books requires user-delegated OAuth2 with a refresh token, which the connector securely stores and refreshes proactively at the 55-minute mark before expiry. Both credential sets are encrypted at rest.
What happens if Salesforce and Zoho Books both have a record for the same customer?
The integration matches on email address. If a Salesforce Account email matches a Zoho Books contact email, the Zoho Books record is updated rather than duplicated. On first sync, the connector stores the Salesforce Account ID as an external reference in Zoho Books, so future syncs find the right record even if email or name changes.

Related integrations

Connect Zoho Books and Salesforce

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

Get started