Skip to main content
iVentureTeam

Odoo 20 eCommerce Release Notes

All 38 eCommerce changes from the official Odoo 20 release notes, explained in plain words with a screenshot from a live Odoo 20 database, plus where to find each one and what it means for your upgrade.

Planning the move? See our Odoo upgrade services, the Odoo 20 upgrade guide or get a number from the migration cost calculator.

New feature 19Enhancement 18Removal 1In Community 37Enterprise only 1
Type
Edition

Change 1 of 38

AI-assisted product editing

New featureEnterprise only

Ask the AI assistant to generate product images or to change a product name, price, or description from the Shop page.

Official Odoo 20 release note

In plain words

On a product page, open the website editor and click the AI button. It opens an "AI Website Product Edit" chat linked to that product, with ready prompts such as "Help me generate an image" and "Enhance image". Generated images can be set as the main or an extra product image, and the default AI agent (with its "Update Records" skill) can change product fields such as name, price or description.

Website > Shop > product page > Edit > AIThe AI chat opened from the editor on a product page, with image prompts ready to use.

Where to find it

  1. Open a product page on the website.
  2. Click Edit, then click the AI button in the editor top bar.

For users

Designers can create product pictures and adjust product texts without leaving the page they are editing.

For developers

WebsiteBuilder.onAiChatClick is patched when the main object is a product.template; product models get ai_set_main_image and ai_add_extra_image.

Upgrading from Odoo 19

None. ai_website_sale auto-installs with ai_website and website_sale.

  • The chat is shown before any message is sent: generating content needs AI credits.

Change 2 of 38

Attribute filters

EnhancementCommunity

eCommerce filters now exclude values not relevant to the loaded page.

Official Odoo 20 release note

In plain words

The shop filters now only list attribute values used by the products of the current page (category, search, other filters). In the Desks category, Color only offers the two colors desks exist in, and attributes that no desk uses are gone.

Website > Shop > DesksIn the Desks category the Color filter only offers the values used by desks.

Where to find it

  1. Go to the /shop page.
  2. Open a category, for example Desks, and expand the Color filter.

For users

No more filter values that return an empty page.

For developers

The shop controller now builds pavs_per_attribute from the attribute values of the matching products and passes it to the template instead of a.value_ids.

Upgrading from Odoo 19

Custom shop filter templates that loop on attribute.value_ids should use pavs_per_attribute.

Change 3 of 38

Automated cross-sell suggestions

New featureCommunity

Automatically generate accessories, optional, and alternative products for your eCommerce products.

Official Odoo 20 release note

In plain words

A new setting, "Automate suggested products", fills the optional, accessory and alternative products of eCommerce products automatically. A scheduled action does the work, so the suggestions stay up to date without manual linking.

Website > Configuration > SettingsThe new "Automate suggested products" setting.

Where to find it

  1. Website > Configuration > Settings, eCommerce section.
  2. Tick "Automate suggested products" and save.

For users

Cross-sell blocks on product pages and in the cart are filled without manual setup.

For developers

New group website_sale.group_automate_suggested_products and a cron that computes the suggestions.

Upgrading from Odoo 19

Off by default. Manual links keep working.

Change 4 of 38

Automated review requests

New featureCommunity

Automate customer review request emails and define how long after the order confirmation the request should be sent.

Official Odoo 20 release note

In plain words

The new "Request ratings" setting sends a review request email for each order. You choose how many days after the order confirmation the email goes out, and which email template is used.

Website > Configuration > Settings"Request ratings" with the delay in days after order confirmation and the email template.

Where to find it

  1. Website > Configuration > Settings, eCommerce section.
  2. Tick "Request ratings", set the number of days and the email template, then save.

For users

Customers are asked for a product review automatically, at the delay you set.

For developers

New website fields send_order_rating_emails, rating_email_delay and rating_email_template_id, plus a cron and a mail template.

Upgrading from Odoo 19

Off by default.

Change 5 of 38

Default journal for eCommerce orders

New featureCommunity

Select a default accounting journal for all eCommerce orders.

Official Odoo 20 release note

In plain words

A new "Invoicing Journal" setting picks the default sales journal used for all eCommerce orders of the website.

