A build-to-order Odoo module that layers weight/zone/value-based shipping rules, free-shipping thresholds, handling surcharges and per-carrier markups on top of your delivery carriers. ECOSIRE scopes, builds, installs and supports it for you. Built to order by ECOSIRE for Odoo 17, 18, 19 — indicative price from $199.00 USD; request a quote for a scoped proposal.

A build-to-order Odoo module that layers weight/zone/value-based shipping rules, free-shipping thresholds, handling surcharges and per-carrier markups on top of your delivery carriers. ECOSIRE scopes, builds, installs and supports it for you.
Sem pagamento agora. Isto envia um pedido de orçamento à nossa equipe — responderemos por e-mail com preços e próximos passos.
Odoo merchants control shipping margin one carrier at a time, and it rarely holds up. The stock delivery app gives you delivery.carrier with a "Based on Rules" pricing type, but its rules are flat variable/operator/value rows scoped to one carrier — there is no cross-carrier markup layer, no free-shipping threshold that varies by region, no handling fee that stacks on top of the raw carrier quote, and no way to apply a margin percentage to what a real-time carrier connector (base_delivery_carrier_label, DHL, UPS, FedEx) returns at checkout. Merchants end up editing dozens of carrier records by hand, hard-coding shipping products, or eating negative margin on heavy or remote-zone orders. Native runs out of road exactly where shipping stops being a fixed price and starts being a policy.
`shipping.rate.rule` model with weight-band, order-value-band and destination-zone conditions evaluated by `sequence` priority for deterministic resolution
Overrides the standard `delivery.carrier` `rate_shipment()` / `_get_price_available()` so rules feed website checkout, `sale.order` and delivery orders through one code path
Per-carrier markup as fixed amount or margin percentage applied on top of live rates returned by real-time connectors (DHL/UPS/FedEx/`base_delivery_carrier_label`)
Zone matching against `res.country`, `res.country.group` and state, so region-specific rates and remote-area surcharges resolve from the delivery address
Free-shipping thresholds scoped by zone and carrier, written as a proper delivery line so tax and margin reporting stay correct
Promo/free-shipping time windows driven by `ir.cron` automated actions with start/end dates
This module adds a dedicated rule engine that evaluates on top of your existing carriers instead of replacing them. We introduce a shipping.rate.rule model (models.Model) with fields for weight bands, order value bands, destination zone (linked to res.country / res.country.group / state), carrier scope, and a priority sequence so overlapping rules resolve deterministically. A compute method decorated with @api.depends recalculates the shipping price whenever the cart total, weight, or delivery address changes, and we override the carrier's rate_shipment() / _get_price_available() so the engine feeds Odoo's standard checkout, sale order, and delivery flow — the customer sees one final number, correctly, in both the eCommerce checkout and back-office Sales quotations. Per-carrier markup is applied as either a fixed amount or a margin percentage against the live carrier cost, so real-time rates from a connector still carry your margin.
Free-shipping thresholds are first-class: define "free over X in zone Y for carrier Z", with optional promo windows driven by Odoo ir.cron automated actions, and the engine writes the discount as a proper delivery line so tax and reporting stay clean. Handling fees and surcharges (fuel, oversize, remote-area) are their own rule type that stacks after the base rate. Everything is exposed through backend views (XML list/form with an OWL-driven rule tester where useful), guarded by ir.model.access.csv plus record rules for multi-company setups, and every rate decision is auditable. Because it hooks the standard carrier interface, the same rules are honored by the website checkout, the sale.order back office, and any integration calling in over XML-RPC or JSON-RPC.
This is a build-to-order engagement, not an instant download. We start with a short scoping call to map your carriers, zones, and margin policy, then build the module against your target version — Odoo 17.0, 18.0, or 19.0, Community or Enterprise (we flag any Enterprise-only carrier connector dependencies up front). Typical delivery is 2 to 4 weeks from confirmed scope. You get the installable source, UAT on a staging database, a rollback plan, and a post-go-live support window — and you own the git repository at handover.
Runs the Odoo website store and needs checkout shipping prices that protect margin per zone and per carrier without editing carrier records by hand every time rates change.
Owns shipping P&L and wants an auditable markup and surcharge policy — margin percentage on live carrier rates, remote-area surcharges, and free-shipping thresholds that don't quietly erode profit.
Manages multiple carriers and zones and needs weight-band and dimensional-weight rules that reflect real freight cost, with deterministic rule priority so quotes are predictable.
Maintains the instance and integrations, needs a clean module that overrides the standard carrier interface, respects multi-company record rules, and behaves consistently over XML-RPC/JSON-RPC.
Compre a licença em ecosire.com e baixe o ZIP do módulo Carrier Shipping Rate Rules & Markup Engine for Odoo no painel da sua conta.
Extraia o ZIP em sua pasta de complementos personalizados do Odoo no servidor (ou faça upload via Aplicativos > Instalar do arquivo em Odoo.sh/runbot).
Ative o modo de desenvolvedor, abra Aplicativos, clique em Atualizar lista de aplicativos, procure por Carrier Shipping Rate Rules & Markup Engine for Odoo e pressione Instalar.
Abra o novo menu, cole sua chave de licença ECOSIRE, conecte quaisquer credenciais externas (Shopify, Amazon, Stripe, etc.) e salve.
Execute o teste de conexão integrado, sincronize seus primeiros 10 registros e agende o cron recorrente. Entre em contato com o suporte se algo falhar.
| Critério | ECOSIRE | Construção personalizada | Concorrente | Odoo nativo |
|---|---|---|---|---|
| Cross-carrier markup layer | Fixed or margin-% markup on top of any carrier, incl. live rates | Possible but you build and maintain the engine | Usually single-carrier, rarely margin-% on live rates | |
| Free-shipping thresholds by zone/carrier | First-class, with promo windows via ir.cron | Buildable to spec, added dev time | Often global threshold only | |
| Handling fees & surcharges | Stackable surcharge rule type (fuel, oversize, remote) | Custom fields and logic you design | Limited or bundled into base rate | |
| Zone / region matching | Country, country-group and state driven from address | Whatever you model yourself | Varies; often country-level only | |
| Fit to your version & edition | Built for your 17/18/19, Community or Enterprise | You control it, at full build cost | Depends on vendor's version coverage | |
| Support & ownership | Support window + full git repo handover | Yours to own and maintain | Vendor SLA, no source ownership | |
| Auditability of rate decisions | Logs which rule fired, base cost, markup, surcharge | If you build logging | Typically opaque | |
| Delivery model | Build-to-order, 2-4 weeks from confirmed scope | Longer — full spec, build, test cycle | Instant download, generic fit |
No. This is a build-to-order engagement. ECOSIRE builds the module against your target Odoo version and your carrier/zone/margin policy, then installs and supports it. There is no instant apps.odoo.com download for this.
Typical delivery is 2 to 4 weeks from confirmed scope. It starts with a short scoping call to map your carriers, zones, thresholds and margin rules; the timeline firms up once that scope is signed off. Larger multi-company or multi-connector setups sit at the upper end.
Odoo 17.0, 18.0 and 19.0, both Community and Enterprise. We build against your exact version. If your rules depend on an Enterprise-only carrier connector, we flag that during scoping so there are no surprises.
Yes. Because the engine overrides the standard carrier interface (`rate_shipment` / `_get_price_available`), it applies your markup or margin percentage on top of the live rate a connector returns, so real-time quotes still carry your margin at checkout.
Yes. It hooks Odoo's standard carrier pricing path, so the same rules are honored in the eCommerce checkout, in `sale.order` quotations in the back office, and by any external system calling in over XML-RPC or JSON-RPC.
You get a post-go-live support window for bug fixes and configuration questions, and you receive the full git repository at handover so you own the code. Version upgrades and feature additions can be scoped as follow-on work.
No. Every rule carries a `sequence` priority, so overlapping conditions resolve deterministically to the highest-priority match. If no rule matches, the carrier's native pricing is used as a fallback rather than failing.
A build-to-order Odoo module that layers weight/zone/value-based shipping rules, free-shipping thresholds, handling surcharges and per-carrier markups on top of your delivery carriers. ECOSIRE scopes, builds, installs and supports it for you.