---
title: "Adjust stock and track locations"
description: "Every stock movement in IoTFlows lands at one location and writes one ledger row. This page covers opening the Adjust stock modal from an item's detail, reading Stock by location, the three directions the modal offers (Add, which writes a Receipt; Remove, which writes an Issue; and Set count, which writes an Adjustment for the difference), the note that makes a correction auditable, and the Reserved and Incoming figures that explain why what is on the shelf and what is available to a new job are different numbers. Adjusting stock takes an Owner or Administrator role, and the same adjustment exists on the web, iOS and Android."
category: "Manage stock"
source_url: "https://www.iotflows.com/docs/inventory/adjust-stock/"
---
# Adjust stock and track locations

Record a receipt, an issue, or a corrected count, at one location, with a note.

---

Stock in IoTFlows is never a single number on an item. It is a quantity of one item at one *location*, which is one node of your location tree: `Main Plant › Storeroom › Shelf B`. Every change to a quantity writes a row in the item's *ledger*, the **Transaction history** at the foot of its detail, so the count and the history can never disagree.

Adjusting stock takes an [Owner or Administrator role](/docs/admin/roles-reference/). Every other member can open an item and read its quantities, but the **Adjust** buttons are not rendered for them. You also need an item to adjust: see [Create and edit items](/docs/inventory/manage-items/).

## Open an item's stock
1. Go to the **Items** tab of Inventory, at `/inventory?select=items`.
2. Select the item to open its detail drawer.
3. Scroll to **Stock by location**.
4. Select **Adjust** on the location you are correcting.

The modal opens titled **Adjust stock**, followed by the item's name, with that location already selected and its current quantity loaded.

Two other buttons open the same modal. **Add a location**, at the top right of the **Stock by location** card, opens it with no location chosen and zero on hand, which is how you stock an item somewhere for the first time. On an item held as individually numbered *pieces*, each piece carries its own **Adjust** button instead, covered on [Track serialized pieces and tools](/docs/inventory/serialized-pieces/).

There is no way to adjust stock from the catalog list or from an item card. Stock is adjusted from the item's detail, one location at a time.

## Read Stock by location
The **Stock by location** card lists one row per location that holds this item, each with its full breadcrumb path, its own quantity in the item's unit, and its own **Adjust** button. A quantity that has gone below zero is printed in red.

The **On hand** figure at the top of the drawer is the sum of those rows. A location with no row holds zero of this item, not an unknown amount, which is why adjusting at a new location starts from zero rather than from the item's total.

