SCP provides a suite of tools to keep track of how many of each product you have, where the products are, and when you're running low. For businesses that sell products that have multiple variants based on attributes and options, the system supports tracking at the variant level, or the product level. For businesses who have products at multiple warehouses, it supports inventory tracking at each location, as well as internal transfers from one location to another. The inventory levels may be maintained automatically or manually, product by product, product variant by product variant, and location by location. A dashboard screen for each product helps you keep track of it all.

Here is a summary of the topics covered in this document

Inventory Tracking vs. Unit Tracking

In a nutshell, inventory tracking is simply knowing how much of each product (or product variant) you have, at each of the locations you operate from.

SCP also supports the notion of tracking by unit, which is similar but not covered in this document. When you are tracking by unit you create a Unit record for each individual product you have, including recording its serial number or barcode. This can be especially useful if you operate a rental business where you expect each item to be sent back to you by the customer.

In contrast, with regular inventory tracking, the system helps you maintain a simple numerical count of the product or product variant, optionally at each location you operate out of. Along with the count, the system offers the ability to deny purchases from customers when items are out of stock, notify employees when items have low stock. You can also create internal transfers from one location to another, and automatically update the inventory levels when transfers are shipped and received.

Inventory Tracking Configurations

For a simple example of tracking inventory start by creating an Inventory Tracking Config record. This is a set of configurations that will tell the system how to treat inventory for one or more products or product variants. Find the Inventory Tracking Config records under the "Inventory and Shipping" section of the administrator menu. Click the plus icon to create a new record:

image-20240101094710823

Here is a breakdown of the different fields you can define in each Inventory Tracking Config record:

  • Display Inventory to Customers: Select this if you wish to show customers the current inventory level of the product (or variant) on the product detail page of the customer interface.

  • Low Stock Level and Low Stock Notification: In this example we are setting the low stock level to 10. This means if the inventory level automatically goes down to 10 or lower, the system triggers the low stock notification. The system comes with a Low Stock Notification, which sends an email to the store's main email address, informing you that the product, or product variant is now low in stock.

  • Out Of Stock Level: Typcially an item's out of stock level is 0 but you can reset this to something higher or lower. You can set it to a negative value.

  • Deny Purchase When Out Of Stock: With this flag set, the system will prevent customers from adding the product to their cart if the product or variant they've chosen is already out of stock. In addition, if the customer is adding a quantity that is more than the current stock level, the system will adjust the cart to only the quantity that remains, and inform the customer they can only order that many. There are a few more details to explain with this - for more, please see the "Denying Purchase When Out Of Stock Details" section below.

  • Deactivate When Out of Stock: When this flag is set, the system will proactively mark the product inactive (change its active flag to false) when it reaches the out of stock level. This has the effect of removing the product from being visible to customers on the site.

  • Decrement Behavior: This controls when the product's or product variant's inventory level is reduced automatically by the system as an order is placed or processed:

    • WhenAddingToCart: The system reduces the inventory level as soon as a customer adds it to their cart. (If the customer later removes it from their cart, the system automatically adds the inventory back.) This can be useful when you really want to prevent customers from ordering a product that has just gone out of stock.

    • WhenOrderPlacing: Here, the inventory level is reduced as the customer completes an order, at the end of the checkout process.

    • WhenAdminAddsOrEdits: The system does not touch inventory levels when customers order the product or variants, but will adjust inventory if an employee adds the item to an order, and also when the order is marked Shipped. This can be useful for products that are typcially added to an order by an employee after the order is placed.

    • WhenOrderShipped: The system reduces inventory when an order is marked with a Shipped status. This is most useful when you are looking for an accurate count at all times of the products you have, and are not as concerned about customers placing orders for out of stock items

    • DontDecrement: You can also use this to tell system to leave the inventory level alone.

    • There are more details to explain about the different decrement behaviors - please see the "Decrement Behavior Details" section below.

Enabling Inventory Tracking For A Product

