Z listy PiS w wyborach parlamentarnych w 2001 bez powodzenia kandydował do Sejmu, a w wyborach w 2005 został wybrany na posła V kadencji w okręgu podlaskim. W 2006 kandydował w wyborach na urząd prezydenta Łomży. Uzyskał 24,8% poparcia w 1. turze, w 2. przegrał z ubiegającym się o reelekcję Jerzym Brzezińskim. W wyborach w 2007 po raz drugi uzyskał mandat poselski, otrzymując 10 457 głosów. W 2010 również ubiegał się o funkcję prezydenta Łomży; w drugiej turze dostał 39,1% głosów, przegrywając z byłym posłem SLD Mieczysławem Czerniawskim.
W wyborach do Sejmu w 2011 z powodzeniem ubiegał się o reelekcję, dostał 13 502 głosy. W 2015 został ponownie wybrany do Sejmu, otrzymując 15 106 głosów. Został m.in. wiceprzewodniczącym Komisji do Spraw Unii Europejskiej. Powoływany na wiceprzewodniczącego klubu parlamentarnego PiS. W wyborach w 2019 utrzymał mandat na kolejną kadencję, uzyskując 16 138 głosów.
We wrześniu 2020 został przez prezesa PiS Jarosława Kaczyńskiego zawieszony w prawach członka partii za złamanie dyscypliny klubowej, głosując przeciwko nowelizacji ustawy o ochronie zwierząt. Przestał także pełnić funkcję pełnomocnika komitetu terenowego partii w Łomży.