Adjust stock
Set a product or variant's stock level, and choose whether Brainerce tracks its quantity.
The Inventory page is where you see and update stock across your whole catalog. Open it from Inventory in the sidebar.
No Inventory page at all? Stock tracking is a module, and stores set up to sell only digital goods or services start with it switched off, which removes the whole Inventory section, not just a sidebar link. Turn it on under Settings → Modules.
The toolbar, the filter and the table menu
The Inventory page opens straight onto the table. Above it are Refresh, the Sales channel picker (the default is All channels) and Status, the filter. A team member limited to a single sales channel sees that channel locked in the picker and cannot switch it. When an installed app sends your products to another platform, a small pending number also shows there (products waiting to be sent on the next sync); a store with no such app does not show it.
Status offers In Stock, Low Stock, Out of Stock and Needs restocking, one at a time; choose it again to clear it. The choice is kept in the page address and remembered the next time you open the page. The filter narrows only the rows of the page on screen, and says "Filters the current page only" when you have more than one page, so Low Stock can show fewer rows than your store really has. To list every low item in the store, open the Low and out of stock report in Inventory reports, or ask the AI assistant.
How many products there are is shown at the bottom right of the table ("1-20 of 226 products"). There is no row of totals above the table: the inventory value, the units on hand and the units that can be sold are in Inventory reports.
The ⋮ menu at the top of the actions column holds Import and Export. Export opens the edit your data in a file export for stock and stock per warehouse (see Updating a lot of stock at once). There is one Import: a file made by Export is recognised and opens the import for edited files, any other file is read as a stock CSV. Recent imports appears while an edited-file import can still be undone, and Continue the import that stopped while one is waiting. The same menu holds Manage columns, Row height and a reset of the table settings.

The table columns are Product Name, SKU, Inventory (the stock cell you click), Unavailable, Reserved, Available, Incoming, Days left, Status and Channel policy. Variants of a product sit under it: click the arrow on the row to expand them. Showing or hiding columns, sorting and page size work as on every table, see Working with tables.
What each status means:
- Low Stock means something is left, at or under that item's low-stock threshold. An item with a threshold of its own uses it, and every other item uses the highest low-stock threshold across your sales channels (5 when you have no channel). Zero is Out of Stock, not low. Items with unlimited stock are never low or out. A product with variants is judged once per variant. See Set up low-stock alerts.
- Available is the units that can be sold: the units on hand, minus the units held for open orders and the units marked unavailable.
- The inventory value is units on hand times the cost price, and a product with stock but no cost price is left out and never priced at its selling price. It is the first report in Inventory reports; it is not a profit figure and does not include stock still on order.
Receiving a purchase order does not change a cost price unless you choose to: see Update the product's cost price when you receive.
Update a stock level
The same stock popover opens from the Inventory page and from the Products table, on the inventory cell of any row. Both write the same change.
- Open Inventory (or Products). Products with variants expand to show each variant on its own row.
- Click the inventory cell (the stock badge) for the product or variant you want to change.
- In the popover, make sure Manage Inventory is on. Then either:
- Set total: type the new count you have on hand. A shipment of 30 arrives and you had 5: enter 35.
- Adjust by: type the change instead: +30 for a delivery, -2 for breakage. The popover shows the current count and what it becomes before you save.
- Whole numbers only, in every stock field. A stock quantity is a whole number of units. A value such as 2.5 or 1e3 is refused with a message under the field, Save stays off until you fix it, and nothing is rounded for you. Removing more units than you have is refused too, and the message says how many you can remove.
- Pick a reason if you want the movement history to say what happened (received shipment, damaged goods, return from customer, return to supplier, stocktake adjustment, manual correction, or Other... with your own text of up to 200 characters). Leave it blank and the history records which screen the edit came from.
- Click Save.
Update stock in each warehouse from the stock popover
If your store has two or more active warehouses, the stock popover of a product without variants shows one row per warehouse instead of a single quantity. Each row has the warehouse name, what it holds now, how many units are reserved there, and a field with minus and plus buttons.
- Choose Set total or Adjust by. It applies to every row.
- Change the warehouses you need. A row you do not touch is left alone, and a changed row shows how much it moves (for example +15).
- Check Available, Reserved and Total at the bottom. They show what the stock will be after you save.
- Pick a reason. It is saved once and recorded on every warehouse you changed.
- Click Save. Brainerce updates the changed warehouses one after another. If one fails, it stops there and tells you how many were saved, so you know which ones still need a change.
- Stock that no warehouse holds yet is shown in your default warehouse. A product with 150 units that you never placed shows 150 in the default warehouse and 0 in the others. That matches how Brainerce already counts it.
- A warehouse cannot go below the units reserved in it. The row turns red and Save stays off until you fix it.
- Transfer between warehouses appears under the rows when at least one warehouse holds stock that is already placed. It moves units immediately and does not wait for Save. It cannot move stock that no warehouse holds yet. To move that, lower one warehouse and raise another in the rows, then save.
- Inactive warehouses are not listed, but the units they hold still count in the total.
- With one warehouse, or none, the popover is the single quantity field described above.
- If your default warehouse is switched off (inactive), the popover shows the single quantity field and says so. Switch the default warehouse back on under Inventory, Warehouses (or click Set as default on another active warehouse), and the rows come back. A store with no default warehouse at all shows the same note: click Set as default on one of your warehouses. Without an active default there is nowhere to show stock that no warehouse holds yet.
- Products with variants, and the dialog from the row menu, still work on the total only. Per-warehouse editing for variants is not available yet.
- In a sales channel view the warehouse numbers are read-only. Stock is shared by every channel, so change it in the All channels view. What you can set per channel is the stock it keeps for itself, under Channel inventory policy in the same popover.
Update every variant at once
A product with variants opens a popover that lists each variant with its own toggle and quantity. Above the list, All tracked variants applies one number to every variant that has Manage Inventory on:
- Choose Set total or Adjust by, type the number, and click Apply. Every tracked variant's quantity fills in, and each row shows its before and after. Variants with tracking off are skipped.
- Change any single variant's quantity by hand if one size differs.
- Pick one reason. It is saved on every variant's movement.
- Click Save. The button says how many variants will change, and only those are written.
Apply fills the fields, it does not save. Nothing changes on the store until you click Save; close the popover to discard.

