Datasheet · LUFT Cancellations report

How to read LUFT cancellations

Every cancelled placement call, timed against the moment it was booked and the moment it was due. This page shows what gets counted, what the timings actually mean, and where the numbers stop being trustworthy.

What you're looking at

One row per cancelled call — 1,227 of them

The report starts from every LUFT call ever booked, and keeps only the ones whose status ended up cancelled. Every table on the screen is a different slice of those same rows.

4,732Booked

All LUFT calls

Every placement call booked into the calendar since Feb 2025: 2,445 completed, 1,010 no-shows, 50 still to happen.

1,227Cancelled

The report's population

26% of every call booked. This is the only set of rows the screen ever counts.

522 · 705Host · guest

Who hit cancel

522 were cancelled by a logged-in member of staff; 705 by the client themselves.

The monthly table groups by the month the call was booked for, not the month it was cancelled in. A call due in August that gets cancelled in July sits in August. That's deliberate: it keeps the row comparable with every other LUFT report, which all count against the scheduled call date.

This report is about the calls, not the hosts. Host performance rates live on LUFT host analysis, which counts host cancellations only. This screen counts both sides, because the interesting question here is when and why, not who's good.
The two clocks

Every row is timed twice

A cancellation sits between two fixed points: the moment the call was booked, and the moment it was due to happen. The report measures the gap to each one, and every timing column on the screen is one of those two gaps.

Bookedthe client picks a slot
Call timepast here, the gap goes negative
530
Earlier than 1h
Cancelled with more than an hour's notice. The slot could still be refilled.
237
Within 1h of the call
Cancelled in the final hour. Too late to refill, but before the call was due.
460
After call start
The start time had already passed when cancel was pressed. See the next section.

The sign trips people up

"Cancel → call" counts down to the call. A positive number means the cancellation came that long before the call. A negative number means the start time had already gone by. So −7m is not seven minutes of notice; it's seven minutes too late.

The other clock

"Booked → cancel" is how long the booking survived. It's never negative. The "within 1h of booking" column counts people who booked and then cancelled inside the hour — 202 of them all-time. That's usually a mis-click, a duplicate booking, or someone changing their mind before they've left the page.

Averages are shown in the friendliest unit, not in minutes. Anything over a day reads as days, anything over an hour reads as hours. July's rows averaged 2.2d from booking to cancel and 16.8h of notice.
The number that looks alarming

"After call start" almost never means a late cancellation

460 rows were cancelled after the start time had passed. That reads like carnage. Split it by who pressed the button and it turns into two completely different stories.

393By a host

Every single one within the hour after

Average: 7 minutes past the start. Not one host cancel landed more than 60 minutes late.

67By the client

Genuinely late

Average 4.3 hours past the start, and 11 of them more than three hours late. These are people who never showed and cancelled afterwards.

A host cancelling seven minutes into a call isn't ducking it — they're in it. The call connected, something came up that meant it couldn't go ahead as a placement, and they closed the booking out there and then. Here's a real row:

23 Jul · 11:24
Booked
Client picks the 10:00 slot for the next morning
24 Jul · 10:00
Call due
Reanna's slot opens
24 Jul · 10:07
Cancelled
Reason typed: "In person couples therapy preferred"
On the screen
−7m · after start
Booked → cancel 22.7h · counted under "Couldn't place them"
These calls do not count as Completed anywhere. Their status is cancelled, so on the host analysis report they sit outside the completed count even though the host and the client both turned up and talked. Read the two reports together before concluding a host had a bad month.
Who cancelled

One "Guest" row, then a row per member of staff

The booking system records a user id when a logged-in person cancels, and nothing when the client does it from their confirmation email. No id means the client did it, and those all pool into a single Guest row. Last 12 months:

Cancelled by Total After start Within 1h Earlier Avg notice Reason given
Guest the clients themselves666671674321.3d82%
Muskaan Ahmed1269811173.0h1%
Millie Martelli94791142.3h79%
Reanna Small696261−3m100%
Alex Sarkizova58471011.4h97%
Rachel Jones543312011.5h94%
Nicole Hayward503071317.8h46%
Patrycja Janik351691011.4h11%
Mkaya Carrigan302820−10m7%
All cancellations in range1,18646022450270%

Rows with fewer than three cancellations are omitted here; the live screen shows them all. "Avg notice" is the average cancel → call gap, so a negative figure means that person's cancellations were typically after the start.

What the "Reason given" column is for

It's a data-quality reading, not a performance one. It says how often that person typed anything into the cancel box. A host at 100% is filling the box in every time; a host at 1% is skipping it. That matters because the breakdown in the next section can only see what was typed — a blank row is invisible to it.

