Types of count
A count's type decides two things: which items it lists, and what happens to an item on that list that nobody counted. Everything else — counting, submitting, the stock correction — works the same way for every type.
The four types
| Type | Used for | Item list | An item on the list that nobody counted |
|---|---|---|---|
FULL | the whole store, typically once or twice a year | every item in the store's assortment that is worth counting — see below | set to 0 |
CYCLE | one part of the store — a category, a brand, a supplier — often on a rotating schedule | the items matching the count's saved searches, narrowed the same way | set to 0 if mandatory, left alone if optional |
CONTROL | checking a few items, whenever someone doubts a figure | none — staff count whatever they choose | there is no list, so nothing is set to 0 |
TEST | training | like a cycle count if it has saved searches, otherwise none | a test count is never published and never changes stock |
Rules the API enforces when a count is created:
- a
FULLorCONTROLcount takes no filters — a full count is scoped by the assortment, a control count by what staff choose to count; - a
CYCLEcount needs at least one saved search or search query — or aNEGATIVE_STOCKstock-state filter, which on its own is a complete scope: every item in the store with negative stock; - the start date is today or later, and a due date is not before the start date.
In the Hii Retail Inventory app, staff create full counts and carry out full and cycle counts; cycle counts are created by head office or generated from a recurring definition. Control counting in the app is the quick count. Test counts are created through the API.
Purpose-built counts
These are ordinary counts of one of the four types, created through a dedicated endpoint that fills in the item list for a specific purpose.
Quick count
One item, counted now, submitted at once. Staff scan an item anywhere in the store, register what they
find in one or more locations, and the count is created, completed and published in a single step. It
is recorded as a CONTROL count, so it lists nothing else and sets nothing else to 0.
A quick count records at least one unit per location. To record that an item is missing altogether, register a line of 0 in a count that lists the item.
POST /business-units/{businessUnitId}/stock-counts:quick-count
Items not counted this year
A CYCLE (or TEST) count of every item that has moved this calendar year but has not been counted
this calendar year — the usual way to make sure nothing escapes a year of cycle counting. No saved
search is involved: the list is taken straight from the stock information. Every item on it is
mandatory. The calendar year is the UTC year.
POST /business-units/{businessUnitId}/stock-counts:items-not-counted
Imported list
A count whose item list the caller supplies, item by item, with a mandatory flag per item
(mandatory unless stated otherwise). It is a CYCLE count unless created as TEST. The list is taken
as given: it is not narrowed by the stock information and it is not checked against other open counts.
Use it when the decision about what to count is made in another system.
POST /business-units/{businessUnitId}/stock-counts/{stockCountId}/import
Suspicious items
A CYCLE count generated automatically for a store, of the items whose stock figure looks wrong:
- items whose sales have slowed sharply — sold over the last three days at less than a set fraction of their usual pace, which often means they are missing from the shelf while the system believes they are there;
- items with negative stock.
The items come from STP's suspicious items report. Items counted within a set number of weeks are left out, so a store is not asked to recount what it has just counted. The count is generated at 03:00 UTC on a configured weekday, every few weeks, and only for stores where it is switched on — see Configuration.
Recurring counts
Counts generated automatically, on a schedule, for a store, a group of stores or the whole tenant. See Recurring counts.
How the item list is built
For full and cycle counts — including those a recurring definition generates — Stock Count builds the list in the background, in this order. An item has to pass every step.
1. It is a candidate. For a full count: the store's assortment in
Product, Price and Promotion
(PnP). For a cycle count: the items matching each of the count's saved searches or search queries — or,
for a cycle count scoped only by NEGATIVE_STOCK, every item the store holds stock information for. A
saved search is a search selection saved in PnP; a search query is the same kind of search written out
directly.
2. STP has stock information for it. Only items that Stock Transaction Processing has held sellable stock of can be listed. An item that has never been received, sold or counted in the store is not listed — not even in a full count. See Stock ownership.
3. It is worth counting. The item holds stock (a positive or a negative quantity), or it has moved since it was last counted, or it has never been counted. An item at zero that has not moved since its last count is settled — there is nothing new to find — and it is left out. This rule applies to every count, full ones included, and no filter can override it.
4. It passes the count's stock-state filters, if it has any — see below.
5. No other open count in the store already lists it. An item is in at most one open count per store at a time, so two counts never ask for the same item. An item becomes available again once the count holding it is completed or deleted. Which of several counts created together gets a shared item is described under Recurring counts.
A count created for today is prepared straight away; one that starts later is prepared on its start date. While a count is open its list is refreshed every night at 01:00 UTC, so items that begin to qualify — a new delivery, a count elsewhere that has finished — are added. Items are never removed from an open count's list.
Stock-state filters
Steps 1 to 3 decide what can be counted. Stock-state filters narrow the list further by what has happened to each item:
| Filter | Selects | Window |
|---|---|---|
MOVED_SINCE | items whose stock moved within the window | required: SINCE_LAST_COUNT, YEAR_TO_DATE or FIXED_DAYS |
NOT_COUNTED_SINCE | items not counted within the window — including items never counted | required: YEAR_TO_DATE or FIXED_DAYS |
NEGATIVE_STOCK | items whose stock is below zero | none |
SINCE_LAST_COUNTmeans since the item's own last completed count.YEAR_TO_DATEmeans since 1 January (UTC).FIXED_DAYStakes a number of days from 1 to 400.- Filters combine with AND, never OR.
MOVED_SINCE/YEAR_TO_DATEtogether withNOT_COUNTED_SINCE/FIXED_DAYS30 means "moved this year, and not counted in the last 30 days" — the usual way to stop an item being counted twice in a month. - They narrow; they never widen. An item that fails steps 1–3 cannot be brought back by a filter.
Stock-state filters can be set on any count created through the API, and on a recurring definition, which carries them into every count it generates. The items not counted this year count is built from two of them.
Why is an item not in my count?
| Reason | What to do |
|---|---|
| STP has never had stock of it in this store | Nothing — there is no stock to count. A delivery or a sale creates the stock information. |
| Its stock is zero and it has not moved since it was last counted | Nothing — it is settled. |
| Another open count in the store already lists it | Count it there, or complete or delete that count; the next nightly refresh adds it here. |
| It is not in the store's assortment in PnP (full count), or does not match the saved search (cycle count) | Correct the assortment or the search. |
| The list is still being prepared, or the count starts later | Wait — see How a count works. |
Mandatory and optional items
Every listed item is either mandatory or optional, and that decides what happens if nobody counts it.
- In a full count every item is mandatory.
- In a cycle count each saved search is marked mandatory or optional, and its items inherit that. ⚠ A saved search is optional unless it is marked mandatory. If the same item matches two searches of one count, the first search in the count's list decides.
- In an imported list each item carries its own flag, mandatory unless stated otherwise.
- In the items not counted this year count every item is mandatory.
What happens to items nobody counted
When a count is submitted — or when staff mark a category as done — every mandatory item that nobody counted is registered as counted 0, and is published and applied like any other counted item. An optional item that nobody counted is simply left out: it is not published, and its stock is not touched.
The zero is registered for items the stock information says the store holds, and for items whose stock
has changed in the last 30 days; an item that is already at zero and has not changed for 30 days has
nothing to correct. In the published event these zeros appear with the location UNKNOWN.
🛑 A full count sets everything nobody counted to zero — including items on a shelf nobody got to. Submit a full count only when the whole store has been counted. In the app, marking each category as done as it is finished makes the gaps visible before it is too late: the deviation review shows which items are about to become 0.
Read next
- Counting while the store is open — when an item counts as counted, and why it matters
- Recurring counts — counts that generate themselves
- The API — creating each kind of count