Website > Configuration > SettingsThe new "Invoicing Journal" setting (value picked for the capture, not saved).

Where to find it

  1. Website > Configuration > Settings, eCommerce section.
  2. Pick a journal in "Invoicing Journal" and save.

For users

Online orders are invoiced in their own journal, which keeps web sales apart in Accounting.

For developers

New website.journal_id; eCommerce orders take it as their journal.

Upgrading from Odoo 19

Empty by default, so existing behaviour is kept.

Change 6 of 38

Donations

EnhancementCommunity + Enterprise

Donations are now integrated into the eCommerce cart flow, enabling recurring donations via subscriptions.

Official Odoo 20 release note

In plain words

The Donation building block now works through the eCommerce cart: the donation is added to the cart and paid at checkout. With Subscriptions installed, a recurrence selector (Once, Monthly, Yearly) turns the gift into a recurring donation.

Website > Edit > Blocks > Contact & Forms > DonationThe Donation block with its new recurrence choice: Once, Yearly or Monthly.

Where to find it

  1. Website > Edit, Blocks > Contact & Forms, drop the Donation block.
  2. Use the recurrence selector next to the Donate button.

For users

Donations follow the normal cart and checkout, and donors can give every month or every year.

For developers

Donation products (Donations category) are sold through sale orders; website_sale_subscription adds a Recurring Donation product with monthly and yearly plans.

Upgrading from Odoo 19

The donation block moved from website_payment to the eCommerce flow; pages using the old block should be checked.

Change 7 of 38

Dynamic product building block

EnhancementCommunity

The layout of the dynamic product building block has been improved.

Official Odoo 20 release note

In plain words

The dynamic product block got a cleaner layout: a section title with description and "Shop all" button, which can sit on top, on the left of the carousel, or be hidden, plus card designs taken from the shop.

Website > Edit > Blocks > eCommerce > Products CarouselProduct carousel with the section title placed on the left (Section Title: Left).

Where to find it

  1. Website > Edit, Blocks > eCommerce, drop "Products Carousel".
  2. In the block options set Section Title to Left.

For users

Product carousels look like the shop and can put the title beside the products.

For developers

The snippet heading is built from t-set variables (snippet_title, snippet_description, snippet_button_text) and new Section Title options.

Upgrading from Odoo 19

Existing product blocks keep working; custom templates overriding the old heading markup need a check.

Change 8 of 38

Email gift card directly to recipient

New featureCommunity

Customers can now email a gift card directly to a recipient after finalizing a purchase.

Official Odoo 20 release note

In plain words

After buying a gift card, the order page shows the card code with an email field and a "Send as gift" button. The customer types the recipient's address and the gift card is emailed to that person.

Portal > Sales Orders > order with a gift cardThe purchased gift card with the recipient email field and the "Send as gift" button.

Where to find it

  1. Buy a Gift Card product on the shop (or confirm an order with it).
  2. Open the order in the customer portal, type an email and click "Send as gift".

For users

Gift cards can be offered to someone else straight from the order confirmation or the portal order.

For developers

New public JSON route /gift_card/send(code, email) that mails the gift card template to the given address.

Upgrading from Odoo 19

None.

Change 9 of 38

External identifiers

New featureCommunity

Set external identifiers on attributes to match specific platform requirements for data feeds and microdata.

Official Odoo 20 release note

In plain words

Product attributes have an "External Identifier" field (developer mode, eCommerce tab). It maps the attribute to the name a platform expects, such as color, size or material, in product feeds (Google Merchant Center) and in the product microdata.

Sales > Configuration > Attributes > Color > eCommerceThe new External Identifier field, here "color" on the Color attribute.

Where to find it

  1. Activate developer mode.
  2. Sales > Configuration > Attributes, open an attribute, eCommerce tab.

For users

Feeds and structured data use the right attribute names, which helps listings pass platform checks.

For developers

New product.attribute.external_identifier used by the GMC feed and JSON-LD generation.

Upgrading from Odoo 19

Standard attributes get identifiers from data; custom attributes can be filled in.

Change 10 of 38

Extra step granularity

EnhancementCommunity

Show the extra step in the checkout process only when the cart contains products from selected categories.

Official Odoo 20 release note

In plain words

