Warehouse Operations
Set up your warehouses and bin locations, then keep on-hand numbers honest — counting stock, reconciling what you find, and moving inventory between locations without losing the trail.
Who this is for
Warehouse managers and operations staff. Receiving deliveries against a purchase order is covered in Purchasing & Receiving.
What you'll have when you're done
Stock organized into bins you can actually pick from, a repeatable counting process, and on-hand figures you'd be willing to publish to a sales channel without checking first.
How Foundry models a warehouse
Three levels, and it's worth being precise about them because the counting workflow depends on it:
Warehouse
A physical location holding stock. You can have as many as you need. A warehouse can also represent a dropshipper — a vendor location whose stock you sell but never hold. Sales channels can be linked to specific warehouses, so a channel only sells what's available where it can ship from.
Bin
A named location inside a warehouse — a rack, shelf, or pallet position. Names are unique within a warehouse, so "A-01-3" can exist in two buildings without ambiguity. Bins are optional: if you don't use them, stock simply sits at the warehouse level.
Stock item
The intersection — one SKU, in one warehouse, in one bin. This is what actually holds numbers:
- • On hand — physically present
- • Reserved — spoken for by orders, still on the shelf
- • Inbound — expected from open purchase orders
- • Min / max — your reorder thresholds
Because the bin is part of that identity, one SKU can live in several bins at once and each holds its own quantity. Available to sell is on-hand minus reserved — which is why an item can show stock and still be unsellable.
Set up warehouses and bins
Create the warehouse
From Warehouses → New, give it a name and address. Mark it as a dropshipper if it represents a vendor location rather than a building you control.
Decide your bin naming scheme first
Do this before creating any — renaming bins after stock is in them is tedious. A scheme that sorts correctly and reads unambiguously on a printed sheet:
- •
A-01-3— aisle, bay, level - • Pad numbers:
01, not1, so sorting matches walking order - • Avoid characters that read alike —
Ovs0,Ivs1
Add the bins
Create them on the warehouse's Bins tab. You don't need every bin up front — the count workflow can create unknown bins for you as they appear on a count sheet.
Run a stock count
The core loop: export a count sheet, count the shelves, upload it, review the differences, apply. Nothing changes until you approve it.
Step 1 — Export the count template
From the warehouse's Inventory tab, export the count template. You get a CSV with these columns:
| Column | What it's for |
|---|---|
sku | The match key on re-import. Don't edit it. |
internalSku | Your own SKU, so counters can identify the item |
product, variant | Names, for the person holding the sheet |
bin | Where Foundry thinks it is |
currentOnHand | What Foundry believes you have |
counted | Blank — this is the column you fill in |
A SKU stored in three bins gets three rows, one per bin. Items never stocked here appear once at zero, so a surprise find still has somewhere to go.
Choose your scope: all items, or only what's already stocked in this warehouse. Full scope for a wall-to-wall count; stocked-only for a faster cycle count.
Step 2 — Count
Fill in counted for every row you actually check. Leave it blank for anything you didn't count — blank means "not counted" and is ignored, whereas a zero means "I looked and there were none," which will write a difference. That distinction is the single most common source of accidental stock wipes.
Step 3 — Preview
Upload the sheet. Foundry shows you a line-by-line diff before touching anything — current on-hand, what you counted, and the delta. It also flags:
- • Unknown SKUs — flagged as errors so a typo can't create phantom stock
- • Unknown bins — offered as new bins you can opt into creating
Read the large deltas before applying. A count that says a fast-moving SKU dropped by 400 is usually a counting error, not a theft.
Step 4 — Apply
Applying writes the new on-hand figures and records a count movement for every change. Nothing is silently overwritten — each adjustment is attributable afterwards, which is what makes the count defensible in an audit.
The spreadsheet trap
Excel and Google Sheets will silently mangle identifiers if you let them. A bin called 0123 becomes 123; an all-numeric SKU loses its leading zeros. On re-import those no longer match — the count lands in a brand-new bin, or fails outright.
Foundry defends against this: identifier columns are exported wrapped so spreadsheets treat them as text, and the importer strips the wrapper on the way back in. So the round trip is safe if you edit the file as exported.
It breaks if you retype the SKU or bin columns by hand, paste values between sheets, or rebuild the file from scratch. If you must, format those columns as Text first. When a count preview shows bins you know exist as "new," this is almost always why.
Adjustments, moves, and transfers
Three different operations that people often conflate. Picking the right one keeps your history readable:
Adjustment — the quantity changed
Damage, shrinkage, samples, a found box. Stock enters or leaves your business. Always attach a reason; six months on it's the only thing that explains the number.
Move — same warehouse, different bin
Reslotting. Total on-hand doesn't change, so it never affects what's sellable. Use this rather than adjusting one bin down and another up, which looks like shrinkage plus a mystery gain in your history.
Transfer — between warehouses
Records a transfer out of the source and a transfer in at the destination, as a matched pair. Availability changes at both ends, which matters if your channels are linked to specific warehouses.
Every one of these writes a movement. The variant's movement history is the answer to "why is this number what it is" — receipts, sales, counts, builds, and transfers, in order.
Common problems
Bins aren't showing on my inventory screen
Usually the stock genuinely has no bin assigned — it sits at warehouse level, which is valid and displays as blank. Assign bins by exporting the count template, filling in the bin column alongside the counts, and applying. A normal catalog import can't set bin locations; the count workflow is the route.
A count wiped stock I didn't intend to touch
Zeros were entered where the count column should have been left blank — often from filling down a formula, or a spreadsheet replacing blanks with 0 on export. Blank means "not counted"; zero means "counted, none there." Re-count the affected items and apply a correcting count; the movement history shows exactly what the bad count changed.
Preview says bins are new, but they exist
A spreadsheet reformatted the bin column — see the spreadsheet trap above. Re-export, edit only the counted column, and try again rather than accepting the new bins.
On-hand looks right but the channel shows less
Reserved quantity is doing its job — those units are committed to orders. Available is on-hand minus reserved. If reserved looks too high, there are open orders holding stock that may need cancelling or fulfilling.
Same SKU in several bins and the totals confuse people
That's the design — each bin holds its own quantity and the variant total is their sum. When counting, make sure each bin row gets its own count. Putting the full building total on one row and leaving the others blank will look like a large gain in one bin.
Next
- • Purchasing & Receiving — getting stock in the door in the first place
- • Order Fulfillment — picking, shipping, and reservations
- • ShipStation — label buying and tracking back into Foundry
- • Partner API — read stock levels and post adjustments programmatically