The Eagles started brightly with Neil Shipperley heading wide and Tony Popovic also going close with a far post header. Tommy Black was causing problems but Bradford defended tightly to protect keeper Marlon Beresford.
The game dropped of for a spell and that suited the Bantams who gradually settled.
Dean Windass missed a great chance on 35 minutes shooting too close to Cedric Berthelin who made a vital save with an outstretched leg.
About six minutes later the French keeper failed to hold a shot from star man Paul Evans and Branch reacted first to the rebound with a low shot to put the Yorkshiremen in front.
After the break Bradford started positively and had chances to increase their lead. Evans forced an excellent save from Berthelin and then Branch continued to harass the Palace rear guard with a powerful drive over the bar.
But Palace should have levelled it on 68 minutes. Black, Palace's best player, produced a mazy run before setting up Andrew Johnson. With only Beresford to beat Johnson lost all composure and responded with a poor finish straight at the keeper.
In the last ten minutes Palace came to life as substitute Ben Watson shot straight at Beresford while Black shot over from 12 yards.
But that apart the Bantams held out for their second away win for the season.
Crystal Palace: Berthelin, Fleming, Popovic, Mullins, Butterfield, Hughes, Black, Smith, Johnson, Shipperley, Derry. Subs: Symons, Watson, Borrowdale, Routledge, Cronin.
Bradford: Beresford, Francis, Gavin, Wetherall, Emanuel, Summerbee, Evans, Windass, Heckingbottom, Branch, Gray. Subs: Cornwall, Muirhead, Forrest, Standing, Sanasy.
Booked: D.Wetherall, 19, unsporting behaviour
Referee: T Parkes (Birmingham)
Attendance: 13,514