The match got off to a slow start, with Province flyhalf Demetri Catrakilis scoring the only points in the first 18 minutes from a penalty conversion.
Replacement Nick Groom eventually went over for the first try of the match in the 19th minute.
Flank Deon Fourie added the home side's second five-pointer with two minutes remaining before the break, touching down from the back of a loose scrum, and Catrakilis slotted both conversions to put them in the driving seat.
Bulls flyhalf Louis Fouche had two successful penalty kicks to provide the visitors with their only points of the first stanza -- and ultimately their only points of the game -- as the hosts went into half-time with a 17-6 advantage.
Building on their momentum, Province stormed ahead in the second half, with further tries from Marcel Brache, Damian de Allende and JP du Plessis.
Province climbed to second place on the log, three points behind table toppers the Sharks, after three rounds of matches in the domestic competition.
The Bulls were left lying second from bottom, only two points ahead of struggling Griquas.
Teams:
Western Province:
15 Gio
Aplon, 14 Gerhard van den Heever, 13 JP du Plessis, 12 Marcel Brache, 11
Ederies Arendse, 10 Demetri Catrakilis, 9 Dewaldt Duvenage, 8 Jebb
Sinclair, 7 Rynhardt Elstadt, 6 Deon Fourie (captain), 5 De Kock
Steenkamp, 4 Don Armand, 3 Frans Malherbe, 2 Siyabonga Ntubeni, 1 Deon
Carstens
Substitutes: 16 Steven Kitshoff, 17 Brok Harris, 18
Wilhelm van der Sluys, 19 Helmut Lehmann, 20 Nic Groom, 21 Damian de
Allende, 22 Kurt Coleman
Blue Bulls:
15 Clayton Blommetjies, 14 Akona Ndungane, 13
Johann Sadie, 12 Francois Venter, 11 JJ Engelbrecht, 10 Louis Fouchè, 9
Ruan Snyman, 8 Dewald Potgieter (captain), 7 CJ Stander, 6 Deon
Stegmann, 5 Grant Hattingh, 4 Wilhelm Steenkamp, 3 Werner Kruger, 2
Willie Wepener, 1 Dawie Steyn
Substitutes: 16 Robbie Coetzee, 17
Frik Kirsten, 18 Cornell Hess, 19 Warwick Tecklenburg, 20 Rudy Paige, 21
Lionel Cronje, 22 Jürgen Visser