Cómo automatizamos la conciliación de pagos para 4 PSPs en Odoo 18
Un caso real automatizando conciliación de Stripe, PayPal, Klarna y Revolut — con números de producción
Pavel Brecs
27 de marzo de 2026 · 8 min de lectura
Stripe deposita 11.820 € — pero dentro hay 47 cargos, 3 reembolsos y 340 € en comisiones. PayPal envía 4.200 € sin desglose. Klarna liquida en SEK. Si usas Odoo con varios PSPs, conoces este dolor. Así pasamos de 6 horas de conciliación manual al mes a cero, con conciliación automática de pagos Odoo.
Por qué la conciliación en Odoo es dolorosa
Odoo 18 tiene una conciliación bancaria sólida para casos simples. Entra un pago de cliente, encaja con una factura, pulsas validar. Listo.
Pero los payouts de PSP no funcionan así. Cuando Stripe envía dinero a tu banco, no envía un pago por pedido. Agrupa días de cargos en un único depósito, resta los reembolsos y sus comisiones de procesamiento, y envía una suma total. Tu banco ve una línea: "STRIPE PAYOUT 11.820 €". Odoo no tiene ni idea de lo que hay dentro de ese número.
Stripe sí tiene un módulo de pago nativo en Odoo 18. Pero ojo con el matiz: solo funciona si Stripe está conectado directamente a tu web de Odoo. Si tus clientes pagan a través de una plataforma externa de e-commerce que enruta los pagos por Stripe, ese módulo es inútil.
¿PayPal? Sin conciliación nativa de payouts. ¿Klarna? Ni siquiera tiene módulo de pago nativo. ¿Revolut? Lo mismo. La comunidad lleva años pidiéndolo. Hilos de foros con miles de vistas describen el mismo dolor: exportaciones CSV manuales, reformateo en Excel, horas haciendo clic en el widget de conciliación.
| PSP | Nativo | Externo | Conciliación payout | Nuestro |
|---|---|---|---|---|
| Stripe | ✓ directo | ✗ | ✗ | ✓ |
| PayPal | ✓ básico | ✗ | ✗ | ✓ |
| Klarna | ✗ | — | ✗ | ✓ |
| Revolut | ✗ | — | ✗ | ✓ |
El módulo nativo de Stripe solo funciona cuando está conectado directamente a tu web de Odoo.
Nuestro setup: dos negocios, un Odoo
Gestionamos dos e-commerce desde una única instancia de Odoo 18 en Odoo.sh.
Empresa A es una operación retail local sobre una web Odoo. Los pagos van por Stripe y PayPal, liquidando en una cuenta bancaria EUR.
Empresa B maneja ventas internacionales en varios mercados europeos a través de una plataforma externa de e-commerce — completamente separada de Odoo. Los pagos entran por Stripe (no conectado a Odoo), Klarna (para clientes escandinavos que pagan en SEK, DKK, NOK) y Revolut.
Las cuentas bancarias de ambas empresas están conectadas a Odoo vía Saltedge. Los extractos bancarios llegan automáticamente. Pero ¿casar esas líneas bancarias con los pedidos reales de los clientes? Era totalmente manual.
¿Y qué ocurre cuando Stripe envía un payout?
La mayoría de usuarios de Odoo no entienden del todo cómo funcionan los payouts de PSP. Esta es la realidad.
Un cliente hace un pedido de 899 €. Stripe crea un cargo. En los días siguientes, otros clientes compran más cosas. Stripe va acumulando todos esos cargos. El día del payout, Stripe calcula: todos los cargos menos los reembolsos menos sus comisiones de procesamiento. Y entonces envía una única transferencia a tu banco.
Tu banco muestra un único depósito. Odoo lo importa como una única línea de extracto bancario en una cuenta transitoria, esperando a que alguien averigüe qué significa.
Odoo no sabe: qué hay dentro
Construyendo la solución, un PSP cada vez
No nos propusimos construir un motor universal de conciliación. Empezamos con un problema y seguimos adelante.
Mes 1 — Stripe primero. El plan era simple: conectar a la API de Stripe, traer todos los cargos, casar cada uno con un pedido de venta por referencia, auto-conciliar. Funcionó para un 80 % de las transacciones el primer día.
Mes 2 — Se suma PayPal. PayPal era otra bestia. A diferencia de Stripe, PayPal no tiene API de liquidación. Tuvimos que inventar "payouts sintéticos": encontrar líneas bancarias que contengan "PAYPAL" y averiguar qué transacciones encajan en cada depósito por rango de fecha e importe.
Mes 2,5 — Entra Klarna. Klarna trajo la sorpresa multidivisa. Los clientes en Escandinavia pagan en SEK, pero Klarna liquida en EUR. Nuestra comprobación de cobertura comparaba importes en divisas distintas. Nos costó dos días rastrear ese bug.
Mes 3 — Revolut completa el cuadro. La integración más simple: un cargo, un payout. Pero incluso esta tenía un detalle — los pedidos del viernes se liquidan el lunes, así que la ventana de matching tenía que contemplar los fines de semana.
Los problemas que no esperábamos
Las integraciones iniciales eran la parte fácil. El trabajo de verdad fue lidiar con los casos límite que solo aparecen en producción.
Cargos huérfanos
Stripe tenía cargos que no casaban con ningún pedido en Odoo. Transacciones de prueba, cargos manuales, cargos de una web que no sabíamos que estaba en la misma cuenta de Stripe. La primera versión se caía con estos. Ahora los marca como excepciones y sigue adelante.
Odoo "ayudando" demasiado
El modelo de conciliación integrado de Odoo es entusiasta — coge líneas bancarias y las concilia parcialmente antes de que corra nuestro módulo. Matches incorrectos, asientos a medio hacer. Tuvimos que construir lógica de auto-undo: detectar, revertir, rehacer correctamente.
La API de liquidación que falta en PayPal
Stripe y Klarna tienen endpoints de liquidación. PayPal no. Aplicamos ingeniería inversa a los payouts desde las líneas bancarias por huecos de fechas e importes. Entre los casos límite está PayPal reteniendo fondos por seguridad — las reservas potenciales por reembolso pueden retrasar las liquidaciones de 7 a más de 49 días.
Comisiones y multidivisa
Cada PSP descuenta comisiones de forma distinta — por transacción, por payout o silenciosamente desde la liquidación. Añade multidivisa encima (Klarna cobra en SEK, liquida en EUR) y los números nunca cuadran al primer intento. Hay muchas situaciones espinosas con el manejo de comisiones que solo afloran en producción.
Cómo funciona ahora
Un módulo de Odoo. Cinco tareas programadas cron diarias. Cero intervención manual, pura automatización de facturación, cobros y pagos.
| Hora | Qué ocurre |
|---|---|
| 05:30 | Sincronizar referencias de pedidos desde plataformas externas |
| 06:00 | Traer transacciones desde las APIs de los cuatro PSPs |
| 06:30 | Casar transacciones con pedidos, payouts con líneas bancarias |
| 07:00 | Conciliar — reescribir asientos contables, imputar comisiones |
| 09:15 | Informe matinal por Telegram |
Si algo sale mal — una referencia de pedido ausente, una factura aún no creada — la transacción se marca como excepción con un motivo claro. Un contable puede resolverla mediante un asistente que muestra los matches sugeridos.
Si la conciliación integrada de Odoo interfiere, entra el auto-undo, revierte el estropicio y reintenta.
Los resultados: números reales de producción
Estos números provienen de nuestra instancia de Odoo en producción, cubriendo aproximadamente 2,5 meses de operación con conciliación bancaria automatizada.
Una excepción entre 231 transacciones — un cargo de PayPal sin referencia de pedido extraíble. En nuestro último mes: 31 payouts por un total de 99.674 € entre los cuatro PSPs.
| PSP | TX | Payouts | TX media |
|---|---|---|---|
| Stripe | 163 | 33 | 4,5 |
| PayPal | 47 | 21 | 2,0 |
| Klarna | 10 | 9 | 1,1 |
| Revolut | 11 | 11 | 1,0 |
Antes y después
Si esto te suena familiar
Si gestionas un e-commerce sobre Odoo con varios proveedores de servicios de pago (PSPs) y tu contable se pasa horas casando extractos bancarios con pedidos — hemos estado exactamente donde tú estás.
Nuestro módulo corre diariamente, gestiona cuatro PSPs, dos empresas y varias divisas. Lo construimos para nuestros propios negocios y podemos adaptarlo también al tuyo.
¿Quieres hablar de tu setup?
Estaremos encantados de repasar cómo podría funcionar la conciliación automatizada de PSPs en tu instancia de Odoo.
Ponte en contacto →¿Necesitas ayuda con esto?
Construimos Odoo y automatización IA en producción para empresas de la UE. Hablemos de tu proyecto.