Dispatch logic, published
How Cabio decides which driver gets the job
Most dispatch suppliers describe this as “intelligent allocation” and leave it there. Here is ours with the numbers in: three weighted factors, one deliberate trade-off, and two worked examples you can check the arithmetic on.
The score
Three factors, one number, highest wins
Every available driver gets a score for the job in front of them — 0 to 1, before the one penalty further down this page can push it below zero. The list is sorted by that score and the offer goes to the top of it. That is the whole mechanism; the interesting part is what feeds it.
How long they will actually take
Not how far away they are on a map — how long the drive takes with today's traffic on it. Two minutes away scores 0.71; fifteen minutes away scores 0.25.
Whether they take the work
Jobs accepted as a share of jobs offered, over the driver's whole history with you. A driver with no history is assumed to be 0.70 — new drivers are not punished for being new.
Whether the car fits the job
1.0 when the vehicle matches what was booked, or when the booking has no preference. 0.40 when it does not. A mismatch costs 0.12 of the total score and has to be made up elsewhere.
score = (proximity × 0.45) + (acceptance × 0.35) + (vehicle match × 0.20)
Proximity is 1 ÷ (1 + minutes ÷ 5), so five minutes away scores exactly 0.50 and the curve flattens after that — the difference between two minutes and four matters far more than the difference between twenty and twenty-two, which is how it feels from the passenger’s doorstep too.
Where the minutes come from
A drive time, not a straight line
Proximity is the term most systems get lazy about, because straight-line distance is free and road time is not. A car half a mile away on the wrong side of the Thames is not half a mile away.
- Every available driver's ETA to the pickup is fetched in one batched Google Distance Matrix call, not one call per driver, with the departure time set to now and traffic modelling on
- When live traffic returns a figure, that is the number used. When it does not, the plain road duration is used instead
- With no ETA at all, proximity falls back to straight-line miles — 1 ÷ (1 + miles ÷ 2), so two miles scores 0.50
- With no driver GPS at all, proximity is a flat 0.50: an unknown position is not treated as a bad one
- Every ranking run is logged with how many drivers were in it and which one came top, with their score and acceptance rate — so a surprising allocation can be looked up rather than argued about
- Live traffic is your setting — always on, or only through rush hour, weekends and bank holidays
Worked example
The nearest car does not automatically win
Same job, same vehicle class, no zones involved. Driver A is twice as close. Driver B still gets it, because a driver who turns down three offers in five costs the customer more time than two minutes of driving saves them.
Driver A — two minutes away
- Proximity (45%)
- ETA 2 min → 0.714× 0.45 = 0.321
- Acceptance (35%)
- 20 of 50 offers → 0.400× 0.35 = 0.140
- Vehicle (20%)
- Exact match → 1.00× 0.20 = 0.200
Second
Driver B — four minutes away
- Proximity (45%)
- ETA 4 min → 0.556× 0.45 = 0.250
- Acceptance (35%)
- 82 of 100 offers → 0.820× 0.35 = 0.287
- Vehicle (20%)
- Exact match → 1.00× 0.20 = 0.200
Gets the offer
0.737 against 0.661. Close the acceptance gap and A wins on proximity — which is the point: it is a weighting, not a hierarchy. Nothing here is a tiebreak or a rule that fires; all three terms are always in play, on every job.
The trade-off
A non-compliant car is penalised, never banned
If a journey enters a ULEZ zone and a driver's vehicle is recorded as non-compliant, 0.85 comes off their score. That is more than proximity and acceptance can add together — so any compliant car, however far away, goes ahead of them. It does not remove them from the list.
“A penalty, deliberately not an exclusion. Sending the wrong car costs the operator a daily charge; sending no car at all costs them the fare and the customer. So a non-compliant vehicle drops below every compliant one but still gets the job when it is the only vehicle available.”
Comment above ULEZ_MISMATCH_PENALTY in the Cabio dispatch source.
The same restraint applies to what is not penalised. Only a vehicle actually recorded as non-compliant takes the hit. “Unknown” and “never assessed” are not evidence of anything, and treating them as failures would quietly demote most of a fleet nobody has got round to checking yet — a system that punishes an operator for their paperwork backlog is a system they turn off.
Worked example
What that penalty looks like on a real pair of drivers
A job into the zone. Driver C is two minutes away with a near-perfect acceptance record; Driver D is fifteen minutes away and turns down half of what they are offered.
Driver C — two minutes away, vehicle recorded non-compliant
- Proximity (45%)
- ETA 2 min → 0.714× 0.45 = 0.321
- Acceptance (35%)
- 90 of 100 offers → 0.900× 0.35 = 0.315
- Vehicle (20%)
- Exact match → 1.00× 0.20 = 0.200
- ULEZ penalty
- Journey enters the zone− 0.850
Behind every compliant car — but still in the list
Driver D — fifteen minutes away, compliant
- Proximity (45%)
- ETA 15 min → 0.250× 0.45 = 0.113
- Acceptance (35%)
- 50 of 100 offers → 0.500× 0.35 = 0.175
- Vehicle (20%)
- Exact match → 1.00× 0.20 = 0.200
Gets the offer
Driver C scores 0.836 before the penalty and −0.014 after it. A negative score is still a score: C stays in the list, in order, and takes the job the moment no compliant car is free. The alternative — excluding them — is a customer standing outside with nobody coming, which is a worse outcome than a charge the operator can choose to absorb.
Before scoring happens at all
Who is never offered the job
Scoring only ever runs on drivers who are already allowed to have it. These are exclusions, not penalties — the distinction matters, and Cabio is careful about which is which.
Excluded outright
- Drivers already working a live job today, and drivers outside your dispatch radius
- Drivers whose required licence or badge has expired, or was never supplied — once you have switched the compliance gate on and named the documents you require
- Drivers whose assigned vehicle has a lapsed MOT or insurance, if you have switched that gate on. Each exclusion is logged with the plate and the reason, because “why did nobody get this job?” has to have an answer
- Drivers in the wrong class of vehicle, if you have asked for a hard vehicle-type match rather than letting the 20% term handle it
Deliberately not excluded
- A vehicle check with no date recorded. On the fleet this rule was written against, six of eleven cars had no MOT date on file — treating “not recorded” as “failed” would empty a fleet the moment an operator switched the gate on. Missing dates are chased by the reminder digest instead
- A vehicle whose ULEZ status is unknown or has never been assessed
- A driver with no history at all, who is scored as 0.70 rather than as a risk
- Everybody, if the compliance lookup itself fails. A gate that cannot be checked is logged and stepped over — jobs still go out
What this does not do
The limits, stated rather than left to be discovered
Written in August 2026. If you are reading this later and it does not match what the product does, the product moved and this page has not caught up — tell us.
- Nothing above is on by default beyond the 45/35/20 scoring. Rules ship switched off and every zone ships with its queue switched off, so an operator who never opens the settings gets exactly the dispatch described further up this page
- The rule engine is a list of conditions and one action each — it is not a scripting language, and it deliberately cannot do arithmetic on your fares
- Queue position is not a promise. A driver at the head of a rank still has to be eligible: the compliance gates, vehicle matching and the ULEZ check all run first, and the queue cannot overrule any of them
- We do not do surge pricing, and none of this changes what the passenger is charged
Your rules, and the receipts
Change how it decides — then see what it decided
The weights above are the starting point, not the ceiling. An operator can move them, group drivers into tiers, and write rules in the operator's own terms.
A rule is a set of conditions and one thing to do about them. A worked example, and the one we built the engine to be able to express:
If a Silver-tier driver turns down a cash job in the town centre having already waited more than 20 minutes, then hold them back from cash work for three minutes — but leave them fully available for account jobs, and do not send them to the back of the line.
Every rule that fires is written down against that job and that driver, with the score before it and the score after it. Open the booking and the answer to “why him and not me?” is on the screen in plain English — the rule’s name, what it did, and what it cost or earned that driver. Not a log file, and not a support ticket.
That is the part we would point at if you are comparing us with a system that has been accreting dispatch rules for thirty years. Matching it on what a rule can express is table stakes. Being able to hand a driver the reason is not.
The other half of the same problem
Scoring only helps once the job is on the board
The best allocation logic in the trade does nothing for a call nobody answered. Agent Zero is Cabio’s AI phone agent: it picks up, takes the pickup, drop-off, time, name and number in ordinary conversation — no menu tree, no “press 1 for bookings” — and writes the job straight onto the board, where everything on this page then applies to it.
A caller says where they are going. A structured job appears on the board. The scoring above picks the driver. Nobody was on hold and nobody re-keyed anything.
Agent Zero is on the Enterprise plan, controlled from Admin → Calls → AI Agent.
Weighing up suppliers
We publish this so you can put the same question to everyone on your shortlist: can you see why a job went to a particular driver? Our comparison pages carry the rest of the questions worth asking — and none of them tell you what anyone else charges, because we do not know.
Run it against your own jobs
Book a demo, give us a real pickup from your patch, and we will put it through the dispatcher in front of you — with the score each driver got and why.
