No hay un mejor transportista para Odoo: hay un trío, transportista × volumen × camino de integración, y donde más se falla es en el tercero. Con un servicio, pocos bultos por pedido y sin reembolso, basta un módulo OCA bien implantado. Si vives de la recogida o del punto de recogida, necesitas un módulo propio que cubra esas llamadas. Y con varios transportistas por país, o si la etiqueta la necesitan otros sistemas, la integración va a un middleware de envíos y Odoo solo manda el pedido.
Todo sale de leer código el 12 de septiembre de 2026: en OCA/l10n-spain, delivery_seur_atlas, delivery_mrw y delivery_dhl_parcel (19.0) y delivery_gls_asm (18.0); en OCA/delivery-carrier, delivery_correos_express (19.0), delivery_ups_oca y delivery_cttexpress (18.0); y nuestros conectores de Correos Express y MRW.
Qué cubre cada transportista en Odoo, leído en el código
Salvo donde diga «propio», la celda describe el módulo OCA; «No» significa que no lo hace ninguno. La rama es la que existe hoy en GitHub, no la que promete una ficha.
| Transportista | Etiqueta | Recogida | Seguimiento | Manifiesto | Punto de recogida | Aduanas | Retorno |
|---|---|---|---|---|---|---|---|
| SEUR OCA 19.0 | PDF, ZPL, A4 | No | Cron diario | No | No | No | No |
| MRW OCA 19.0 + propio | OCA PDF · propio ZPL | Propio: fecha en la solicitud | OCA diario · propio consulta | OCA: asistente | OCA: entrega en franquicia | No | OCA: campo retorno |
| Correos Express OCA 19.0 + propio | OCA PDF, ZPL · propio EPL | Propio: crear, cambiar, anular | OCA diario · propio 30 min | No | Propio: código postal y radio | No | No |
| DHL Parcel OCA 19.0 | PDF, ZPL, EPL | No | Cron diario | Cierre de día (asistente) | No | Campos vacíos | Producto R2C |
| GLS OCA hasta 18.0 | Solo PDF | Alta, anulación, estados | Cron diario + prueba de entrega | Asistente | No | No | Marca «con retorno» |
| UPS OCA hasta 18.0 | PDF, GIF, ZPL, EPL, SPL | No | Cron diario | No | No | No | No |
| CTT Express OCA hasta 18.0 | PDF, PNG, BMP | Asistente | Cron diario | Asistente | No | No | No |
De estos siete, en Odoo 19 solo tienen módulo OCA SEUR, MRW, Correos Express y DHL Parcel. GLS, UPS y CTT se quedan en la 18.0: migrar a 19 con uno de ellos es migrar el módulo, que es trabajo de implantación OCA, o cambiar de camino.
Tres cosas que la tabla no dice. Ninguno de los siete OCA cotiza salvo el de UPS: el de SEUR levanta un NotImplementedError y los otros cinco devuelven el precio de venta del producto de envío, así que el porte se define en Odoo. El seguimiento lo actualiza en todos el mismo cron, el de delivery_state, con intervalo de un día. Y ninguno, OCA o propio, envía partida arancelaria ni valor declarado.
MRW o SEUR en Odoo: dónde difieren de verdad para B2C nacional
En la etiqueta hacen lo mismo: se valida el albarán, se crea la expedición, la etiqueta queda adjunta y el seguimiento se escribe en el picking. Difieren en tres funciones que no salen en una demo. Recogida programada: en el OCA de SEUR no existe. Nuestro conector MRW manda la fecha de recogida dentro de la solicitud, calculada desde la fecha prevista del albarán, pasada al día siguiente después de las 17:00 y saltando fines de semana. El OCA de MRW envía el nodo de recogida vacío y rechaza «con recogida en franquicia», aunque sí admite la entrega en franquicia.
Multibulto: el OCA de SEUR reparte el peso a partes iguales entre los bultos y manda medidas 1×1×1; guarda un solo número de expedición. Nuestro conector MRW construye una línea por bulto con su peso y valida los datos antes de llamar. Reembolso: SEUR no lo manda en ningún campo; el OCA de MRW sí, con comisión en origen o en destino y el importe tomado del total del pedido. Vender contra reembolso es desarrollo en SEUR y configuración en MRW. Detalle en conectar SEUR con Odoo y en conector MRW Odoo.
GLS o DHL en Odoo: paquetería europea frente a envío internacional
El criterio no es la etiqueta, es la frontera. GLS España es paquetería de red: bultos pequeños, agencias, volumen. DHL en Odoo son dos productos con dos APIs: el módulo OCA es solo de DHL Parcel y su propia descripción avisa de que no vale para DHL Express, que es justo el que Odoo 19 documenta como conector nativo, junto con UPS. Mira primero qué producto de DHL tienes contratado.
Aduanas: ni GLS ni DHL Parcel las hacen. El de DHL trae los campos de la API, CustomsValue, CustomsCurrency y GoodsDescription, y los tres viajan vacíos; el incoterm solo admite CPT o EXW. El de GLS manda el valor declarado vacío y el país del remitente fijo a 34, España. Si exportas fuera de la Unión, Canarias, Ceuta y Melilla incluidas, elige el camino que te deje rellenar esos datos. Detalle en DHL y GLS en Odoo.
GLS en Odoo: qué cubre el módulo OCA y cuándo basta
delivery_gls_asm es el más completo de los tres que no llegan a Odoo 19. Leído en la 18.0.1.1.3: etiqueta solo en PDF, con el formato fijo en la llamada EtiquetaEnvio; recogidas con alta, anulación y estados propios; prueba de entrega adjunta al albarán; cancelación solo si la expedición sigue registrada en el transportista; reembolso desde el total del pedido; marca «con retorno»; y asistente de manifiesto. Basta si envías desde España, en 17 o 18, con impresora que acepte PDF. Ficha en GLS OCA.
UPS en Odoo: cuenta, claves de API y dónde falla el OCA
delivery_ups_oca es el único de los siete que cotiza de verdad: llama a /api/rating/v1/Rate y devuelve el precio según peso y dimensiones, con tarifas negociadas si se marca la casilla. Pide client id, client secret y número de expedidor, y renueva el token OAuth solo. Las unidades vienen por defecto en pulgadas y libras (IN y LBS): si no las cambias, la tarifa sale con el peso equivocado. Etiqueta GIF por defecto, convertida a PDF si lo eliges; también ZPL, EPL y SPL.
Dónde falla para internacional, que es para lo que se contrata UPS: no hay ninguna referencia a InternationalForms, factura comercial ni aduanas, así que la documentación aduanera se hace fuera de Odoo. Tampoco hay recogidas, retorno ni punto de recogida; reembolso sí. Y no hay rama 19.0. Ficha en UPS OCA.
CTT Express en Odoo: qué pide la integración y cómo vuelve el seguimiento
delivery_cttexpress vale, según su propia descripción, para España y Portugal. Habla SOAP con zeep contra iberws.tourlineexpress.com, puerto 8686 en pruebas y 8700 en producción, y pide usuario, contraseña y códigos de cliente, agencia y contrato. Etiqueta en PDF, PNG o BMP, con modelo SINGLE o MULTI; recogida con franja horaria y manifiesto, ambos por asistente; seguimiento por GetTracking con el cron diario. No hace retorno, reembolso, punto de recogida ni aduanas, y no tiene rama 19.0. Ficha en CTT Express OCA.
Criterio de decisión por volumen: cuándo OCA, cuándo módulo propio, cuándo middleware
No lo decidimos por tamaño de empresa sino por dónde está el trabajo repetido. Tres preguntas, en este orden.
- ¿Un transportista, un servicio, un bulto habitual y sin reembolso? Módulo OCA: es libre, el código se lee y etiqueta y seguimiento están. Presupuesta la implantación: mapeo de estados, bajar el cron y comprobar que la rama de tu versión existe.
- ¿Vives de una función que en la tabla pone «No»? Recogida programada, punto de recogida, reintentos cuando la API se cae, validación previa de credenciales. Eso es módulo propio: el nuestro de Correos Express reintenta los pendientes cada cinco minutos y sincroniza el seguimiento cada treinta; el de MRW bloquea la validación o solo avisa, según se configure.
- ¿Varios transportistas por país, o la etiqueta la necesita también la tienda? Middleware de envíos: Odoo manda pedido y albarán, la plataforma elige transportista y devuelve etiqueta y estado. Se paga por envío y se pierde detalle, pero se cambia de transportista sin tocar Odoo.
El umbral: mientras nadie retranscriba direcciones al portal, no compensa integrar; en cuanto alguien lo hace, compensa el OCA; cuando el almacén saca etiquetas por dos caminos, toca módulo propio o middleware. Más en módulo nativo frente a OCA y en automatizar etiquetas y tracking.
Los tres errores al elegir transportista para Odoo
- Elegir por el precio del porte y descubrir el camino después. El porte lo negocia comercial; el camino lo sufre almacén. Un transportista sin recogida en Odoo cuesta una persona llamando a la agencia cada tarde.
- Creer la ficha del módulo en lugar de la rama. Pide la URL del manifiesto en la rama de tu versión y mira si devuelve 200.
- Probar con un bulto a Madrid. Es el único caso que todos resuelven bien. Prueba tres bultos de pesos distintos, un reembolso y un envío a Canarias.

