What this guide covers
Most FM bid teams write their KPI response from memory of the last contract. That works until a buyer defines "complete" differently, measures attendance from a different timestamp, or ties money to a KPI you treated as a nice-to-have. This guide does three things:
- Compiles the KPIs that UK public buyers have actually written into published FM and building maintenance documents, with each target quoted as published and linked to its source.
- Sets out the data model a contractor needs to calculate those KPIs from job, asset, helpdesk and contract data, with a formula for each.
- Works one fictional month through to a service credit, and shows the matching monthly report.
It does not cover the detail of KPI publication under the Procurement Act 2023. The Act brought in publication of KPI performance for some contracts; which contracts, and when, is a separate topic.
The KPIs public buyers publish
The table below is compiled from six published documents: a Crown Commercial Service framework specification, four buyer specifications or KPI schedules, and one council performance report. Targets are quoted as the document states them. Where a document gives a measure but no target, the target column says so.
| KPI | How it is measured (as published) | Target as published | Money attached | Source |
|---|---|---|---|---|
| Statutory PPM completion | All statutory PPM tasks generated on the CAFM system completed satisfactorily to their scheduled anniversary dates | 100% | 10% deduction weighting | Workplace and FM24 KPI Measures |
| Routine PPM completion | Same measure for routine PPM | 95% | None listed | Workplace and FM24 KPI Measures |
| PPM completion including documents | "PPM Task Completion and Document Upload" | ">95%" | £37,215 of deductions over six months when this failed | City of London contractor performance report |
| Reactive, critical and emergency | Breakdowns completed in month to agreed time ÷ breakdowns due in month | 100% | 10% | Workplace and FM24 KPI Measures |
| Reactive by priority band | Percentage of Priority 1, 2 and 3 calls completed within specified time (P1 within 4 hours, P2 next working day, P3 28 working days) | P1 100%, P2 95%, P3 95% | One full day's contract payment while standards are not maintained | Penlee House maintenance specification, Penzance Town Council |
| Reactive, make safe | "PA-P1 Tasks To Be Responded To And Made Safe"; "P2-P6 Tasks To Be Responded To Repaired And Made Safe" | 100%; ">95%" | Not stated for this KPI | City of London report |
| First-time fix | Reactive visits completed at first visit ÷ total reactive calls; a return within 24 hours counts where parts or approvals are needed | 90% | 5% | Workplace and FM24 KPI Measures |
| Helpdesk call answering | Calls answered within 30 seconds | "95% of all calls" | Deduction by service priority category | National Museums Liverpool output specification |
| Helpdesk call answering | Telephone requests responded to within twenty seconds; portal five minutes; email fifteen minutes | No percentage in the specification | Set at call-off | CCS RM6232 Framework Schedule 1, Specification |
| Helpdesk call answering | All telephone calls answered within 1 minute | All calls | One failure deduction per failure | Kent County Council sample contract KPIs |
| Statutory inspections | No failure to identify and carry out relevant statutory inspections and maintenance | No failures | One failure deduction per failure; 40 if it leads to external warning or enforcement | Kent sample contract KPIs |
| Lift entrapment | Entrapments released within 30 minutes | All | Eight failure deductions per failure | Kent sample contract KPIs |
| Customer satisfaction | Quarterly customer feedback score; a failure is a score below 7 out of 10 | 7/10 | One failure deduction per failure | Kent sample contract KPIs |
| Monthly report | Accurate monthly report, issued 3 working days before the monthly meeting | On time, no errors | 1 deduction if 2 days before, 2 if 1 day before, 3 on the day, 1 per day late after that; 1 per error | Kent sample contract KPIs |
| Critical asset availability | Critical assets' operational run time ÷ available hours, excluding agreed downtime | 100% | 5% | Workplace and FM24 KPI Measures |
| Health and safety | RIDDOR reportable events in month | 0 | 5% | Workplace and FM24 KPI Measures |
| Social value and carbon | Year-on-year improvement in Modern Slavery Assessment Tool score; 5% annual reduction in carbon emissions | Achievement of target outcome | None listed | Workplace and FM24 KPI Measures |
Three patterns are worth taking from this into a bid.
Completion includes the paperwork. City of London's building repairs contractor failed its PPM KPI because of "the inconsistency of compliance documentation loaded onto the City's CAFM system", not because visits were missed. If the certificate is not uploaded, the task is not complete in the buyer's eyes.
Money is usually tied to a minority of KPIs. The FM24 table marks some KPIs as carrying a financial penalty and leaves others (routine PPM, portal take-up, social value) unpenalised. Kent uses failure deductions counted per incident, weighted by severity. National Museums Liverpool assigns each KPI a service priority from Low to Super, with the deduction values left for the buyer to insert.
The buyer expects the report from your system. The RM6232 specification requires the supplier to input operational KPI data into the CAFM system, measure each KPI monthly, calculate payment mechanism scores, and report at region, establishment and service level, including reasons for failure.
The data model behind the report
A monthly KPI report is a set of counts over four kinds of record. Get the joins right and every KPI is a numerator over a denominator.
| Table | Key fields | Typical source |
|---|---|---|
contract_kpi |
kpi_id, name, target, unit, weight, priority_band, exclusions | Contract schedule (often a spreadsheet) |
site |
site_id, name, contract_id, region | FSM or CAFM |
asset |
asset_id, site_id, asset_class, is_statutory, is_critical | FSM asset register |
ppm_task |
task_id, asset_id, due_date, completed_at, certificate_uploaded_at | FSM scheduled visits |
reactive_job |
job_id, ticket_id, site_id, priority, logged_at, attended_at, made_safe_at, completed_at, visit_count, exclusion_code | FSM jobs and visits |
helpdesk_ticket |
ticket_id, channel, received_at, acknowledged_at, site_id | Helpdesk or CAFM |
call |
call_id, offered_at, answered_at | Telephony export |
survey_response |
ticket_id, score, responded_at | Survey tool |
The joins:
| From | To | On | Why it matters |
|---|---|---|---|
ppm_task |
asset |
asset_id | Decides statutory or routine, and which site |
asset |
site |
site_id | Site-level breakdown |
reactive_job |
helpdesk_ticket |
ticket_id | The clock starts at received_at, not when the job was raised |
survey_response |
helpdesk_ticket |
ticket_id | Ties a score to a site and a job |
| every KPI row | contract_kpi |
kpi_id | Target, weighting and exclusions come from the schedule, not from code |
The formulas, for a reporting month M:
| KPI | Numerator | Denominator |
|---|---|---|
| Statutory PPM | tasks on statutory assets due in M with completed_at ≤ due_date and certificate_uploaded_at before month end |
statutory tasks due in M |
| Routine PPM | non-statutory tasks due in M completed by due date | non-statutory tasks due in M |
| P1 make safe | P1 jobs with made_safe_at − received_at ≤ 4h |
P1 jobs logged in M, less agreed exclusions |
| P2 / P3 completion | jobs completed by the band deadline (next working day; 28 working days) | jobs whose deadline fell in M |
| First-time fix | reactive jobs with visit_count = 1 |
reactive jobs completed in M |
| Call answering | calls with answered_at − offered_at ≤ 30s |
calls offered |
| Customer satisfaction | sum of scores | responses received in M |
| Service credit | monthly charge × at-risk % × sum of weights of failed KPIs | — |
Two definitions cause most disputes. Is a P3 job "due in M" when it was logged or when its deadline falls? Does "working day" exclude bank holidays? Write the answer into contract_kpi.exclusions and the report becomes repeatable.
Worked example: one month, end to end
This example is illustrative. The council, its four sites, every job and the service credit mechanism are fictional. The priority bands copy the Penlee House structure and the weighted percentage structure echoes the FM24 table, but the at-risk pot is our assumption: published schedules we read listed per-KPI percentages without always stating what they apply to.
Hypothetical mechanism: monthly charge £84,000; 10% at risk, so £8,400; each KPI carries a weight; a KPI below target forfeits its full weight that month.
| KPI | Calculation | Actual | Target | Result | Weight | Credit |
|---|---|---|---|---|---|---|
| Statutory PPM | 140 ÷ 142 | 98.6% | 100% | Fail | 25% | £2,100 |
| Routine PPM | 371 ÷ 386 | 96.1% | 95% | Pass | 10% | £0 |
| P1 made safe in 4h | 17 ÷ 18 | 94.4% | 100% | Fail | 20% | £1,680 |
| P2 next working day | 62 ÷ 64 | 96.9% | 95% | Pass | 15% | £0 |
| P3 in 28 working days | 126 ÷ 131 | 96.2% | 95% | Pass | 10% | £0 |
| First-time fix | 194 ÷ 213 | 91.1% | 90% | Pass | 10% | £0 |
| Calls in 30s | 1,196 ÷ 1,240 | 96.5% | 95% | Pass | 5% | £0 |
| Satisfaction | 390 ÷ 46 | 8.48 | 8.0 | Pass | 5% | £0 |
Credit: £8,400 × (25% + 20%) = £8,400 × 45% = £3,780. Net payable: £84,000 − £3,780 = £80,220.
The two statutory misses show why the certificate field matters: one legionella temperature check was done three days late, and one emergency lighting test was done on time but had no test record attached at month end. Under a "completion and document upload" definition both count. The P1 failure was water ingress at a depot intake room, made safe 4 hours 51 minutes after the call. One job out of 18 cost £1,680, which is why P1 volumes this low deserve daily monitoring rather than a month-end surprise.
The site breakdown also shows problems the contract-level figures hide. Harbour Leisure Centre's first-time fix is 88.3% (53 of 60) and its P2 and P3 results are below target, even though every one of those KPIs passes overall.
Ashcombe Borough Council: hard FM and building maintenance (fictional)
October 2026 · Contract month 7
Monthly contract KPI report
6 of 8 KPIs met.
Statutory PPM and P1 make-safe missed.
Service credit of £3,780 applies under the (hypothetical) contract mechanism.
- KPIs met
- 6 / 8
- Against contract targets
- Monthly charge
- £84,000
- 10% at risk
- Service credit
- £3,780
- Two KPIs failed
- Net payable
- £80,220
- Charge less credit
KPI results and service credits
| KPI | Target | Count | Actual | Result | Weight | Credit |
|---|---|---|---|---|---|---|
| KPI1Statutory PPM completed and certified by due date | 100% | 140 / 142 | 98.6% | Fail | 25% | £2,100 |
| KPI2Routine PPM completed by due date | 95% | 371 / 386 | 96.1% | Pass | 10% | – |
| KPI3P1 emergency made safe within 4 hours | 100% | 17 / 18 | 94.4% | Fail | 20% | £1,680 |
| KPI4P2 urgent completed by next working day | 95% | 62 / 64 | 96.9% | Pass | 15% | – |
| KPI5P3 routine completed within 28 working days | 95% | 126 / 131 | 96.2% | Pass | 10% | – |
| KPI6Reactive jobs fixed at first visit | 90% | 194 / 213 | 91.1% | Pass | 10% | – |
| KPI7Helpdesk calls answered within 30 seconds | 95% | 1196 / 1240 | 96.5% | Pass | 5% | – |
| KPI8Customer satisfaction, mean score out of 10 | 8.0 | 46 responses | 8.48 | Pass | 5% | – |
| Total service credit (10% of £84,000 at risk = £8,400) | £3,780 | |||||
By site (met / due)
| Site | Stat | Rtn | P1 | P2 | P3 | FTF |
|---|---|---|---|---|---|---|
| Ashcombe Civic Centre | 50/50 | 120/124 | 6/6 | 23/24 | 46/47 | 71/77 |
| Riverside Library | 23/24, below target | 69/71 | 4/4 | 12/12 | 20/21 | 34/37 |
| Harbour Leisure Centre | 43/44, below target | 108/113 | 5/5 | 17/18, below target | 35/37, below target | 53/60, below target |
| Elm Road Depot | 24/24 | 74/78, below target | 2/3, below target | 10/10 | 25/26 | 36/39 |
Stat = statutory PPM, Rtn = routine PPM, FTF = first-time fix. Amber: site below the contract target.
Breach log
PPM-30418 · KPI1Harbour Leisure Centre
Legionella monthly temperature check, calorifier 2
Due: 2026-10-14
Completed 17 Oct; certificate uploaded 21 Oct
PPM-30562 · KPI1Riverside Library
Emergency lighting monthly functional test
Due: 2026-10-21
Visit done 20 Oct; no test record attached at month end
J-48817 · KPI3Elm Road Depot
P1: water ingress at electrical intake room
Due: Logged 14:12, 9 Oct; due 18:12
Made safe 19:03 (4h 51m)
J-48902 · KPI4Ashcombe Civic Centre
P2: passenger lift out of service
Due: Next working day (13 Oct)
Completed 14 Oct, awaiting part
J-49011 · KPI4Harbour Leisure Centre
P2: pool hall AHU fault alarm
Due: Next working day (20 Oct)
Completed 21 Oct
Not listed: 15 routine PPM and 5 P3 jobs past due (KPIs passed).
Building it from your FSM data
The report above needs data from at least three places: the job system (PPM and reactive), the helpdesk or telephony export, and the contract schedule, which usually lives in a spreadsheet the bid team built. Survey scores often sit in a fourth tool. The manual version is a monthly export, a VLOOKUP between job and ticket references, and an argument about which timestamp counts.
The IVP.ai Data Layer connects those sources (anything with a REST API, any SQL database, and Excel files such as the KPI schedule), joins them on the keys above, and keeps the definitions in one governed place. A report or agent then runs on that data: the monthly KPI pack, or a daily Deskless by IVP.ai check that flags a P1 approaching its deadline or a statutory task without a certificate before the month closes. A national fire safety and security company used the same approach to unify HubSpot, Uptick and finance spreadsheets into one governed view, saving more than 10 hours a week on reporting (case study).
Related pages: the PPM compliance report template covers statutory PPM in more depth, field service KPIs covers the internal weekly pack, and engineer utilisation covers the resourcing side. More at field service reporting.
If you want to see your own contract's KPIs calculated from live data, the free 48-hour build connects up to three of your sources, cleans the data and sets one report or agent running within 48 hours of read-only access. You keep access for 14 days, then choose a plan or walk away.