ml-connector
OdooLooker

Odoo and Looker integration

Odoo runs your finance and operations. Looker powers your business intelligence. Connecting the two ensures your analytics always reflect current GL balances, invoice aging, purchase commitments, and headcount from Odoo. Records flow continuously into your Looker data warehouse on a schedule you control, so stakeholders see a single source of truth for financial and operational metrics. No manual exports, no stale dashboards, no re-keying.

How Odoo works

Odoo exposes GL accounts, account moves (journal entries), purchase orders, vendor invoices, payments, employee records, and cost centers through XML-RPC (HTTP POST to {base_url}/xmlrpc/2/object) or JSON-RPC (HTTP POST to {base_url}/json/2/<model>/<method>, Odoo 19+). Authentication is via API key paired with username, sent with each request. Odoo publishes no webhooks for cloud connectors, so finance records are read by polling with a write_date high-water-mark to capture only changed records since the last sync.

How Looker works

Looker is a business intelligence platform that connects to data warehouses and exposes modeled data via REST JSON API at https://<instance>.cloud.looker.com/api/4.0/. It accepts OAuth2 client credentials (client_id and client_secret) to obtain a bearer token, which expires after one hour and must be refreshed. Looker models warehouse data; it does not natively store GL accounts or invoices, so ml-connector loads Odoo records into your warehouse first, then Looker queries and visualizes the synced data. Looker can also schedule automated data delivery via cron-driven Scheduled Plans.

What moves between them

GL accounts, invoice headers, invoice lines, purchase orders, and employee records flow from Odoo into your Looker data warehouse on a daily or weekly schedule. Cost centers and GL account dimensions are synced in both directions to keep analytical segments aligned. Looker reads the synced data to build GL trend dashboards, invoice aging reports, budget-vs-actual analysis, and HR headcount views. Write-backs to Odoo are not part of this integration; Looker remains analytics-only.

How ml-connector handles it

ml-connector uses Odoo's write_date field as a high-water-mark to fetch only changed records since the last poll, reducing API overhead and database churn. It sends the Odoo API key with every XML-RPC or JSON-RPC request, validates the response envelope, and maps Odoo's res.partner (vendors), account.move (journal entries), purchase.order, and hr.employee records into your warehouse schema. For Looker, ml-connector obtains an OAuth2 bearer token, uses it to query the looker_explores and looker_queries API to introspect available measures and dimensions, and loads transformed Odoo records into the warehouse where Looker can model and visualize them. ml-connector refreshes the Looker token one hour before expiry to prevent mid-sync authentication failures. The full audit trail tracks which Odoo records were fetched, which warehouse rows were created or updated, and which Looker queries or scheduled plans consumed the data.

A real-world example

A mid-market B2B software company uses Odoo Online for procurement, accounts payable, and general ledger, and uses Looker to power an executive dashboard showing cash flow, invoice aging, vendor spend analysis, and month-end close readiness. Before the integration, finance pulled trial balances and vendor aging reports from Odoo weekly, transformed them in Excel, and uploaded the results to Looker manually, introducing delays and transcription errors. With Odoo and Looker connected, GL data syncs daily into the warehouse, invoice aging refreshes every morning, and the executive dashboard shows the current state without manual intervention. The finance team now closes the month two days faster because vendor reconciliation and cash forecast start with clean, current data.

What you can do

  • Sync GL accounts and account moves (journal entries) from Odoo to your Looker data warehouse daily or weekly.
  • Extract invoice headers, line items, and vendor details from Odoo and load them into Looker for aging and accrual analysis.
  • Pull purchase orders and commitments from Odoo to Looker so spend analysis and budget-vs-actual reports stay current.
  • Map Odoo cost centers and GL dimensions to Looker analytical segments so breakdowns remain consistent.
  • Authenticate Odoo with API key over XML-RPC or JSON-RPC, and Looker with OAuth2, with automatic token refresh.

Questions

Does Looker store financial data like GL accounts or invoices?
No. Looker is a business intelligence platform that models and visualizes data from a warehouse, not an operational system. ml-connector extracts GL accounts, invoices, and purchase orders from Odoo and loads them into your warehouse first, then Looker queries and visualizes the synced data.
Which Odoo transport method does ml-connector use, XML-RPC or JSON-RPC?
ml-connector supports both XML-RPC (available in Odoo 12+) and JSON-RPC (Odoo 19+). The choice depends on your Odoo version and performance preference; JSON-RPC is newer and preferred for Odoo 19+. Both authenticate with the same API key per username.
How often does data sync between Odoo and Looker?
ml-connector polls Odoo on a schedule you define, typically daily or weekly, using Odoo's write_date high-water-mark to fetch only changed records. The sync is pull-based; Odoo publishes no webhooks, so the schedule is decoupled from GL posting events. Looker Scheduled Plans can then automate dashboard refresh or email delivery on their own cron.

Related integrations

Connect Odoo and Looker

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

Get started