Dynamics 365 Business Central: AppSource demystified

When you develop solutions for Dynamics 365 Business Central, you have essentially two roads for your extensions:

  • Release it as a per-tenant extension (PTE)
  • Release it on AppSource

I’ve talked a lot in the past months about per-tenant extensions, their release process (pros and cons) and the pains connected to it. Per-tenant extensions should be seen as “customizations” developed directly for a customer tenant and that will not be widely distributed. You (as a partner) are totally responsible to publish, upgrade and maintain your PTE for your customer, there’s no an approval process by Microsoft for publishing these extensions and you’re forced to used the 50000..99999 object range.

Extensions released on AppSource are different. If you’re an ISV and you want to distribute your solution to a global market, AppSource is the right choice.

AppSource extensions are under Microsoft’s supervision. To release an extension on AppSource, you’ve to start an approval process as in the following schema:


An app is available on AppSource only after the approval process accepted by Microsoft.

I receive often a lot of questions related to AppSource and how Microsoft manages the extensions on it, so here I want to try clearing some doubts. Here the main point to remember:

  • An extension released on AppSource must have objects with IDs on a reserved range assigned by Microsoft. You can also use your actual CfMD range if you have one.
  • Please compile your extension with AppSourceCop code analyzer activated on Visual Studio Code (this is your first basic step to avoid problems)
  • Marketing material is extremely important for the approval process, please don’t underestimate the marketing requirements.
  • On AppSource, a published extension is actually released as a free extension. There’s no an automatic way to avoid the installation of an extension before having acquired a license for it. You need to handle the protection of your extension with a licensing system that is totally up to you. The suggestion I normally give is to release a “trial” extension with the possibility to activate a full feature extension online (with a custom license key downloaded maybe after a contact with the partner).
  • You cannot know how many customers has downloaded, installed or unistalled your extension directly from AppSource. If you need these informations, you need to implement the “logging” logic by yourself.
  • When an extension is published on AppSource, also the future updates have to go through the validation process. If you have successfully published version of an app, it’s not automatic that version and so on are automatically published as upgrades. The upgrade submission process is as follows:


  • When you have successfully submitted an updated version of your extension, this update becomes the active version of your extension. Every new customer that downloads your extension from AppSource receives the new updated version.
  • Existing customers that are using your extension are actually not automatically updated to the new available version. More in details:
    • When a customer tenant is upgraded to a new major version, it will receive the updated version of your extension
    • When a customer tenant is upgraded to a minor release (cumulative updates and so on), it will not receive the update of your extension. The admin of the customer tenant can uninstall the actual version of the extension and then reinstall it. In this way it will receive the last updated version.
    • In future, it will be released the possibility to auto-upgrade an installed extension and receive notifications for available updates.
  • A common situation I see now with many partners: if you’re planning to release your addon X on AppSource in the future (and so you’re developing your solution with a reserved object IDs range) but actually you’re not ready for that and you need to deploy your actual addon X (maybe ready at 80%) to a customer, you’re forced to renumber the objects with the PTE range. In this case, remember also that:
    • Two extensions on the same tenant cannot have objects with the same IDs and names
    • If in the future you’ll release addon X on AppSource, the customer that now as addon X in the PTE range cannot install the same addon X app from AppSource.
    • In this situation, you need to move customer’s data from the tables of the PTE addon X extension to the tables of the AppSource addon X extension (data upgrade)
  • On AppSource, you cannot have two versions of the same app published. I’ve received requests from many partners that would like to have something like an Essential and a Premium version of an app on AppSource. To have that you can only:
    • Release a single app with a license key that enables functionalities if a Premium license is acquired (recommended solution). License management for your app is totally up to you.
    • Release two different apps (different App ID in app.json).
    • Monetization is up to you.

Hoping to have cleared something on your mind… 😉


  1. Thank you for sharing this, some question from me.
    Is it possible to release an extension on appsource as an individual instead of company?
    Do you know why all vendors/partners not putting price, mostly appear as “contact me” and when I filter pricing model as “paid”, it show me nothing on appsource ?
    Not like playstore, appstore or microsoft store, we can see the price straightaway.


    1. For releasing on AppSource you need to be a Partner (it requires MPN access). Actually you can publish apps as free, trial or contact me. There’s no an automatic payment system in place.


      1. Another question regarding dev license for partner. Is it true that the figure reduce from 150 into 3 user?


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.