Skip to content

Local items

Some of what sits on your shelves was never a Shopify product. A drum of resin, a half-built sub-assembly waiting for its final step, a one-off item made for a single customer — real, countable, pickable goods that your storefront has never heard of.

Item setup and recovery is where those live: on Inventory → Stock, open More stock actions. They come from Logistified and Assemblified, they behave like any other stock inside Floormode, and exactly one thing is different about them: nothing about them is ever pushed to Shopify.

  • What a local item is
  • Where they come from
  • How to recognise one
  • What you can do with them
  • The supply outlook covers them too
  • The one rule: every unit always has a place
  • The Unplaced items worklist
  • When an item is blocked
  • See also

A local itemLocal itemA good you stock and move in Floormode that does not exist on Shopify — an Assemblified raw material or sub-assembly, or a Logistified custom item — recognisable by an id starting `VMAT-`, `ASM-` or `CSTM-`. Read more → is a good that Floormode stocks on behalf of a sibling app, because the sibling has no warehouse of its own and Shopify has no product for it.

There are three kinds, and the app they belong to is shown on every row:

KindBelongs toWhat it usually is
Raw materialAssemblified (raw material)An input to a build — sheet stock, fasteners, fluid, packaging components
Sub-assemblyAssemblified (sub-assembly)Something you build in order to build something else, and never sell on its own
Custom itemLogistified (custom item)A purchased good with no storefront listing — tooling, consumables, a bespoke order

They are ordinary stock in every way that matters on the floor. They have a title, a SKU, binsBinA specific place stock sits. Every bin has a type — receiving, quality check, quarantine, bulk, pick, packing, staging or returns — which tells the app how to treat what is in it. Read more → , a quantity, a movement history and a place in a pick list.

You do not create local items, and you cannot. They are synced automatically from the connected app that owns them: Assemblified sends its materials and sub-assemblies, Logistified sends its custom items, and each keeps its own catalogue.

That sync only runs while the connection is active. With nothing connected, there are no local items at all — the tab is empty and stays empty. See Standalone.

Two signals, and both are always present:

  • The id prefix. Local ids begin VMAT- (raw material), ASM- (sub-assembly) or CSTM- (custom item). The prefixes are exact and case-sensitive — an ordinary SKU that happens to start with the letters “vmat” is not a local item.
  • The “Not on Shopify” badge. Every screen that can show a local item shows this badge beside it: the stock list, the item detail, pick lines, receiving lines, count sheets. Hovering it says which app the goods are held for.

The badge exists because a local item is otherwise indistinguishable from a Shopify variant, and the difference is invisible: it will never appear in your storefront, your Shopify inventory screen or a Shopify report. That is not something you should have to deduce from a number that does not add up.

Almost everything. Local items are first-class stock:

Local items
Receive against an expected deliveryYes
Put awayPutawayMoving received goods from the receiving area to the bin they belong in. With the receiving policy **Straight to a shelf** it happens during receiving; with a dock policy a put-away task follows the receipt (after the inspection, where the policy inspects). A work order's finished goods that Floormode books onto the workbench bin `WO-STAGE-01` get a put-away task too; an output that needs the receiver (serial numbers, or a date Floormode cannot work out) is received on its receipt instead. Read more → into a binYes
Pick — including production picksProduction pickPicking a work order's components to a staging bin so they are ready to be built, rather than picking finished goods for a customer. Read more → for a work orderYes
Cycle countCycle countCounting a few bins at a time, continuously through the year, instead of shutting the warehouse for an annual stocktake. Read more → , with variances and approvalYes
Adjust with a reason codeYes
Move bin to binYes
Count towards available to promiseAvailable to promiseWhat you can genuinely commit to a customer right now, taking existing reservations into account. Floormode spells this out rather than using the industry abbreviation. Read more → Yes
Show supplier stock and quantities on orderYes
Appear in the stock ledger and movement historyYes
Push a quantity to ShopifyNever

That last row is the whole exception, and it is a refusal rather than an omission: the Shopify push is blocked for local items at the point where it would happen, so no configuration, no setting and no future connection can cause one to leak into your storefront’s inventory. There is no Shopify number for them to be the single writer of.

One smaller exclusion follows from the same fact:

  • Counts of local items are not exported to Logistified. An approved cycle countCycle countCounting a few bins at a time, continuously through the year, instead of shutting the warehouse for an annual stocktake. Read more → still corrects your bins here; it just is not copied into the sibling’s stock-take records, which only track Shopify goods.