Once you have defined an Inventory Tracking Config, you can enable inventory tracking for a product, product variant, product location, or product variant location. To keep things simple, to enable it for a product, set the product's Inventory Tracking Config field to the new config record you just created, and set the Inventory Level field to the current number you have of the product:

image-20240101105517747

With these fields defined, you are now tracking inventory for the product!

  • Because the Deny Purchase When Out of Stock flag is set, customers will not be able to order more than the current inventory level of the product. See the below section, Denying Purchase When Out Of Stock Details, for full details.

  • Because the Decrement Behavior is set to WhenOrderPlaced, you should see the inventory level for the product automatically go down when a customer places an order. See the below section, Decrement Behavior Details, for full details.

  • Because the Low Stock Notification is set, you should see a notification email go out if the inventory level for the product goes down below the low stock level of 10. See the below section, Low Stock Notifications, for full details.

Tracking Inventory By Product Variant

The above basic example shows how to enable inventory tracking for a product. But often it's necessary to track inventory levels by particular product variants. For example, if you sell t-shirts, you'll want to know how many large, red t-shirts are available, as distinct from small, blue t-shirts. (In this example, "t-shirt" is the product, the size and color are attributes under the product, and large, small, red, and blue are options under those attributes.) Once you have created the product, the attributes under it, and the options under each attribute, you can create product variants to represent each of the possible permutations of attributes and options that a customer can choose. For each product variant, you can define the inventory level separately, as well as the inventory tracking config for that variant.

Here is how to create a Product Variant to represent one such permutation of attributes and options:

image-20240101130937302

Note the following:

  • Define the particular combination of attributes and options for this product variant by using the "Attribute 1," "Option 1," "Attribute 2," "Option 2," etc. fields. By configuring these fields you are defining a particular item that a customer can order. In this case, a large, red t-shirt. Note: you do not need to set these fields for every attribute under the product - just the combinations that you want to track. Also, so long as you don't repeat the same attribute in, for example, the Attribute 1 and Attribute 2 fields, the ordering does not matter.

  • Give the product variant a name to help identify it. This name may be shown to customer in certain messages the system produces.

  • Define the Inventory Tracking Config for this product variant, which tells the system how to decrement inventory, when to consider it low in stock, and so on.

  • Set the variant's inventory level to represent how many you have of this particular variant of the product.

With this product variant defined, and it's Inventory Tracking Config field set, you are now tracking inventory for the variant! You should expect to see its inventory level adjusted, low stock notifications going out, and so on, corresponding to how you have set up the Inventory Tracking Config.

Note: it is not necessary to track the parent product if you don't need to. You can empty out the Inventory Tracking Config and Inventory Level fields for the parent product, and the system will still track the variants under it, if you have set them up to be tracked.

Tracking Inventory By Location

Overview

Many business carry inventory in more than one location or warehouse. SCP allows you track the counts of products and product variants separately by location. With this feature, the system can automatically decrement inventory levels for a particular location when employees assign locations to order items and then mark orders Shipped in the administrator. In addition, it can warn or prevent employees from marking orders Shipped if an item is out of stock at its assigned location.

To build on the previous example, let's say your business has two warehouses, one in New York City, and one in Los Angeles. A customer places an order for a large, red t-shirt and you need to fulfill the order from one of the warehouses. It turns out LA has plenty of large, red t-shirts, but New York doesn't have any. If an employee selects New York as the item's "from location", the system will warn the employee as they try to change the order's status to Shipped.

Note: by default the employee can override this warning and force the order's status to change. This behavior can be disabled, however (ie the action always prevented) from the Integrity Check Settings screen. See the below Denying Purchase When Out Of Stock Details section.

If the employee then changes the order item's location to LA, the system will allow the order's status to change because LA has enough inventory to fulfill the item. In addition, if the inventory tracking is configured to automatically decrement inventory, the inventory level for the product variant at the LA location will automatically be adjusted. And if it is reaching the low stock level, its low stock notification will be sent out.

Example

