W 1997 został posłem III kadencji z listy AWS z okręgu poznańskiego. W Sejmie zasiadał w Komisji Finansów Publicznych oraz Komisji Polityki Przestrzennej, Budowlanej i Mieszkaniowej. W 2001 ubiegał się o reelekcję z listy AWSP, która nie osiągnęła progu wyborczego dla koalicji. W okresie 2001–2005 był dyrektorem administracyjnym Kolegium Europejskiego w Gnieźnie przy Uniwersytecie im. Adama Mickiewicza. W 2005 po czteroletniej przerwie ponownie uzyskał mandat poselski, otrzymując w wyborach parlamentarnych 6546 głosów z listy Platformy Obywatelskiej w okręgu konińskim. W V kadencji pracował w Komisji Finansów Publicznych.
W wyborach parlamentarnych w 2007 po raz trzeci został posłem z wynikiem 17 394 głosy. W 2009 objął funkcję przewodniczącego Komisji Finansów Publicznych. W wyborach w 2011 uzyskał reelekcję, otrzymując 12 627 głosów. W 2015 został ponownie wybrany do Sejmu, otrzymując 17 925 głosów. W Sejmie VIII kadencji został zastępcą przewodniczącego Komisji Cyfryzacji, Innowacyjności i Nowoczesnych Technologii oraz członkiem Komisji Finansów Publicznych.
W wyborach w 2019 został wybrany w skład Senatu X kadencji. Kandydował z ramienia Koalicji Obywatelskiej w okręgu nr 92, otrzymując 76 897 głosów.