In the website editor, the checkout options have "Extra Step" with a new "Restrict to" list of eCommerce categories. The extra step is only shown when the cart holds a product from one of those categories.

Website > Cart > Edit > Style > CheckoutExtra Step turned on and restricted to the Desks category.

Where to find it

  1. Open the cart page and click Edit.
  2. Click in the checkout area, then in Style > Checkout enable Extra Step and pick categories in "Restrict to".

For users

Customers only see the extra information step when it matters for what they buy.

For developers

New website.extra_step_category_ids and _cart_has_extra_step_category(); /shop/config/website accepts extra_step_category_ids.

Upgrading from Odoo 19

Empty list means the old behaviour (always shown).

  • The option was switched on only for the capture and switched off again.

Change 11 of 38

Gelato: variant images

EnhancementCommunity

It is now possible to add specific print images per variant.

Official Odoo 20 release note

In plain words

Gelato products can have print images per variant. On a variant, a Gelato section lists its own print images and a button creates or synchronizes them from the template placements.

Sales > Products > Product Variants > variant > SalesGelato section of a variant with its own print image placement and the Synchronize button.

Where to find it

  1. Open a synchronized Gelato product variant.
  2. Sales tab, Gelato section: click "Generate Print Images", then attach a file per placement.

For users

Each color or size can print its own artwork.

For developers

New product.product.gelato_variant_image_ids and action_generate_variant_gelato_images; orders send the variant image when present.

Upgrading from Odoo 19

Template images keep working as the fallback.

  • No Gelato account here: the product was created locally with a placeholder Gelato product UID so the real variant form section shows.

Change 12 of 38

Google Analytics events

EnhancementCommunity

GA4 eCommerce event tracking coverage and data quality have been improved to fully comply with the Google Analytics 4 specifications.

Official Odoo 20 release note

In plain words

The shop now sends many more GA4 eCommerce events, in the format Google expects: select_item, view_item, add_to_cart, remove_from_cart, view_cart, add_to_wishlist, begin_checkout, add_shipping_info, add_payment_info and purchase.

Where to find it

  1. Website > Configuration > Settings, enable Google Analytics.
  2. Browse the shop and check the events in GA4 DebugView.

For users

GA4 reports show the full funnel from product lists to purchase.

For developers

Controllers and interactions return GA4 item data; tracking.js pushes the events.

Upgrading from Odoo 19

Custom tracking code that sent the same events may now double count.

  • No screenshot: the events are sent in the background to Google Analytics and have no screen in Odoo.

Change 13 of 38

Guest orders: contact creation

EnhancementCommunity

Not verified from the Odoo 20 source code. Shown as Odoo published it.

Contacts created based on guest orders on the e-commerce are now archived by default and unarchived if the end user creates an account.

Official Odoo 20 release note

In plain words

Not verified from the supplied source code. The archiving of guest contacts was added during development but reverted before the release: the Odoo 20 source has no code that archives guest customers.

For users

Guest contacts stay active, as in Odoo 19.

For developers

Nothing to adapt.

Upgrading from Odoo 19

None.

  • No screenshot: the behaviour is not in the final Odoo 20 code (commit f860972ad79a reverts it).

Change 14 of 38

Location selector: country filter

EnhancementCommunity

Customers can filter pickup points by country in the selection dialog.

Official Odoo 20 release note

In plain words

In the pickup location dialog of Click & Collect, a country selector sits next to the search bar, so customers can list stores of another country.

Where to find it

  1. Checkout, choose "Pick up in store" with several stores configured.
  2. Open the location list and change the country next to the search bar.

For users

Shoppers near a border or abroad can find a store in the right country.

For developers

The location selector receives country_data from the controller; SelectMenu added in website_sale_collect.

Upgrading from Odoo 19

None.

  • No screenshot: the selector only appears when the website offers several pickup stores; the demo company has one store and adding warehouses would affect the shared database.

Change 15 of 38

Loyalty progress bar

New featureCommunity

Progress bars have been added in cart notifications and the cart summary, showing progress towards unlocking a reward or success when the reward is unlocked.

Official Odoo 20 release note

In plain words

When an automatic promotion only needs a minimum amount, the cart summary and the "added to cart" notification show a progress bar towards that amount. It turns green when the reward is unlocked.

