Odoo and Stripe integration
Odoo runs accounting and order management. Stripe processes online payments and subscriptions. Connecting the two keeps your customer records and billing in alignment. New customers in Odoo create matching Stripe customers, and sales invoices from Odoo flow into Stripe for payment collection. When Stripe records a payment, it updates the Odoo invoice status and posts the payment into the general ledger without manual reconciliation.
What moves between them
The main flow is Odoo into Stripe. Odoo customers and invoices flow into Stripe as customers and invoices. When a customer is created or updated in Odoo, ml-connector posts the update to Stripe. When a sales invoice is confirmed in Odoo, ml-connector creates a matching Stripe invoice. Stripe webhooks push payment and subscription events back into Odoo so payment statuses update on the invoice and accounting records are posted automatically. Recurring orders in Odoo become Stripe subscriptions.
How ml-connector handles it
ml-connector polls Odoo using its high-water-mark timestamp on write_date to fetch only changed records. It authenticates Odoo with the API key and username pair and handles both XML-RPC and JSON-2 endpoints. On the Stripe side, ml-connector stores the secret key encrypted and authenticates via HTTP Basic Auth on every REST call. It maps Odoo's res.partner (customer) records to Stripe customers, and account.move (invoice) records to Stripe invoices. When a Stripe webhook arrives with a payment_intent.succeeded event, ml-connector updates the Odoo invoice status to Paid and creates an account.payment record in Odoo's general ledger. Subscriptions are created in Stripe from Odoo sales orders marked as recurring. Both systems are polled on a schedule you control, and every record carries an audit trail for replay if a downstream call fails. Stripe rate limits are handled with exponential backoff.
A real-world example
A mid-sized e-commerce company runs Odoo for order management and accounting, and Stripe for payment processing. Before the integration, the finance team manually entered customer and invoice data from Odoo into Stripe, tracked payments in both systems separately, and spent time reconciling discrepancies at month-end. After each payment in Stripe, the team re-keyed the payment status back into Odoo. With Odoo and Stripe connected, new customers in Odoo instantly create Stripe customers, confirmed invoices flow into Stripe automatically, and payments are recorded in Odoo as they complete. Month-end reconciliation is faster because the two systems are in sync, and customer service can see payment status in Odoo without logging into Stripe separately.
What you can do
- Sync Odoo customers to Stripe customers so your customer records stay aligned across both systems.
- Flow Odoo invoices into Stripe for payment collection without manual data entry.
- Create Stripe subscriptions from recurring sales orders in Odoo and manage billing automatically.
- Update Odoo invoice status and post payment records when Stripe payments arrive via webhook.
- Poll Odoo on a schedule you control with retries and a full audit trail on every record.
Questions
- Which direction does data move between Odoo and Stripe?
- The main flow is Odoo into Stripe. Customers and invoices move from Odoo into Stripe, while payment and subscription events move from Stripe back into Odoo. Odoo accounting records are updated when payments complete in Stripe so reconciliation happens automatically.
- Does Odoo's lack of production webhooks mean data moves slowly?
- Odoo has no built-in production-grade webhooks, so ml-connector polls Odoo using a high-water-mark timestamp on the write_date field. This is efficient and reliable for most billing cadences. You control the poll frequency based on how quickly you need invoices to reach Stripe, typically every few minutes to once per hour.
- How does ml-connector handle customer and invoice mapping between the two systems?
- ml-connector stores a local map of Odoo customer IDs to Stripe customer IDs so duplicate customers are not created. When an Odoo customer is created or updated, ml-connector posts it to Stripe and records the mapping. When an Odoo invoice is created, ml-connector creates a matching Stripe invoice linked to the same Stripe customer. Both systems use the mapping to ensure payment events flow to the correct invoice.
Related integrations
More Odoo integrations
Other systems that connect to Stripe
Connect Odoo and Stripe
Free to use. Add your credentials, ping your real systems, and see if we fit.
Get started