Add or remove units from the row menu
The popover above covers most edits. The row menu opens a larger dialog with the same Adjust by and reason, plus the product's alert threshold:
- On the product's row, open the actions menu (the three dots at the end of the row).
- Choose Update stock.
- Switch to Adjust by and type the change: +30 for a delivery, -2 for breakage. The dialog shows the current count and what it becomes before you save.
- Pick a reason: received shipment, damaged goods, return from customer, return to supplier, stocktake adjustment, manual correction, or Other... with your own text (up to 200 characters).
The reason is saved with the change and shows up in the movement history below, so a count that looks wrong later can be traced instead of guessed at.
The same dialog holds the product's alert threshold, the level that counts as low for this one product. See set a threshold for one product.
This dialog is for simple products only. A product with variants keeps its stock on each variant, so use the stock badge on the row and set each variant there; its row menu offers Stock movements only. A kit has no count of its own and is not offered the dialog at all: its row menu has Manage Kit instead, which opens the kit's contents.
See who changed stock, when, and why
Open the row's actions menu and choose Stock movements for the last 20 changes to that product: what the count went from and to, how long ago, and the reason if one was given. Reservations and fulfilments from customer orders appear here too, not only your own edits.
Each entry is named for what caused it: Manual update, Reserved for order, Reservation released, Fulfilled for order, Restored from cancelled order, Synced from platform, Import, Automatic reconciliation, Received from purchase order, Sent in transfer, Received in transfer and Stock moved between states.
Variant rows have the same menu item, and it shows the movements for the whole product, variants included.
A kit has no movement history, because it holds no count. Look at the movements of the products inside it instead.
See every stock change in the whole store (Stock journal)
Open Inventory, Stock journal in the sidebar for one list of every stock change in the store, newest first, instead of one product at a time. The page has three tabs: Journal (this list), Reports (see Inventory reports) and Restock Waitlist (see Back-in-stock waitlist). Each row shows the date and time, the product (and variant), what caused it, the change (for example +3 or -1), the item's balance after the change, the warehouse and the reason.
- Search by product name or SKU, and filter by the kind of change (manual update, received from purchase order, sent or received in a transfer, order reservations and so on) and by warehouse.
- Pick the dates with From and To. With no dates the journal shows the last 30 days, and it says which days it is showing. One search covers at most 366 days; choose a shorter range to look further back in pieces.
- Export CSV downloads the rows the filters match, up to 10,000 rows. If more match, the file holds the first 10,000 and says so: narrow the dates to export the rest.

