A member of Kilmarnock's under-20 squad O'Hara made his first team debut on 28 August 2012, coming on as a 13th-minute substitute in a Scottish League Cup match against Stenhousemuir, replacing the injured Jeroen Tesselaar in a 2–1 defeat.[4] Aged just 16 on his debut, O'Hara became the fifth youngest person to play competitively for Kilmarnock and only the second youngest in that competition.[5] On 27 October 2012, he made his first start and league debut[6] in a 2–0 win over Celtic at Celtic Park, Kilmarnock's first win at the venue since 1955.[7]
Dundee
O'Hara signed for Dundee in June 2016.[8] Upon signing for Dundee, he was moved into an attacking midfield position by manager Paul Hartley, who said he didn't know why O'Hara had previously been playing as a defender.[9] On 13 August 2016, he scored his first career goal, in Dundee's 2–1 defeat against Rangers.[10][9] He then scored again in the following match, getting the equaliser in a 1–1 draw against Hamilton Academical.[11]
On the 19th of February 2017, he scored the opening goal as Dundee won 2–1 against Rangers, the first time since 1992 that Dundee had beaten them at home in the league.[12] Following Paul Hartley's departure from Dundee, O'Hara scored in new manager Neil McCann's first match in charge, a 3–2 win against Motherwell.
O'Hara scored an equalising goal in a 1–1 draw in the Dundee derby against Dundee United in the Scottish league cup group stage. He scored again against Rangers, getting both goals in a 2–1 home win on 24 November 2017, this was O'Hara's fourth goal against Rangers in his third home game against them.[13]
Peterborough United
O'Hara moved to Peterborough United in May 2018 under freedom of contract, with Dundee receiving a compensation fee.[14]
His aggressive and tenacious midfield style saw him make an instant impact with the Imps, making 17 appearances as Danny Cowley's side won the league title by six points over Bury and MK Dons.[17]
He was transfer-listed by Peterborough United at the end of the 2018–19 season.[18]
On 24 June 2020, Motherwell announced the signing of O'Hara on a permanent deal from Peterborough United for a nominal fee, signing a two-year contract.[20]
St Mirren
In May 2022 following the expiry of his Motherwell contract, O'Hara signed for fellow Scottish Premiership side St Mirren on a two-year deal, having previously signed a pre-contract agreement with the Buddies in March.[21][22]
In March 2023, O'Hara extended his contract until the summer of 2026 after establishing himself as a regular in the Saints team.[23]