Checkout is where an online store either earns its keep or loses the sale at the last metre. The shopper has found a product and put it in the cart — what remains is friction: unclear prices, a delivery step that asks the wrong questions, a minimum learned about only at the end, or a return policy they cannot find. Odoo 20 does not redesign checkout into something unrecognisable. Instead, the release notes describe targeted changes around the cart and checkout that remove specific, familiar points of friction.
This article walks through the checkout-relevant changes in the Odoo 20 release notes — the extra-step granularity, the editable Pay Now button, minimum order quantities, preferred delivery dates, tax display per pricelist, stock-based publishing, portal returns, and the supporting catalogue improvements that shape what a customer sees before they ever reach the payment step — and explains what each one means in practice.
The checkout step only appears when it needs to
Many Odoo stores use the optional extra step in checkout to collect information that only some orders need — a gift message, a delivery note, a file, a confirmation. In earlier versions that step tended to be all or nothing: either every shopper saw it, or nobody did. Odoo 20 adds extra step granularity: you can show the extra step in the checkout process only when the cart contains products from selected categories.
That small change has outsized value. A store selling both standard goods and, say, personalised or regulated items can now ask the extra questions only of the customers whose carts actually require them. Everyone else gets a shorter checkout. The principle is sound conversion practice — never make a hundred shoppers answer a question meant for five of them — and Odoo 20 finally lets the checkout step itself follow it, by category rather than by blanket rule.
The release notes list a deceptively simple item: you can now edit and translate all “Pay now” buttons in the checkout. The final call to action is the highest-stakes piece of text in the entire flow. Stores that operate in more than one language, or that prefer wording such as “Pay securely” or “Complete order,” previously had limited control over that label. In Odoo 20 the button text becomes ordinary translatable interface copy.
For Canadian stores selling in English and French, this matters more than it sounds. A checkout translated everywhere except the one button the customer must click to pay breaks trust at the exact moment money changes hands.
Minimum order quantities, enforced before checkout frustration
Odoo 20 lets you set a minimum order quantity for e-commerce products. Wholesale and B2B-leaning stores have always needed this: some products only make economic sense sold in fives, tens, or cases. Without a native minimum, stores resorted to explanatory text that customers missed, or to rejecting orders after the fact — the worst possible outcome for both sides.
With the minimum defined on the product, the rule lives where the customer shops rather than in a policy page nobody reads. A shopper building a cart sees the constraint as part of the product itself, adjusts the quantity while browsing, and arrives at checkout with a valid order. Enforcing commercial rules at the product level, early and visibly, is exactly how a stronger checkout should behave: fewer surprises, fewer abandoned carts caused by late validation, and fewer awkward post-order conversations.
Preferred delivery dates put timing in the customer's hands
Another release-note item with immediate practical value: Odoo 20 can allow customers to select a preferred delivery date at checkout. Delivery timing is one of the top reasons shoppers contact support — “can it arrive Friday?” — and one of the top reasons deliveries fail, when a parcel arrives on a day nobody is home.
Capturing the preference inside the order, rather than in an email thread after it, means the date travels with the sales order into fulfilment. Be precise about what this is: a preferred date, a request captured in the flow — not a guaranteed delivery promise. Stores should word the option accordingly and make sure fulfilment actually reads the field.
Prices that make sense to both B2B and B2C shoppers
Price display is a checkout problem long before it is an accounting one. A B2C shopper expects the price they see to be the price they pay, tax included. A B2B buyer compares tax-excluded prices and reclaims the tax. Serving both audiences from one website with one fixed display convention guarantees confusion for one of them — usually discovered at checkout, where confusion is most expensive.
Odoo 20 addresses this with taxes included/excluded price display set at pricelist level: whether displayed prices include or exclude taxes is configured per pricelist, explicitly so that one website can serve B2C and B2B customers appropriately. Pair that with the pricelist selector now available on all pages of the e-commerce website — not buried on a single page — and with the product reference price displayed on all e-commerce pages by default, and the pricing story a customer sees from product page to payment becomes consistent. Consistency is the point: the total at checkout should confirm what the shopper already believed, never correct it.
A catalogue that keeps checkout promises
A stronger checkout starts before checkout, with a catalogue that does not advertise what cannot be sold. Several Odoo 20 changes work together here:
- Stock-based product publishing — products are automatically unpublished and republished based on stock availability, so out-of-stock items stop presenting themselves as buyable and return when stock does, without staff babysitting the shop page.
- Prevent sales by category — an entire category can be blocked from selling while its product prices remain visible, useful for seasonal ranges, showroom-style catalogues, and quote-only lines.
- Range filter for numeric attributes — customers can filter products using a range slider on numerical attributes, which means shoppers arrive at the product page — and then the cart — with the right variant already narrowed down.
- Smarter attribute filters — eCommerce filters now exclude values not relevant to the loaded page, and searching by an attribute value (the release notes give the example of a “black t-shirt”) opens the product with that value already selected.
- Ribbon filters — new “On Sale” and “In Stock” ribbons help shoppers self-select toward purchasable products.
Individually these are catalogue features. Collectively they protect the checkout: every product that reaches a cart is more likely to be in stock, correctly variant-selected, and actually sellable. The cheapest abandoned-cart fix is the one that happens three pages earlier.
Loyalty, donations, and the cart as a living summary
The cart itself gains feedback loops in Odoo 20. Loyalty progress bars now appear in cart notifications and the cart summary, showing shoppers their progress toward unlocking a reward — or confirming the moment a reward is unlocked. Anyone who has watched a shopper add one more item to cross a threshold understands why visible progress works: it converts an abstract programme into a concrete, nearly-finished goal at the exact moment of decision.
Donations are integrated into the cart flow, including recurring donations via subscriptions. On the retention side, Odoo 20 adds WhatsApp abandoned cart follow-up for carts that still slip away, alongside automated review request emails with a configurable delay after order confirmation. The checkout story no longer ends at the thank-you page.
After payment: returns without the support ticket
A checkout flow is only as strong as the buyer's confidence that a mistake can be undone. Odoo 20 adds return management in the customer portal: customers can return products from the portal rather than opening a support conversation to ask how. Self-service returns lower the perceived risk of buying in the first place — shoppers check out more readily when the exit is visible — and they lower support load after the sale.
Supporting changes round out the picture: guest-order contacts are archived by default and unarchived if the customer later creates an account, pickup point selection gains a country filter, and a default accounting journal for eCommerce orders plus a new order dashboard make the resulting orders easier to manage.
What to do with this on upgrade
- Audit your extra checkout step: if only some categories need it, scope it to those categories and shorten everyone else's checkout.
- Review and translate your Pay Now button text in every storefront language before launch day.
- Move any minimum-quantity rules out of policy text and onto the products themselves.
- Enable preferred delivery dates only if fulfilment will genuinely read them — and label them as preferences.
- Set tax-included or tax-excluded display deliberately on each pricelist, especially if one website serves both consumers and businesses.
- Turn on stock-based publishing for ranges where phantom availability has caused refunds or apologies.
None of these changes will trend on social media. That is their character: Odoo 20's eCommerce work is a series of small, correct decisions at the points where shoppers hesitate — the extra question, the final button, the price convention, the delivery date, the return.
Further reading
- Odoo 20 Release Notes — the eCommerce section: extra step granularity, Pay Now buttons, minimum quantities, preferred delivery dates, pricelist tax display, stock-based publishing, and portal returns.
- Order handling — Odoo documentation — how confirmed eCommerce orders flow through sale, delivery, invoicing, and returns.
- Deliveries — Odoo documentation — delivery methods and pickup options presented at checkout.