The balance column is the item's stock in all warehouses together after that change. It is not the stock of the warehouse named in the row.
The warehouse column is empty for some rows. Changes made by customer orders (reserving, fulfilling, cancelling) are not tied to a warehouse, so they show a dash and do not appear when you filter by a warehouse. Changes recorded before the journal existed also show no warehouse, except transfers and purchase receipts, which still show where the units went. Nothing was rewritten to fill the gaps.
A simple product created with stock starts with a journal row. Setting a quantity when you create a simple product writes one Manual update row with the reason Initial stock, so the first balance has a source. A product created at 0 has no row until its stock changes. A variation you create in the product form or in the variations dialog does not get this row: its opening stock is just its first balance, and the journal starts at its first later change. A product created with variants through the API does get one such row per variant. Deleting a product removes its warehouse stock along with it, so a deleted product no longer counts in any warehouse total, while its past journal rows stay for the record.
The journal is read-only. You cannot edit or delete a row; to correct stock, update the stock level and the correction appears as a new row.
Stock tracking modes
The Manage Inventory toggle controls how Brainerce handles availability:
| Mode | Behavior |
|---|---|
| Manage Inventory on | Brainerce tracks the count and reduces it as orders come in. |
| Off → In Stock | Always available, no count is kept (good for made-to-order). |
| Off → Not for Sale | Can't be purchased, and collects no back-in-stock waitlist. |
Not for Sale products sit outside the stock filters. Like kits, a product you switched off is in none of the In stock, Low stock or Out of stock buckets, and it is not added to the Out of stock counter. It was your decision, not a shortage, so there is nothing to reorder. Its units still count in Total stock, because you are still holding them, but not in the available figure beside it, because nobody can buy them.
Sold out is not the same as Not for Sale. If the product is coming back and you want shoppers to ask about it, leave Manage Inventory on and set the quantity to 0. Switching the toggle off and picking Not for Sale blocks purchase but also blocks the back-in-stock waitlist, because there is no stock count for Brainerce to watch.
Backorders (selling past zero)
The stock popover of a simple, tracked product has a Backorder control: Block (the default, sold out at zero), Allow or Notify, with an optional unit limit. A variant has the same control, in its own row of the variant stock popover, set per variant rather than once for the whole product. See Backorders for how each choice behaves, including what happens at checkout and why it blocks the back-in-stock waitlist.
Units sold past zero are Reserved, so Available shows a negative number (for example -3 for three units on backorder) until you receive stock, while the on-hand count stays at 0 unless you ship a backordered order before entering the stock you received. You cannot switch a product back to Block while units are still on backorder, meaning its stock is below zero. The change is refused until you receive stock or enter the real count so the number is zero or higher. Cancelling the backordered orders also works, because a cancelled order releases its units. Switching from Block to Allow or Notify, and changing the limit, is always possible.
Kits (gift boxes) have no stock of their own
A kit has no quantity you can type. Its stock cell is not editable, and the Inventory page shows it blank rather than a number.
That is on purpose. How many kits you can sell is worked out from what is inside them: whichever component runs out first sets the limit. A gift box holding one bottle and two glasses, with 10 bottles and 12 glasses on hand, is 6 boxes, because the glasses go in pairs. Type a number onto the kit itself and it would be a second, frozen count that never moves when a bottle sells, so Brainerce does not let you.
To change how many kits you can sell, change the stock of the products inside it. Open Inventory, find those products, and set their quantities the normal way. The kit follows on its own.
The same applies to every other route in: Bulk Set Stock skips kits in your selection and tells you it did, the inventory CSV importer counts a kit's SKU among the SKUs it could not find rather than importing it, and the API and AI assistant refuse a stock write to a kit with an explanation. Kits also sit outside the In stock, Low stock and Out of stock filters entirely. This page holds no count for them, and a filter that guessed would be worse than one that abstains.
Available, Reserved, and Total
When tracking is on, the popover shows:
- Available is what customers can still buy.
- Reserved is units held in open carts or unfulfilled orders.
- Unavailable is units you have on hand but hold back from sale: damaged, in quality control, or kept as safety stock. See Hold stock back from sale.
- Total is Available plus Reserved plus Unavailable: everything physically on hand.
- Incoming is units on order or in transit that have not arrived. It is not part of Total and cannot be sold until it is received. See Incoming stock.
Stock is tracked per variant, so each size/color can have its own count.
A product is only "unlimited" when every variant is. Mix one made-to-order size in with tracked ones and the product is still tracked: its row shows the total of the sizes you do count, and the unlimited size adds nothing to it rather than wiping the number out.
Hold stock back from sale (damaged, quality control, safety stock)
Some units are in your warehouse but should not be sold: a box that arrived damaged, a batch waiting for a quality check, or a few pieces you keep aside. Move them out of Available so the storefront stops counting them, without losing track that you still have them.
- On Inventory, open the row menu (the three dots) of a product, or of a variant, and choose Move between states.
- Choose where the units come from and where they go. The states are Available, Damaged, Quality control, Safety stock and Other.
- Type the quantity. If your store has warehouses you can also pick the Location the units are in, or leave Whole store.
- The table at the bottom shows Available and Unavailable before and after. Click Move.