Website > Shop > CartProgress bar towards the $300 needed for the promotion.

Where to find it

  1. Create an automatic promotion with a minimum purchase amount.
  2. Add a product below that amount to the cart and open the cart.

For users

Customers see how much more they need to spend to get the reward.

For developers

New sale.order._get_promotion_progress_bars() returning reward name, minimum amount and progress.

Upgrading from Odoo 19

None.

  • A small promotion (10% from $300 with the Office Lamp) was created for the capture and archived afterwards.

Change 16 of 38

Minimum product quantity

New featureCommunity

Set a minimum order quantity for e-commerce products.

Official Odoo 20 release note

In plain words

Products have a "Minimum Quantity" field on the eCommerce tab. The shop and the cart do not let customers buy less than that quantity and show a message about the minimum.

Website > eCommerce > Products > product > eCommerceThe new Minimum Quantity field in the Shop section of the product.

Where to find it

  1. Website > eCommerce > Products, open a product.
  2. eCommerce tab: set Minimum Quantity.

For users

Sell by minimum lots online without workarounds.

For developers

New product.template.minimum_quantity (non negative constraint) and sale.order._get_remaining_minimum_qty().

Upgrading from Odoo 19

0 by default, so nothing changes until set.

Change 17 of 38

Mondial Relay handled via Sendcloud

RemovalCommunity + Enterprise

The Mondial Relay pickup point module for eCommerce has been removed. Mondial Relay is still available alongside other pickup points via Sendcloud.

Official Odoo 20 release note

In plain words

The delivery_mondialrelay and website_sale_mondialrelay modules exist in Odoo 19 and are gone in Odoo 20. Pickup points, Mondial Relay included, come from the Sendcloud connector, where "Use Sendcloud Locations" lets customers pick a pickup point at checkout.

Sales > Configuration > Delivery Methods > Sendcloud Shipping"Use Sendcloud Locations" on a Sendcloud delivery method, the replacement for relay points.

Where to find it

  1. Inventory or Sales > Configuration > Delivery Methods, open a Sendcloud method.
  2. SendCloud Configuration tab: Use Sendcloud Locations.

For users

Mondial Relay users switch to Sendcloud to keep offering relay points.

For developers

Code depending on the mondialrelay modules must be removed or ported to Sendcloud.

Upgrading from Odoo 19

Databases using Mondial Relay need a Sendcloud account and new delivery methods before upgrading.

  • The Sendcloud option is read-only here: it becomes editable once real Sendcloud shipping products are loaded.

Change 19 of 38

Order dashboard

New featureCommunity

A new dashboard in the order list view provides a quick overview of e-commerce orders and their status.

Official Odoo 20 release note

In plain words

The eCommerce Orders list has a dashboard on top: counters for orders to confirm, to fulfill and to invoice (click to filter), plus visitors, orders and sales for a chosen period.

Website > eCommerce > OrdersThe new dashboard: to confirm, to fulfill, to invoice, and visitors, orders and sales for the last 7 days.

Where to find it

  1. Website > eCommerce > Orders.

For users

A quick status of web orders without building a report.

For developers

New js_class website_sale_dashboard_list and website_sale_dashboard_kanban on the eCommerce order views.

Upgrading from Odoo 19

Custom views inheriting the eCommerce order list keep working; js_class is set on the new list view.

Change 20 of 38

Pay Now button

EnhancementCommunity

Edit and translate all "Pay now" buttons in the checkout.

Official Odoo 20 release note

In plain words

The "Pay now" (and "Confirm" for pay later methods) label of the checkout payment button is now a translatable company field shown with t-field, so it can be edited and translated in the website editor and changes everywhere at once.

Website > Checkout > Payment > EditThe Pay now label selected as editable text in the website editor.

Where to find it

  1. Go to the payment step of the checkout and click Edit.
  2. Click in the Pay now button text and type the new label.

For users

Merchants can reword the payment button, for example to "Place order", in every language.

For developers

New res.company.pay_now_label and pay_later_label (translate=True) used by payment.submit_button.

Upgrading from Odoo 19

Templates overriding the submit button labels should use these fields.

Change 21 of 38

