Born in Amsterdam, Gravenberch began playing football in the youth ranks of local amateur side SV Bijlmer, from where he was recruited to join the Ajax Academy in 2002. Gravenberch helped the Ajax A1 youth squad win the 2011–12 Nike Eredivisie league title. The team finished as runners-up to Inter Milan in the NextGen Series (the Champions League equivalent for under-20 teams) after losing on penalties (5–3) following a 1–1 deadlock after extra time.
On 7 June 2012, it was announced that Gravenberch had signed his first professional contract, a three-year deal binding him to the club until 30 June 2015. Gravenberch began his career in the youth teams of Ajax as a striker, but was moved back to play as a defender while playing for Jong Ajax under manager Fred Grim in the 2012–13 Beloften Eredivisie. Jong Ajax were promoted to the Eerste Divisie, the second tier of professional football in the Netherlands, for the 2013–14 season. Gravenberch made his professional debut in a 2–0 away loss to FC Oss in the Eerste Divisie on 8 August 2013. He was cautioned before being replaced by Sven Nieuwpoort on 46 minutes.
On 17 January 2014, it was announced that Gravenberch had been sent on loan to NEC until the end of the season.
On 4 September 2014, it was announced that Gravenberch had signed with Romanian club Universitatea Cluj. The move came after an unsuccessful trial period with Scottish Premiership side Dundee. Gravenberch signed a 2-year contract with U Cluj, reuniting him with his former coach and now technical director of the club Alfons Groenendijk, as well as newly appointed manager and former Ajax player George Ogăraru. He made his Liga I debut on 14 September 2014 in an away match against FC Rapid București which ended in a 2–1 loss.
On 24 June 2015 it was announced that Gravenberch had returned to the Netherlands, signing with the recently relegated FC Dordrecht, competing in the Eerste Divisie.
On 25 May 2016 Reading announced the signing of Gravenberch on a three-year contract, the deal was then officially completed when the transfer window opened on 1 July 2016. On 23 August 2016 Gravenberch made his competitive debut vs MK Dons in the EFL Cup. He made his league debut as a late substitute against Aston Villa on 18 October 2016. In October 2016, Gravenberch was criticized by Arsenal manager, Arsene Wenger, for a challenge on Lucas Perez, which left the Arsenal striker out for at least 6 weeks.
On 4 July 2017, Gravenberch moved to Belgian First Division B club Roeselare on a season-long loan deal.
Gravenberch has played for the Netherlands at various youth levels. On 6 February 2010, he received his first U-16 cap in a match against Italy at the Albufeira 4 Nations Tournament in Portugal.
On 17 September 2010, Gravenberch made his U-17 debut in another encounter with Italy during the Ursapharm-Vier-Nationen-Turnier in Germany. The following year, he was selected by Albert Stuivenberg to play in the 2012 UEFA European Under-17 Championship, where he helped the Netherlands to their second consecutive title, defeating Germany in the final 5–4 on penalties, after extra time following a 1–1 deadlock. Gravenberch was also selected for the 2011 FIFA U-17 World Cup in Mexico where he scored his first goal in the second group stage match against North Korea. He appeared in all three group stage matches, of which they managed one victory, a draw and a loss resulting in an early exit from the tournament for the Dutch.
On 11 November 2011, Gravenberch made his U-18 debut in a friendly match against Romania. His U-19 debut came in a friendly match against Scotland on 10 September 2012. He was selected by U-19 head coach Wim van Zwam for the 2013 UEFA European Under-19 Championship in Lithuania, appearing in all three group stage matches before being eliminated following one win and two losses.As of match played 26 August 2017
Ajax A1 (under-19)
A-Junioren Eredivisie: 2011–12
NextGen Series Runner-up: 2011–12
Netherlands U-17UEFA European Under-17 Football Championship (1): 2012