ml-connector
Zoho BooksLooker

Zoho Books and Looker integration

Zoho Books powers accounting for SMBs, and Looker powers the analytics and dashboards that illuminate that data. Connecting the two moves your invoices, bills, journals, and chart of accounts into Looker's data model so your finance and operations teams can query, report, and analyze from a single source. ml-connector bridges the regional base URLs and OAuth2 refresh cycles that Zoho Books requires, keeping your Looker reports in sync with Zoho's live books.

How Zoho Books works

Zoho Books is a REST API with region-specific base URLs (US, EU, India, Australia, Japan, Canada, China, Saudi Arabia) determined at OAuth2 authentication time. It requires OAuth2 Authorization Code flow with a user-delegated refresh token, client_id, and client_secret; access tokens expire after 1 hour and have no refresh endpoint, so new tokens must be requested with the refresh token. Every API call requires an organization_id query parameter. Zoho Books exposes contacts, invoices, bills, purchase orders, vendor payments, customer payments, items, chart of accounts, journals, and expenses through list and detail endpoints with offset-based pagination. It supports outgoing webhooks for invoices, bills, purchase orders, contacts, payments, and expenses, requiring HMAC signature verification against a customer-provided secret; webhook history is queryable by date range. Polling via list endpoints is also available with offset pagination.

How Looker works

Looker is a business intelligence platform with a REST API that requires OAuth2 client credentials (client_id and client_secret) exchanged for a bearer token valid 1 hour with no refresh endpoint, requiring re-authentication after expiry. It exposes queries, looks, dashboards, scheduled plans, users, groups, folders, connections, roles, and permission sets. Looker is primarily a pull-only read platform without native support for ERP entity types like GL accounts, invoices, or bills; it models warehouse data and does not natively store financial transactional records. Scheduled Plans enable cron-driven data delivery to webhooks, email, S3, or SFTP, but there is no inbound webhook or real-time change event system. Data delivery is one-way from Looker outbound; ml-connector reads Looker's query API to validate structure and writes financial data via connector-managed methods such as scheduled reporting or lookup table refresh.

What moves between them

Financial reference data and transaction records flow from Zoho Books into Looker. Chart of Accounts, Journals, Invoices, Bills, Purchase Orders, Vendor Payments, and Customer Payments are synced at a configurable frequency (typically nightly or post-transaction) into Looker-queryable dimensions and fact tables. Currency and exchange rate data from Zoho's settings are included to support multi-currency reporting. Because Looker does not natively store financial GL postings, the sync maps Zoho's GL entities into denormalized fact tables or explores that Looker users can query for reporting and analysis. Direction is Zoho Books into Looker only; Looker does not write back to Zoho.

How ml-connector handles it

ml-connector stores Zoho Books OAuth2 credentials encrypted, including the region field returned at token time, and routes all API calls to the matching regional base URL (US, EU, India, etc.). It proactively refreshes Zoho access tokens before expiry (around 55 minutes) using the stored refresh token. On every sync, it includes the customer's organization_id as a required query parameter on all Zoho calls. It fetches currency codes via Zoho's GET /settings/currencies endpoint and caches the exchange rates to handle multi-currency invoices and bills. For Looker, it exchanges OAuth2 credentials for a new bearer token on each session (no refresh endpoint), validates query structure before sync, and maps Zoho's Journal posting date, GL account code, and cost center (if present in the source data) into Looker fact table columns. Zoho's webhook payload structure varies by configurable response format version, so ml-connector supports both old and new response_format boolean settings. If Zoho returns 429 due to rate limits, ml-connector backs off and retries within Zoho's 100 requests per minute window and daily plan limits. Every record carries an audit trail including the sync timestamp, the Zoho organization_id, and the source transaction ID for troubleshooting and replay.

A real-world example

A mid-sized SaaS company with multi-currency operations across three regions uses Zoho Books for accounting (invoicing customers in USD, EUR, and GBP; paying vendors in local currencies) and Looker for operational reporting. Before the integration, finance ran monthly reports by exporting Zoho invoices and GL journals as CSV and loading them into Looker manually, a process that took a full day and introduced currency conversion errors each month. With Zoho Books and Looker connected, invoices, bills, and journals sync nightly with live exchange rates resolved at sync time. The finance team now opens Looker dashboards on the first day of month-end close and sees all transactions, currencies converted and posted to GL accounts, ready for close-out analysis without manual re-entry.

What you can do

  • Sync invoices, bills, purchase orders, and journal entries from Zoho Books to Looker on a schedule matching your close process.
  • Resolve Zoho's regional base URLs and organization IDs automatically, with OAuth2 token refresh before expiry.
  • Map Zoho Chart of Accounts and multi-currency exchange rates into Looker dimensions for consistent financial reporting.
  • Handle Zoho webhook payloads with configurable response format versions and signature verification, or poll via offset pagination for resilience.
  • Track every synced record with audit timestamps, Zoho organization ID, and source transaction ID for compliance and troubleshooting.

Questions

Does Looker natively store and report on ERP financial data like invoices and GL accounts?
No. Looker is a business intelligence platform that models warehouse data and does not natively store ERP entities such as invoices, bills, or GL accounts. ml-connector syncs Zoho Books data into Looker-queryable dimensions and fact tables so your finance team can report on and analyze Zoho transactions through Looker dashboards and queries.
How does ml-connector handle Zoho Books regional base URLs and multi-currency data?
ml-connector stores the region field returned by Zoho OAuth2 at token time and routes all API calls to the matching regional base URL (US, EU, India, etc.). It fetches currency codes and exchange rates from Zoho's GET /settings/currencies endpoint and includes them in the sync so Looker reports show amounts in their original currency and in your reporting currency.
What happens if Zoho's OAuth2 token expires during sync?
ml-connector proactively refreshes Zoho access tokens before expiry (around 55 minutes) using the stored refresh token, so the token is always fresh at sync time. Looker tokens must be re-requested from scratch on each session since Looker offers no refresh endpoint; ml-connector handles this transparently.

Related integrations

Connect Zoho Books and Looker

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

Get started