Preferred delivery date

New featureCommunity

Allow customers to select a preferred delivery date.

Official Odoo 20 release note

In plain words

Delivery methods have an "Estimated delivery" option (lead days, how many days can be chosen, working calendar). At checkout the method shows the first delivery date and a date picker, so customers can choose their preferred day.

Website > Checkout > Delivery methodStandard delivery with its date picker; only allowed working days can be chosen.

Where to find it

  1. Delivery method form, eCommerce tab: tick the estimated delivery option and fill the days and calendar.
  2. At checkout, click the pencil next to the date to choose another day.

For users

Customers pick a delivery day; it is saved as the order's delivery date.

For developers

New delivery.carrier fields enable_delivery_estimate, delivery_estimate_lead_days, delivery_estimate_range_days, delivery_calendar_id; the chosen day sets commitment_date.

Upgrading from Odoo 19

Off by default.

  • The option was enabled on Standard delivery only for the capture, then turned off again.

Change 22 of 38

Prevent sales by category

EnhancementCommunity

Prevent sales for an entire category while still displaying the price of its products.

Official Odoo 20 release note

In plain words

"Hide Add To Cart" can now target specific eCommerce categories, not only zero priced products. Products of those categories keep their price on the shop but show a "Contact Us" button (link URL configurable) instead of Add to Cart.

Website > Configuration > Settings"Hide Add To Cart" set for specific categories (Desks), with the Contact Us link URL. Not saved.

Where to find it

  1. Website > Configuration > Settings, eCommerce section.
  2. Tick "Hide Add To Cart", set For to "Specific categories" and pick the categories.

For users

Show prices of a whole range but take orders on request.

For developers

New website fields prevent_sale, prevent_sale_for (zero_price or specific_categories) and prevent_sale_for_categories; replaces website_sale_prevent_zero_price_sale.

Upgrading from Odoo 19

The Odoo 19 zero price option is replaced by these fields; check the setting after upgrading.

Change 23 of 38

Pricelist selector

EnhancementCommunity

The pricelist selector is now available on all pages of an e-commerce website.

Official Odoo 20 release note

In plain words

The pricelist selector moved to the website header and footer, so it is available on every page, not only on the shop pages.

Website > Contact us > headerThe pricelist selector open in the header of the Contact us page.

Where to find it

  1. Open any website page, for example Contact us.
  2. Click the pricelist selector (USD) in the header.

For users

Visitors can switch currency or price list from any page, for example the contact page.

For developers

The selector is a header/footer element with a builder option; shop templates no longer render their own.

Upgrading from Odoo 19

Custom shop templates that placed the old selector should be cleaned up.

Change 24 of 38

Product reference price

EnhancementCommunity

The product reference price is now displayed on all e-commerce pages by default.

Official Odoo 20 release note

In plain words

When "Product Reference Price" is on (now a website setting), the price per reference unit is shown on shop product cards, product blocks, the wishlist and the configurator, not only on the product page.

Website > Shop > DrawersReference prices shown under the prices on the shop product cards.

Where to find it

  1. Website > Configuration > Settings: tick "Product Reference Price" and save.
  2. Open the shop.

For users

Unit prices (per kg, per unit) are visible where customers compare products.

For developers

New website.show_product_reference_price; _get_sales_prices returns base_unit_price when enabled.

Upgrading from Odoo 19

The setting is now per website.

  • The website setting was turned on only for the capture and turned off again.

Change 25 of 38

Product features

EnhancementCommunity

Ribbons, comparison price, attributes, and secondary images are now visible on dynamic product building blocks.

Official Odoo 20 release note

In plain words

Dynamic product blocks now show the same product features as the shop: ribbons (such as Out of stock or On Sale), the comparison price, attributes and secondary images.

Website > Edit > Blocks > eCommerce > Products CarouselProduct cards in the carousel with ribbons (Out of stock, On Sale) and the struck through comparison price.

Where to find it

  1. Website > Edit, Blocks > eCommerce, drop "Products Carousel".
  2. Set Category to a category with discounted or out of stock products.

For users

Promotions and stock status are visible in product carousels on any page.

For developers

The snippet uses the shop product tile template and returns ribbon and price data from website_snippet_filter.

