In 2008 Shackleton joined the Democratic Alliance's student organisation at the University of Pretoria.[2] He then became the leader of the party's student organisation at the university and joined the university's student representative council in 2010.[2] He also graduated from the DA's Young Leaders Programme.[2]
He became a councillor in the City of Tshwane Metropolitan Municipality in 2014, representing the DA.[2] In July 2018, Shackleton was cited by News24 as one of "100 Young Mandelas" in the category "Resilience".[1]
Shackleton entered the National Assembly, the lower house of the South African parliament, on 11 September 2018 as a replacement for Ian Ollis.[3][2] During his time in parliament, he was a member of the Standing Committee on Appropriations.[4]
For the 2019 elections, Shackleton was the 20th candidate on the DA's provincial list for the Gauteng Provincial Legislature election. He was also 81st on the DA's national list and 24th on the party's regional list for the National Assembly election.[5] At the election, he won a seat in the provincial legislature.[6] He served as the DA's Shadow MEC for Community Safety. He was also a member of the Public Accounts committee and the Community Safety portfolio committee.[4]
On 28 April 2022, Shackleton announced in an uploaded video posted on social media that he had resigned as a DA member and therefore as the DA's Gauteng North regional deputy chairperson and as a member of the provincial legislature. He joined ActionSA. Shackleton cited that "the regression of the DA as an inclusive home for all South Africans, and its abandonment of being an electoral alternative to the ANC" and the way the DA treated the community of Ward 96 in Tshwane, of which Shackleton is a resident, as the reasons for his resignation. Shackleton criticised Tshwane mayor Randall Williams and DA leaders Helen Zille and John Steenhuisen for campaigning in ward 96 ahead of the by-election on 4 May 2022 and said that they would "disappear" after the by-election.[7] The DA won the by-election on 4 May.[8]