| GBP millions | FY2020 | FY2021 | FY2022 | FY2023 | FY2024 | FY2025 | Trend | YoY |
|---|---|---|---|---|---|---|---|---|
| Revenue | 52.0 | 59.5 | 68.4 | 77.3 | 70.1 | 68.9 | −1.7% | |
| Cost of revenue | 31.7 | 36.6 | 42.6 | 47.3 | 45.0 | 46.5 | +3.4% | |
| Gross profit | 20.3 | 23.0 | 25.8 | 30.1 | 25.1 | 22.4 | −10.9% | |
| Research & development | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | — | |
| Selling, general & administrative | 12.8 | 13.4 | 14.2 | 16.4 | 15.6 | 17.8 | +14.1% | |
| Selling & marketing | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | — | |
| Operating expenses | 13.9 | 13.4 | 14.2 | 17.7 | 17.0 | 17.8 | +5.1% | |
| Operating income | 7.5 | 9.9 | 11.6 | 12.3 | 8.2 | 4.6 | −44.2% | |
| Interest expense | 0.7 | 0.2 | 0.2 | 0.1 | 0.5 | 0.3 | −23.6% | |
| Interest income | 0.0 | 0.0 | 0.0 | 0.3 | 0.2 | 0.0 | −100.0% | |
| Other income / expense | (0.6) | (0.2) | (0.2) | 0.1 | (0.2) | (0.2) | −2.4% | |
| Pre-tax income | 6.9 | 9.7 | 11.4 | 12.5 | 8.0 | 4.3 | −45.5% | |
| Income tax | 1.9 | 3.6 | 2.5 | 2.8 | 1.9 | 0.7 | −62.8% | |
| Net income | 4.9 | 6.1 | 8.9 | 9.7 | 6.1 | 3.7 | −40.2% | |
| Discontinued operations | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | — | |
| Other net income adjustments | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | — | |
| EPS, basic (per share) | 0.05 | 0.07 | 0.09 | 0.10 | 0.07 | 0.04 | −38.8% | |
| EPS, diluted (per share) | 0.05 | 0.06 | 0.09 | 0.10 | 0.06 | 0.04 | −39.0% | |
| EBITDA | 12.3 | 14.7 | 16.7 | 18.1 | 13.7 | 9.9 | −27.8% | |
| Depreciation & amortization | 4.7 | 4.8 | 5.0 | 5.5 | 5.3 | 5.3 | +0.9% | |
| Weighted average shares (shares) | 93,680,537 | 94,305,964 | 94,467,688 | 92,535,734 | 92,601,027 | 90,659,952 | −2.1% | |
| Weighted average diluted shares (shares) | 99,368,224 | 97,684,101 | 96,444,459 | 95,482,319 | 94,577,798 | 92,542,587 | −2.2% | |
| Gross margin | 39.1% | 38.6% | 37.7% | 38.9% | 35.8% | 32.5% | −3.4 pts | |
| Operating margin | 14.4% | 16.7% | 16.9% | 16.0% | 11.7% | 6.6% | −5.0 pts | |
| Net margin | 9.5% | 10.3% | 13.0% | 12.5% | 8.7% | 5.3% | −3.4 pts |
Amounts are shown in the stated units; per-share amounts and shares are unscaled. Negative amounts are in brackets.