To release units, open the same dialog and move them from their state back to Available. You can also move units from one unavailable state to another, for example from Quality control to Damaged.
- Unavailable units are still on hand. They stay in Inventory (Total) and in the inventory value, and are never sold. The storefront, your sales channels and Google show the Available number only.
- You can only hold back units that are available. Units reserved by an open cart or an unfulfilled order cannot be moved. If a sale takes the stock first, the move is refused with a message and nothing changes.
- Set total cannot go below the unavailable units. If 3 units are held back, you cannot set the stock to 2. Release them first.
- Only tracked stock can be held back. An unlimited product, a product with tracking off, and a kit have nothing to hold back.
- A backup keeps the number but not the reason. Restored units come back as Other.
- The movement history records each move as Stock moved between states.
Incoming stock (on order or in transit)
The Incoming column shows units that are on their way: what is still to arrive on purchase orders marked Ordered or Partially received, and what is in transit on a stock transfer. Click the number to see each purchase order or transfer behind it, with its expected date and the warehouse it is for.
- Incoming is not stock. It is not in Total and not in Available, and a customer cannot buy it until it is received.
- A draft purchase order does not count, and neither does one that is cancelled or fully received.
- Nothing here is typed in by hand. The number follows your purchase orders and transfers, so receiving, cancelling or changing one changes it.
Updating a lot of stock at once
Two faster paths than editing rows one at a time, both on the Inventory page:
Import a CSV. Open the ⋮ menu at the top of the actions column, click Import and choose a CSV file. It needs a SKU column and one stock column named Stock (also accepted: new_stock, quantity or qty). Header names are not case sensitive. It matches the SKU of a simple product and the SKU of a variant, which makes it the right tool after a stock count. The SKU of a product that has variants (the parent) and the SKU of a kit are not matched: they are counted as SKUs not found, so put the variant SKUs in the file.
- Set or adjust. Choose Set quantity (the default) to make every row's number the final stock count, or Relative change to add or subtract it from whatever is already there: type a negative number to remove units. Pick the one that matches your file. A "set" file applied twice does nothing extra, but an "adjust" file applied twice doubles every change.
- Warehouses. If your store has two or more active warehouses, you must choose which one the file is for before importing. There is no "all warehouses" option, since one file cannot know how a count splits across locations. The dropdown preselects your default warehouse. A store with zero or one warehouse does not see this picker: the import writes the one total, same as before warehouses existed.
- Preview before you commit. Before you click Import, the dialog shows each SKU's current stock and what it will become, computed against your live data, not a guess from whatever page of the grid happened to load. Import stays available for the rows that are fine even when another row has an error.
- Removing more units than exist, under Relative change. On a store with two or more active warehouses, that row shows an error instead of a number and is not applied. On a store with zero or one warehouse, it is not refused: the row is floored instead of erroring, keeping your reserved and held-back units intact. For a product that does not allow backorders, available floors at 0. For a product that allows backorders, available can go negative instead, the same as an ordinary sale past zero would leave it. There is no separate warning that the row was clamped; check the preview's "next" number if you want to confirm what it comes out to.
- Repeated SKUs in one file. Under Set quantity, the same SKU appearing twice with two different numbers blocks the whole import. The preview names which SKUs conflict so you can fix the file. Under Relative change, repeated rows for the same SKU are added together instead, so two
+5rows for one SKU add up to+10. - Limits. One file can hold up to 500 rows. A longer file is refused as a whole: the preview fails to load and Import stays disabled until you upload a smaller file, so split it into files of 500 rows or fewer.
- Rows that are skipped silently. A row with an empty SKU or a non-numeric quantity does not appear in the preview. Decimals are cut to a whole number (12.5 becomes 12). Commas are the only separator, so a SKU that contains a comma cannot be imported this way.
- The result. The message says how many products and variants were updated, how many SKUs were not found, and how many rows had an error. It does not list the SKUs, so compare against your file.
- What it writes. Each row writes a movement with the reason CSV import, and the new count is sent on to your connected sales channels like any other stock edit. A variant that never had a stock record starts as tracked. A team member limited to certain sales channels cannot import stock for products outside those channels: those rows are listed as not found, in both the preview and the real import, the same as a SKU that genuinely does not exist.
This is not the product importer. The one under Products cannot update stock on an existing product. See Bulk import from CSV.
Bulk Set Stock. Tick several rows, click Set Stock in the selection bar, type the New stock quantity (a whole number, 0 or more) and click Apply. Every ticked product gets that same total, and the movement reason is "Bulk update from the inventory screen". It works on simple products only: products with variants are left out because their stock sits on each variant, and kits are left out with a message saying how many. If only variable products are ticked, nothing opens and a message tells you to set stock per variant. If some writes fail, the message says how many succeeded and how many failed.
You can also export the current stock levels, which gives you a file to edit and import back. Export in the ⋮ menu opens the export dialog for stock and stock per warehouse, as Excel or as a ZIP of CSV files for scripts (see Edit your data in a file). For a plain stock CSV, tick the rows you want and use Export in the selection bar: the columns are Product Name, SKU, Tracking, Stock, Reserved, Available and Status, unlimited stock shows as ∞, and a kit's numbers are blank with the status From kit contents. If the file-edit export is not available to you, Export in the ⋮ menu gives that CSV for your whole catalog (up to 5,000 products), following the search box and the channel filter.
Reserving stock per sales channel
The Channel policy column controls how much of an item each sales channel may sell. Use it to hold stock back for one channel, keeping a buffer for your own storefront while a marketplace sells the rest, rather than letting whichever channel sells first take everything.
Set a reserved amount for a channel

