magento 2 multi source inventory

Magento 2 Multi Source Inventory- Easiest Explanation in One Place

by Van Nguyen

Along with Page builder, Magento 2 Multi-Source Inventory (MSI) is one of Magento’s breakthroughs in the 2.3 version launching at the end of 2018. This new feature is available on both Open Source and Commerce editions, determining the beginning of a powerful assistance tool in terms of Magento 2 inventory management for multi-nation e-businesses. 

This article will go over the Magento 2 Multi-Source Inventory workflow in detail, from configurations to order and shipment management.

Let’s get started!

What Is The Difference Between Single-source And Multi-source In Magento 2 Inventory?

Single source inventory means the business operates the only one source location managing on-hand Magento inventory, and merchants ship products from one location to every customer worldwide.

For example, you have three websites: US, UK, and Singapore, which all get products from a source. When customers purchase products on any website, this single source manages Magento inventory quantities and shipments to returns.

On the contrary, Magento 2 Multi-Source Inventory defines a business owning a lot of source locations depending on the store market and demands of customers, costs, and so on.

Merchants now ship products to purchasers from more than one location, such as brick-mortar stores, warehouses, drop shippers and distribution centers. 

Still own three websites as US, UK, and Singapore, but you now create three corresponding warehouses located in America, Europe and Asia. Each source is assigned for a website matched with location; for instance, Warehouse in Europe is assigned to the UK website.

Then, when customers buy products on each website, its separate source takes responsibility for all Magento inventory stock and fulfills orders.  

>> CHECK OUT Full Magento tutorial from beginner to advanced to get more helpful learning resources.

Why is Magento 2 Multi-Source Inventory?

For global Ecommerce, customers are located widely around the world, and in case products are shipped from only one position to every destination, shipping costs come as a big problem. Also, it takes a longer time to deliver items to purchasers due to far distance as well as complexion in the transportation process. 

Therefore, Magento Multi-Source Inventory, high flexibility, cost-effectiveness, and efficiency are mainly outstanding remarks encouraging store owners to experience and better Magento 2 inventory management.

There are more businesses values that Magento 2 MSI can bring, aside from managing your sources, such as:

  • Improving checkout performance: Even for Single Stock merchants, Magento 2 MSI removes the possibility of excessive database lock and inventory consistency validation during the checkout process. These two factors lower the performance when there is a high checkout concurrency rate.
  • Import/Export Stock Data: The new import and export stock data for inventory is introduced to accelerate the external integration with the ERP system.
  • Dropshipping support: It is now possible for merchants to set up drop shipping for external sources.
  • Stock control/ Low stock reports: Magento 2 multi-source inventory supports all physical location sources with Stock Control and will notify merchants when low stock runs in specific locations.

Even though this newly added feature brings more benefits to multi-stock control store owners, it preserves the simplicity of UI and Stock Management for Single Stock usage. Therefore, single stock users will feel no added complexity in their process.


>>>READ NOW: Magento 2 Configurable Product Inventory: Beginner-Friendly Dictionary

How Is The Magento 2 MSI Different?

The MSI inventory feature of Magento 2.3 is the thing that makes a significant difference from its predecessor, Magento 2.2. Compared to the old inventory system from 2.2, here are the new features you will see in multi-source-inventory:

  • Assign product and quantity to each fulfillment source, like warehouse, store, distribution center, or third-party drop shipper.
  • The new MSI can now track the inventory and help ease the management inventory process.
  • Streamline operation with rules to prioritize and automatically control the sources that are supplied for the website in real-time.
  • The MSI allows third-party inventory system integration.

Even the merchant with a single inventory source would benefit from the MSI inventory, as they can track the deduction of salable stock when customers put them in the cart. This will give a more accurate track of checkout performance, show customers the correct number of stocks left in the inventory, and save time for buyers and sellers.

How does Magento 2 MSI Works?

In general, store owners using Magento Multi-Source Inventory can implement the following things:

  • Create as many sources as possible based on business situation and demand
  • Group sources into virtual stocks corresponding to sale channels
  • Assign product quantity at each source in the product edit page
  • Track Magento 2 inventory at multiple sources conveniently

It’s time to explore a complete flow in the Magento 2 Multi-Source Inventory usage process for store owners to manage sources and order management. 

Let’s go step by step now!

Enable Magento 2 MSI

Step 1. Create and Manage sources

Source is a new advanced term in Magento 2 Multi-Source Inventory. It can be physical stores, warehouses, houses, or anything covering your products to provide customers. As long as the sources are relevant to your business, you can add an unlimited number of them.

Take an example for the whole process:

Store owners should use three websites to sell clothes to many markets globally: US, UK, and Korea websites. Moreover, remember to build big warehouses in America, Europe, and Asia to distribute products quickly to consumers.

