A second site is not a filter on your catalog. It is a second copy of every part you stock in both places, with its own quantity, its own threshold and its own line in every count.
A second location is a partition, not a filter. The moment you create one, the same part becomes two records with two quantities and two thresholds, and nothing in Stockout moves stock between them for you. Decide the naming, the owner and the move procedure before the second site exists; retrofitting them costs more than setting them up did.
On this page
Creating a location does not filter your catalog. It duplicates the part of the catalog that is stocked in both places, and every duplicate is a separate quantity, a separate Low Stock At, a separate line in every count round, and one more record somebody has to remember to adjust. Start from that cost rather than from the tidiness.
Create the second location if you can answer yes to two or more of these four:
One yes or none, and you can separate the stock with two things that cost nothing. The item's Storage Spot field is free text — "Aisle 1, Shelf A", "Van 4 bin 2" — and the Inventory funnel sheet filters by it alongside Category. Folders are location-scoped named collections that reference items, kits, equipment, checklists, labels, suppliers, customers and work orders without moving or copying anything, and removing an entry never touches the underlying record.
Both have the same ceiling. Storage Spot is unstructured text with no zone or bin hierarchy, and a folder cannot hold a quantity of its own. Two people who both draw from "Van 4 bin 2" are still sharing one number, so the first of them to take six units makes the second one's count wrong. That is the line where a real location starts paying for itself.
One nuance in the other direction: a folder belongs to one location, but the records it references need not. Suppliers and customers are org-wide and label templates are shared across every location, so the same vendor can sit in a "reorder from this vendor" folder at three different sites.
| Symptom | Cheaper fix inside one location | Create a second location when… |
|---|---|---|
| Stock sits in two rooms of one building | A Storage Spot per item | …the rooms are staffed separately and counted separately |
| A van carries stock to jobs | A "Van 4" folder plus Storage Spot | …material is consumed off-site and nobody records it until the van comes back |
| A second branch holds the same parts | Nothing; this is the real case | …always |
| An overflow trailer holds bulk of one SKU | Storage Spot "Trailer 12" | …someone orders against the warehouse number without knowing the trailer is full |
| A job site holds staged material for six weeks | A folder of the staged items | …the job runs long enough that its own low-stock triggers matter |
Every item, kit, piece of equipment, checklist, folder and work order belongs to exactly one location. The same product at two sites is two separate item records with independent quantities and independent thresholds. Nothing joins them except the SKU string you typed into both.
| Scope | What lives there | What that means day to day |
|---|---|---|
| Location-scoped | Items, kits, equipment, checklists, folders, work orders | Two sites means two records; quantities, thresholds and statuses never mix |
| Org-wide | Suppliers and customers | One vendor record serves every site; a contact updated at one site is updated everywhere |
| Shared across all locations | Label templates | One template prints the same way at every site; only the favorite star on a template is per device |
| Per device, not stored on the account | The active location (per device on Windows and Android; not stored at all on the web), alert recipients, bookmarks, the Default Low Stock Threshold | Two people on the same account can be looking at different sites right now |
There is no transfer workflow, no in-transit stock and no single quantity spanning sites that you can edit — a move is two separate adjustments.
Analytics is scoped to whatever the device is set to. On a specific site the charts cover only that site; in All Locations on Windows or Android they aggregate every located record, and a per-item chart tags each bar with the site it came from. A cross-site figure in a browser is something you assemble yourself: switch sites and add, or read the stock-movement ledger through the read-only public API.
And an alert fires for the location its device is set to, so a site nobody's device is pointed at raises nothing at all. That is half the reason to name an owner per site.
Names are load-bearing because the web app does not remember which location you were on: every page load selects the first location alphabetically. Rename a site, or add one that sorts earlier, and you have silently changed where every web user lands.
Six rules:
| Kind of site | Name pattern | Example | Why |
|---|---|---|---|
| Primary fixed site | 01 + name | 01 Main Warehouse | Sorts first, so it is what the web picks on a cold load |
| Second fixed site | 0x + name | 02 North Yard | Room for seven more once 00 is held in reserve |
| Vehicle | 2x Van or Truck + number | 20 Van 04 | The vehicle number outlives the driver |
| Trailer or container | 3x + asset number | 30 Trailer 12 | Matches the number painted on the unit |
| Job site | 4x + job number + short street | 40 Job 2214 Mercer St | Sorts by job number; the street keeps the chip readable |
Job sites need an end state decided on day one, because deleting a location permanently removes every item, kit, piece of equipment and checklist at that site. Settle in advance whether a finished job's leftovers come back to a fixed site — two adjustments, per the procedure below — before anybody deletes anything. You also cannot delete your last remaining location.
The awkward part is that there is no archive for a location. A closed job site either sits in the picker forever or is deleted along with its contents. Empty it first, then delete it.
"Warehouse" and "warehouse 2" — inconsistent case, and no room to grow. "Dave's Van" — Dave leaves. "North" and "North Yard" — nobody can tell which is which on a phone-width chip.
The two records that represent one part at two sites are joined by nothing except the SKU string you type. Keep that string identical everywhere. It is the whole rule, and most of the cross-site reporting problems downstream are a violation of it.
This is not tidiness. A scan looks the item up by SKU and adds or removes stock in one tap. Suffix the SKU per site — FL-220-NORTH — and a scan of the printed FL-220 code matches nothing at that site, at which point Stockout offers "Create New Item" with the SKU pre-filled. One part now has three records.
Put the site somewhere else. The location already partitions the record, so a site code on the SKU is redundant; if people need it on paper it belongs in Storage Spot or in the item name. An item can also carry several SKUs or barcodes, and a scan or search matches any of them, which is the right home for a supplier's alternate code rather than for a per-site variant.
Print the same thing at every site: a label's code encodes either the item's SKU or its Name, templates are shared team-wide, and which code to print and what to encode on it is a decision worth making once.
Changing a SKU breaks the link to any tag already written, so a rename is a re-tag at every site that holds the part.
Cross-site totals are your arithmetic, not the app's. Switch to each site, read the quantity for that SKU, add them up. Or pull the stock-movement ledger through the public API and group by SKU in your own sheet — it is GET and HEAD only, and a key reads the whole org rather than one site.
There is no transfer workflow. A move is two independent adjustments: remove at the source, switch the device's active location, add at the destination. Nothing links the two halves, no reference number joins them, and nothing in the product ever confirms that the stock arrived.
Do it in this order, and finish it the same day.
Never split the halves across days, and never let two people do one half each. Nothing reconciles them, so an unfinished move stays invisible until a count trips over it. A move that genuinely takes days is the one exception: remove on dispatch, add on arrival, and keep the in-flight quantity written down outside the app, because the org total is understated until it lands.
You cannot label the pair either. Movement reasons are fixed strings the app writes itself, and they are never read back for reporting, so there is no way to mark two adjustments as one transfer. If a move needs paperwork, that paperwork lives outside Stockout: a note, a photo of the pallet, a line on the job sheet.
An adjustment can never take quantity below zero — it stops at zero. Remove more than the recorded quantity and the movement quietly under-records the move.
On the web, editing a quantity in the item editor writes no stock movement and raises no alert. Only the ± Adjust path does. Use Adjust for both halves.
Kits are location-scoped too, and Make deducts component stock at the site you are on. There is no way to move "a kit" — move its components as items and rebuild at the destination.
| What went wrong | What the numbers look like | How you find it | The fix |
|---|---|---|---|
| Removed, never added | Destination understated; org total short | The destination counts over at the next count round | Add the quantity at the destination; do not also re-remove at the source |
| Added, never removed | Source overstated; org total inflated | The source counts short, and its low-stock trigger fires late or not at all | Remove the quantity at the source |
| Both halves, wrong destination site | One site over, another under, total correct | Two offsetting variances in the same week | Remove at the wrong site and add at the right one |
| Quantity typed differently in each half | Total off by the difference | Neither count looks dramatic, so it survives for months | Recount both sites and Adjust each record by the difference — the quantity field in the editor records nothing on the web |
The Windows and Android apps store the active location per device, so two people signed into the same account can be looking at different sites right now, and nobody is told when a teammate switches. Changes reach other devices within seconds, and when two people change the same field at once, the last change saved wins, and only changed fields sync — which matters most when two people are adjusting the same item at the same site.
The web app does not store the active location at all. Every page load selects the first location alphabetically, so a web user who refreshes, opens a second tab, or comes back after the session reloads is on the first site by name whatever they were on before — and the next ± Adjust writes there.
There is no setting that makes the web app remember your site, and no warning when it changes underneath you. The location chip is the only signal, and it is worth checking again after every reload.
Read the location chip before any adjustment in the browser, complete both halves of a move without reloading, and name sites so that landing on the wrong one is obvious at a glance.
Alerts follow the same per-device setting, so it also decides which site's Low Stock and Out of Stock emails you receive. Recipients are a comma-separated list saved per device or browser and they do not sync, so setting it once for the team is not something you can do — every device that should be watching a site has to be set to that site and carry its own recipient list.
You cannot pin a user to a site, there is no per-location permission, and no setting makes the browser remember. The discipline is the control.
All Locations is a read-only aggregate in the Windows and Android apps. It appears in the location picker only once the org has more than one location, and it does not exist in the web app at all. What it shows is every site's records listed together — a part stocked at three sites is three cards with three quantities, not one summed figure.
You cannot adjust, scan, count or make a kit from it — switch to a specific site to change anything.
Alerts do not fire at all while a device sits in All Locations. A phone parked there is a phone that raises nothing.
The aggregate excludes any item with no location assigned, so the view is quietly incomplete until they are given one.
So whoever holds the alert device for a site leaves that device on that site: look at All Locations from a second device, or look and then deliberately switch back.
Roles are org-wide, not per site. Every role, including Viewer, can switch between locations; only Owners and Admins can add, edit or delete one. There is no per-location permission and no way to restrict a user to one site, so plan around it rather than assuming a setting exists. Roles are enforced server-side, but what they enforce is what you can do, never where you can do it.
Anyone with write permission can adjust stock at any site, including one they have never visited, and an API key reads the whole org rather than one location.
Ownership therefore has to be a written rule. Name one person per site who is accountable for its count, and write it where the team already looks — a checklist name, a folder name, the shift board. Stockout stores no per-site assignment.
The only names the product captures are typed as free text at the moment of the action: the employee first and last name on a completed checklist run, and the same on an equipment check-out. Stock movements carry no user at all, so nothing tells you who adjusted a quantity at which site.
| Action | Owner | Admin | User | Viewer |
|---|---|---|---|---|
| Switch to any location | Yes | Yes | Yes | Yes |
| Add, edit or delete a location | Yes | Yes | No | No |
| Adjust stock at any site | Yes | Yes | Yes | No |
The rest of the permission map is on Roles & Permissions.
Count each site on its own cadence, and measure each site's accuracy on its own. A combined accuracy figure hides the one site that is wrong, and since totals never mix inside the product there is no reason to mix them in the reporting.
Set the cadence by how fast a site's record decays, not by how big the site is. A van whose stock is consumed off-site by one person decays fastest and is smallest, so count it whole, weekly. A fixed warehouse decays slowly per item and is large, so drip it daily.
Do the arithmetic per site and round up per site. Pooling 240 records at Main and 90 at North over 65 count days gives 5.1 lines a day and hides which site is falling behind; 4 at Main plus 2 at North is the same 6 lines and stays attributable. The method is unchanged from a single site — see how to run the count program.
| Site | Records | Cadence | Who counts |
|---|---|---|---|
| 01 Main Warehouse | 240 | 4 lines every count day | Site lead |
| 02 North Yard | 90 | 2 lines every count day | Yard foreman |
| 20 Van 04 | 45 | The whole van, weekly | The driver, Friday afternoon |
| 40 Job 2214 | 30 | Start and close-out only | Job supervisor |
Two people counting the same site in the same week produce offsetting corrections that read as noise, and when two people change the same field at once, the last change saved wins, and only changed fields sync. One name against each site is the fix.
Job sites are the exception: count at the start and at close-out rather than on a cycle. The close-out count is what tells you how much comes back as a two-adjustment move before the location is deleted.
Two records means two Low Stock At values, and they are almost never the same number. A site's trigger depends on that site's own usage and on how long that site takes to be replenished — and for a satellite, that is the drive from the main warehouse, not the supplier's lead time. A site that replenishes another has to count that draw in its own usage figure: the hub's rate is what leaves the hub, not what the hub consumes.
Work the number out per record, then type it in. Stockout does not compute a reorder point, has no safety-stock or lead-time field, and holds exactly one reorder-ish input: the per-item threshold. Enter it as a fixed number in # mode rather than as a percentage, because a percentage is a percentage of that item's Max Capacity and resolves to zero when no Max Capacity is set. Deriving the trigger number is arithmetic you do once per record and revisit when usage moves.
Copying one number to every site fails in both directions. A warehouse trigger applied to a small satellite can sit above what the satellite physically holds, and because Low Stock is evaluated before Max Capacity that record reads Low even when the shelf is full. A satellite trigger applied to the warehouse fires far too late. The worked example below puts numbers on both.
The per-device settings compound it. Settings carries a Default Low Stock Threshold applied to newly created items — it defaults to 5 and is stored per device, not synced — so an item created at a new site on somebody's phone sits on 5 until the real number is entered. Put "set the threshold" on the new-site checklist.
Alerts are edge-triggered: one alert at the moment a change newly crosses a threshold, no re-alert on an item already low, no scheduled digest. Combined with per-device recipients and a per-device active location, a site is only covered when a specific device is set to it, has the alert types switched on, and carries its own recipient list. The habits that get an alert to arrive in time are the subject of preventing stockouts.
Consumption on a van happens where nobody can see the shelf, so the whole model rests on one habit: the person who takes the part records it, at the site it came from, at the moment they take it.
Scanning is the shortest path to that habit, with one hard platform limit. The camera reader is the Android app only; Windows and the browser use a USB or Bluetooth reader in keyboard-wedge mode, which is fine on a bench and useless in a van. The scan buttons sit in the footer of the Inventory screen, and they are hidden for Viewers.
RFID is NFC on an Android phone, one tag at a time — workable for a van's fixed kit, useless for a walk-past count. Which code to print, and what to encode on it covers the choice.
A van's replenishment list is that site's Low tile: tap it and the list filters to everything that has crossed. Photograph it or write it down before the restock run, because there is no report to send.
Work orders are location-scoped and auto-numbered from WO-1001, and using a material line deducts stock at that site and logs a movement tagged with the WO number, with the material's cost and price snapshotted when it was added. If the job is its own location, raise the work order at the job location so the materials pull from the staged stock rather than from the warehouse.
At close-out, count what is left, bring it back as a two-adjustment move, and only then delete the location — deleting it removes every item, kit, piece of equipment and checklist there.
| Moment | Action | Where | Minimum role |
|---|---|---|---|
| Load the van | Two adjustments: remove at 01, add at 20 | Both sites, same day | User |
| Consume on the job | Scan remove, or Adjust at the van site | 20 Van 04 | User |
| Weekly restock list | Tap the Low tile at the van site | 20 Van 04 | Viewer |
| Job close-out | Count, then two adjustments back to 01 | Both sites | User |
| Retire the job site | Delete the location once it is empty | Locations screen | Owner or Admin |
A brand-new account has to create its first location before it can use the app at all, so step 2 below is also the very first thing a new team does. For everyone else it is the second site, and the order matters.
A backup is org-wide, not per location: one file covers every site, includes the locations themselves, and a restore writes each row back at its original location. It covers 15 tables, including the child rows most lists forget — kit components, supplier contacts, item-supplier links, work-order materials and folder entries — though not activity logs or stock movements, and the file only restores into the account that created it.
Restore marks every row it writes as not deleted, so restoring an older backup brings back records the team deleted after that backup was taken — locations and their contents included. Nothing is removed to compensate.
Two org-wide destructive actions deserve a wide berth in a multi-site setup. Reset to Sample Data and Clear Data both wipe every label template across the whole organization, and Reset also wipes all suppliers, supplier contacts, item-supplier links and customers org-wide — not only the current location's data. All four of Backup, Restore, Reset and Clear write to the shared cloud, so they affect the whole team rather than the device that ran them.
There is no bulk load. The only two ways bulk data enters Stockout are Reset to Sample Data and restoring a backup JSON made by the same account. Everything else is typed into an editor or created from a scan — and when a scanned code matches nothing, Stockout offers "Create New Item" with the SKU pre-filled, or "Add to Existing Item".
The naming and the move procedure are yours. This is the part the app carries.
Ten checks, about half an hour in total.
Nothing in Stockout reconciles two sites for you, so this routine is the reconciliation. A month is short enough that a missed half-move is still explainable, and long enough that the habit survives a busy week. The counting, the thresholds and the labels that each site depends on run through the rest of the series.
There is no transfer workflow, no in-transit stock and no single quantity spanning sites. A move is two independent adjustments: remove the quantity at the source site, switch the device's active location, then add the same quantity at the destination. Nothing links the two halves — no shared reference, no reconciliation — and nothing in the product ever confirms that the stock arrived. Do both halves the same day, from the same device, and read the new quantity back off the card after each one. Movement reasons are fixed strings the app writes itself, so you cannot tag the pair as a transfer; if a move needs paperwork, that paperwork lives outside Stockout.
Not on the item. Every item, kit, piece of equipment, checklist, folder and work order belongs to exactly one location, so the same product at two sites is two separate records with independent quantities and thresholds. The Windows and Android apps offer All Locations in the location picker once the org has more than one site — a read-only combined list of every site's records — but you cannot adjust, scan or count from it, alerts do not fire at all while a device sits in it, and it excludes any item with no location assigned. It does not exist in the web app. A cross-site figure for one SKU is your own arithmetic: read the quantity at each site and add, or pull the stock-movement ledger through the read-only public API.
No. Roles are Owner, Admin, User and Viewer, and they apply across the whole organization. Every role, including Viewer, can switch to any location. Only Owners and Admins can add, edit or delete a location; Users and Viewers cannot. There is no per-location permission, no site-scoped role and no site-scoped API key — a key reads the whole org. If one person should own the count at one site, that is a written rule on your shift board, not something the app enforces. What Stockout does capture is the free-text employee name typed at the time on a checklist run or an equipment check-out; stock movements carry no user at all.
Start with the mechanism. The Windows and Android apps store the active location per device, so two people on the same account can be looking at different sites right now. The web app does not store it at all — every page load selects the first location alphabetically, so a refresh can silently move a web user to a different site before their next adjustment. Three controls: name sites with a zero-padded prefix so the one you want people to land on sorts first and a wrong chip is obvious at a glance; read the location chip before every adjustment on the web, and again after any reload; and complete both halves of a move without reloading the page.
A backup is org-wide. One file covers every site, includes the locations themselves, and a restore writes each row back at its original location. It covers 15 tables, including the child rows that are easy to forget — kit components, supplier contacts, item-supplier links, work-order materials and folder entries — but not activity logs or stock movements, and the file only restores into the account that created it. Backup is available to every role, including Viewer; Restore, Reset to Sample Data and Clear Data are Owner/Admin only. One warning: a restore marks every row it writes as not deleted, so restoring an older backup brings back records the team deleted after it was taken, and nothing is removed to compensate. It is not a way to roll one site back.
Make it a location when material is consumed off-site and nobody records it until the van returns, or when the van needs its own low-stock trigger. Below that, a free-text Storage Spot on the item plus a folder is cheaper and loses nothing. The cost of the decision is real: a van carrying 45 of your 240 SKUs means 285 item records, 45 more thresholds to calculate, and about half an hour a week to count the van in full at 40 seconds a line. The benefit is that the van's own Low tile becomes the restock list, and that the warehouse number stops including stock that physically left the building. Recording consumption on the van in the moment is the part that makes it work — on Android that means the camera scanner in the Inventory footer; the browser and Windows need a USB or Bluetooth reader in keyboard-wedge mode.
Every item, kit and checklist belongs to one location, switching the active location filters the whole view to that site, and one backup file covers them all.