ml-connector
Zoho BooksTaxJar

Zoho Books and TaxJar integration

Zoho Books tracks every sale and bill in your accounting system. TaxJar calculates the right sales tax rate for each transaction and files nexus reports with state authorities. Connecting them removes the manual step of entering transactions into TaxJar and ensures your tax calculations always match your books. Every invoice in Zoho Books automatically flows to TaxJar, where it is taxed and reported in the jurisdiction where the sale occurred.

How Zoho Books works

Zoho Books exposes invoices, bills, purchase orders, customer payments, vendor payments, and chart of accounts through REST APIs with regional base URLs determined by the user's region. Authentication uses OAuth2 with user-delegated refresh tokens, and every call requires an organization_id query parameter. Zoho Books supports outgoing webhooks configured via Settings > Automation > Webhooks, with events for invoices, bills, and payments, and includes offset-based polling with the page and per_page parameters. Access tokens expire after 1 hour and must be refreshed proactively. Rate limits are 100 requests per minute with daily thresholds varying by plan.

How TaxJar works

TaxJar is a REST API accessed at https://api.taxjar.com/v2/ (production) or https://api.sandbox.taxjar.com/v2/ (sandbox). It authenticates with a single API key in the Authorization header and does not support OAuth2. TaxJar exposes endpoints for tax calculations, transaction reporting (orders and refunds), nexus region tracking, and address validation. All endpoints are poll-based; TaxJar does not publish webhooks or push events. Transaction reports posted after fulfillment are used to track actual sales for nexus and filing purposes. Transactions do not count against the monthly API request threshold.

What moves between them

Invoices and bills from Zoho Books flow into TaxJar for tax calculation and reporting. When an invoice is created or updated in Zoho Books, ml-connector receives the webhook event, extracts line items with amounts and customer location, and posts the transaction to TaxJar for tax calculation. Completed transactions are reported to TaxJar for state filing. The customer location and line item amounts are the primary drivers of tax calculation; currency conversion uses Zoho Books exchange_rate and currency_id fields. Data flows from Zoho Books to TaxJar only; tax calculations are read from TaxJar but not written back to Zoho Books.

How ml-connector handles it

ml-connector receives Zoho Books webhook notifications for invoice and bill events. Each webhook payload is verified using the HMAC secret registered with Zoho Books. The connector extracts the invoice or bill ID and queries Zoho Books for full transaction details, including line items, customer, and totals. Customer location is mapped to a TaxJar jurisdiction code. Line items are transformed into TaxJar line_items format with description, quantity, unit price, and tax code. The transaction is posted to TaxJar's /transactions/orders endpoint with the exemption status if the customer has a sales tax exemption in TaxJar. TaxJar returns the calculated tax amount and tax breakdown by jurisdiction. For transactions marked complete in Zoho Books, the connector hits PUT /transactions/orders to finalize the transaction for state reporting. If a transaction already exists in TaxJar (detected via a 422 Conflict on POST), ml-connector falls back to PUT to update it. API key rotation or expiry is handled by rotating the token in the connector's credential store. Region routing is respected: Zoho Books calls route to the correct regional base URL as stored in the credential set. Every transaction carries a full audit trail with the source webhook event ID, Zoho Books invoice ID, and TaxJar transaction ID.

A real-world example

A mid-sized e-commerce business uses Zoho Books to track online and phone sales across multiple states and countries. Before the integration, the accounting team manually entered invoices into TaxJar after order fulfillment, then reconciled tax calculations against the books at month-end. With Zoho Books and TaxJar connected, each invoice is automatically transformed and reported for tax in the jurisdiction where the customer is located. The sales tax amount calculated by TaxJar is captured in the audit trail. At quarter-end, the team reviews the nexus regions TaxJar is tracking and prepares filings with confidence that the transaction count and tax-by-state figures match the general ledger.

What you can do

  • Automatically post invoices and bills from Zoho Books to TaxJar for real-time tax calculation and nexus tracking.
  • Transform Zoho Books line items into TaxJar transaction format, preserving quantities, amounts, and customer location.
  • Apply customer sales tax exemptions stored in TaxJar to incoming Zoho Books invoices.
  • Handle customer location routing to the correct tax jurisdiction and apply multi-state tax logic.
  • Verify Zoho Books webhook signatures and audit every transaction sync with source and target IDs.

Questions

How are customer locations mapped from Zoho Books to TaxJar jurisdictions?
The customer record in Zoho Books includes a billing address with state or country. ml-connector maps the state or country code to a TaxJar jurisdiction code for tax rate lookup. If the Zoho Books customer address is incomplete, the transaction is flagged for review before posting to TaxJar.
Does TaxJar's lack of webhooks mean invoices are polled from Zoho Books instead?
No. Zoho Books sends webhooks to ml-connector when invoices and bills are created or modified. ml-connector receives the webhook in real-time, queries Zoho Books for full details, and immediately posts to TaxJar. TaxJar itself does not push events, so TaxJar data like tax rates and nexus regions are polled on-demand.
What happens if a transaction already exists in TaxJar?
If POST to TaxJar returns a 422 Conflict, ml-connector automatically falls back to PUT to update the existing transaction. This handles the case where a transaction was previously synced but the invoice in Zoho Books has been modified after initial sync.

Related integrations

Connect Zoho Books and TaxJar

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

Get started