In addition, if merchants want to manage the store’s inventory more effectively, they should implement Magento Multi-source inventory to create sources, stocks and track products. 

You can create these four sources by going to Store ⇒ Inventory ⇒ Source:


Besides, you also need to complete all required information like Name, Code, Country, and Postcode to determine a source. Other fields should be filled for other purposes, such as latitude and longitude, to select the most suitable source to get products. 

All of the added sources are shown in the grid table as below:


Step 2: Create stocks

Stock is a virtual inventory of products available for sale.  A stock can include more than one source. Depending on your preference or current business situation, you can organize sources into stocks by country, continent, locale, or website.

In this example, we will create stocks based on continents by navigating to Store Inventory Stocks:

  • Europe stock for the UK and Spain Warehouses
  • US stock for US Warehouse
  • Asia stock for Korea and Australian stores

Let’s take a look at the European stock:


For each stock, it is necessary to choose one or multiple sales channels as websites. However, there is an important note that a stock can be assigned to a lot of websites while a sales channel just connects to one stock only.

Next, you assign sources for this stock and easily modify the sort order of each source by drag and drop. The source order is considered an essential factor in determining which source to get products and ship orders to customers.

After creating three stocks, all of them are managed in the following grid table which shows information about both sales channels and assigned sources of each stock.


Step 3: Add product quantity for each source in the product edit page

After creating sources and stocks, you can assign sources for each product in the product edit page and even define product quantity in each source. For example:


We assign 5 sources for this Strive Shoulder Bag as well as a complete specific quantity for each source. After saving, it is easy to check the quantity per source and salable quantity in the product grid table:


In this section, we get a new concept, called Magento 2 Salable quantity and displayed in a separate column of the product grid. So what is the difference between product quantity per source and Salable quantity?

  • Magento 2 Salable quantity is an aggregated total of product inventory available to purchase for a stock. It is calculated by summing all product quantity per source assigned to the stock, then subtracting the Out-of-Stock threshold (if you set up this amount in the backend). On the other hand, salable quantity is the actual number of products you can sell for customers.
  • In the example, the Magento 2 salable quantity of the Strive Shoulder Bag is 200.
  • Quantity per source determines the number of products at each location which changes whenever shipped. Magento 2 Salable quantity only changes when a reservation occurs (we will explain it later in detail).

*Note: You can use the Import and Export features to update sources and quantities by product SKUs via a CSV file. As a result, adding new sources and updating Magento inventory quantities for all or a specific source is easier and faster than ever before, especially if you have a lot of products to process.

Step 4: Place an order in the frontend

Go to the UK website, add the Strive Shoulder Bag to the cart, and complete the checkout. For a single source, this order management is straightforward with the complete order fulfillment from placing the order to shipping or even refunding.

Magento 2.3, on the other hand, highlights some special functions for Magento 2 MSI with a different flow from the process based on a single source.

After finishing the checkout, Magento 2 Multi-Source Inventory firstly processes the order as a reservation, giving holds on inventory quantity. This reservation happens at the stock level, subtracting from Magento 2 salable quantity.

Only when the order is invoiced, and shipped to purchasers, is this reservation removed, and the product quantity is now deducted from each corresponding source of the website (sales channel).

For example, you finished checking out to purchase 10 Strive Shoulder Bags from the UK website. After receiving the order request, Magento Multi-Source Inventory checks the product availability in the current inventory salable quantity. The stock now has enough product quantity (Total salable quantity = 200); hence, a reservation now occurs and places a hold for that ordered product, then recalculates the salable quantity as well. 

It means that the Magento 2 salable quantity is subtracted by 10, the total remainings are 190.

The order is then invoiced and shipped to customers from UK Source (for instance). This reservation is now cleared, and the quantities are automatically deducted by 10 from the  UK source.

Let’s take a look at the following flow:


Source: Magento Multi source inventory on Github

>>>THING YOU SHOULDN’T MISS OUT:  Magento Multistore: Must-Have Weapon To Multiply Your Sales

Step 5: Shipment

Unlike shipping products from a single source, a merchant store using Magento 2 Multi-Source Inventory can have more than one source to get products and deliver to customers. Hence, determining which source to select for cost-effectiveness or more convenience is a problem to consider carefully. 

Luckily, Magento provides Source Selection Algorithm (SSA) to decide a suitable source to deliver to buyers, including Source Priority, Distance Priority, and Custom Algorithm.

Source Priority Algorithm

As you remember in Step 2, we create a stock and define the sort order for the assigned source of stock. Magento uses this order to recommend product deductions per source when invoicing and shipping the order.