Upgrading from Odoo 19

Custom product snippet templates may need to switch to the shared tile.

Change 26 of 38

Product variant thumbnails

EnhancementCommunity

Enable the "Show Thumbnails" field on attributes to use product variant images instead of the attribute values displays.

Official Odoo 20 release note

In plain words

With "Show Thumbnails" enabled on an attribute, the product page now shows the variant images as the attribute choices, instead of color dots or names. In Odoo 19 this option only affected the shop product cards.

Website > Shop > Two-Seat SofaThe Fabric attribute shown as variant picture thumbnails on the product page.

Where to find it

  1. Sales > Configuration > Attributes, open an attribute, eCommerce tab: enable Show Thumbnails.
  2. Open a product using that attribute on the website.

For users

Shoppers choose the fabric by looking at the actual product in that fabric.

For developers

product_page_templates renders variant image thumbnails when attribute.is_thumbnail_visible; variant.py returns the image URLs.

Upgrading from Odoo 19

None.

Change 27 of 38

Products grid building block

New featureCommunity

A new grid version of the Products building block is now available.

Official Odoo 20 release note

In plain words

A new "Products Grid" block sits next to "Products Carousel" in the eCommerce blocks. It shows products in a grid with its own column settings for desktop and mobile.

Website > Edit > Blocks > eCommerce > Products GridOptions of the new Products Grid block, with Desktop 3 Columns and Mobile 2 Columns.

Where to find it

  1. Website > Edit, Blocks > eCommerce, drop the "Grid" products block.
  2. Adjust Desktop and Mobile columns in its options.

For users

Product sections that do not scroll, for landing pages and category pages.

For developers

New snippet website_sale.s_dynamic_snippet_products_grid with data-grid-columns and data-mobile-columns.

Upgrading from Odoo 19

None.

  • In this headless capture the grid cards render one per row; the block options still show 3 columns on desktop and 2 on mobile.

Change 28 of 38

Range filter for attribute values

New featureCommunity

Use the Range display type for numerical attributes to allow customers to filter products using a range slider.

Official Odoo 20 release note

In plain words

Attributes have a new "Range" display type. For numeric values the shop filter becomes a slider with a minimum and maximum handle.

Website > Shop > filtersThe Seat Height (cm) filter shown as a range slider from 42 to 51.

Where to find it

  1. Sales > Configuration > Attributes: create an attribute with Display Type Range and numeric values.
  2. Use it on published products and open /shop.

For users

Filter by size, height or capacity with a slider.

For developers

product.attribute.display_type gets "range"; the shop URL encodes min<max value slugs.

Upgrading from Odoo 19

None.

  • A "Seat Height (cm)" range attribute was added to three chairs for the capture.

Change 29 of 38

Restrict packagings per website

New featureCommunity

Units and packagings can now be restricted per website.

Official Odoo 20 release note

In plain words

A "Restrict Packagings" setting lists units and packagings that cannot be bought on this website. The product page only offers the other units.

Website > Configuration > Settings"Restrict Packagings" with Pack of 6 selected (not saved).

Where to find it

  1. Website > Configuration > Settings (Units of Measure enabled).
  2. Pick packagings in "Restrict Packagings" and save.

For users

Sell by the unit online while keeping bulk packs for B2B channels.

For developers

New website.restricted_uom_ids filters the UoMs offered by the product page.

Upgrading from Odoo 19

None; empty by default.

Change 30 of 38

Return management

New featureCommunity

Allow customers to return products from the customer portal.

Official Odoo 20 release note

In plain words

With "Allow Spontaneous Returns" on (Sales settings), delivered orders show a Return button in the customer portal for a set number of days. The customer picks quantities and a return reason, and a return is created.

Portal > Sales Orders > order > ReturnThe "Request a return" dialog with quantity and return reason.

Where to find it

  1. Sales > Configuration > Settings: enable Allow Spontaneous Returns.
  2. Customer portal > Sales Orders, open a delivered order and click Return.

For users

Customers request returns themselves; no email back and forth.

For developers

New model return.reason, company fields allow_spontaneous_returns and return_validity_days, and sale.order._is_portal_return_allowed().

Upgrading from Odoo 19

