Start your free 14-day trial
Product Job Scheduling & RotasInvoicing & BACSHealth & SafetyStaff Mobile AppAnalytics & Reporting
Solutions Commercial CleaningDomestic CleaningEnd of TenancyFacilities ManagementWindow Cleaning
Free tools Cleaning Quote CalculatorPrice Per m² CalculatorUK VAT CalculatorProfit Margin CalculatorTrue Cost of a CleanerHoliday Entitlement CalculatorContract Tender CalculatorClient Lifetime Value All 14 free tools →
Learn How to start a cleaning businessHow to price cleaning jobsHow to win cleaning contractsHealth & safety for cleaners CleanFlo vs JobberCleanFlo vs ZenMaid
Browse all guides

Tracking stock

Inventory is the answer to "have we got any more blue roll?". Every chemical, cloth, bin bag and pair of gloves gets a row, a quantity and a reorder point, and the screen shouts before you run out rather than after.

In the app: Inventory Open CleanFlo
On this page

Most cleaning companies discover they are out of something at eight in the morning, in a van, at a client site. The cost is not the £4 bottle of degreaser. It is the hour lost driving to a cash and carry, and the client who watched it happen.

Inventory holds one row per thing you buy and use up: chemicals, consumables, PPE, small hardware and spare parts. Each row carries a quantity, a unit and a minimum threshold. When the quantity drops to or below the threshold, the row turns amber, the screen grows a banner, and an alert email goes out to you.

What the Inventory screen shows

The page is titled Inventory Management with the subtitle "Track supplies, equipment and consumables", and carries a single action, Add Item. Under the title sits a band of four counts, and those four are the whole picture at a glance.

Total SKUs
Every item on the catalogue, whatever its level.
In Stock
Comfortably above the minimum threshold.
Low Stock
At or below the minimum. Carries a warning dot.
Critical / Out
At or below half the minimum, or nothing left at all. Also dotted.

The search box at the right of that band matches the item name only, not the notes and not the unit. Below it, the table is headed Current Stock with a count reading "24 items", and everything else on the page is a filter over that table.

app.cleanflo.io/inventory
Search everything… ⌘K Inventory
Inventory Management

Track supplies, equipment and consumables

Add Item
24 Total SKUs 19 In Stock 3 Low Stock 2 Critical / Out
2 items critical or out of stock
3 items running low
All Chemicals Tools PPE Hardware Parts Other
Name (A–Z)
ItemCategoryStock LevelUnitStatus
Eco Glass CleanerMin threshold: 6 Chemicals 14 / 6 min Case of 6 In Stock View
Blue RollMin threshold: 10 Other 8 / 10 min Roll Low Stock Restock
Nitrile Gloves (M)Min threshold: 8 PPE 3 / 8 min Box of 100 Critical Restock
Washroom SanitiserMin threshold: 5 Chemicals 0 / 5 min 750ml Spray Out of Stock Restock
Microfibre ClothsMin threshold: 20 Tools 46 / 20 min Each In Stock View
1–10 of 24 123 Export CSV
The Inventory screen with two items under their threshold. Notice the reorder gauge inside the Stock Level column: the fill is scaled in the status colour and the small tick is where the minimum sits.

The columns, and the filters over them

Item
The name, with "Min threshold: 6" printed underneath it so the reorder point is never more than one glance away.
Category
A tinted pill. Chemicals, Tools, PPE, Hardware, Parts or Other. The category strip above the table filters on exactly these, plus "All".
Stock Level
Right aligned. The quantity in the status colour, then "/ 6 min", then a small gauge whose fill is the quantity and whose tick is the minimum.
Unit
Whatever you typed: "Case of 6", "Box of 100", "Each".
Status
One of the four labels below.
Actions
One ghost button with no header above it. It reads View on a healthy row and Restock on anything below the line. Both open the same detail sheet.

Ten rows to a page. There are no row checkboxes and no bulk actions, so there is no way to delete twenty items at once: each one is deleted from its own sheet. Clicking an open row closes it again, which is a small thing you will use more than you expect when you are checking levels down a list.

The stock levels, and what each colour means

One function decides the pill, the gauge colour, the alert and the CSV cell, so those four can never disagree. It reads the quantity against that item's own minimum threshold and returns one of four answers.

In StockLow StockCriticalOut of Stock
The four stock statuses. Three of them are the ones people talk about, but "Critical" is the band that actually saves you: it fires at half the minimum, while there is still time to order.
StatusWhen it appliesColour
In StockQuantity is above the minimum thresholdGreen
Low StockQuantity is at or below the minimum thresholdAmber
CriticalQuantity is at or below half the minimum thresholdRed
Out of StockQuantity is zero or lessRed

The header band folds Critical and Out of Stock together into one figure, Critical / Out, because both mean the same thing to you on a Monday morning: order it today. The table keeps them apart because the difference matters when you are deciding what to do with a job booked for tomorrow.

The threshold is per item, and it is the whole mechanism

There is no global "warn me at 20%" setting. Every item carries its own Min threshold, and you set it when you add the item or from the Edit tab afterwards. The number to use is not "how many do we like to have", it is how many get used between one order and the next arriving.

  • A chemical you order monthly and get through at four bottles a month: threshold 4.
  • Gloves that come in boxes of 100 and last a fortnight, with a five-day delivery: threshold 1.
  • Something the wholesaler always has on the shelf and you can fetch the same day: threshold 1, because you are only warning yourself to pick it up.

When either the low or the critical count is above zero, the alert banners appear above the table, critical first. Each one lists the offending items as clickable chips reading the name and a running quantity such as "0/5 750ml Spray", so you can go straight from the banner to the item.

