Odoo and Tableau integration
Odoo holds your operational and financial records. Tableau visualizes business performance. Connecting the two lets finance and operations teams build dashboards directly from live Odoo data without exporting and re-importing spreadsheets. Invoice aging, purchase-to-pay analysis, and real-time headcount roll up from Odoo into Tableau automatically. ml-connector handles Odoo's API key authentication, polling on the schedule you choose, and pushing clean data into Tableau data sources so your dashboards are always current.
What moves between them
Data flows one direction: Odoo into Tableau. Invoice headers and detail lines flow from Odoo's account.move and account.move.line tables weekly or on demand, filtered to unpaid and recent-past invoices. Vendor payment records from account.payment are published alongside cost center hierarchies and employee rosters from Odoo's res.partner, account.analytic.account, and hr.employee tables. Tableau data sources are refreshed immediately after ml-connector completes a sync so dashboards always show current balances and headcount.
How ml-connector handles it
ml-connector stores the Odoo base URL and API key encrypted and polls the five primary Odoo models (account.move, account.move.line, account.payment, account.analytic.account, hr.employee) using JSON-2 REST calls authenticated with the API key as a Bearer token. Each poll filters on write_date to retrieve only records modified since the last sync, avoiding full table scans. After fetching and validating records against Odoo's field permissions, ml-connector constructs CSV or Hyper format payloads and pushes them to Tableau data sources using the REST API authenticated with a Personal Access Token. Tableau's session token expires after 240 minutes, so ml-connector refreshes it before every payload push. The sync is scheduled, not event-driven, so even if Odoo's Automated Actions were enabled, ml-connector would miss records unless polling completes in the same window. Every record carries an audit trail with the Odoo user who last modified it and a hash of the synced fields, allowing replays if a Tableau refresh fails.
A real-world example
A mid-market wholesale distributor uses Odoo to manage purchasing, accounts payable, inventory, and a sales team across multiple warehouses. The finance director needs to track invoice aging and spending trends by supplier category and warehouse location, but the Odoo dashboard is too slow for live reporting and exporting to Excel every week is tedious and error-prone. Finance also tracks active employees by warehouse for headcount budgeting. With Odoo and Tableau connected, invoices and employee records flow automatically into Tableau data sources weekly, and the finance team builds dashboards showing invoice aging by category, payment trends, and headcount by location. Month-end accrual reviews now pull from live Odoo data instead of a static spreadsheet export, eliminating the reconciliation gap that used to appear mid-month.
What you can do
- Sync invoice headers and detail lines from Odoo to Tableau data sources on a weekly or daily schedule.
- Pull purchase orders, vendor payments, and cost center hierarchies to populate dashboard filters and dimensional analysis.
- Refresh Tableau data sources automatically after each Odoo sync completes so dashboards always show current balances.
- Handle Odoo API key authentication and the high-water-mark polling pattern to fetch only changed records since the last sync.
- Maintain an audit trail for every synced record including the Odoo user who last modified it and the fields that changed.
Questions
- Which direction does data flow between Odoo and Tableau?
- Data flows one direction, from Odoo into Tableau. Invoices, payments, cost centers, and employee records are polled from Odoo and published to Tableau data sources so dashboards always reflect current operational and financial state. Tableau is used for analysis and visualization, not as a source of changes back to Odoo.
- Does Odoo have webhooks that trigger the sync?
- Odoo's Automated Actions and webhooks require Enterprise edition and are not production-grade for integration use. ml-connector uses polling instead, filtering on the write_date field to fetch only records modified since the last sync. This avoids full table scans and ensures no records are missed even if Odoo's webhook delivery fails.
- How does the integration respect Odoo's access control and cost center dimensions?
- ml-connector authenticates with the API key provided by the integration user, and Odoo's row-level security and field access rules apply to every API call. Cost centers and analytical accounts are fetched alongside financial records, so Tableau dashboards automatically inherit the same dimensional structure the Odoo user can see.
Related integrations
More Odoo integrations
Other systems that connect to Tableau
Connect Odoo and Tableau
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started