Preguntas frecuentes
¿Se puede conectar UPS con Odoo?
Sí. Odoo lista UPS entre sus conectores nativos en la documentación de la versión 19, y en OCA/delivery-carrier existe delivery_ups_oca para 17 y 18, sin rama 19: cotiza en tiempo real y etiqueta, pero no genera documentación aduanera ni recogidas.
¿CTT tiene módulo Odoo?
Sí, delivery_cttexpress en OCA/delivery-carrier, con ramas 17.0 y 18.0: España y Portugal, etiqueta, recogida y manifiesto por asistente y seguimiento por cron. No hay rama 19.0.
¿Qué transportista tiene la mejor integración con Odoo?
En Odoo 19, Correos Express: entre módulo OCA y conector propio cubren etiqueta, recogida, punto de recogida y seguimiento. La más completa sin comprar nada es GLS, pero se queda en Odoo 18. La única que tarifica es UPS.
¿Módulo OCA o módulo propio para transportistas en Odoo?
Etiqueta y seguimiento: OCA. Recogida programada, punto de recogida, reintentos y validación previa: propio. Varios transportistas por país o etiqueta compartida con otros sistemas: middleware.
Enlaces útiles dentro de FlexigoTech
Lo que hacemos sobre esto
¿Tienes que elegir transportista y no sabes por qué camino?
Cuéntanos qué envías, cuántos bultos por pedido, a qué países y qué versión de Odoo tienes. Te devolvemos la fila de la tabla que te toca y qué se resuelve con configuración, qué con módulo y qué con middleware. Escribe a comercial@flexigobe.com o llama al +34 616 809 504.

