| GBP millions | FY2020 | FY2021 | FY2022 | FY2023 | FY2024 | FY2025 | Trend | YoY |
|---|---|---|---|---|---|---|---|---|
| Revenue | 55.0 | 69.6 | 75.3 | 87.9 | 97.7 | 115.2 | +17.9% | |
| Cost of revenue | 40.8 | 51.2 | 55.7 | 65.1 | 72.2 | 86.5 | +19.8% | |
| Gross profit | 14.3 | 18.4 | 19.6 | 22.8 | 25.5 | 28.7 | +12.5% | |
| Research & development | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | 0.0 | — | |
| Selling, general & administrative | 7.9 | 4.8 | 5.7 | 13.7 | 12.9 | 15.3 | +18.3% | |
| Selling & marketing | 0.2 | 0.0 | 0.0 | 2.1 | 0.0 | 0.0 | — | |
| Operating expenses | 8.8 | 9.9 | 11.3 | 13.7 | 14.9 | 17.9 | +20.4% | |
| Operating income | 5.5 | 8.5 | 8.3 | 9.4 | 10.6 | 10.7 | +1.4% | |
| Interest expense | 0.1 | 0.1 | 0.1 | 0.7 | 0.9 | 0.8 | −7.8% | |
| Interest income | 0.0 | 0.0 | 0.2 | 1.6 | 2.0 | 3.2 | +62.6% | |
| Other income / expense | (0.1) | (0.1) | 0.1 | 0.9 | 1.1 | 3.9 | +255.2% | |
| Pre-tax income | 5.4 | 8.4 | 8.4 | 10.3 | 11.7 | 14.7 | +25.6% | |
| Income tax | 1.1 | 1.7 | 1.7 | 2.7 | 3.1 | 3.6 | +15.2% | |
| Net income | 4.3 | 6.6 | 6.7 | 7.6 | 8.5 | 11.1 | +29.4% | |
| 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.14 | 0.21 | 0.22 | 0.24 | 0.27 | 0.35 | +29.6% | |
| EPS, diluted (per share) | 0.14 | 0.21 | 0.21 | 0.24 | 0.27 | 0.34 | +25.9% | |
| EBITDA | 6.4 | 9.3 | 9.2 | 11.9 | 13.4 | 11.4 | −14.6% | |
| Depreciation & amortization | 0.9 | 0.9 | 0.9 | 0.9 | 0.8 | 0.7 | −16.1% | |
| Weighted average shares (shares) | 31,273,941 | 31,273,941 | 31,307,540 | 31,386,062 | 32,142,124 | 31,671,936 | −1.5% | |
| Weighted average diluted shares (shares) | 31,479,084 | 31,641,312 | 31,779,752 | 31,949,322 | 32,101,549 | 32,285,207 | +0.6% | |
| Gross margin | 25.9% | 26.4% | 26.0% | 26.0% | 26.1% | 24.9% | −1.2 pts | |
| Operating margin | 10.0% | 12.1% | 11.0% | 10.7% | 10.8% | 9.3% | −1.5 pts | |
| Net margin | 7.9% | 9.6% | 8.9% | 8.7% | 8.8% | 9.6% | +0.9 pts |
Amounts are shown in the stated units; per-share amounts and shares are unscaled. Negative amounts are in brackets.