W 1996 przystąpił do Ligi Krajowej. W latach 1999–2003 należał do Ruchu Społecznego (do 2002 działającego jako RS AWS), był wiceprzewodniczącym koła powiatowego tej partii. W 2003 był wśród założycieli Chrześcijańskiego Ruchu Samorządowego, został członkiem zarządu głównego tego stowarzyszenia. Przystąpił do Platformy Obywatelskiej, z listy której w wyborach parlamentarnych w 2005 został wybrany na posła V kadencji w okręgu rybnickim. W wyborach parlamentarnych w 2007 po raz drugi uzyskał mandat poselski, otrzymując 18 003 głosy. W wyborach w 2011 z powodzeniem ubiegał się o reelekcję, dostał 15 326 głosów. W Sejmie VII kadencji był wiceprzewodniczącym Komisji Gospodarki. W 2015 został ponownie wybrany do Sejmu, otrzymując 11 549 głosów.
W wyborach parlamentarnych w 2019 kandydował z listy KO w okręgu nr 30, otrzymując 18 799 głosów i uzyskując mandat posła IX kadencji. Również w 2023 z powodzeniem ubiegał się o reelekcję z wynikiem 36 031 głosów. Objął funkcję wiceprzewodniczącego Komisji do Spraw Energii, Klimatu i Aktywów Państwowych. W 2024 z ramienia KO startował w wyborach do Parlamentu Europejskiego z okręgu nr 11. W październiku został powołany na przewodniczącego Rady Ochrony Pracy, zastępując na tym stanowisku zmarłą Izabelę Mrzygłocką.