All guides

Install a module from the marketplace

What the marketplace actually does when you install - it commits the module into your repository - and the four checks it runs before writing anything.

Verified on August 13, 2026

The marketplace does not install anything into your Odoo. It commits the module's source into your repository, and from there the module travels the same road as code you wrote yourself.

That one sentence prevents most of the confusion. A module you take from the marketplace becomes part of your branch, is built into your image, and is deployed like everything else — which is exactly what makes it reproducible, restorable and reviewable.

Browsing, and owning

The catalogue lists what is published. Taking a module gives your team an entitlement, and the entitlement is what unlocks the rest.

The marketplace catalogue with a module card: its name, technical name, author, rating and install count.
The catalogue is where you choose. Nothing here touches an environment.

The import wizard does not open from the catalogue — it opens from Purchased, one action per entitlement. The server checks the entitlement before anything else, so a module you do not own cannot reach step one.

The whole area is gated by marketplace.install.

Four steps, and none of them writes

Use in environment opens a wizard: environment, then version, then a preview, then the import itself.

The import wizard: the target path defaulted to marketplace/acme_margin_report, and the import mode set to direct commit.
The target path is a field, not a fixed rule - but its default is the convention worth keeping.

The first two lists are computed by the server rather than filtered in the browser:

  • Environments — only those that can actually receive this module.
  • Versions — only those compatible with the environment you picked.

If either list is empty, that is the answer, and it is more useful than an error would have been.

What is checked before anything is written

Four conditions, each refused with its own reason:

ConditionWhy it exists
You hold an entitlementYou can only import what your team owns.
The environment is activeA stopped environment cannot be built onto.
The environment has a repositoryThere is nowhere to commit to otherwise.
The version's Odoo version equals the environment'sNot "compatible with" — equal. A 19.0 module does not go into a 18.0 environment.

That last one is stricter than most people expect, and it is why the version list can come back empty for a module you certainly own.

The preview is the last screen before the write

Preview import performs a dry run and echoes back exactly what would happen: the branch it would commit to, the path the module would occupy, and the Odoo version it was matched against.

The import preview: the branch main, the target path marketplace/acme_margin_report and the Odoo version, above the button that performs the import.
An import writes into somebody's repository. The screen before it should say onto which branch, and where.

Read the branch. The wizard uses the environment's branch, so importing into a staging environment commits to the staging branch — which is usually what you want, and is occasionally a surprise.

If the module is already there, the preview says so and offers the choices that make sense for that case rather than failing.

The default path is marketplace/<technical_name>. You can change it, but keeping marketplace modules under one directory is what lets you tell, six months later, which code you wrote and which you took.

After the import: the ordinary road

Confirming writes a commit onto the branch. Then, without you asking:

  1. The import records the commit it created.
  2. A build is requested automatically for that commit.
  3. The module appears in the environment's Modules tab — as Deployment required, because it is in your branch and not yet in the running image.

From there it is the loop the other guides describe: deploy the build to put the module in the image, then install it in Odoo. The guide on deploying from Git covers the first, and the modules guide covers the second.

Nothing about a marketplace module is special afterwards. It is code in your repository.

When it refuses, and one thing that is not ready

The refusals worth recognising:

  • The target path already exists — the import stops rather than overwriting code that is already there. Choose another path, or handle the existing copy first.
  • No repository linked — connect one to the environment first.
  • Git credentials — the platform needs write access to commit; a revoked token shows up here.

And one honest limitation: the wizard offers an import mode, and only direct commit is available. The pull-request option is shown disabled rather than removed, because it is the intended second mode — but until the pipeline carries it, choosing it would have committed directly anyway, which is worse than not offering it.