When this algorithm runs, Magento will:

  • Check the order of all assigned sources at the stock level from the top to the bottom
  • Recommend a quantity to ship, and a source to get the product from (based on the order, available quantity, and ordered quantity)
  • Continue checking the list until the order shipment is filled
  • Skips disabled sources if found in the list

For example, if the order includes Strive bag placed from the UK website, Magento will select a source to ship to customers, Warehouse UK or Warehouse Spain. When creating UK stock and assigning these two sources, Warehouse UK is in the top sort order and has higher priority than the remaining one. 

Furthermore, the number of products available in this source is 50, which is sufficient to process an order with the required quantity of 5. As a result, Warehouse UK is recommended to pick up ordered products and deliver them to customers.

Distance Priority Algorithm

As its name suggests, this algorithm determines the most accurate source to fulfill shipments by comparing source locations to the shipping destination. The distance can mean physical distance by kilometers or time spent traveling from one location to another.

To calculate the time to travel or distance and find out the closest source to ship products, you can set up Google Map or Offline Calculation methods by making some simple configurations.  

Custom Algorithm

Developed as an Open source platform, Magento always welcomes customization and extension to add alternative algorithms to prioritize sources. This custom algorithm adds more advanced features to SSA, providing essential features related to Magento stores during the business operation.

Step 6: In case of Cancel or Refund Order

  • Cancel Order: If a customer cancels his/her order before Magento stores deliver products, a compensation reservation is entered to clear that amount and return the ordered product quantity to the Magento 2 salable quantity.
  • Refund Order: When there is a refund request, and products are then returned to you, you need to create a credit memo to provide the money and update product amounts. Quantities are added to products and sources that ship orders.  A compensation reservation is entered to update salable quantities for the associated stock.

Disable Magento 2 MSI

To disable Inventory Management, it’s best to do it from the command line by running this command in the Magento root:

php bin/magento module:disable –f Magento_Inventory Magento_InventoryAdminUi Magento_InventoryApi Magento_InventoryBundleProduct Magento_InventoryBundleProductAdminUi Magento_InventoryCatalog Magento_InventorySales Magento_InventoryCatalogAdminUi Magento_InventoryCatalogApi Magento_InventoryCatalogSearch Magento_InventoryConfigurableProduct Magento_InventoryConfigurableProductAdminUi Magento_InventoryConfigurableProductIndexer Magento_InventoryConfiguration Magento_InventoryConfigurationApi Magento_InventoryGroupedProduct Magento_InventoryGroupedProductAdminUi Magento_InventoryGroupedProductIndexer Magento_InventoryImportExport Magento_InventoryIndexer Magento_InventoryLowQuantityNotification Magento_InventoryLowQuantityNotificationAdminUi Magento_InventoryLowQuantityNotificationApi Magento_InventoryMultiDimensionalIndexerApi Magento_InventoryProductAlert Magento_InventoryReservations Magento_InventoryReservationsApi Magento_InventoryCache Magento_InventorySalesAdminUi Magento_InventorySalesApi Magento_InventorySalesFrontendUi Magento_InventoryShipping Magento_InventorySourceDeductionApi Magento_InventorySourceSelection Magento_InventorySourceSelectionApi Magento_InventoryShippingAdminUi Magento_InventoryDistanceBasedSourceSelectionAdminUi Magento_InventoryDistanceBasedSourceSelectionApi Magento_InventoryElasticsearch Magento_InventoryExportStockApi Magento_InventoryReservationCli Magento_InventoryExportStock Magento_InventorySetupFixtureGenerator Magento_InventoryDistanceBasedSourceSelection

