Tanto quanto eu sei, não há tal site ou aplicativo que permita reservar voos baratos de última hora. Então você tem que usar qualquer um dos serviços bem conhecidos. Em particular, a viagem de voo entre Barcelona e Madrid (ou vice-versa) é conhecida como "puente aereo" (literalmente "ponte aérea") e em geral a empresa mais barata que opera esta rota é Vueling (13 voos por dia). Preços a partir de 50-70 €, mas depende do horário.
Além disso, o trem de alta velocidade é uma boa opção e o ônibus é a opção mais barata.