Docs / Inventory
Inventory: what's on the shelf, and where
How many you have and which bin they're in: the movement ledger, allocations, bins, stocktakes, barcodes and valuation.
Inventory keeps a quantity on hand for the things you track. Every change is a movement in a ledger: a delivery comes in, a shipment goes out, a count corrects the figure. A reorder point tells you when to buy more.
Tracking is per item. Services and made-to-order work usually stay untracked, and nothing about them changes.
Items and Inventory
Items is the catalog: names, prices, costs, variants, photos, barcodes and tags. Stock is the shelf: how many you have, which bin they're in, what's set aside for orders, what's running low, what it's worth and when it was last counted.
Inventory has no prices or photos, and Items has no bins. Each row on Inventory links to its item.
A row on Inventory is a thing on a shelf. A product sold in three sizes is one item and three rows, because each size has its own bin and its own count.
Inventory has three tabs:
- On the shelf: the list, with filters for low stock, oversold, no bin yet and never counted.
- Movements: the ledger behind every quantity, for the whole workspace.
- Stocktakes: physical counts.
Tracking an item
On the item form, tick Track stock for this item. On an existing item it's on the item's Stock tab. Set a reorder point (the level that counts as low) and a reorder quantity (what you usually buy, suggested when it runs low) if you want them.
Then set the opening stock: what you have now, what each one cost and the date you counted.
Opening stock
Inventory → Opening stock puts your catalog on one screen: a box for what you counted and a box for what each one cost, and one date at the top for when you counted. A product sold in variants gets a row per variant. The screen lists your first 100 items by number; for more, use the import below.
Fill in what you've counted and leave the rest blank. A blank box means "not counted", never zero. Each line you fill in writes an Opening stock movement, and turns tracking on for that item if it was off.
Counting again is safe. A second count books the difference, so the shelf lands on your new figure instead of doubling.
Leave the unit cost blank when you re-count. A cost typed there replaces the cost of everything you hold, not only the units you counted, so your stock value and the margins on past sales move with it. Type one only when the old cost was wrong. The screen leaves the box blank on anything counted before, and warns you with the old and new figures if you type a different one. The item's history records the change.
Use the date you counted. A valuation run for any later date then gives the answer it would have given on that day.
Counting on a spreadsheet instead
Two hundred things are faster to count on a clipboard and type into a spreadsheet. The importer takes the count as a CSV under Opening stock: one row per thing, with the item number or SKU (a variant by its own SKU), what you counted, optionally what each one cost, the date and, with more than one location, which location you counted.
It works the same way as the screen:
- Importing a corrected file books the difference. Fix the file and import it again.
- A named location is compared with that location only. Leave the location blank and the count is compared with the item's total across every location, and the difference lands on your default location. With one location, that's the same thing.
A location name that matches nothing rejects the row, and the message lists the locations you have. The import creates nothing, so there's nothing to undo: to put a balance back, import the right count.
The other half of an opening balance is what clients owe you. The importer takes that too, under Invoices. See unpaid invoices from before you started.
The Stock card
The Stock card is on the item's Stock tab, while tracking is on. It shows five figures:
- On hand: what's physically there, the sum of every movement.
- Allocated: what's set aside for named order lines. Nothing has left the shelf.
- Available: on hand, less what's allocated and anything in quarantine. This is what you can still promise.
- Short: what open orders still need that nothing covers, neither an allocation nor free stock.
- Average cost: the average cost of what's on hand, and the value it comes to.
Quantities carry three decimals (a kilogram of filament, a liter of resin). Document lines use two.
Adjust records a movement by hand: add or remove, the quantity, a reason (pick one or type your own) and an optional note and date. Adding stock can carry a unit cost, which moves the average. Removing stock never changes it. With more than one location, Location says which shelf it happened at; it starts on the default.
Reset opening stock on an item that already has movements books the difference between your count and what's on hand. A unit cost given here replaces the average cost outright.
Every movement also goes on the item's History, such as "Stock adjusted −3 (damaged): 47 on hand", with who did it.
Items sold in variants
When a product has variants, each variant has its own stock: its own quantity, average cost and movements. The product's figures add them up.
The Adjust and opening stock buttons on the item page work on the product as a whole, so a product sold in variants refuses them. Count a variant on the Opening stock screen, which has a row for each, or with a stocktake.
Kits
A kit has no stock of its own. It can supply as many whole kits as its components allow, and shipping one writes a movement for each component.
The movement ledger
Nothing edits the quantity on hand directly. On hand is the sum of the item's movements, and the item's Movements tab shows the latest 50, newest first, with a link to the full report.
| Reason | What it records |
|---|---|
| Opening stock | The balance when tracking began, or a later recount from the opening stock screen or import. |
| Adjustment | A change by hand, with a reason: damaged, gift, sample, shrinkage, found. |
| Shipment | Goods that left on a shipment, one entry per line. |
| Shipment voided | The goods coming back when a shipment is voided. |
| Receipt | Goods booked in against a purchase, at their landed cost. Undoing a delivery writes a negative one. |
| Materials consumed | What a production run used. |
| Production output | What a production run made, at what it cost to make. |
| Waste | Material spoiled on a run. It isn't counted as cost of goods sold. |
| Used on a project | Stock taken for a project. |
| Returned from a project | Stock put back from a project. |
| Return | Goods a client sent back (see returns). |
| Stock count | A difference found by a posted stocktake. |
| Revalued | Revalue… on the item's Cost tab restated what's on hand at a new unit cost. It moves value, not quantity. |
| Landed cost restated | A purchase's prices, freight or discount changed after a delivery. It moves the value of what's still on hand from it, with no quantity. |
Every movement also names the location it happened at.
Inventory → Movements is the same ledger for the whole workspace, newest first. Filter it by item, location, reason or date, and it totals what came in, what went out and the net. Members allowed to export data get Export CSV.
The ledger is append-only. A mistake is corrected with another movement, never by editing one, so the figures still add up a year later.
Reversing an adjustment
An adjustment, an opening balance or a stocktake line typed wrong has Reverse beside it, on the item's Movements tab and on Inventory → Movements. It writes a new movement for the same quantity the other way, at the same location and the same value at cost, so the average cost goes back to where it was. The original stays on the ledger with a Reversed badge, and each one can be reversed once. The item's History says what was reversed.
Movements a document wrote, such as a shipment, a delivery or a production run, have no Reverse: undo the shipment, delivery or run instead.
Bins
A bin says where a thing is: A3, top shelf, left, the crate under the bench. Type whatever is written on the shelf. OrderDen trims it and drops
repeats, and a label can be up to 60 characters.
A location is the big place (the studio, the lock-up, the van). The bin is the spot inside it. Most workspaces have one location and use bins for everything.
One thing, several bins
Type several separated by commas, such as ABC, CDG, WER, and the item is in
all three. Typing the list again replaces it: delete a bin to drop it, add one
to the end to add it. Blanks and repeats are dropped, so ABC, abc is one
bin. Up to 20 bins in one place.
Bins have no quantity
OrderDen tells you "175 on hand, in ABC, CDG and WER". It won't tell you "25 in ABC, 50 in CDG, 100 in WER".
Counting per bin would mean naming a bin on every delivery, shipment, production run, adjustment and count, and recording a transfer every time a box moves shelves. That's a warehouse system, and OrderDen isn't one. Bins tell you where to look, and the ledger tells you how many there are.
Setting them
- The inventory list: click the Bin cell, type, press Enter.
- The item page: on the Stock card, on the item's Stock tab.
- The API:
PUT /inventory/bins.
Editing bins needs permission to manage stock, manage the catalog or edit documents. Everyone else sees them read-only.
Clearing the box clears them all. Changing a bin moves no stock and writes no movement, but it goes on the item's history.
Each variant has its own bins. With more than one location, each location keeps
its own, and the list shows them together (Studio: ABC, CDG · Shed: B1).
Filter the list to one location to edit that location's bins.
Finding things by bin
- The inventory list search matches the bin as well as the name, number, SKU and barcode.
- The search bar at the top of every screen matches bins too: type
A3and you get what's in A3. - Show → No bin yet on the inventory list shows everything without a bin.
The Items list search doesn't look at bins.
Where they show up
| Where | What it shows |
|---|---|
| The inventory list | A sortable Bin column, edited in place. |
| The item page | On the Stock card, beside the quantity. |
| Pick lists | Every line's bins. The list is sorted by bin. |
| The packing slip | Only with Print bins on (Company Settings → Documents). It's off by default, because the slip goes to the customer. |
| The API's inventory CSV | A Bin column and a Locations column. |
Pick lists
Pick list on an order prints the sheet you take to the shelves. It's not the packing slip:
| Packing slip | Pick list | |
|---|---|---|
| Who reads it | The customer | You |
| Where it ends up | In the box | On the bench |
| Sorted by | The order's lines | Bin |
| Shows | The gift message, your thank-you note, and prices when Print prices is on | Bin, quantity, and what the shelf should hold |
It lists what's still to go out (ordered, less shipped and canceled), so a part-shipped order isn't picked twice. Lines with no bin go at the bottom, with a count of how many.
Only goods are listed. A deposit, a tip, a late fee or an hour of labor isn't on a shelf.
Locations
A location is a named place you keep stock, such as a workshop, a lock-up or a shelf in a shop that stocks you. Every workspace starts with one, called Main. If you never add another, you never see it: every movement lands there, and the item page shows one row.
Add more in Company Settings → Stock locations, each with a name and optional notes, and rename any of them there. Stock moves between them with an adjustment off one and onto the other: pick the Location on each.
One location is the default. Deliveries, production runs and returns always land on it, and so does an adjustment unless you pick another. Make another the default before you switch the current one off.
Where stock goes out from is chosen when you ship: with more than one location, the Ship from picker on the shipment says which shelf it leaves. An allocation can also name the location it comes off.
When an item's stock is spread over more than one place (or over variants), the Stock card adds a table with each location's on hand, allocated, available and value.
A location that has ever held stock can't be deleted, because the ledger points at it. Switch off takes it out of the pickers and keeps its history. It's refused while the location still holds stock, so nothing is left where you can't reach it: adjust each item off it (or onto another location) first. The location you started with can't be deleted at all.
There's no transfer between locations. When stock moves from one place to another, count both with a one-location stocktake each, or import a count for each location. Reports → Stock by location shows the quantity and value at every location.
Orders and shipments
- Confirming an order sets nothing aside. Ten orders come in and there are five candles on the shelf: you decide who gets them, on the order's Stock allocation card on its Fulfillment tab.
- Allocate sets a quantity aside for one line. Pick where it comes from (Anywhere by default) and press Set aside. Type the quantity the line should end up with, not an amount to add, and clear the box to release it. You can't set aside more than is free (on hand, less other allocations and quarantine) or more than the line still needs. Nothing moves: the stock is still on hand, but nobody else can have it.
- Sending an order back to draft, canceling it, completing it or deleting it releases everything it held. Closing it short, or lowering a line's quantity, releases what the line no longer needs.
- Shipping takes the goods off the shelf (a Shipment movement) and uses up the allocation. Voiding a shipment puts them back, unallocated: whether this order still gets them is your call again.
- Under each tracked line, the order page shows what's available (on hand less allocated) and how far short the line is.
- Shipping is never blocked. Stock can go below zero until you adjust it or goods arrive.
- Block negative stock, on the Stock card in Company Settings → Sales defaults, stops a production run that would take a material below zero. It doesn't stop shipments.
- Items that don't track stock are ignored.
Counting stock
The ledger knows every sale, delivery and production run. It doesn't know about the candle that went home as a sample or the jar that broke in the van. A stocktake finds the difference and records it with a reason.
Inventory → Stocktakes → New stocktake, then pick what to count:
| Scope | What's counted |
|---|---|
| One location | Everything tracked at one location. |
| One category | Items filed directly in that category, wherever they are. Subcategories aren't included. |
| Items with a tag | Everything with that tag. |
| Everything tracked | Every tracked item in the workspace. |
Kits, items with tracking off and inactive variants are never counted.
Freezing what the books say
When you start, OrderDen writes down what the ledger says for each line. Things sell while you count, so the review shows those as movements since the count began ("2 movements since the count started"), not as stock gone missing. Freeze what the books say, now is on by default. Turn it off and the review leaves those notes out.
Counting
The counting screen is built for a phone held at a shelf:
- Search at the top, ready to type.
- Big steppers either side of the number.
- Not found is one tap, for a count of zero.
- Hide counted narrows the list as you go, and a bar shows how far through you are.
Nothing is recorded until you press Save N counts at the bottom. Several people can count at once. The last count saved for a line wins, and the line keeps who saved it and when.
Rest are zero sets everything nobody counted to zero, for the end of a sweep. It's a button, not something posting assumes, because "we never got to the back room" and "the back room is empty" are different answers.
Clear count on a saved line puts it back to not counted, which undoes a Rest are zero pressed too early one line at a time. Remove takes a line off the count, and Find an item to add above the list adds something the scope missed, with what the books say for it now.
Review it moves the count to review. Cancel asks first, then stops the count without changing any stock. The counts are kept, and Pick it back up on a canceled count carries on from where it was, against the same figures it wrote down at the start.
Reviewing, then posting
The review lists the differences, largest by value first. A hundred missing washers matter less than one missing table.
Post the count writes one Stock count movement for each line that differs from what the shelf holds when you post, all at once, with your reason on it.
To correct a posted count, Reverse posting takes every movement it wrote back out at the value it moved at, so on hand goes back to what it was, and returns the count to review with its figures as they were. Fix the line that was wrong and post it again.
The difference is measured against the shelf at the moment you post, not the figure written down when you started. A candle shipped during the count has already left on its own Shipment movement, and counting it again would take it off twice. So a line that matched the books at the start can still post a movement if its stock moved during the count.
A one-location count books at that location. A count by category, tag or everything compares each line with the item's total across every location and books the difference at your default location.
Quarantined stock is counted like anything else, and posting doesn't change how much is in quarantine.
The item page shows when each thing was last counted. Counting one variant marks the whole product as counted.
Where the shrinkage is
Reports → Stocktake variance shows the counts line by line, and per item across a period, so you can see which things keep going missing.
Barcodes and labels
Scanning makes counting, receiving and shipping faster and cuts typing mistakes.
Giving things a code
An item's code is on its Barcodes tab. A variant's is on its row in the Variants tab. Two kinds turn up:
- A supplier's, off the box: a 13-digit EAN-13 or a 12-digit UPC-A. Type it in. OrderDen checks the last digit, which is a checksum, and tells you if you mistyped it.
- Your own, for the things you make. Generate on the Barcodes tab
makes one from the item number, plus the revision if it has one, such as
EO-LAV-200. Anything other than letters, numbers and hyphens becomes a hyphen. The same number always gives the same code, so a label reprinted next year still matches. Generate replaces whatever is in the box, including a supplier's code, once you save.
On the Variants tab, Generate missing barcodes gives each variant
without a code its SKU as its code. To generate codes for the whole catalog at
once, use the API: POST /items/barcodes/generate. It skips anything that
already has a code.
A product sold in variants has no code of its own. Each variant has one.
A code belongs to one thing. Give a second thing a code that's already in use and OrderDen tells you which item has it.
Printing them
The Barcode labels card on an item prints onto either:
| Sheet | |
|---|---|
| Avery 5160 | 30 to a sheet of Letter, 2⅝ × 1 in. The common address label. |
| 2 × 1in thermal | One per page, for a Dymo, Zebra or Brother roll printer. |
Labels already used is for a part-used sheet: enter how many are already peeled off, and printing starts on the next one.
The item's name prints under the bars, and the price too if you tick it. Leave the price off anything a customer sees, or you'll be peeling labels when it changes.
Scanning
Three kinds of scanner work:
- A USB or Bluetooth scanner. It acts as a keyboard: it types the code and presses Enter. Nothing to set up.
- The camera on an Android phone, using the browser's own reader.
- The camera on an iPhone, using a reader OrderDen serves itself. It loads the first time you open the camera.
What a scan does:
| Screen | A scan |
|---|---|
| Counting a stocktake | Adds one to that line. |
| Receiving a purchase | Counts one in against its line, up to what's still outstanding. |
| Shipping an order | Puts one in the box. |
| The item form | Fills the barcode box. |
| The search bar | Finds the item. |
On the counting, receiving and shipping screens, a USB scanner works wherever the cursor is, and the match happens in the browser, so a weak signal in the stockroom doesn't slow it down. On the item form and the search bar, click in the box first, or use the camera.
A code that matches nothing says so.
Counting and the search bar also match a scan against SKUs and item numbers. Receiving and shipping also match SKUs.
Average cost and valuation
The average cost is a weighted average. When stock comes in with a cost, the new average weighs what was on hand at the old average against what came in at its cost. When nothing was on hand, or it had no cost, the incoming cost becomes the average. Stock going out leaves at the average and doesn't change it. Stock coming in without a cost is taken at the average.
Every movement records what it was worth at the time. That's why the inventory valuation and the cost-of-goods statement can be run for any past date. The valuation report adds up those recorded values, with each item's last purchase price beside its average, so you can see where a supplier's price has moved past what your stock is valued at.
Most cost data arrives on its own. Receiving a purchase adds stock at its landed cost, with freight and tax included when the purchase's Carry freight and tax into unit cost box is ticked (it is by default). An item nobody costed by hand takes the average as its unit cost on its first delivery. An item you costed yourself keeps your figure, with the average shown beside it.
Low stock
An item is low when its stock falls to or below its reorder point. By default that's measured against on hand. Measure the reorder point against, on the Stock card in Company Settings → Sales defaults, can switch it to available.
A low item shows:
- a Low stock badge on the Items list and the item page. Stock → Low stock filters the Items list to them. The Items list badge always measures on hand.
- on the Low stock dashboard widget, lowest available first.
- as an open low-stock alert, until stock climbs back above the point. The
alerts are on the API at
GET /stock/alerts.
Changing the reorder point checks the item again right away. Turning tracking off clears its alert.
For a product sold in variants, the alert, the badge and the widget compare the product's total with its reorder point. The Inventory list's Low stock filter compares each variant's row with it, so the two lists can differ.
From an alert to a purchase
Draft purchases for low stock on the Inventory page appears while something is low. It turns every open alert into a draft purchase for each preferred vendor, each line at the price and unit that vendor last charged. Items with no preferred vendor open a New purchase form with those items filled in, for you to pick a vendor.
The suggested quantity is the item's reorder quantity or, without one, the reorder point less what's available (at least one purchase unit). Draft a purchase on an item's Stock card does the same for one item. Both create drafts only. See Vendors & purchasing.
The low-stock email
At 7am in your workspace's timezone (Company Settings → Profile), OrderDen emails the list of low items: number, name, on hand, available, reorder point and reorder quantity, with a link to each. Nothing is sent on a day with nothing low.
It goes only to members who turn on Low stock digest under Personal Settings → Notifications. It's off by default. OrderDen sends it, not your connected mailbox, so it works without one. The bell carries a line for it too, on the days there is something low.
Low stock is also a section of the daily summary email, which has its own setting.
The lists and the reports
Stock shows number, name, bin, on hand, allocated, available and value. Hidden by default: SKU, Short, reorder point, average cost and last counted. Average cost and value show only to members allowed to see costs. Sort by any of them, choose your columns, save a view, and export the list to CSV with the columns you chose.
The Show filter:
| Show | What you get |
|---|---|
| Everything tracked | The whole shelf. |
| Low stock | At or below the reorder point. |
| Oversold | On hand or available below zero. |
| No bin yet | Nothing says where these are. |
| Never counted | No posted stocktake has counted them. |
The Items list has On hand and Available, and, hidden by default, Allocated, Reorder point and Average cost (for members allowed to see costs). Untracked items show a dash. It has no bin column.
Under Reports:
- Inventory valuation: what the stock was worth on any date, with on hand, unit cost, value and last purchase price, totaled by category and by materials and finished goods.
- Stock movements: the ledger over a period, for everything or one item, with what came in, what went out and the net.
- Stock by location: what's where now, with quantity and value at each location.
- Stocktake variance: what the counts found, and which items keep coming up short.
- Production summary and Materials usage: what you made and what it used. See Production.
- Cost of goods sold: what the things you sold cost you, from this ledger. See Tax time.
See Reports. Every report is on the API, as are an item's stock figures, its movements, adjustments, opening stock and the alert list. See the API reference.
Returns and quarantine
Goods come back through a credit note, with its Put the goods back into stock box ticked (it is by default). The goods move when the credit note is issued. For each invoice line you choose what state they came back in:
- Back on the shelf returns them to stock, sellable again. They come in at the cost recorded on the invoice line, or at today's average cost if the line has none.
- Quarantine (not sellable) returns them to stock but keeps them out of available. They count toward on hand and your stock value.
- Scrapped brings nothing back. The credit note records that the goods are gone.
The state is per invoice line. If three of four candles on one line came back fine and one cracked, issue two credit notes.
There's no way in the app to release quarantined stock or write it off, and no
screen shows how much is held. The API does: GET /items/{id}/stock.
Returns show in the item's movements as Return, and in the stock movements report.
Everything on this page is on the free tier: one person, the whole product, no card.
Start free