Alerts also leave the screen. Crossing a threshold sends you an email, deduped so one crossing sends one email. A toast confirms it on screen, naming the item that has gone low and saying the alert has been emailed to you, or counting them when several go at once. Going back above the threshold clears the flag, so the next crossing alerts again rather than going quiet forever.

Adding an item

Add Item opens a drawer titled Add Inventory Item, subtitled "Track a new supply, tool or consumable". It is three short sections and takes about twenty seconds per line of a wholesaler invoice.

Add Inventory Item
Track a new supply, tool or consumable
Item name * Eco Glass Cleaner
Category ChemicalsToolsPPEHardwarePartsOther
Unit of measure e.g. 500ml Spray, Box of 100, Each
Opening stock 14
Min threshold 6 Alerts trigger when stock falls at or below the minimum threshold.
Internal notes (optional) Supplier info, storage location, reorder details…
CancelAdd Item
The Add Inventory Item drawer. The hint under the two number boxes is the only place the app explains the threshold rule, so it is worth reading once.

Name it the way you order it

Use the wholesaler's name, not a nickname. "Eco Glass Cleaner" is searchable in six months; "the blue one" is not.

Pick a category

Chemicals is preselected. The category only drives the pill colour and the filter strip, so it is a sorting aid rather than a rule.

Set the unit of measure

This is free text and it is what makes the numbers mean something. "6" of a case is very different from "6" of a bottle. Leave it blank and it stores as each.

Enter the opening stock and the threshold

Opening stock is what is on the shelf right now. A positive opening stock writes a movement into the item's history with the reason "Restock / Delivery" and the note "Opening stock", so the ledger starts honest.

Add notes if the item needs them

The notes box is where the supplier, the account code and the cupboard it lives in go. It is internal and cleaners never see it.

How stock actually moves

The Edit tab deliberately does not let you type a new quantity. Stock only ever moves through Adjust Stock, which forces a direction, an amount and a reason. That is what turns the History tab into something you can trust when a case of chemicals goes missing.

Adjust Stock
Nitrile Gloves (M)
3 Box of 100 8 Min
Adjustment direction Add Stock Remove Stock
Quantity 10
13 Box of 100 · In Stock
Reason Restock / Delivery
Notes (optional) Any extra details…
CancelAdd Stock
The Adjust Stock drawer, mid-adjustment. Once you enter a quantity, the preview shows the level you are about to land on in its new colour, so you can see a removal tipping an item into Low Stock before you commit it.

The reason list is fixed and short, and it is the list your history will be readable by: Restock / Delivery, Used on Job, Damaged / Written Off, Returned to Stock, Audit Adjustment and Other. Switching the direction resets the reason to the sensible default for that direction, so an addition defaults to a delivery and a removal defaults to use on a job.

The other way stock moves is from the phone. A cleaner working a job can raise a supply request, and those land in a Supply Requests panel above the table with a subtitle counting how many are awaiting fulfilment. Marking one Fulfilled decrements each item on it and writes a movement with the reason "Used on Job" and a note naming the requester.

Supply Requests
2 awaiting fulfilment
Aisha Nowak Blue Roll ×4, Nitrile Gloves (M) ×2 3 Aug, 14:30 Fulfilled
Marek Kowalski Washroom Sanitiser ×3 3 Aug, 08:05 Fulfilled
Supply Requests. The panel is only on the page while something is pending, so an empty inbox means an empty screen rather than an empty state.

Stock is one number, not one per site

This is the thing people expect and do not get, so it is worth saying plainly. An inventory item holds a single company-wide quantity. There is no per-location stock, no transfer between sites, and no van as a stock location. An item has a name, a category, a unit, a quantity, a minimum and a notes field, and that is the whole record.

What the product gives you instead is the notes field, whose placeholder literally suggests it: "Supplier info, storage location, reorder details…". If you keep a cupboard at two sites, the practical pattern is two items with the site in the name, each with its own threshold. It is a workaround rather than a feature, and it is honest to call it one.

Getting the list out

Beside the pager sits a ghost Export CSV button. It writes inventory.csv containing the whole filtered and sorted list rather than the page you are looking at, with the headers Item, Category, Current Stock, Min Threshold, Unit, Status. The Status cell carries the display label, so a spreadsheet reads "Low Stock" rather than a code. The toast confirms the count: "Exported 24 items".

Filter to a category first and the export follows the filter, which is the quickest way to hand a chemicals-only order list to whoever does your buying. The export button is only on the page when there is at least one matching row, so an empty filter cannot produce an empty file.

Common questions

Can I set stock levels per site or per van?
No. Each inventory item holds one company-wide quantity, and there is no location field on the record. If you genuinely run separate cupboards, create one item per site with the site in the name and give each its own minimum threshold. The item notes field is designed for exactly this sort of detail.
Who gets the low-stock email?
You do, as the account holder. Alerts are deduped against the item row rather than the browser tab, so one threshold crossing sends one email whoever caused it: an adjustment you made, a cleaner's supply request being fulfilled, or an item created below its threshold.
Why can I not just type the new quantity into the Edit form?
Because it would break the history. Every change to a quantity goes through Adjust Stock, which records the direction, the amount, a reason and an optional note. The History tab then shows the last 20 movements with a timestamp, which is what you need when the numbers stop matching the cupboard.
What happens to the history if I delete an item?
It goes with it. The confirm dialog says so: it reads "Delete "Eco Glass Cleaner"? This cannot be undone." If you only want an item out of the way rather than gone, export first, or leave it at zero so the row and its movements stay readable.