- On the Inventory page, click Manage in the Channel policy column of the product or variant (the same panel also sits at the bottom of the stock popover). The panel is called Channel inventory policy and lists your connected sales channels, with Pool available at the top.
- Type the number of units to hold back for each channel. It must be a whole number from 0 up to what is available now; a bigger number turns red with "Exceeds available".
- Click Save. A 0 clears the reservation for that channel.
If the amounts you reserve across channels add up to more than the stock you have, saving still works, and a warning says channels without a reservation may show 0 available until stock rises. A product or variant whose stock is not tracked shows Not applicable in the column. With no connected sales channel the panel says "No connected sales channels yet."
How much can a channel sell?
A channel can sell everything that is not reserved for another channel. With 98 in stock, 60 reserved for Wholesale and 38 reserved for Retail, Retail can sell up to 38 and Wholesale up to 60. A cart, a checkout or an order that asks for more than that is refused as out of stock, even though the shared stock number is higher. The same applies to the stock a shopper sees on that channel's storefront: it shows what that channel can sell, not the whole stock.
When a channel sells, it uses its own reserved units first
Each sale takes its units from the selling channel's own reserved amount, so the other channels' reserved units stay untouched. Retail sells 3 of the example above: stock goes to 95, Retail's reserved amount goes to 35, and Wholesale still has its 60.
What this does not do:
- Cancelled and refunded units go back to the shared stock, not back into the channel's reserved amount. Set the reserved amount again if you want to hold them for that channel.
- Orders you create yourself in the dashboard have no sales channel, so they take from the whole stock and ignore the reservations.
- Items that do not track stock cannot be reserved, because there is no count to divide.
- The reserved amounts never add stock. They only decide which channel may sell the units you already have.
Can each sales channel have its own stock count?
No. A product has one stock count, shared by every sales channel and by every warehouse. A channel cannot hold its own separate quantity, and a number you type for one channel never changes the stock of another. What you can do per channel is reserve units for it (above), which only decides who may sell part of the shared stock. Two things this means for what you see:
- In a channel's view, the warehouse numbers are read-only. Change stock in the All channels view.
- A channel's "Available for channel" figure is what that channel can sell now: the shared stock minus the units reserved for the other channels. It is not a separate stock count, and it moves when the shared stock or another channel's reservation moves.
To keep some stock away from online orders altogether, a warehouse can be switched off, or you can reserve those units for a channel you do not sell on. There is no "not for online orders" setting on a single warehouse.
What's next?
Need help with inventory? Email [email protected].