Open a local item and its available to promiseAvailable to promiseWhat you can genuinely commit to a customer right now, taking existing reservations into account. Floormode spells this out rather than using the industry abbreviation. Read more → breakdown carries the same two forward-looking figures a Shopify variant has — supplier, what a supplier is holding for you but has not shipped, and on order, what is on an open purchase order. Both come from Logistified, which knows what it has bought for a raw material just as it does for a sku.

Three things to know about those two numbers on a local item:

  • They are display truth, never stock. Nothing about them puts a unit in a bin, and they are shown separately from on hand and incoming rather than added to anything.
  • The owning app has to have introduced the item first. A supply figure for something Floormode has never received a catalogue record for is not shown and does not create the item — a forecast may not invent a good you could then receive against. It appears once the record arrives.
  • A handed-back item stops showing them. After a handoverHandbackThe controlled exit taken when a connection is switched off: Floormode freezes the local stock, sends the exact quantities back to the owning app, and only releases them once that app confirms it has them. Read more → the figures go blank rather than to zero, because Floormode is no longer the app that speaks for those goods.

If nothing has ever been sent, both figures read as unknown rather than zero — the same honest blank a shop with no Logistified sees.

The one rule: every unit always has a place

Section titled “The one rule: every unit always has a place”

Local items obey a rule that Shopify variants do not need:

Every unit of a local item is in a bin. Always. From the first one.

Shopify tells Floormode how many of a variant exist, so a variant can have a quantity before anyone has decided where it lives. A local item has no such outside source — the only record of how many there are is the one you make. So the app refuses to let a local item hold a quantity that is not in a specific bin, because a floating number nobody can walk to is exactly the number that goes wrong.

The consequence is the worklist below.

When a connection is first made, everything the owning app already holds arrives as a claim — a statement that the thing exists, with no quantity attached. Claims appear at the top of the Local items tab under a banner counting how many still need a location.

Items the sibling introduces later, after that first sync has finished, are new by definition: they have no history and nothing on your shelf, so they skip the worklist and become ordinary empty stock immediately. The worklist is an opening exercise, not a permanent queue.

Placing an item is exactly the first-install setup you already know: go and look, then type what is there.

  1. Find the item on the worklist. Its columns are Item, Belongs to, On hand and Place into.

  2. Go and count what is actually on the shelf. The On hand column is blank, and that is not a display fault — the owning app has never had a warehouse, so it has no quantity to send. The number is yours to establish.

  3. Type the quantity and the bin code, then press Place.

  4. The row clears. The quantity is posted into that bin as an opening movement, the item becomes ordinary stock, and the owning app is sent the resulting figure so both sides start from the same number.

Four details worth knowing before someone hits them:

  • A quantity above zero needs a bin. There is no “place it somewhere and sort it out later” — that is the rule above, enforced.
  • Zero is a real answer. Entering 0 means “I looked, there are none”. It closes the claim, posts no movement, and the item becomes ordinary stock with nothing in it — ready to be received into normally. Use it rather than leaving the row open.
  • Placing is the only way to clear a row. An adjustment cannot onboard an item, and while a claim is open adjustments are refused anyway. (A first-install CSV import counts as placing, so the two can never disagree.)
  • You can place before going live. Placing opening quantities is allowed as soon as the per-location agreement has been prepared, before it is committed — so the opening count can be done in advance rather than on the morning of the switchover. It is the one flow permitted in that window; everything else waits for the commit.

Work through the list the way you would an opening stocktake: it is finite, and once a row is cleared it never comes back.

Besides being unplaced, a local item can carry one of three badges explaining why it will not move:

BadgeWhat it meansWhat to do
Waiting for detailsThe app that owns this item has not sent its details yet. It unlocks by itself once they arrive.
RetiredThe owning app retired this item. What is on the shelf can still be picked or moved out; nothing new is received.
Handed backThis stock went back to its app when the connection was switched off. The history stays; the stock cannot move.

A fourth case freezes every item of one app at once rather than a single row. While a handbackHandbackThe controlled exit taken when a connection is switched off: Floormode freezes the local stock, sends the exact quantities back to the owning app, and only releases them once that app confirms it has them. Read more → is in progress the page carries a banner — “Stock is being handed back” — and nothing for that app can be received, picked, counted or adjusted until the other side confirms it has taken the quantities back. That is covered under Activation.

Beyond the item itself, local stock also needs the connection to be on and the per-location agreement to cover the location you are standing in. If a flow is refused for either reason the message says which, and the refusal is always explicit — a blocked pick is reported as a blocked pick, never as a successful pick of nothing. The health panel shows the current state for both siblings under Local stock (not on Shopify).