Off by default.

  • The company setting was turned on only for the capture and turned off again; the order was created and delivered for the capture.

Change 31 of 38

Ribbon filters

New featureCommunity

Two new ribbon filters, "On Sale" and "In Stock," are now available.

Official Odoo 20 release note

In plain words

The shop sidebar has two new filter pills, "On sale" and "In stock". They appear when automatic ribbons for sale or out of stock products are set up and such products exist.

Website > Shop > filtersThe new "On sale" and "In stock" filter pills in the shop sidebar.

Where to find it

  1. Website > Configuration > Ribbons: have ribbons assigned to On Sale and Out of stock.
  2. Open /shop.

For users

Shoppers find deals and available products in one click.

For developers

New shop URL params on_sale and in_stock based on product.ribbon assign rules.

Upgrading from Odoo 19

None.

  • An automatic "On Sale" ribbon, a 10% rule on Drawer and a non sellable out of stock product were set up for the capture.

Change 32 of 38

Simplified inventory management

EnhancementCommunity

eCommerce can now work with simplified inventory management, without installing the Inventory app. A single on-hand quantity is displayed per product and there are no required transfers.

Official Odoo 20 release note

In plain words

Stock basics now live in the Product module: products can be tracked with a single on hand quantity, edited directly, without the Inventory app and without transfers. eCommerce stock options (continue selling, show available quantity, out of stock message) moved to website_sale, so they work with this simple stock.

Website > eCommerce > Products > (product) > General InformationWith Inventory not installed, the product still has a Track Inventory box and one on hand quantity field you can type into directly, no transfer needed.

Where to find it

  1. On a database without Inventory, go to Website > eCommerce > Products and open a product.
  2. In General Information, Track Inventory shows one on hand quantity that can be typed in directly.

For users

Small shops can sell online with stock limits without learning Inventory.

For developers

is_storable, qty_available and free_qty are defined in product; website_sale holds allow_out_of_stock_order, show_availability and available_threshold.

Upgrading from Odoo 19

Code importing these fields from stock or website_sale_stock should check the new owning module.

Change 33 of 38

Standalone categories

New featureCommunity

Prevent specific e-commerce categories from being displayed on the Shop page in order to generate specific website sections with curated product selections.

Official Odoo 20 release note

In plain words

Top level eCommerce categories have a "Not in Shop" option. The category and its children are hidden from the /shop page and its category list, but can still be linked to, for curated sections of the website.

Website > Configuration > eCommerce Categories > MultimediaThe new "Not in Shop" option on an eCommerce category.

Where to find it

  1. Website > Configuration > eCommerce Categories, open a top category.
  2. Tick Not in Shop.

For users

Build pages like "Black Friday picks" without cluttering the main catalog.

For developers

New stored, recursive product.public.category.not_in_shop used in the shop domain.

Upgrading from Odoo 19

None.

Change 34 of 38

Stock-based product publishing

New featureCommunity

Automatically unpublish and republish products based on their stock availability.

Official Odoo 20 release note

In plain words

The "Unpublish out-of-stock products" setting unpublishes products when they run out of stock and publishes them again when stock comes back.

Website > Configuration > SettingsThe new "Unpublish out-of-stock products" setting.

Where to find it

  1. Website > Configuration > Settings, eCommerce section: tick "Unpublish out-of-stock products" and save.

For users

No sold out products on the shop, without manual work.

For developers

New group website_sale.group_unpublish_out_of_stock; stock changes toggle is_published.

Upgrading from Odoo 19

Off by default; shared across companies.

Change 35 of 38

Taxes included/excluded price display

EnhancementCommunity

Set whether the displayed prices include or exclude taxes at pricelist level to serve B2C and B2B customers on the same website.

Official Odoo 20 release note

In plain words

Pricelists have a "Price Display" field on their Ecommerce tab: Taxes Included or Taxes Excluded. Left empty, the website setting applies. B2C and B2B customers can see the right prices on the same website.

Sales > Products > Pricelists > EUR > EcommerceThe new Price Display field on a pricelist, set to Taxes Included.

Where to find it

  1. Sales > Products > Pricelists, open a pricelist.
  2. Ecommerce tab: set Price Display.

For users