Five hosts account for most of the blanks. 315 cancellations in the last 12 months carry no reason at all. 231 of them come from five hosts — 125 Muskaan, 31 Patrycja, 28 Mkaya, 27 Nicole, 20 Millie — and 80 are clients who skipped the optional box.
Why calls were cancelled

Free text, sorted into twelve themes

The booking system has no "reason" field. What it has is an activity log: when someone cancels with a note, it writes "Meeting has been cancelled by …" and keeps the note in the description. When they skip the box it writes a bare "Meeting Cancelled". The report reads that log, so a blank is a real, countable fact — not a gap.

Each note is matched against a list of patterns, most specific first, and lands in one theme. The themes then roll into four kinds, which is the split the table is really built for: did we fail to place them, or did they walk away?

Theme Kind Total By host By guest
No reason recorded the box was skippedNot stated31523580
Other (free text) matched no patternNot stated24565180
Wanted in person — none available "In person preferred"Couldn't place them15913425
No longer needed / changed mind "Not ready" · "Unsure"Client withdrew1101109
Couldn't make the time "Work" · "Busy"Client withdrew90387
Found help elsewhere "Found a local"Client withdrew78771
Budget — too expensive "Price" · "Afford"Couldn't place them492326
No real answer given "." · "NA" · "-"Not stated43142
Rebooked or reassigned "Will rebook"Admin413110
Test, mistake or wrong contactAdmin21318
No therapist in catchmentCouldn't place them19172
Illness or emergencyClient withdrew16016
Last 12 months1,186520666

The live screen shows real examples of the raw text under each theme, so you can always check the sorting yourself.

The number this table exists to produce

Add the three Couldn't place them themes together and you get demand we won and then lost on supply — a client who wanted therapy, sat through the process, and left because we didn't have the right therapist at the right price in the right place.

159
wanted in person, none available
+
49
too expensive
+
19
no therapist in catchment
=
227 · 19%
of the last 12 months' cancellations were a supply failure
19% is a floor, not the answer. 603 of the 1,186 rows are "Not stated" — either nothing was typed, or the text matched no pattern. If the untyped cancellations look anything like the typed ones, the real supply share is higher. The way to move this number is to fill in the box, not to change the rules.

Order matters when a note names two things. "Wanted in-person, no one in the catchment" is filed under catchment, because catchment is the binding constraint. "Rebooked due to finances" is filed as a rebook, because the client was kept. The specific pattern always beats the generic one.

Reconnected

Cancelled, then came back anyway

A cancellation isn't always a loss. 56 people whose call was cancelled later completed a different LUFT call.

The rule is deliberately strict: the same email address appears on a completed LUFT call scheduled after the cancelled one. No fuzzy matching, no name matching, no manual list.

It only sees the same email. Someone who rebooked with a different address — a work email, a partner's, a typo corrected — counts as lost here even though we got them back. So 56 is the floor too.
Why trust it

How we know the timings are right

"Right" means: open the booking system, look at the same booking, and get the same answer. Four things stand behind this screen.

The cancel time comes from the log, not the record

A booking row's "last updated" stamp moves every time anything touches it, sometimes days later. Using it would drag cancellations forward and invent late cancels that never happened. The report uses the moment the system wrote "cancelled" in its activity log, which never changes.

The 80 rows without a log are declared

1,147 of the 1,227 rows have a logged cancel event. The other 80 fall back to the booking's last update, and the screen prints that count in its own footer rather than burying it. Those are the only rows whose bucket could be wrong.

"Within an hour" is defined once

The monthly table and the who-cancelled table share the same code for every bucket boundary, and it's covered by tests. They can't drift apart — which they once did, when an after-start cancellation was quietly being counted as "within the hour".

Nothing is inferred about reasons

No cancellation is ever assigned a reason it wasn't given. A blank stays a blank and is counted as one, which is why the capture rate is a number on the screen rather than a footnote.

Limits

Four things to hold while reading

The newest month is still filling up

Rows are grouped by the month the call was due, so the current month keeps growing all month and future months already have a few rows in them. Compare finished months.

A host's "after start" is not a late cancel

All 393 of them landed within an hour of the start, averaging seven minutes past. Treat that column as "closed out at the slot", and read the client's 67 separately — those are the genuinely late ones.

The reason breakdown is only as honest as the box

Half the rows say nothing usable. Every share in that table is therefore a floor, and comparing two hosts' reason mixes is meaningless when one fills the box every time and the other almost never does.

80 rows have an estimated cancel time

Where no cancel event was logged, the booking's last-update stamp stands in. That stamp can be later than the real cancellation, so a handful of rows may sit in a later bucket than they deserve.