Submit your Apps & Themes
It is possible to sell your own module on our Apps platform. You can start selling your modules very easily by adding a
price and a
currency keys in your module manifest like
'price': 49.99, and
'currency': 'EUR', for example. Supported currencies are EUR and USD. We require that the modules sold on our Apps platform is the lowest (or the same) price on the web, have a proper description, complete with screenshots of the functionalities and an overall nice presentation page. Please refer to the following section for more informations on how to achieve this goal. We reserve the rights to unpublish modules which do not conform to these criterias until they receive a proper presentation page.
Don't be afraid to value your work as it should be ! If people need the feature of your module, they will pay for it. In any case it will make them gain development time so you should not undervalue your work. We think 100 euros is a good starting point.
Starting from version 8.0, the module icon needs to be located at
static/description/icon.png in the module folder. The cover image (thumbnail) location is defined in the
images key of the manifest, like
'images': ['images/main_screenshot.png'], for example. The rich-text HTML description comes from the
static/description/index.html file in the module folder. It is recommended to start with this official template.
To have a big screenshot in your theme, you need to have more than one picture in
'images': ['images/main_1.png', 'images/main_2.png', 'images/main_screenshot.png'], and the first picture with a name ending with '_screenshot' will be selected and displayed as big screenshot.
The purpose of this screenshot format is to show a full demo page and not your company logo larger.
Do not use upload SVG files in your module description.
Either your icon is not in the right place (
static/description/icon.png since Odoo 8.0), or its format is not PNG. Please note that changing the file extension of an image does not change its format. For example, renaming icon.ico into icon.png will not work. You need to actually convert the image type.
Like Theme Clean
The license is defined in the
license key of the manifest (
__manifest__.py as of Odoo 10,
__openerp__.py for older series), like
'license': 'AGPL-3', for example. Possible values are
Other OSI approved licence,
Other proprietary. The license file is loaded from the
LICENSE file at the root of your module or, if there is none, at the root of your repository. The license file will only be displayed if the license is not a well known open source one, that is:
Other OSI approved licence,
Other proprietary. If no license information is provided in the manifest, we will use Other Proprietary as default value.
The following table shows the compatibility between licenses:
|Module license||Compatible dependencies licenses|
|AGPL-3||AGPL-3, GPL-3, LGPL-3|
|LGPL-3||LGPL-3, OPL-1, OEEL-1, Other OSI approved licence, Other proprietary|
|OPL-1||LGPL-3, OPL-1, OEEL-1, Other OSI approved licence, Other proprietary|
|Other OSI approved licence||LGPL-3, OEEL-1, OPL-1, Other OSI approved licence, Other proprietary|
|Other proprietary||LGPL-3, OEEL-1, OPL-1, Other OSI approved licence, Other proprietary|
Like Odoo VOIP
The documentation is automatically loaded from the
doc/index.rst file in the module folder. It needs to be a valid, pure rst file.
We do not currently review every module published, but we do take action when users report abusive behavior. You will usually know when you cross the line, but here are some examples of things that would cause your modules to be removed from the store:
- R1. Stealing data from the users, copying other developers' work without permission and without giving proper credit (according to the license terms), cheating on the ratings system, are all examples of abusive behavior that will get your modules removed;
- R2. Modules that download code in any form, or modules that install or launch other executable code will be removed. This includes obfuscated/encrypted code.
- R3. Modules that include undocumented or hidden features inconsistent with the module description will be removed.
- R5. Modules that harm the image and/or reputation of another author will be removed, such as a module that doesn't work and is attributed to another author.
- R6. Modules for which you don't provide support to customer who bought it, such as a customer asking for help configuring the module or who encounters a bug when using it.
You will get 70% of your modules revenues on our Apps platform. You can either opt-in for automatic monthly payments or manually send us an invoice. Your sales will be accounted for in a PO that you can see in your sales dashboard. During each month, we will close the POs that have reached or exceeded 400 euros unredeemed sales. If you have enabled the automatic redeem method in your account, we will pay the invoice in the following days. If you have not, then you will receive an email from us notifying you that we are waiting for an invoice from you. The invoice must include the PO reference that you will receive by email and, obviously, the amounts must match. Please do not send us invoices for PO that are still Opened; you need to wait for our system to close the PO and notify you. Please note that since we are making international SWIFT transfers, the payment may take several days or weeks, especially if you are outside of Europe.
Clearly, the automatic payment method is the easiest, but you need to make sure with your local lawyer that you can receive money on your account without providing an invoice to justify that money.
All repositories URL's will follow the standard ssh URI scheme. There are two reasons to this standardization.
- We will remove sensitive information (password) from the URL;
- This standardization avoids the accidental duplication of repositories.
ssh://git@gitServer(:port)/mypath#version. In the event that the registration fails due to a badly formatted url, please make sure that you only use the colon to define the port or the URL, if no port is to be defined, use slash to separate
To publish your modules on our platform, we need to be allowed to read from your repository. If you are on Github, you can simply authorize our online-odoo user on your repository (the authorization must be done on the repository specifically, not the entire company).
If you are on Gitlab, you can authorize our OdooApps (email@example.com) user. If you use Bitbucket or another service, you will need to authorize our public SSH key instead.
Don't forget to use the SSH url of your repository when registering it to allow us to identify using ssh. For example for GitHub, it should be something like
We intentionally keep deleted modules for safekeeping. If you really want that we remove your modules from Odoo Apps, please issue your request to firstname.lastname@example.org. We will however continue to keep those modules if people have already bought them, or if another module depends on it. We can simply hide the module in those cases.
Odoo.sh works alongside an online git repository. By default, only free apps can be installed on Odoo.sh because the underlying git repository is public. However, if the underlying repository is set to be private instead, then paid apps can be installed on an Odoo.sh instance.
Please contact email@example.com with the urls of both the old Bzr repository and the new Git one, we will take care of everything!
Please contact firstname.lastname@example.org with all the details and we'll be happy to help you get on track!