Odoo and Snowflake integration
Odoo runs your accounting, purchasing, and inventory. Snowflake stores your financial data for analytics and reporting. Connecting the two lets finance teams load invoices, purchase orders, GL accounts, and payments directly into Snowflake for consolidated analytics, month-end reconciliation, and audit trails. ml-connector handles the different authentication methods on each side and keeps your warehouse synchronized with your ERP.
What moves between them
The flow is unidirectional from Odoo into Snowflake. ml-connector polls Odoo for invoices, purchase orders, GL accounts, payments, and other accounting records on a schedule you control, typically aligned with your accounting close cycle. Each record is written into the corresponding Snowflake table for historical storage and analytics. GL account hierarchies and cost dimensions are also synced so Snowflake tables can be queried for period close reconciliation.
How ml-connector handles it
ml-connector stores the Odoo API key encrypted and authenticates to Odoo using JSON-2 with the Bearer token header, checking the write_date on each record to poll efficiently without scanning the entire table. On the Snowflake side, it uses Key Pair Authentication with an RSA private key and JWT token, and executes REST API calls to insert records into the warehouse tables. The Snowflake warehouse must have AUTO_RESUME enabled so queries do not fail, and the connector respects Snowflake's case sensitivity rules for unquoted identifiers. If a Snowflake query returns HTTP 429 (rate limit), ml-connector backs off exponentially and retries. Because Odoo API access is restricted to the authenticated user's record permissions, ml-connector uses a dedicated Odoo user with access to the accounting entities needed. Every record carries an audit trail and can be replayed if a downstream insert fails.
A real-world example
A growing e-commerce company runs Odoo Online for accounting, purchasing, and inventory across multiple warehouses and product lines. The finance team needs visibility into spending patterns, GL reconciliation by cost center, and supplier performance analytics. Before the integration, accountants exported purchase orders and invoices from Odoo every week and loaded them manually into Snowflake, then ran ad-hoc SQL queries to reconcile supplier invoices against purchase orders and GL postings. With Odoo and Snowflake connected, each purchase order, invoice, and GL posting flows directly into Snowflake on a daily schedule, and the team runs dashboards and SQL queries on fresh data. Month-end close now includes a pre-reconciled GL and vendor liability account.
What you can do
- Pull invoices, purchase orders, and GL accounts from Odoo and load them into Snowflake tables on a polling schedule aligned with your accounting cycle.
- Authenticate to Odoo with API key and username, and to Snowflake with Key Pair Authentication or token, handling credential encryption and JWT refresh.
- Map Odoo GL accounts and cost centers to Snowflake dimensions so finance queries can slice by department, project, and warehouse.
- Detect only new or changed records in Odoo using the write_date timestamp, avoiding full table scans on every sync.
- Capture a full audit trail of every record inserted into Snowflake, with automatic retry and replay if a query fails.
Questions
- What data moves from Odoo to Snowflake?
- Invoices, purchase orders, GL accounts, GL postings, payments, cost centers, and employee records flow from Odoo into Snowflake tables on a schedule you define. The flow is unidirectional, so Snowflake is read-only for queries and reporting. Odoo remains the system of record.
- Does ml-connector handle Odoo's API key authentication and Snowflake's Key Pair setup?
- Yes. ml-connector stores the Odoo API key encrypted and uses it to authenticate via JSON-2 Bearer token on every request. On Snowflake, it uses the RSA private key to generate JWT tokens and passes them with each REST API call. The connector refreshes Snowflake tokens before they expire and handles both auth methods automatically.
- How often does the sync run, and what happens if Snowflake rate limits a request?
- ml-connector polls Odoo and Snowflake on a schedule you configure, typically daily or after each accounting cycle close. If Snowflake returns HTTP 429 (rate limited), the connector backs off exponentially, waits, and retries the insert. Every record carries an audit trail, so you can replay failed inserts once the limit clears.
Related integrations
More Odoo integrations
Other systems that connect to Snowflake
Connect Odoo and Snowflake
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started