Let's go through an example of how to set this up. First, create locations for your store if you haven't already:

image-20240102160345092

Next, for each Location, click the three-dots menu and select "Product Locations" or "Product Variant Locations", depending on if you need to track inventory for a product or for a particular variant. In our example, we wish to track inventory by location for large, red t-shirts, so we'll select Product Variant Locations:

image-20240102160627706

From the following screen, click the plus icon to get to the Add Product Variant Location form:

image-20240102160844989

A product variant location represents the inventory level of a particular product variant at a particular location. You can use the Inventory Level field to enter the count. In addition you can use the Inventory Tracking Config field to define how you wish to track the inventory. This field works just like it does for products, product variants, and product locations. It defines whether and how inventory is decremented automatically, whether orders are denied if they are out of stock, and so on. In this example, we are using the same config as we have for our other examples.

With this product variant location set up, you're tracking inventory for large, red t-shirts in Los Angeles! But don't forget to create another product variant location for New York. In our example, we're saying there are none in stock in New York, but we are tracking the inventory there, too:

image-20240102161313313

Now when an order comes in for the variant, an employee can choose New York as the item's From Location, from the Customer Service Form, like this:

image-20240102164054179

(Note: you may need to enable the "Show Ship From Column On Customer Service Forms For Non-Scheduled Items" setting from the Advanced Display Settings screen.)

However, if there is not enough in stock, the system will prevent the employee from marking the order Shipped:

image-20240102164305518

As mentioned, the system sends back a warning by default, which the employee can override. You can disable this behavior and always prevent the action by changing the "Product Variant Location OOS When Order Is Shipped" setting on the Integrity Check Settings screen to "SHOW ERROR". This will change it to treating the condition as an error that cannot be overridden:

image-20240102172836591

For more details on errors, warnings, and messages, see the Denying Purchase When Out Of Stock Details section below.

Inventory Tracking By Location Screen

If you tracking inventory by location, one of the best ways to get an overview of your inventory situation is the Inventory Tracking By Location screen. This screen can found by selecting the "Inventory Tracking By Location" link under the Inventory and Shipping section of the administrator menu. When you visit the screen this way, it will show you the inventory for the first 25 products in the system. If you need to view the inventory for other products, use the following steps:

  • Go to the main Product grid screen (under Site Content, click Products).

  • In the grid of product, check off the ones you wish to view inventory for. If necessary, use the search box or filters to find the products.

  • In the "Actions" menu, select "View Products' Inventory Tracking By Location".

Features of this screen include:

  • The inventory counts at every location where you are tracking inventory for the product or any of its product variants.

  • The counts of inventory that is currently being transferred, both to the location (shown in green) and from the location (shown in red).

  • The transfer counts are for Unshipped transfers if they are coming from the location, and Unshipped or Shipped if the transfers are going to the location. It does not include Shipped transfers coming from the location, because those counts are typcially already taken out of the location's inventory level.

  • Items that are low in stock according to their inventory tracking config are highlighted.

  • A form to Add Inventory Tracking. This form asks for the product, and optionally the attribute/option combinations you wish to track; optionally the location for the inventory; and the inventory tracking config used to track the items; and the inventory level for the item. It will automatically create product variant records, and create or update product location records, and product variant location records based on the form inputs.

Inventory Tracking Product Screen

Especially if you are tracking inventory by variants and/or locations, another way to glimpse the inventory situation for any product is the Inventory Tracking By Product screen. This screen can be found by selecting the "Inventory Tracking By Product" link under the Inventory and Shipping section of the administrator menu. It also be accessed under each product's three-dots menu.

image-20240102163300032

Note that this screen provides an overview of the inventory situation for any of the product variants, product locations, or product variant locations, under the product. Other features of this screen include:

  • Hovering over the inventory level lets you edit the level manually right here on the screen.

  • Similarly you can set or modify the Inventory Tracking Configs assigned to each item from this screen.

  • Any items that are under their Low Stock Levels are highlighted in yellow.

  • If there are any transfers that are in Shipped status, those will appear next to the items under the Transferring column. This let's you keep track of transfers as well - where they are going and how many of each item are in them.

  • There are links to the product, product variant, product location, and product variant location records that exist under the product.

