Full Back · Shrewsbury · season-by-season, by competition, and every match.
Below his 2024/25 peak but holding a solid level — the platform for a return is there.
The record covers 6 seasons (2021/22–2025/26) across 5 clubs — 144 appearances with 14 goal contributions from defence.
His best campaign on record is 2024/25 at Cheltenham — Season rating 66, 2 goals and 4 assists in 41 games. 2024/25 was the leap — Season rating up 39 points at Cheltenham. Output has held steady across his last 3 full seasons (27 → 22). The gap to his peak is 44 Season points.
A streaky profile — form has swung hard between campaigns (spread of ±17 points), so the peak and the trough are far apart.
| Season | Club | Apps | G | A | Rating | Season |
|---|---|---|---|---|---|---|
| 2025/26 | Shrewsbury | 29 | 2 | 2 | 25 | 22 |
| 2024/25 | Cheltenham | 41 | 2 | 4 | 33 | 66 |
| 2023/24 | Bradford | 26 | 0 | 0 | 31 | 27 |
| 2022/23 | Bradford | 21 | 1 | 0 | 32 | 21 |
| 2021/22 | Exeter City | 22 | 2 | 0 | 33 | 24 |
| 2020/21 | Fleetwood Town | 5 | 1 | 0 | 42 | 4 |
| Competition | Apps | Min | G | A | Rating |
|---|---|---|---|---|---|
| League Two | 29 | 2504 | 2 | 2 | 6.9 |
| FA Cup | 2 | 172 | 0 | 0 | 6.5 |
| EFL Trophy | 2 | 90 | 0 | 0 | 6.3 |
| Date | Competition | Opponent | Res | Status | Min | G | A | Rating |
|---|---|---|---|---|---|---|---|---|
| Jul 9 | Friendlies Clubs | A Stoke City | 1-0 | Not in squad | — | |||
| Jul 19 | Friendlies Clubs | H Kidderminster Harriers | 3-0 | Not in squad | — | |||
| Jul 22 | Friendlies Clubs | H Bolton | 2-5 | Not in squad | — | |||
| Aug 2 | League Two | H Bromley | 0-0 | Played | 90 | 7.3 | ||
| Aug 9 | League Two | A Tranmere | 0-4 | Played | 90 | 6.3 | ||
| Aug 12 | League Cup | A Grimsby | 1-3 | Unused sub | 0 | — | ||
| Aug 16 | League Two | H Colchester | 0-2 | Played | 90 | 7.3 | ||
| Aug 20 | League Two | A Notts County | 1-4 | Played | 90 | 1 | 5.6 | |
| Aug 23 | League Two | A Swindon Town | 1-2 | Played | 90 | 7.9 | ||
| Aug 26 | EFL Trophy | H Chelsea U21 | 3-1 | Not in squad | — | |||
| Aug 30 | League Two | H Accrington ST | 0-0 | Played | 90 | 7.7 | ||
| Sep 2 | EFL Trophy | H Walsall | 1-3 | Unused sub | 0 | — | ||
| Sep 6 | League Two | A Barnet | 3-1 | Played | 95 | 6.5 | ||
| Sep 13 | League Two | H Salford City | 1-3 | Played | 90 | 6.5 | ||
| Sep 20 | League Two | A Harrogate Town | 0-2 | Played | 50 | 7.2 | ||
| Sep 27 | League Two | H Milton Keynes Dons | 1-2 | Played | 90 | 6.7 | ||
| Oct 4 | League Two | A Barrow | 0-0 | Played | 90 | 7.2 | ||
| Oct 11 | League Two | H Cambridge United | 2-0 | Played | 90 | 7.2 | ||
| Oct 18 | League Two | H Crawley Town | 1-0 | Played | 90 | 7.6 | ||
| Oct 25 | League Two | A Oldham | 2-2 | Played | 90 | 6.9 | ||
| Nov 2 | FA Cup | A South Shields | 3-1 | Played | 90 | 6.7 | ||
| Nov 8 | League Two | A Crewe | 1-3 | Played | 64 | 5.9 | ||
| Nov 11 | EFL Trophy | A Northampton | 1-2 | Played | 90 | 6.3 | ||
| Nov 15 | League Two | H Newport County | 1-0 | Played | 90 | 6.9 | ||
| Nov 22 | League Two | A Fleetwood Town | 1-3 | Played | 90 | 7.2 | ||
| Nov 29 | League Two | H Gillingham | 3-3 | Played | 90 | 5.3 | ||
| Dec 6 | FA Cup | A Sutton Utd | 2-1 | Played | 82 | 6.2 | ||
| Dec 9 | League Two | H Grimsby | 1-1 | Played | 90 | 6.6 | ||
| Dec 13 | League Two | A Walsall | 1-1 | Not in squad | — | |||
| Dec 20 | League Two | H Chesterfield | 0-1 | Unused sub | 0 | — | ||
| Dec 26 | League Two | A Cheltenham | 1-3 | Not in squad | — | |||
| Dec 29 | League Two | A Grimsby | 0-1 | Not in squad | — | |||
| Jan 1 | League Two | H Bristol Rovers | 0-3 | Not in squad | — | |||
| Jan 10 | FA Cup | A Wolves | 1-6 | Not in squad | — | |||
| Jan 17 | League Two | H Harrogate Town | 1-0 | Not in squad | — | |||
| Jan 24 | League Two | A Milton Keynes Dons | 1-5 | Not in squad | — | |||
| Jan 27 | League Two | A Cambridge United | 0-1 | Not in squad | — | |||
| Jan 31 | League Two | H Barnet | 0-0 | Played | 90 | 6.9 | ||
| Feb 7 | League Two | A Colchester | 0-2 | Not in squad | — | |||
| Feb 10 | League Two | H Barrow | 2-1 | Not in squad | — | |||
| Feb 14 | League Two | H Swindon Town | 3-1 | Unused sub | 0 | — | ||
| Feb 17 | League Two | H Notts County | 1-0 | Unused sub | 0 | — | ||
| Feb 21 | League Two | A Accrington ST | 2-0 | Unused sub | 0 | — | ||
| Feb 24 | League Two | A Salford City | 2-1 | Unused sub | 0 | — | ||
| Feb 28 | League Two | H Walsall | 1-2 | Played | 46 | 6.2 | ||
| Mar 7 | League Two | A Chesterfield | 3-2 | Played | 90 | 1 | 7.2 | |
| Mar 14 | League Two | H Cheltenham | 0-2 | Played | 90 | 6.6 | ||
| Mar 17 | League Two | A Bristol Rovers | 0-1 | Played | 89 | 7.0 | ||
| Mar 21 | League Two | H Crewe | 0-4 | Unused sub | 0 | — | ||
| Mar 28 | League Two | A Newport County | 0-1 | Played | 90 | 7.3 | ||
| Apr 3 | League Two | H Tranmere | 1-0 | Played | 90 | 1 | 8.3 | |
| Apr 7 | League Two | A Bromley | 1-2 | Played | 90 | 6.2 | ||
| Apr 11 | League Two | H Oldham | 1-0 | Played | 90 | 7.3 | ||
| Apr 18 | League Two | A Crawley Town | 0-0 | Unused sub | 0 | — | ||
| Apr 25 | League Two | H Fleetwood Town | 2-2 | Played | 90 | 1 | 6.9 | |
| May 2 | League Two | A Gillingham | 0-1 | Unused sub | 0 | — |