Ukończył Liceum Zawodowe w Oświęcimiu, w 1996 studia licencjackie z zarządzania w Wyższej Szkole Przedsiębiorczości i Marketingu w Chrzanowie, a w 2002 studia magisterskie w Akademii Górniczo-Hutniczej w Krakowie.
Na początku lat 90. pracował przez półtora roku w branży handlowej w Finlandii, następnie prowadził działalność gospodarczą w Polsce. W latach 1994–1998 był sołtysem wsi Bobrek w województwie bielskim. Następnie został przewodniczącym rady sołeckiej w tej samej miejscowości, należącej już do województwa małopolskiego, funkcję tę pełnił do 2003. Jednocześnie w latach 1994–2002 był radnym w Chełmku, gdzie latach 1994–1998 wchodził w skład zarządu miasta. Od 1999 pracował w Urzędzie Marszałkowskim Województwa Małopolskiego, zajmował się m.in. przygotowaniem i realizacją Oświęcimskiego Strategicznego Programu Rządowego.
Jako członek Ruchu Stu w 1997 bez powodzenia kandydował do Sejmu z listy Akcji Wyborczej Solidarność. Wraz z Pawłem Grasiem przeszedł później z Ruchu Stu do Stronnictwa Konserwatywno-Ludowego. W 2005 wstąpił do Platformy Obywatelskiej. W wyborach w 2006 uzyskał mandat radnego sejmiku małopolskiego. W 2007 został pełnomocnikiem ds. funduszy pomocowych i rozwoju gminy w administracji Chrzanowie. W tym samym roku, po zmianie koalicji rządzącej województwem, został powołany w skład zarządu województwa małopolskiego. W 2008 wybrano go na przewodniczącego jednej z komisji przy Związku Województw RP. W 2010 uzyskał reelekcję do sejmiku.
2 grudnia 2010 został wybrany na urząd marszałka województwa. W 2014 ponownie uzyskał mandat radnego sejmiku, 29 listopada tegoż roku po raz drugi objął stanowisko marszałka.
W 2015 wystartował w wyborach parlamentarnych jako lider listy wyborczej PO w okręgu chrzanowskim. Otrzymał 20 867 głosów, uzyskując tym samym mandat posła na Sejm VIII kadencji. W konsekwencji zakończył pełnienie funkcji marszałka województwa. W listopadzie 2016 przeszedł do klubu poselskiego Nowoczesnej. W grudniu 2018 przeszedł do klubu Platforma Obywatelska – Koalicja Obywatelska, zostając jego wiceprzewodniczącym. Przystąpił także ponownie do PO. W wyborach w 2019 ponownie uzyskał mandat poselski, kandydując z ramienia Koalicji Obywatelskiej i otrzymując 18 597 głosów.