Start your free 14-day trial Open the demo account Search the whole site
Product DomesticCommercialEnd of tenancyHoliday letsAirbnbWindowsCarpets and upholsteryOne-off and specialistFacilities managementCleaner appRAMSYour websiteInvoicing Everything CleanFlo does →
Compare Cleaning software comparedCleanFlo vs JobberCleanFlo vs ZenMaidCleanFlo vs GetCleanFlowCleanFlo vs ConnecteamCleanFlo vs SweptCleanFlo vs BigChangevs a spreadsheet and WhatsAppCleanFlo vs SqueegeeCleanFlo vs ServiceM8CleanFlo vs Cleenie
Free tools Cleaning Quote CalculatorPrice Per m² CalculatorUK VAT CalculatorProfit Margin CalculatorTrue Cost of a CleanerHoliday Entitlement CalculatorPer-Seat Cost CalculatorContract Tender Calculator All 17 free tools → 16 printable templates →

Photo and reading requirements

A tick only ever meant a cleaner tapped a checkbox. Ask a line for a photo or a reading as well, and it is not done until the evidence is: a photo of the made bed, a chlorine reading off the hot tub, a count that has actually been counted.

In the app: Schedule Open CleanFlo
On this page

Most checklist lines are fine as a tick. A cleaner did the thing or they did not, and the tick says which. A few lines are not fine left there: proof matters more than a checkbox for the owner of a holiday let who cannot be on site to see the bathroom restocked or the bins put out, a legionella reading off a hot tub is a number that has to exist somewhere rather than a box somebody checked on their way past, and "six towels" is either true or it is not, in a way a tick cannot say.

A requirement is what turns that particular line into more than a tick. Set one on it and it needs a photo, a reading, or both, before it counts as done, on a template checklist and on an ad-hoc job checklist alike.

Setting a requirement

Every checklist line, in Job templates and in a job's own checklist in the job drawer, carries a small disclosure under it labelled Requirements. It stays closed until you open it, but a line that already has a requirement on it, coming back to edit an existing template, say, opens by itself. Close it again with something set and it carries a small Set badge, so a checklist is not something you have to re-open every line of to know what is on it.

Photo required
A toggle. Switched on, this line is not done until a photo is attached to it, taken on the cleaner's phone the same way any other job photo is: it also appears with the job's other photos, not only against this one line.
Reading required
A toggle. Switching it on reveals a reading type and, for every type but Clarity, a minimum, a maximum and a unit.
Reading type
Seven options: Free chlorine, Bromine, pH, Temperature, Clarity, Count, or Reading, for anything the other six do not fit. Clarity alone is words rather than a number, clear, slightly cloudy or cloudy, and carries no minimum, maximum or unit: switching a line to it clears whatever a numeric type had left behind.
Minimum, maximum and unit
Both bounds are optional and inclusive, a reading equal to either one counts as in range, and leaving both blank means nothing on this line can ever be out of range. Unit is free text, so a company measuring bromine in ppm rather than the usual mg/l is not fought.
Edit Template
Update template details
Hot tub chlorine and pH checked
Photo required
Reading required
Free chlorine
Min
Max
Unit
CancelSave changes
One checklist line with its Requirements disclosure open, in the template editor. Photo required and Reading required are independent switches, a line can ask for both, and choosing a reading type other than Clarity reveals the minimum, maximum and unit beside it.

A requirement set on a template is copied onto every job built from it, exactly as the rest of the checklist is: see Clean templates for how loading one fills in a clean. Set the requirement once, on the template, and every clean booked from it afterwards carries it without anyone opening a drawer again.

What the cleaner sees

A gated line in the cleaner app carries a status line under its label, in addition to its ordinary tick, and the tick and the requirement are two different things: ticking the box does not fulfil the requirement, and a line can sit ticked with its photo still outstanding.

09:41
Cleans Changeover · Gull Cottage
Checklist 4/5
Each bed made
Each bathroom cleaned and restocked Photo required
Bins out Photo attached
Hot tub chlorine Out of range 0.4 mg/l
Keys back in the key safe Photo required
Complete clean
A changeover checklist with two gated lines. The bathroom line is ticked and its photo is still missing, which is exactly what still stops Complete clean below. The hot tub reading is in, but it reads low against the minimum on file.

The status line reads Photo required or Reading required until it is met, then Photo attached for a photo, or the reading itself with its unit, "0.4 mg/l", for a reading. Underneath it sits the control that meets it: a camera button for a photo, opening the phone's own camera rather than a file picker; a number field for a reading, labelled with the reading type's own name and showing its unit beside it; or, for Clarity, three words as a segmented control, Clear, Slightly cloudy, Cloudy.

A reading outside its minimum and maximum is marked Out of range in words, never colour alone, and a note field, labelled Add a note (optional), appears underneath it. It is prompted, not required: nothing about an out-of-range reading stops the clean being completed. Every gate works offline exactly like every other tick and photo on the clean: a photo, a reading or a tick lands the moment it is taken, and the write queues behind it until the signal returns.

Finishing with a requirement still open

Complete clean opens its usual confirmation, but while anything on the checklist still needs its photo or its reading, the sheet says so and refuses to close the clean quietly around a gap nobody noticed.

That reason is written against every line still open when the cleaner presses it, and into the activity log as "completed with N checklist requirements overridden". Once a line is overridden it stays settled: it keeps showing what it was still missing, but gains a second status line, Recorded without evidence, and it never flips back to blocking anything later.

What you see afterwards

Open the job afterwards and every gated line in its checklist carries the same read-only summary a cleaner's screen showed them: a small photo where one was attached, or "Photo required" where it was not; the reading with its unit, or "Reading required", with an amber "out of range" mark if it landed outside its bounds; and, on an overridden line, "Overridden: " followed by the reason in full.

The Checklist requirements module

All of this sits behind Checklist requirements on Settings → Modules, on by default and already on for every trade CleanFlo sets a company up with. Switch it off and the Requirements disclosure disappears from the template editor and the job drawer, the cleaner app shows and enforces nothing extra, and Complete clean asks nothing more than it always did. Nothing already set is cleared: the database refuses only a write that sets a new requirement while the module is off, never a write that finishes a job, so a line that already carries a requirement shows it again, unchanged, the moment the module goes back on.

Common questions

Does switching Checklist requirements off delete the requirements I have already set?
No. They are kept and simply ignored while the module is off, ticks, photos and readings already on a job untouched, and they take effect again exactly as they were the moment you turn it back on.
Does an out-of-range reading stop a cleaner completing the clean?
No. It is marked Out of range and prompts a note, but unlike a missing photo or reading it needs no override reason at all: a reading being logged, however it reads, is not the same thing as a reading missing.
I added a line to a job's checklist after the cleaner had already started ticking it off. Did that lose their photos and readings?
No, not any more: saving a job's checklist keeps every tick, photo and reading on a line that still exists after the edit. Only removing a line removes what was recorded against it.