After that, you should see the following modules and values in


 ‘Magento_Inventory’ => 0,

        ‘Magento_InventoryAdminUi’ => 0,

        ‘Magento_InventoryAdvancedCheckout’ => 0,

        ‘Magento_InventoryApi’ => 0,

        ‘Magento_InventoryBundleProduct’ => 0,

        ‘Magento_InventoryBundleProductAdminUi’ => 0,

        ‘Magento_InventoryCatalog’ => 0,

        ‘Magento_InventorySales’ => 0,

        ‘Magento_InventoryCatalogAdminUi’ => 0,

        ‘Magento_InventoryCatalogApi’ => 0,

        ‘Magento_InventoryCatalogSearch’ => 0,

        ‘Magento_InventoryConfigurableProduct’ => 0,

        ‘Magento_InventoryConfigurableProductAdminUi’ => 0,

        ‘Magento_InventoryConfigurableProductIndexer’ => 0,

        ‘Magento_InventoryConfiguration’ => 0,

        ‘Magento_InventoryConfigurationApi’ => 0,

        ‘Magento_InventoryDistanceBasedSourceSelection’ => 0,

        ‘Magento_InventoryDistanceBasedSourceSelectionAdminUi’ => 0,

        ‘Magento_InventoryDistanceBasedSourceSelectionApi’ => 0,

        ‘Magento_InventoryElasticsearch’ => 0,

        ‘Magento_InventoryExportStockApi’ => 0,

        ‘Magento_InventoryIndexer’ => 0,

        ‘Magento_InventorySalesApi’ => 0,

        ‘Magento_InventoryGroupedProduct’ => 0,

        ‘Magento_InventoryGroupedProductAdminUi’ => 0,

        ‘Magento_InventoryGroupedProductIndexer’ => 0,

        ‘Magento_InventoryImportExport’ => 0,

        ‘Magento_InventoryCache’ => 0,

        ‘Magento_InventoryLowQuantityNotification’ => 0,

        ‘Magento_InventoryLowQuantityNotificationApi’ => 0,

        ‘Magento_InventoryMultiDimensionalIndexerApi’ => 0,

        ‘Magento_InventoryProductAlert’ => 0,

        ‘Magento_InventoryRequisitionList’ => 0,

        ‘Magento_InventoryReservations’ => 0,

        ‘Magento_InventoryReservationCli’ => 0,

        ‘Magento_InventoryReservationsApi’ => 0,

        ‘Magento_InventoryExportStock’ => 0,

        ‘Magento_InventorySalesAdminUi’ => 0,

        ‘Magento_InventorySalesFrontendUi’ => 0,

        ‘Magento_InventorySetupFixtureGenerator’ => 0,

        ‘Magento_InventoryShipping’ => 0,

        ‘Magento_InventorySourceDeductionApi’ => 0,

        ‘Magento_InventorySourceSelection’ => 0,

        ‘Magento_InventorySourceSelectionApi’ => 0,

        ‘Magento_InventoryLowQuantityNotificationAdminUi’ => 0,

        ‘Magento_InventoryShippingAdminUi’ => 0,

        ‘Magento_InventoryGraphQl’ => 0,

Lastly, don’t forget to flush cache and reindex actions by the following command:

php bin/magento setup:upgrade

php bin/magento cache:flush

php bin/magento indexer:reindex

Top extensions for your Magento 2 Inventory

When Magento 2 MSI was released, there are extensions built to add in more features for customers’ convenience and benefit customers more than what Magento 2 multi-source inventory offers. We will provide some of the top extensions to go with Magento 2 multi-source inventory under your fingertips:

Magento 2 Inventory Report by BSSCommerce

The Magento 2 Inventory Report extension will track all the changes in the stock of products and give you a detailed inventory list, which you can export into a CSV file and delete inventory logs. There are no specific reports on new shipment, time, and details for Magento MSI inventory Default. These customizable and detailed inventory reports will enable you to bypass the limitation of Magento 2 default MSI and manage the inventory efficiently from the inventory report grid. The extension is compatible with Magento 2.3 – an MSI inventory function.


>>> GET all valuable data from Magento 2 Inventory Report to plan your inventory strategy.

Advanced Multi Stock Inventory by Wyomind


The Advanced Multi Stock Inventory extension would round out the Magento MSI inventory system. The extension helps you leverage the default tools and workflow and manage your inventory from different warehouses. The extension also shows your customer which warehouse is still in stock of the product they search for and its location on Google Map.

Advanced MSI from Amasty


The Advanced MSI from Amasty is also a good option when it comes to overcoming the limitation of Default Magento 2 MSI. It split your inventory over to multiple warehouses and optimizes the warehouse selection algorithm to reduce your delivery cost. Mind that this extension only runs on Magento version 2.3 and higher.


Magento 2 Multi-Source Inventory is obviously a powerful tool to enhance business efficiency in many different aspects. 

There are numerous ways in Magento 2 to update the product quantity. However, by default, Magento 2 does not track inventory adjustments. To view the current quantity for each item, admins must visit the product edit page.

Therefore, having a feature that enables store owners to understand how and when the product stock was altered will be helpful. A robust inventory management tool called the Magento 2 Inventory Report enables admins to track all product quantity adjustments.

BSS Commerce is one of the leading Magento extension providers and web development services globally. With experienced and certified Magento developers, we commit to bringing high-quality products and services to optimize your business effectively. Furthermore, we offer FREE Installation – FREE 1-year Support and FREE Lifetime Update for every Magento extension.

CONTACT NOW to let us know your problems. We are willing to support you every time.

Next Reading Suggestions

© 2019 BSS Commerce owned by THANH CONG INTER ., JSC. All Rights Reserved.
Business registration certificate no. 0106064469 issued by Hanoi Department of Planning and Investment on 19 December 2019.
Legal Representative: Mr. Nguyen Quang Trung.