Denying Purchase When Out Of Stock Details

Each Inventory Tracking Config record has a flag to "Deny Purchase When Out Of Stock". This function deserves a little more explanation.

Customer Interface

  • The flag will of course prevent a customer from adding the item to their cart if it is already out of stock, with a message explaining it's out of stock.

  • If the item is currently in stock, but the customer is adding a quantity that is more than what is available, setting the flag will automatically change the quantity for the item to the current level that remains, and inform the customer:

image-20240101110417877

  • Note that this means that even if the "Display Inventory To Customers" flag is off, a customer can infer the inventory levels by adding more than the currently available quantities to their cart. (There is no way around this, if you want to deny the purchase.) The "Display Inventory To Customers" flag really pertains to the product detail page of the customer interface.

  • If the item's Decrement Behavior is set to WhenAddingToCart, and the customer adds the remaining quantity to their cart, a message tells them it has just now become out of stock.

    image-20240105154603777

  • The Deny Purchase When Out Of Stock flag comes into play not just when items are added to the cart. If a customer successfully adds an item to the cart and then changes the quantity to more than what remains in stock, the Deny Purchase When Out Of Stock flag will prevent the change and show an error message:

    image-20240105153802229

  • Similarly, if the customer changes an attribute's value in the cart, inventory is rechecked. In this example, when the customer tries to change the Size to Large, the inventory level of a different product variant comes into play, and the request is rejected.

    image-20240105154205384

     

Administer Interface

  • Generally speaking, when an employee makes changes to an order involving out of stock items, when the Deny Purchase When Out Of Stock flag is set, all the same checks are made, but the request is not rejected outright. Instead, by default, a warning is shown to the employee and they have the option to override the warning:

    image-20240105155051257

  • If the employee proceeds to click Continue and ignores the warning, the item's stock level will go into negative territory (assuming the out of stock level is 0).

  • This is true when employees add items, edit item quantities, and edit item attribute from one of the 'customer service screens', that is, using the tools in the Order Items section of one of those forms:

    image-20240105160453957

  • Important: if an employee changes adds or edits items using the various "Details" screens, no inventory is checked, and inventory levels will not be decremented automatically.

  • By default, the employee sees warnings and has the option to override them, if they make a change that involves out of stock items when the Deny Purchase When Out Of Stock flag is set. But you can configure the administrator to always rejectthe change instead. To do this, on the Integrity Check Settings screen, change the level of the settings in the "Inventory Tracking When Employee Adds or Edits Item" section and "Inventory Tracking When Order Is Shipped" section to "SHOW ERROR" instead of "SHOW WARNING"

    image-20240105155808179

  • You can also change those settings to "SHOW MESSAGE" if you wish to always allow the employee to make the change. With SHOW MESSAGE, the employee does not have to confirm they want to override a warning. Instead, it will just display the out of stock situation as a regular message. You can even tell the system to skip it entirely, in which case the employee does not even see a message. Remember, these messages/warnings/errors only pertain to items whose Deny Purchase When Out Of Stock flag is set.

Decrement Behavior Details

Customer Interface

  • If you need to strictly make sure that an item does not go below its out of stock level, you should consider setting the Decrement Behavior for the config to WhenAddingToCart (in addition to setting the Deny Purchase When Out of Stock flag). This will reduce the inventory level for the item immediately, and if it is now out of stock, other customers will not be able to add the item at all.

  • If the Decrement Behavior for the config is set to anything other than WhenAddingToCart, it is possible for an item to go below its out of stock level, even if the Deny Purchase When Out Of Stock flag is set. Multiple customers might add the item in their carts, in quantities greater than the current inventory level. If they then proceed to place orders at the same time, the item could then go below its out of stock level. To help alleviate this possibility, a final check is made after each customer submits their address information during the checkout process. If the inventory has gone out of stock by that point, the customer will be sent back to the cart page with a message explaining that the item is now out of stock. So, both customers must have passed the address information part of the checkout at roughly the same time, for the situation to occur where the inventory level goes below the out of stock level. Note that an order is never rejected for inventory purposes, once the customer finishes the address information step of checkout.

