WooCommerce Inventory Management Overview
Proper inventory management can be challenging for any company and this is certainly true for a WooCommerce store.
The keys to success are:
- Identify the events that can affect inventory.
- Identify the possible combinations, sequences, and timing of these events.
- Ensure that you have the software and procedures to properly handle these events.
There are two main aspects of WooCommerce inventory management:
- sales-related processes
- supply-related processes
We'll discuss these separately since they pose two different sets of challenges. To prevent this article from being too complex, we will use only Simple product types for all descriptions and examples.
WooCommerce Inventory Management for Sales-Related Processes
Basic Sales-Related Processes
For sales-related processes, WooCommerce adjusts inventory based on changes to order statuses. At least that's what it does in its native form, i.e. without extensions or plugins that may override this model. The default order statuses are:
- Pending Payment
- On Hold
This flowchart helps explain the use of each status:
The process begins when a customer places an order. For this example, we'll assume that the stock level for the product in question is 10 and that the order quantity is 3. The order status at this point is "Pending Payment" and the stock level is unaffected by the act of simply placing an order.
WooCommerce then requires the user to choose a payment method. If the selected method involves delayed payment (cash-on-delivery (COD), check, direct bank transfer, etc.), WooCommerce then takes one of two paths. If the payment method is COD, WooCommerce changes the order status to "Processing" (as in, processing the order, not the payment). It also reduces the stock quantity at this point by subtracting the order quantity, i.e. 10 - 3 = 7. This makes sense because the order will ship before payment.
If the selected payment is not COD but is instead one of the other delayed payment methods (i.e. check, direct bank transfer, etc.), then WooCommerce changes the order status to "On-Hold" and again reduces the stock quantity to 7.
You may ask why WooCommerce reduces the stock quantity for any form of delayed payment other than COD since the typical operating procedure is to wait until payment is received before actually shipping the product. However, if delayed payments occur regularly, then not allocating stock to such orders will leave your inventory frequently overstated, which could lead to overselling. So this is basically the best of two undesirable options.
Jumping back a step, what does WooCommerce do if the selected payment method does not involve a delayed payment, i.e. if it instead attempts to process an online payment? If the payment is processed, the stock quantity is reduced and the order status is changed to "Processing", the same as the COD path.
If the online payment fails, there may be retry attempts depending on how the payment gateway is configured. But if these retries fail, the order status is changed to "Failed" and the stock quantity is not reduced. At this point, it is up to an administrator to intervene to try to salvage the order.
In any event, all orders that reduce the stock quantity will eventually have an order status of "Processing" or "On Hold", however temporary.
If orders with these statuses are subsequently canceled before shipment, the order status should be changed to "Canceled", which will add the order quantity back into inventory. From an inventory standpoint, it is as if the order never happened.
If the order is shipped, the status should be changed to "Completed". After this, something may still go wrong, causing the customer to request a refund. In this case, the order status should be changed to "Refunded" but this action has no effect on stock quantity. If the refund also involves returning the stock in question, that stock has to be manually returned to inventory.
Note, also, that the base version of WooCommerce does not automatically change orders statuses to Cancelled, Completed, or Refunded. These all require manual actions.
Potential Order Status Problems in the Sales & Shipment Processes
Now let's talk briefly about possible problems in the system that we just described. The first is the potential failure to cancel an order that should be canceled for any reason. This would leave the order in question with an order status of either "Processing" or "On Hold". As a result, the order quantity is not returned to inventory inside WooCommerce, which would then understate available inventory.
An opposite effect occurs if you fail to change an order status to "Completed" once the order is shipped. This may leave you vulnerable to physically double-shipping an order, which will cause your inventory quantity to be overstated.
The refund process is even more problematic because changing the order status to "Refunded" has no impact on inventory levels. If the order quantity is physically returned, you will need to make a manual adjustment to the inventory quantity. Otherwise, your WooCommerce available inventory will again be understated.
These potential "gotchas" may be acceptable if you are a single-person operation with relatively few products and sales. After all, if you need only glance into your spare bedroom to count your inventory, you can likely do all this by hand.
But the bigger you grow, the more difficult this becomes, and you'll eventually want more of a "closed-loop" system. For example, you may want a system that automatically changes the order status to "Completed" only when you scan the outgoing shipping labels at the time of the shipment.
We're going to describe some of your options to implement more sophisticated inventory management features in WooCommerce later in this article but, first, let's examine some of the supply-related processes.
WooCommerce Inventory Management for Supply-Related Processes
Basic Supply-Related Processes
The fundamental purpose of inventory management is to ensure that you have enough stock to fulfill orders but not so much that you can't sell it all within a reasonable period.
Managing the supply side of this can span two extremes. If you're a one-person operation with only a few products and a reliable supplier with a quick turnaround, you may be able to manage supply simply by ordering new stock whenever you feel that you need it. If so, you can disable stock management in WooCommerce and manually set the status of inventory (i.e. in-stock, out-of-stock, etc.) accordingly.
But if you have a large store with hundreds or even thousands of products and many sales transactions, you will need a far more sophisticated inventory management system that includes the following:
- The ability to accurately predict future sales.
- A closed-loop system that ensures that your current inventory levels are accurate.
- An accurate understanding of all your supplier quantity requirements and lead times.
This will require advanced functionality that gives you planning screens like this:
We're going to describe some of the plugins that provide advanced inventory management for WooCommerce shortly. But, first, let's finally address the inventory management settings available for the base version of WooCommerce.
WooCommerce Inventory Management Settings
Global Inventory Settings
In WooCommerce, inventory management begins by navigating to the WooCommerce -> Settings screen. Here, select the Products tab and then click the Inventory link. Your screen should now look like this:
These are global inventory management settings, which means they apply store-wide unless overridden by the inventory settings for individual products. Let's walk through each of these global settings:
- Manage stock — Enable stock management. This is the setting that determines whether you want to maintain a count of your inventory. This is a global setting but it can also be managed per product. Here is the difference:
The first two products shown have their Manage Stock? setting disabled. As a consequence, an inventory count is not maintained by WooCommerce. Instead, the store owner must manually set the Stock status setting to In stock, Out of stock, or On backorder. This is the method that you would use if your inventory management requirements are simple.
The third and fourth products shown have their Manage Stock? setting enabled. In this case, inventory counts are maintained by WooCommerce. Inventory is automatically reduced during sales transactions as per the processes described in the WooCommerce Inventory Management for Sales-Related Processes section of this article. But there are no equivalent supply-side processes in the base WooCommerce product, i.e. no built-in purchase order system or formal inventory receiving system. If you purchase another 100 units of a product, you have to manually adjust the stock level accordingly.
- Hold Stock (minutes). This setting is supposed to allow you to specify the number of minutes to hold stock for an order pending payment. But in our testing, we have been unable to get this setting to work. We are not alone, as there are numerous online threads about the same issue. For now, ignore this option.
- Enable low-stock notifications. Check to receive an email when stock is low. The low stock threshold can either be set globally (see point 6) or per product.
- Enable out-of-stock notifications. Check to receive an email when a product is considered out of stock, meaning that additional orders are not allowed (unless backorders are allowed) and the product may not appear in the WooCommerce catalog, depending on the setting for point 8. The out-of-stock threshold can only be set globally (see point 7).
- Notification recipient(s). The email address(es) of the person(s) who should be notified of low-stock or out-of-stock notifications.
- Low-stock threshold. The global setting for the inventory quantity that will trigger a low-stock notification. Should be set to a minimum of 1.
- Out-of-stock threshold. The global setting for the inventory quantity that will trigger an out-of-stock notification. This is typically set to 0 but there may be cases where you want to set it to greater than 0. For example, if you run both an online store and a brick-and-mortar store using a unified inventory, you may want to preserve a minimum stock level for your brick-and-mortar outlet.
- Out-of-stock visibility. Determines whether or not products that are out of stock should be hidden from the WooCommerce catalog.
- Stock display format. Controls how stock quantities should be displayed on the front end.
Product Inventory Settings
Many of the inventory management settings can also be set at the product level by clicking the Inventory tab in the Product data section of the Add/Edit Product page:
Relevant settings here include:
- Manage stock — Enable stock management at the product level. This option only appears if the Manage stock setting is selected at the global level. Deselecting it in this panel turns stock management off for the product in question. If it is deselected, the Stock quantity, Allow backorders?, and Low stock threshold settings will all be replaced by the Stock status setting, as stock can then only be set to In stock, Out of stock, or On backorder, as described previously.
- Stock quantity. Allows you to set the inventory quantity for the product.
- Allow backorders? Determines whether customers can place an order for the product even if the order quantity exceeds the current inventory quantity.
- Low stock threshold. The product setting for the inventory quantity that will trigger a low-stock notification. This overrides the global setting for the product in question. Should still be set to a minimum of 1.
- Sold individually. Keeps customers from hoarding certain products such as limited editions or collectables. If enabled, allows only one of this product to be bought in a single order.
WooCommerce Inventory Management Plugins
Now that you know everything there is to know about WooCommerce's built-in inventory management capabilities, it's time to examine some of the plugins/extensions that can help you take WooCommerce Inventory Management to the next level.
Be aware that current WooCommerce inventory management plugins are all over the map in terms of their focuses, features, and even their terminology. Compared to established ERP systems, none really delivers a complete solution, so we're going to have to patch together a workable system, starting with taking control of your sales order statuses and workflow.
Advanced Order Status Manager by Zorem
If you're going to manage the sales-related issues of WooCommerce inventory management, you need to be able to customize order statuses and the order workflow to match your business practices.
This is what the Advanced Order Status Manager plugin does, as described by this video:
Note, also, how the workflow allows you to use emails to trigger events such as asking someone to pick and pack an order. This is kind of a crude way of coordinating the actions of your fulfillment staff. Typically, in a full ERP system, each staff member has a dedicated interface that acts as an interactive to-do list, i.e. one interface each for picking, packing, and shipping.
However, Zorem's companion plugin, AST Fulfillment Manager, which we describe below, does have an Unfulfilled Orders screen that can suffice as a universal do-do list.
WooCommerce PDF Invoices & Packing Slips by WP Overnight
At some point in your workflow, you're going to need to print invoices and packings slips as part of your shipping documentation. This plugin is ideal for this purpose:
Note that Zorem does plan on adding the ability to print invoices and packing slips in the future, so we'd probably lean toward their offering when it comes out as part of our quest for a fully integrated solution.
AST Fulfillment Manager by Zorem
This plugin started as a shipment tracking plugin. In fact, the name of its free version is Advanced Shipment Tracking (AST):
As described, this plugin will allow you to track a shipment from the moment it leaves your control until it is delivered to your customers. However, the premium version of this plugin has started to evolve into a broader fulfillment plugin, as implied by its name, "AST Fulfillment Manager". One feature of this premium plugin that begins to tie all of the preceding functionality together is its Unfulfilled Orders screen:
One limitation of Zorem's shipment tracking system is that even if you send emails to your customers at each stage of the shipping and delivery process, and even if those emails include a tracking link for the shipper, many customers will still pester you with questions about their shipments because they are too lazy to check for themselves.
To address this issue, AST is fully compatible with TrackShip, which you can learn about here:
In summary, then, while WooCommerce doesn't have a fully integrated inventory management system — at least not on par with mainstream ERP systems — you can piece together a decent solution to manage sales-related processes.
For more information on AST, see our complete review here.
Supply-Related Processes for WooCommerce Inventory Management
Unfortunately, there are not many solutions on the supply side. The best one that we could find from a conceptual/design standpoint is the Inventory and Order Manager plugin for WooCommerce by OIMWC. They certainly have the right idea:
However, this plugin has very few active installs and only 2 negative reviews on https://wordpress.org/plugins/order-and-inventory-manager-for-woocommerce/, so we can't recommend its use.
ATUM Inventory Management for WooCommerce by Stock Management Labs has many more active installs and much better reviews, but their videos do a poor job of describing their product. For example, this video is supposed to be an overview...
...yet quickly devolves into a demonstration of a few secondary features. Still, if you're absolutely in need of supply-side management, we probably advise you to try to muck your way through this and the other ATUM videos to see if you can make it work with your business.
Well, that's everything we have to say about WooCommerce inventory management. We haven't been able to tell you how to assemble a complete system because one doesn't really exist in the WooCommerce ecosystem, though Zorem is inching its way toward that goal on the sales side.
But at least now you won't spend days pulling your hair out in search of a non-existent system, as we did for much of this week!
Looking for other shipping options to plug into your WooCommerce inventory management process? See our article on Best WooCommerce Shipping Plugins.