Clubs
| Club | Seasons | Apps | Goals | Assists |
|---|---|---|---|---|
| Bristol Rovers | 2025/26 – 2026/27 | 28 | 0 | 1 |
| Wycombe | 2026/27 | 0 | 0 | 0 |
| Tranmere | 2024/25 – 2025/26 | 32 | 0 | 1 |
| Bradford | 2022/23 – 2024/25 | 156 | 7 | 12 |
| Hull City | 2020/21 – 2022/23 | 74 | 2 | 2 |
| Blackburn | 2017/18 – 2019/20 | 88 | 3 | 1 |
| Blackburn Rovers U23 | 2019 | 6 | 0 | — |
| Rotherham | 2013/14 – 2016/17 | 112 | 2 | 2 |
| Scunthorpe | 2016/17 | 18 | 1 | — |
| Middlesbrough | 2010/11 – 2014/15 | 73 | 4 | — |
Transfers
| Date | From | To | Type |
|---|---|---|---|
| 1 Jul 2022 | Hull City | Bradford | Free |
| 11 Aug 2020 | Blackburn | Hull City | Free |
| 20 Jun 2017 | Rotherham | Blackburn | Free |
| 9 Jan 2017 | Scunthorpe | Rotherham | — |
| 3 Jan 2017 | Scunthorpe | Rotherham | — |
| 31 Aug 2016 | Rotherham | Scunthorpe | Loan |
| 19 Aug 2014 | Middlesbrough | Rotherham | — |
| 1 Jul 2014 | Rotherham | Middlesbrough | — |
| 23 Jan 2014 | Middlesbrough | Rotherham | Loan |
| 14 Jul 2025 | Bradford | Tranmere | Free Transfer |
| 1 Feb 2026 | Tranmere | Bristol Rovers | Loan |
Season by season
| Season | Competition | Club | Apps | Starts | Min | Goals | Assists | Yellow | Red | Rating |
|---|---|---|---|---|---|---|---|---|---|---|
| 2026/27 | League Cup | Bristol Rovers | 1 | 1 | 55 | 0 | 0 | 0 | 0 | 7.30 |
| 2026/27 | EFL Trophy | Bristol Rovers | 2 | 1 | 41 | 0 | 0 | 0 | 0 | 6.32 |
| 2026/27 | League Two | Bristol Rovers | 10 | 9 | 707 | 0 | 0 | 1 | 0 | 5.72 |
| 2025/26 | League Cup | Tranmere | 1 | 1 | 60 | 0 | 0 | 0 | 0 | 7.00 |
| 2025/26 | EFL Trophy | Tranmere | 4 | 2 | 255 | 0 | 0 | 0 | 0 | 7.25 |
| 2025/26 | League Two | Tranmere | 26 | 20 | 1790 | 0 | 1 | 4 | 0 | 6.95 |
| 2025/26 | League Two | Bristol Rovers | 15 | 13 | 1179 | 0 | 1 | 3 | 0 | 7.09 |
| 2024/25 | FA Cup | Bradford | 2 | 2 | 177 | 0 | — | 0 | 0 | — |
| 2024/25 | League Two | Bradford | 43 | 43 | 3791 | 2 | 3 | 9 | 1 | 7.05 |
| 2024/25 | FA Cup | Tranmere | 1 | 1 | 60 | — | 0 | 0 | 0 | 7.00 |
| 2024/25 | League Cup | Bradford | 1 | 1 | 90 | 0 | 0 | 0 | 0 | 6.70 |
| 2024/25 | EFL Trophy | Bradford | 7 | 5 | 472 | 1 | 1 | 2 | 0 | 7.16 |
| 2023/24 | League Two | Bradford | 42 | 39 | 3443 | 1 | 2 | 13 | 0 | 7.08 |
| 2023/24 | EFL Trophy | Bradford | 6 | 6 | 496 | 0 | — | 2 | 0 | 7.30 |
| 2023/24 | FA Cup | Bradford | 1 | 1 | 90 | 0 | — | 0 | 0 | — |
| 2023/24 | League Cup | Bradford | 2 | 2 | 164 | 0 | — | 0 | 0 | 6.90 |
| 2022/23 | League Two | Bradford | 47 | 47 | 4201 | 3 | 6 | 10 | 0 | 7.28 |
| 2022/23 | League Cup | Bradford | 2 | 2 | 172 | 0 | — | 1 | 0 | 7.10 |
| 2022/23 | EFL Trophy | Bradford | 2 | 2 | 133 | 0 | — | 0 | 0 | 6.90 |
| 2022/23 | FA Cup | Bradford | 1 | 1 | 90 | 0 | — | 0 | 0 | — |
| 2021/22 | Championship | Hull City | 42 | 40 | 3428 | 2 | 2 | 10 | 0 | 6.94 |
| 2021/22 | FA Cup | Hull City | 1 | 1 | 63 | 0 | — | 0 | 0 | 6.70 |
| 2020/21 | League One | Hull City | 27 | 23 | 1920 | 0 | — | 6 | 0 | 6.87 |
| 2020/21 | FA Cup | Hull City | 1 | 1 | 90 | 0 | — | 1 | 0 | — |
| 2020/21 | EFL Trophy | Hull City | 1 | 1 | 90 | 0 | — | 0 | 0 | 7.20 |
| 2020/21 | League Cup | Hull City | 2 | 2 | 107 | 0 | — | 0 | 0 | 6.85 |
| 2019 | Premier League 2 | Blackburn Rovers U23 | 5 | 5 | 450 | 0 | — | 4 | 0 | — |
| 2019/20 | League Cup | Blackburn | 2 | 2 | 118 | 0 | — | 0 | 0 | 6.95 |
| 2019 | Premier League International Cup | Blackburn Rovers U23 | 1 | 1 | 90 | 0 | — | 0 | 0 | — |
| 2018/19 | Championship | Blackburn | 32 | 29 | 2239 | 0 | 1 | 8 | 1 | 6.72 |
| 2018/19 | FA Cup | Blackburn | 1 | 1 | 103 | 0 | — | 0 | 0 | 7.20 |
| 2018/19 | Club Friendlies | Blackburn | 1 | 1 | 60 | 0 | — | 0 | 0 | — |
| 2017/18 | League One | Blackburn | 46 | 46 | 3888 | 2 | — | 11 | 0 | — |
| 2017/18 | League Cup | Blackburn | 2 | 2 | 180 | 1 | — | 0 | 0 | — |
| 2017/18 | EFL Trophy | Blackburn | 2 | 1 | 134 | 0 | — | 0 | 0 | — |
| 2017/18 | FA Cup | Blackburn | 2 | 1 | 134 | 0 | — | 0 | 0 | — |
| 2016/17 | EFL Trophy | Scunthorpe | 2 | 1 | 91 | 0 | — | 0 | 0 | — |
| 2016/17 | FA Cup | Scunthorpe | 1 | 1 | 77 | 0 | — | 0 | 0 | — |
| 2016/17 | Championship | Rotherham | 4 | 2 | 247 | 0 | — | 1 | 0 | 6.74 |
| 2016/17 | League One | Scunthorpe | 15 | 6 | 647 | 1 | — | 0 | 0 | — |
| 2016/17 | League Cup | Rotherham | 1 | 1 | 120 | 0 | — | 0 | 0 | — |
| 2015/16 | Championship | Rotherham | 43 | 42 | 3736 | 1 | 2 | 8 | 0 | 7.08 |
| 2015/16 | League Cup | Rotherham | 1 | 1 | 90 | 0 | — | 1 | 0 | — |
| 2015/16 | FA Cup | Rotherham | 1 | 1 | 90 | 0 | — | 0 | 0 | — |
| 2014/15 | Championship | Rotherham | 41 | 37 | 3304 | 1 | — | 7 | 0 | — |
| 2014/15 | FA Cup | Rotherham | 1 | 1 | 90 | 0 | — | 1 | 0 | — |
| 2014/15 | League Cup | Middlesbrough | 1 | 0 | 20 | 0 | — | 0 | 0 | — |
| 2013/14 | League One | Rotherham | 20 | 19 | 1629 | 0 | — | 2 | 1 | — |
| 2013/14 | Championship | Middlesbrough | 13 | 9 | 881 | 0 | — | 1 | 0 | — |
| 2012/13 | Championship | Middlesbrough | 22 | 13 | 1240 | 2 | — | 4 | 0 | — |
| 2012/13 | League Cup | Middlesbrough | 4 | 2 | 206 | 1 | — | 1 | 0 | — |
| 2012/13 | FA Cup | Middlesbrough | 2 | 2 | 151 | 0 | — | 0 | 0 | — |
| 2011/12 | Championship | Middlesbrough | 13 | 7 | 663 | 0 | — | 1 | 0 | — |
| 2011/12 | League Cup | Middlesbrough | 3 | 2 | 201 | 0 | — | 0 | 0 | — |
| 2011/12 | FA Cup | Middlesbrough | 2 | 1 | 141 | 0 | — | 0 | 0 | — |
| 2010/11 | Championship | Middlesbrough | 13 | 7 | 653 | 1 | — | 1 | 0 | — |
Availability history
| Reason | From | Until | Days |
|---|---|---|---|
| Red Card | 30 Dec 2018 | 1 Jan 2019 | 2 |
| Injury | 30 Oct 2021 | 1 Nov 2021 | 2 |
| Red Card | 15 Apr 2025 | 17 Apr 2025 | 2 |
| Red Card | 10 Jan 2019 | 12 Jan 2019 | 2 |
Trophies
| Competition | Season | Place |
|---|---|---|
| League One (England) | 2020/2021 | Winner |
| League One (England) | 2017/2018 | 2nd Place |