A professional pricelist can show prices without tax while consumers see tax included prices.

For developers

New product.pricelist.tax_display; price helpers read it before the website default.

Upgrading from Odoo 19

Empty by default; the website default is used.

Change 36 of 38

Variant image management

EnhancementCommunity

Variant images can now be managed centrally from the "eCommerce" tab of the product form.

Official Odoo 20 release note

In plain words

The eCommerce tab of the product form now holds all product and variant images in one Media list. Each image has an "Apply to attributes" selector that says which variants use it.

Website > eCommerce > Products > Customizable Desk > eCommerceA media card with the attribute values it applies to and the "Apply to attributes" selector.

Where to find it

  1. Website > eCommerce > Products, open a product with variants.
  2. eCommerce tab > Media: set "Apply to attributes" on each image.

For users

No need to open each variant to set its pictures.

For developers

product.image gets attribute value links; the x2many media viewer shows an attribute value selector per image.

Upgrading from Odoo 19

Variant images are handled through product.image with attribute values.

Change 37 of 38

WhatsApp abandoned cart follow-up

New featureCommunity + Enterprise

Send a WhatsApp message to follow up on abandoned carts.

Official Odoo 20 release note

In plain words

Abandoned cart follow up can also go by WhatsApp. Under "Follow up abandoned carts" there is a WhatsApp template next to the email template, and a scheduled action sends it.

Website > Configuration > SettingsThe WhatsApp template field under "Follow up abandoned carts".

Where to find it

  1. Website > Configuration > Settings: tick "Follow up abandoned carts".
  2. Choose an approved WhatsApp template and save.

For users

Recover carts on the channel customers read most.

For developers

website.send_abandoned_cart_followup replaces the email only flag; whatsapp_website_sale adds wa_sale_cart_recovery_template_id and a cron.

Upgrading from Odoo 19

The Odoo 19 send_abandoned_cart_email setting is replaced by send_abandoned_cart_followup; check custom code using it.

  • The template field is empty because the demo WhatsApp templates are not approved by Meta.

Change 38 of 38

Withdrawal requests

New featureCommunity

A new action is available for contact forms to manage withdrawal requests.

Official Odoo 20 release note

In plain words

Website forms have a new action, "Request Withdrawal". Customers enter their email and order number; Odoo checks the order, logs the request on it and emails the recipients (by default the website salesperson).

Website > Contact us > Edit > Form > ActionThe new "Request Withdrawal" choice in the form Action list.

Where to find it

  1. Website > Edit a page with a form (for example Contact us).
  2. Select the form, then set Action to "Request Withdrawal".

For users

A ready made way to handle legal withdrawal (cancellation) requests from a web form.

For developers

New model withdrawal.request with website_form_key request_withdrawal and a form editor action with recipient_emails.

Upgrading from Odoo 19

None.

See all 585 Odoo 20 changes across 52 apps

Odoo 20 eCommerce: common questions

What is new in Odoo 20 eCommerce?

The official Odoo 20 release notes list 38 eCommerce changes (19 new features, 18 enhancements, 1 removal). They include AI-assisted product editing, Attribute filters, Automated cross-sell suggestions, Automated review requests and more.

Are the Odoo 20 eCommerce changes available in Community edition?

37 of the 38 changes are in Odoo 20 Community (and Enterprise). 1 is Enterprise only. Each change on this page is labeled with its edition.

Do Odoo 20 eCommerce changes affect my customizations when upgrading from Odoo 19?

25 of the 38 changes have something to check when upgrading from Odoo 19, for example Attribute filters, Automated cross-sell suggestions, Automated review requests. Each change on this page has an "Upgrading from Odoo 19" note. Test custom modules on a copy of your database before moving production.

How do I upgrade eCommerce to Odoo 20?

Restore a copy of your database, run the Odoo 20 upgrade on the copy, fix any custom modules that extend eCommerce, then test your main eCommerce flows with real users before switching production. iVentureTeam runs Odoo upgrades end to end, including custom module migration and user testing.

Odoo services for this

By industry

More Odoo 20 release notes

Planning your Odoo 20 move

Want these eCommerce changes in your database?

We upgrade Odoo databases with their customizations and data intact, and test every custom module against the new version before go-live.