Administrator Interface

  • To reiterate what was mentioned in a prior section of this document, inventory does not run if an employee adds, deletes, or edits an order item from the item's Details screen. To make sure inventory is decremented correctly, adjust the item from one of the customer service forms like this:

    image-20240105164322926

    This being the case, even if an order's status is changed from the order's Details screen, inventory will be run for items set to decrement WhenOrderShipped.

  • If you are tracking inventory by location, all four of these Decrement Behaviors act almost the same: WhenAddingToCart, WhenOrderPlaced, WhenAddsOrEdits, and WhenOrderShipped. An order item's location is not defined until an employee assigns one after the order is placed. This being the case, the system will not make any inventory checks or decrement inventory while the customer places the order, because there is no location defined yet. The system will decrement inventory however, when an employee assigns a location and then marks the order as Shipped. It's at that point that it will see that inventory should be decremented, and it treats all four settings the same way.

Adding Inventory Back

  • After an item's inventory level is decremented there are many cases when the system will automatically add back inventory to the item. When a customer or employee removes an item from an order, for example, the inventory levels of the corresponding product, product variant, etc. will automatically be increased, if they were decremented previously. This applies regardless of what the Decrement Behavior is set at. The system keeps track of which order items were decremented in a separate flag.

  • Similarly if the Decrement Behavior for a product, etc. is set to WhenOrderShipped, it is possible for an employee to change the order backwards, from Shipped (or a later status) to Not Shipped (or an earlier status). If this happens the system will automatically add inventory back to the levels of any products, etc., that had been decremented previously.

 

Low Stock Notifications

Each inventory tracking config record lets you define the item's low stock level, as well as a low stock notification. The system comes with a default low stock notification and template that can be used for any inventory tracking config record:

image-20240105122213915

The low stock notification triggers an email when an item hits its low stock level or goes below it. (It does not send a notification if the item is already low in stock and is decremented further, only when it first hits or goes below the level.) Any items under the product that are going out of stock at the same time and share the same inventory tracking config will be included in the notice:

image-20240105122515467

It is possible to customize the notification, or create additional ones. For more information see the document on Notification Features. For example, you might want to create separate notifications for different inventory tracking config records so that different people can receive different notices when different products or product variants get low in stock. To do this, simply create a new notification record, and it could use the same template as the original one. Then assign the inventory tracking config to the new notification using the inventory tracking config's Low Stock Notification field.

Apart from the notifications, items that are low in stock are highlighted in yellow on the Inventory Tracking By Product screen (see the above Inventory Tracking Product Screen section).

Transfers and Inventory Tracking

Overview

The system fully supports keeping track of inventory levels when items are shipped and received in a transfer. You can add products or product variants to any transfer. If you have created product locations or product variant locations under the product, and if you have set the product locations or product variant locations to be tracked (ie added an Inventory Tracking Config to them), the system will automatically adjust the inventory levels when the transfer's status changes.

Example

Here's an example of how to set this up. In our store we have set up inventory for a product variant in two different locations, New York and Los Angeles:

image-20240105165035780

Since New York is out of stock and LA has some stock we wish to transfer some of the inventory from LA to New York. To do this, first create a transfer from the Inventory and Shipping -> Transfer screen. Select Los Angeles as the "From" location and New York as the "To" location:

image-20240105165419670

  • Set the initial status to Unshipped

  • You can add a Name for the transfer to help you keep track of it and identify, but you don't have to.

  • Note that you can also add units to the transfer, if you are using units and need to move them. If you don't, then the "Unit Status When Received" field is not important.

