Ceballos va ingressar al planter del Sevilla FC el 2004 a 8 anys, però en va sortir el 2009 a causa d'una bronquitis crònica.[3] A continuació va anar al CD Utrera, i va finalitzar la seva formació al Reial Betis on va arribar el 2011;[4] va signar un contracte professional amb el Betis el 22 de febrer de 2014, essent encara júnior.[5]
El 26 d'abril de 2014, quan encara no havia jugat amb l'equip B, Ceballos va jugar el seu primer partit oficial amb el primer equip a La Liga, entrant com a supent en una derrota per 0–1 a casa contra laReial Societat.[6] El 21 de desembre, va marcar el seu primer gol com a professional, el primer d'una victòria per 2–0 a casa contra el Racing de Santander a la Segona Divisió;[7] va jugar en 33 partits i va marcar cinc gols pels vert-i-blancs durant la temporada, en la qual l'equip va retornar a la primera divisió.
El 15 d'octubre de 2015, després de llargues negociacions, Ceballos va renovar el contracte fins al 2020.[8]
Reial Madrid
El 14 de juliol de 2017 va fitxar pel Reial Madrid, per sis temporades,[9] a canvi d'uns 18 milions d'euros.[10][11][12]
Va debutar amb el Madrid el 16 d'agost, substituint Toni Kroos al minut 80 al partit de tornada de la Supercopa d'Espanya, una victòria per 2–0 a casa contra el FC Barcelona.[13] El 23 de setembre, en la seva primera titularitat, va marcar un doblet en una victòria per 2–1 a fora contra el Deportivo Alavés.[14]
Ceballos va disputar quatre partits a la Lliga de Campions de la UEFA 2017–18,[15] en què el Madrid va guanyar el seu tercer títol consecutiu, i 13è en total en la història del torneig.[16] El 13 de gener de 2019, després de només 15 minuts al camp, i havent estat contínuament xiulat pels aficionats del seu anterior club, va marcar de falta directa en el darrer minut, per guanyar el partit 2–1 contra el Betis al Benito Villamarín.[17]
Arsenal
El 25 de juliol de 2019, va anar cedit a l'Arsenal per un any. Se li va assignar la samarreta amb el número 8, que havia deixat vacant Aaron Ramsey, acabat de traspassar a la Juventus FC.[18][19]
Carrera internacional
El 5 de novembre de 2014, Ceballos fou convocat per la selecció espanyola sub-19,[20] i va jugar contra les seleccions sub-19 d'Alemanya, França[21] i Grècia, en un torneig disputat en aquest darrer país.[22] Va debutar amb la selecció espanyola sub-21 el 26 de març de 2015, substituint Samu Castillejo a la mitja part en un partit amistós guanyat 2–0 contra Noruega sub-21 a Cartagena; quatre dies després, a Lleó, va ser titular per primer cop, en una victòria per 4–0 contra Belarús sub-19.[23]