![The Stock by location card on an item's detail, showing two location rows with their quantities and Adjust buttons](/images/inventory/inv-stock-01.webp)

*Stock by location on one item, with one row per location and an Adjust button on each.*

**On mobile.** Inventory ships on iOS and Android with the same stock model. The item detail carries the same per-location rows, and the adjustment sheet offers the same three directions and the same note field. Standing at the shelf with a phone is the common case for a count, so the mobile path matters more on this page than elsewhere.

![An item's stock by location on the iOS app, listing each location with its quantity](/images/inventory/inv-stock-05.webp)

*Stock by location in the mobile app. This is the screen a storeroom uses standing at the shelf, which is why the mobile path matters more here than elsewhere.*

## Choose a direction
The modal never asks for a signed number. You pick a direction, then a positive quantity, and IoTFlows supplies the sign.

| Direction | Quantity you enter | Use when | Transaction recorded |
|---|---|---|---|
| **Add** | How much arrived | Stock came in from outside a work order: a delivery, a return from a bench, a correction you can name as an arrival | **Receipt** |
| **Remove** | How much left | Stock left outside a work order: scrapped at the shelf, sold, consumed by something IoTFlows does not track | **Issue** |
| **Set count** | The new counted total | You have physically counted the shelf and the number on screen is wrong | **Adjustment**, for the difference only |

All three land at the one location selected in the modal. [Transaction types](/docs/inventory/transaction-types/) lists the other eight types, which are written by work orders rather than by hand.

## Add stock with a receipt
A *receipt* is stock arriving. Select **Add**, which is labeled `Stock coming in`.

1. Confirm the **Location** at the top of the modal, or pick another.
2. Enter the amount with the **+** and **−** tiles, or type it into the number field.
3. Write a **Note** saying where it came from, for example `PO 4471, Grainger, 2 boxes`.
4. Select **Apply**.

IoTFlows confirms with **Stock updated** and writes a **Receipt** for the amount. The item's detail, its ledger and the catalog counts all refresh.

The card under the note field previews the result before you commit it: it reads **New on hand here**, showing the current quantity, an arrow, and the quantity you are about to create, with a green pill carrying the change. Changing the location clears the amount, because an amount counted against one shelf means nothing against another.

![The Adjust stock modal set to Add, with a location, a quantity of 24, a note, and a preview reading 12 to 36](/images/inventory/inv-stock-02.webp)

*The Adjust stock modal in Add, with a note saying where the stock came from and the before and after preview beneath it.*

## Remove stock with an issue
An *issue* is stock leaving. Select **Remove**, which is labeled `Stock going out`, then enter how much left and apply. IoTFlows writes an **Issue** for that amount.

You do not need **Remove** for parts a work order consumes. A work order reserves what it requires and moves the stock when it is completed, and doing both leaves the shelf short twice over. See [How work orders move stock](/docs/inventory/how-work-orders-move-stock/).

> **Warning:**
> **Removing more than you have is allowed.** The preview turns red and warns `This will drive on hand negative`, and **Apply** stays enabled. A negative count almost always means a receipt was never recorded rather than that the shelf owes you parts, so count the shelf and use **Set count** instead of removing past zero.

## Correct a count with Set count
A *set* is a correction to a counted total. Select **Set count**, which is labeled `Correct to a counted total`. The field prefills with what IoTFlows currently believes is at that location.

1. Replace the prefilled figure with the number you counted.
2. Read the preview: it shows the old quantity, the new one, and the difference as a pill reading, for example, `-3 correction`.
3. Write a **Note** naming who counted and when.
4. Select **Apply**.

IoTFlows writes an **Adjustment** for the difference, not for the total. Counting 41 where the system held 44 writes a single `-3` row, so the ledger still reconciles to the quantity on the shelf.

**Apply** is disabled when the counted total matches what is already there. There is no correction to record, so the modal has nothing to write.

Use **set** only after a physical count, and always with a note saying who counted. Receipt and issue tell you what happened; set tells you only that somebody disagreed with the number, and without a note nobody can audit it later.

![The Adjust stock modal set to Set count, with the counted total entered, a note naming the counter, and a correction pill](/images/inventory/inv-stock-03.webp)

*Set count after a physical count, with the note naming who counted. The pill beside the new total shows the correction the ledger will record.*

## Write a note
The **Note** field is optional to the form and close to mandatory in practice. It is offered in all three directions, and the item's **Transaction history** carries a **Note** column to print what you write, which is the only place a future reader can find out why a number moved.

> **Warning:**
> **The note is not reaching Transaction history.** Checked on the web app on 2026-09-21: a note typed into **Adjust stock** applies without an error and the quantity moves correctly, but the ledger's **Note** column reads `—` on the new row, and the transaction comes back from the API with no note on it. Keep writing them, since that is the field the product reads back from, and until the column fills in, keep anything you have to be able to audit in a second place as well.

Write what the quantity alone cannot say: `Counted by J. Okafor, cycle count week 38` on a set, `PO 4471 short by 6, supplier notified` on a receipt, `Scrapped, bent on unload` on an issue.

![The adjust stock sheet on Android in Set mode, with the counted total and the note field filled in](/images/inventory/inv-stock-06.webp)

*Setting a counted quantity on Android. The note is what makes a set auditable later.*

## Pick or create the location
**Location** is required on every adjustment, and **Apply** stays disabled until one is chosen. The picker is your location tree: search it with **Find a location**, or expand it and select a node.

You can create a location without leaving the modal. Select the **+** beside a node to add one inside it, or **Add a location** at the tree's root for a top-level one, type the name, and confirm. IoTFlows answers **Location created** and selects it.

> **Info:**
> **Told the location was created but nothing is selected?** The message `Location created, but the response did not identify it. Reopen to see it.` means the location was saved and the modal could not select it. Close the modal, reopen **Adjust**, and pick the new location from the tree. Nothing was lost, and you do not need to create it again.

## Reserved by work orders
*Reserved* is how much of an item open work orders are holding. When a work order requires a part, that quantity is netted out of what other jobs can draw on, but it is still physically on the shelf and no transaction has been written.

The **Reserved by open work orders** card lists one row per work order, with its number, its status, the location it is holding stock at, and the amount in amber. Select the arrow on a row to open the work order: maintenance work orders open on the Maintenance page, production ones in the scheduler.

This is why two numbers that look like they should agree do not. **On hand** is what is on the shelf; **Available** is on hand minus reserved, and it is what a new job can actually take. The item's detail shows **On hand**, and the catalog's list mode carries all four figures side by side, covered in [Create and edit items](/docs/inventory/manage-items/#views).

Reorder points are measured against **Available**, so an item can be flagged low while a full shelf sits in the storeroom spoken for. See [Monitor low stock and reorder points](/docs/inventory/low-stock/).

![A tool's Reserved by open work orders card above its Coming back from open work orders card, each listing work orders with a number, a status, a location and a quantity](/images/inventory/inv-stock-04.webp)

*Reserved by work orders and incoming from them, which is why on hand and available differ.*

## Incoming from work orders
*Incoming* is the mirror of reserved: what open work orders will add to this item. A manufactured part is being produced, and a reusable tool is on its way back to the shelf, so a tool's card is titled **Coming back from open work orders** instead.

The total appears under **On hand** as a green `+6 incoming` line, and the card beneath lists the work orders bringing it, each against the location it will land at.

Incoming is deliberately not added into **Available**. None of it is on a shelf yet, and a job cannot pull from stock that does not exist.

> **Warning:**
> **Do not receive incoming stock by hand.** Adding a quantity that a work order is about to create counts it twice: once when you apply the receipt, and again when the work order is completed and writes its own. Let the work order land it, then count the shelf if the number looks wrong.

## When an adjustment fails
A failed **Apply** raises the reason IoTFlows gave and saves nothing. The quantity on the shelf is unchanged, no ledger row is written, and the modal stays open with your entries intact, so you can correct and apply again.

Some failures return no reason, which renders as an empty message. Treat that the same way: the request failed, the change was not saved, and applying it again is safe. If it keeps failing, see [Get support](/docs/get-started/get-support/).

## See also
- [Transaction types](/docs/inventory/transaction-types/)
- [Monitor low stock and reorder points](/docs/inventory/low-stock/)
- [How work orders move stock](/docs/inventory/how-work-orders-move-stock/)
- [Track serialized pieces and tools](/docs/inventory/serialized-pieces/)
