The visitors scored six tries while the hosts crossed fove times to earn a losing bonus-point from the contest.
The Lions took an early 10-0 lead after Kelly Mpeku fininshed off his own kick ahead while Chris Smith added a conversion and a penalty.
The advantage on the scoreboard was extended to 17-0 when Nico Steyn dived over for a try while Smith again made no mistake from the kicking tee.
The Bulls though were never going to lie down at home and scored twice in quick succession as scrumhalf Embrose Papier went over for a brace.
The Lions responded through flanker Jarod Cairns, who finished in the corner but the Bulls fought back through Akker van der Merwe as the visitors took a 22-19 lead into the halftime break.
Etienne Oosthuizen made sure it was 29-19 soon after the interval and the Lions were well clear later on when Eduan Keyter scored the bonus-point try.
Johannes and De Klerk scored late tries for the hosts to secure a bonus point, but the Lions had done enough to seal a deserved derby win.