Clubs
| Club | Seasons | Apps | Goals | Assists |
|---|---|---|---|---|
| Stockport | 2026/27 | 10 | 4 | 1 |
| St Mirren | 2022/23 – 2025/26 | 178 | 25 | 16 |
| Gillingham | 2019/20 – 2022/23 | 61 | 10 | 4 |
| Motherwell | 2022/23 | 12 | 3 | 1 |
| Crewe | 2020/21 – 2021/22 | 85 | 24 | 5 |
| Colchester | 2017/18 – 2018/19 | 95 | 12 | — |
| Wigan | 2016/17 – 2017/18 | 3 | 0 | — |
| Eastleigh | 2016/17 | 34 | 15 | — |
| Sunderland | 2012/13 – 2015/16 | 3 | 0 | — |
| Hartlepool | 2015/16 | 7 | 1 | — |
| Shrewsbury | 2014/15 | 3 | 0 | — |
| Fleetwood | 2013/14 | 13 | 1 | — |
Transfers
| Date | From | To | Type |
|---|---|---|---|
| 7 Jul 2023 | Motherwell | ST Mirren | Free |
| 13 Jan 2023 | Gillingham | Motherwell | Free |
| 11 Jul 2022 | Crewe | Gillingham | Free |
| 1 Aug 2020 | Gillingham | Crewe | Free |
| 25 Jul 2019 | Colchester | Gillingham | Free |
| 21 Jul 2017 | Wigan | Colchester | — |
| 31 Jan 2017 | Eastleigh | Wigan | — |
| 1 Jul 2016 | Sunderland | Eastleigh | Free |
| 28 Jan 2015 | Sunderland | Shrewsbury | Loan |
| 1 Jul 2014 | Fleetwood Town | Sunderland | — |
| 7 Jan 2014 | Sunderland | Fleetwood Town | Loan |
| 3 Aug 2026 | ST Mirren | Stockport County | Free agent |
| 4 Aug 2026 | ST Mirren | Stockport County | Free agent |
Season by season
| Season | Competition | Club | Apps | Starts | Min | Goals | Assists | Yellow | Red | Rating |
|---|---|---|---|---|---|---|---|---|---|---|
| 2026/27 | EFL Trophy | Stockport | 1 | 1 | 122 | 1 | 1 | 0 | 0 | 6.72 |
| 2026/27 | League One | Stockport | 9 | 0 | 148 | 3 | 0 | 0 | 0 | 6.79 |
| 2025/26 | League Cup | St Mirren | 11 | 9 | 623 | 1 | 1 | 0 | 0 | 6.68 |
| 2025/26 | Premiership | St Mirren | 37 | 30 | 2517 | 4 | 5 | 4 | 0 | 6.61 |
| 2024/25 | Premiership | St Mirren | 37 | 26 | 1809 | 7 | 2 | 5 | 0 | 6.93 |
| 2024/25 | FA Cup | St Mirren | 11 | 9 | 623 | 1 | 1 | 0 | 0 | 6.68 |
| 2024/25 | League Cup | St Mirren | 11 | 9 | 623 | 1 | 1 | 0 | 0 | 6.68 |
| 2024/25 | UEFA Europa Conference League | St Mirren | 11 | 9 | 623 | 1 | 1 | 0 | 0 | 6.68 |
| 2023/24 | Premiership | St Mirren | 36 | 29 | 2027 | 8 | 3 | 2 | 0 | 6.98 |
| 2023/24 | League Cup | St Mirren | 11 | 9 | 623 | 1 | 1 | 0 | 0 | 6.68 |
| 2023/24 | FA Cup | St Mirren | 2 | 1 | 97 | 0 | — | 0 | 0 | — |
| 2022/23 | FA Cup | Motherwell | 1 | 1 | 90 | 2 | — | 0 | 0 | — |
| 2022/23 | Premiership | Motherwell | 11 | 9 | 623 | 1 | 1 | 0 | 0 | 6.68 |
| 2022/23 | League Two | Gillingham | 23 | 20 | 1670 | 1 | 1 | 2 | 0 | 6.81 |
| 2022/23 | FA Cup | St Mirren | 11 | 9 | 623 | 1 | 1 | 0 | 0 | 6.68 |
| 2022/23 | League Cup | Gillingham | 4 | 1 | 124 | 2 | — | 0 | 0 | 7.00 |
| 2022/23 | EFL Trophy | Gillingham | 3 | 2 | 158 | 0 | 1 | 0 | 0 | 7.10 |
| 2022/23 | FA Cup | Gillingham | 3 | 2 | 155 | 1 | — | 0 | 0 | 6.70 |
| 2021/22 | League One | Crewe | 33 | 26 | 2440 | 7 | 1 | 3 | 0 | 6.88 |
| 2021/22 | EFL Trophy | Crewe | 4 | 4 | 333 | 3 | — | 1 | 0 | 7.57 |
| 2021/22 | League Cup | Crewe | 2 | 1 | 134 | 0 | — | 1 | 0 | 6.25 |
| 2021/22 | FA Cup | Crewe | 1 | 0 | 27 | 0 | — | 0 | 0 | — |
| 2020/21 | League One | Crewe | 42 | 36 | 3164 | 11 | 3 | 2 | 0 | 6.97 |
| 2020/21 | EFL Trophy | Crewe | 1 | 1 | 90 | 2 | 1 | 0 | 0 | 8.80 |
| 2020/21 | League Cup | Crewe | 1 | 1 | 90 | 0 | — | 0 | 0 | 6.90 |
| 2020/21 | FA Cup | Crewe | 1 | 1 | 90 | 1 | — | 0 | 0 | — |
| 2019/20 | League One | Gillingham | 23 | 13 | 1168 | 5 | 2 | 0 | 0 | 6.94 |
| 2019/20 | League Cup | Gillingham | 1 | 0 | 5 | 0 | — | 0 | 0 | 6.80 |
| 2019/20 | EFL Trophy | Gillingham | 2 | 2 | 159 | 1 | — | 1 | 0 | — |
| 2019/20 | FA Cup | Gillingham | 2 | 2 | 180 | 0 | — | 0 | 0 | — |
| 2018/19 | League Two | Colchester | 41 | 16 | 1661 | 2 | — | 3 | 0 | — |
| 2018/19 | League Cup | Colchester | 1 | 1 | 67 | 0 | — | 0 | 0 | — |
| 2018/19 | EFL Trophy | Colchester | 3 | 3 | 264 | 0 | — | 1 | 0 | — |
| 2018/19 | FA Cup | Colchester | 1 | 0 | 13 | 0 | — | 0 | 0 | — |
| 2017/18 | League Two | Colchester | 44 | 42 | 3624 | 10 | — | 9 | 1 | — |
| 2017/18 | FA Cup | Colchester | 1 | 1 | 90 | 0 | — | 0 | 0 | — |
| 2017/18 | League Cup | Colchester | 1 | 1 | 90 | 0 | — | 0 | 0 | 6.20 |
| 2017/18 | EFL Trophy | Colchester | 3 | 2 | 197 | 0 | — | 0 | 0 | — |
| 2016/17 | Championship | Wigan | 3 | 1 | 83 | 0 | — | 0 | 0 | 6.67 |
| 2016/17 | National League | Eastleigh | 28 | 24 | 2195 | 10 | — | 2 | 0 | — |
| 2016/17 | FA Cup | Eastleigh | 6 | 5 | 415 | 5 | — | 0 | 0 | — |
| 2015/16 | League Two | Hartlepool | 5 | 3 | 274 | 0 | — | 1 | 0 | — |
| 2015/16 | FA Cup | Hartlepool | 2 | 1 | 108 | 1 | — | 0 | 0 | — |
| 2014/15 | League Two | Shrewsbury | 3 | 2 | 138 | 0 | — | 0 | 0 | — |
| 2014/15 | Premier League | Sunderland | 1 | 0 | 4 | 0 | — | 0 | 0 | — |
| 2013/14 | League Two | Fleetwood | 11 | 4 | 396 | 1 | — | 0 | 0 | — |
| 2013/14 | EFL Trophy | Fleetwood | 2 | 0 | 49 | 0 | — | 0 | 0 | — |
| 2012/13 | Premier League | Sunderland | 2 | 0 | 20 | 0 | — | 1 | 0 | — |
Availability history
| Reason | From | Until | Days |
|---|---|---|---|
| Injury | 1 Mar 2025 | 27 Mar 2025 | 26 |
| Injury | 7 Mar 2020 | 3 Sept 2020 | 180 |
| Injury | 20 Apr 2025 | 1 May 2025 | 11 |
| Thigh Injury | 21 Jan 2023 | 16 Mar 2023 | 54 |
Trophies
| Competition | Season | Place |
|---|---|---|
| League Two (England) | 2014/2015 | 2nd Place |