Next, you'll want to add the product or product variant to the transfer, and identity how many of it you are tranferring. Once the transfer is created, click "Edit New Record" and under the new transfer's three-dots menu, select Product Variant Transfers:

image-20240105165816880

  • Note, if you are tracking inventory at the product level instead, you can add Product Transfers instead.

  • You can add any number of product variants and products to the same transfer.

When adding the product variant transfer, identify the product variant, and then type in the number you are transferring as the Transfer Count:

image-20240105170118931

  • Here you are essentially telling the system you want to move 8 large, red product variants from LA to New York.

At this point, no inventory levels have changed, and this is because the transfer's status is still Unshipped. When you have packaged the transfer and it's ready to be shipped, change the transfer's status back on the transfer's details page to Shipped:

image-20240105170359661

When a transfer's status changes to Shipped, the inventory levels corresponding to the "From Location" for the transfer will be decremented, and the transfer will appear on the Inventory Tracking By Product screen. As you can, the inventory level for New York is still unchanged but the inventory level for LA is 12, down from 20. But there is a note under the Transferring column, explaining that there is a Shipped transfer en route:

image-20240105170659035

When the transfer arrives at the destination, it's time to change the transfer's status from Shipped to Received.

Note, if you are integrating with UPS or FedEx, this could happen automatically based on the shipment's tracking information. For more details, visit the document on FedEx and UPS Tracking.

When the status changes to Recevied, the inventory levels corresponding to the "To Location" for the transfer will be increased, and the transfer will drop off the Inventory Tracking By Product screen:

image-20240105171018293

Other Transfer Status Changes

The system also supports undoing the transfer status changes. For example, if you made a mistake and need to change a transfer from Shipped back to Unshipped, or from Received back to Shipped, don't worry. The system will reverse the inventory level changes to keep things accurate.

Subparts

When businesses sell physical products, they often come with accessories. For example, you might sell a phone that includes a charger. The charger should be included in every phone order, but at the same time, you might wish to sell the charger separately. SCP lets you do this, including keeping track of the chargers as separate inventory items with their own inventory levels. The inventory level of the accessory gets decremented both when it is ordered by itself, and when it is added automatically as a subpart of another product.

To set up a subpart, first pull up its parent product in the adminstrator. Under the parent product's three-dots menu, select "Subparts":

image-20240208090205726

Then click the plus icon to see the Add Related Subpart Product form. From there, select the product that should be automatically added to orders that include the parent product. You can also set the "quantity" for the subpart. This will define the quantity of the subpart under each parent product that is ordered:

image-20240208090315908

Any subparts that are defined are added automatically to the order as it is placed by the customer. After that point, an employee may update or remove it - it is treated like any other order item on the order.

As of this writing, we have the following limitations to the subparts in the system:

  • When subparts are added to an order under a parent item automatically, they are set to a weight of 0 and a price of 0. This means they do not contribute to the order's total, or to the order's calculated shipping cost. The simple rule you need to follow is to make sure you include the prices and weights of subparts, in the parent product's price and weight. Note: when products that can be used as subparts are added on their own to a user's cart - the price and weights ARE added to the order, as you would expect.

  • When subparts that are added under a parent item, any attributes, options, or product variants under the subpart product are ignored.

Audit Logs For Inventory Level changes

Whenever the inventory level for any item changes, the system creates a log entry for auditing and troubleshooting. Employees with the appropriate permissions can view these logs from the Operations -> Audit Logs menu items:

image-20240118101454450

Inventory levels are tracked under the "Product Logs", "Product Location Logs", "Product Variant Logs", and "Product Variant Location Logs" menu items, depending on what you have chosen to track. Select the appropriate link, and click the columns icon to display the inventory levels that have changed in the system:

image-20240118101754154

The resulting screen shows you each item that has changed, and the inventory level it changed, including which employee made the change (if any), and other information. You can also create reports from this screen and have the reports emailed to you on a schedule. See the Reports Feature documentation for full details.