nopCommerce plugins

Recommended Products

This plugin recommends products based on copurchase history, like a super-powered "Customers who bought this item also bought". When a customer is a viewing a product page, products that are - or should be! - frequently sold together with that product are recommended to the customer. The main advantages compared to the built-in "Customers who bought this item also bought" feature are as follows:

  • You can choose to optimise for profit rather than for sales numbers. For example, product B may be more often purchased with A than C is, but the plugin can take into account the fact that C is more profitable than B and prioritise accordingly.
  • "Missing" values can (optionally) be filled in, so that if product A is frequently purchased with product B, and B in turn with C, the plugin may recommend C on A's page.
  • More recent purchases can be given higher weight, allowing the recommendations to follow trends and stay up to date.

The license is subscription-based and will be charged on a monthly basis.

Supports nopCommerce version 4.40-4.50.

Getting started

After installing the plugin and inputting the license key on the configuration page, you need to run the [Recommended products] Train model scheduled task in order to use the plugin. We recommend trying the default settings first, and then make changes and rerun the task if the output is different from what you expect.


The plugin settings can be changed on the configuration page found under Admin/Configuration/Widget.

License key

Input the key received with your purchase of the plugin. It can be found in the order confirmation, which should also have been sent to you by e-mail.

Number of recommended products

The number of recommended products that will be displayed on a product page. Note, however, that in many themes including the default theme, the maximum number of products that can be displayed is the default value of 4.

Weight by profit: When turned on, the model will rank recommendations based on the expected profit rather than copurchase likelihood. For example, 90 % of customers might buy two $1 pencils (expected sales likelihood 0.9, expected profit $1.80) with a particular letter paper, while 5 % buy a $100 fountain pen (expected sales likelihood 0.05, expected profit $5). In this case, the model would display the fountain pen first when weight by profit is activated, and the pencil otherwise.

Fill in missing values: When this setting is activated, the model may recommend products that haven't been sold together with the current product in the past. This is especially useful for new products, that can be "bootstrapped" with only a few copurchases. In this way, a new product could still display popular recommended products based on the few copurchases it has had so far.

Advanced settings

Cutoff: Recommendations with a predicted score lower than this threshold will not be included in the results. When Weight by profit is turned on, the cutoff corresponds to the expected profit of sales from the recommended product with the current product, and otherwise the number of times two products have been purchased together. Usually, the default value of 0 is good enough, but the cutoff can be increased to exclude recommendations with a lower score.

Decay rate per week: When set to 1, all historical orders will be assigned the same importance when training the recommendation model. If less than 1, older orders will receive a lower weight, leading to a bias towards more recent orders. For example, if the decay rate is set to 0.98, orders placed one year ago will be weighted by $0.98^{52} \approx 0.35$. If your products are seasonal or trend-sensitive, it may be a good idea to experiment with this setting.

Regularisation: This hyperparameter penalises high model parameters in order to prevent overfitting. The default value will be good in the vast majority of cases, but if some recommendations seem odd and vary wildly between products, it might be a good idea to increase regularisation. Conversely, if most recommendations are similar and this is not expected, you can try decreasing the value. In general, however, we recommend tuning the Rank and Iterations settings. Note that this setting has to be strictly greater than 0.

Number of iterations: Sets the number of passes over the full dataset when training the model. Performing more iterations will often give better results, but also increase the risk of overfitting. Depending on the Regularisation and Rank settings, as well as the number of products in the store, you can try setting this between 10 and 100.

Rank: This setting controls the size of the model. The larger the model, the higher capacity it has to model the relations between products. On the other hand, a smaller model will often be better at generalising, is faster to train, and requires less regularisation to prevent overfitting. Finding the optimal balance between generalisation and capacity may require some manual tuning, but by default the plugin will try to automatically select a suitable value based on the number of products in your store. If you find that you need to change the rank, we recommend starting with powers of two between 8 and 128.

Theme integration

To integrate the Recommended Products view component into your store's theme, if it is not already supported, simply copy and rename the Related Products component from Themes/[your theme]/Views/Shared/Components/RelatedProducts/Default.cshtml to Plugins/Widgets.RecommendedProducts/Themes/[your theme]/Views/RecommendedProducts.cshtml. Open the file in a text editor and replace "Products.RelatedProducts" in the title element with "Majako.Plugin.Misc.RecommendedProducts.RecommendedProducts".

© Majako. 2022, All rights reserved