Veteran striker Jamie Cureton struck his 13th goal of the season to give Exeter victory over Bradford.
The 37-year-old swept in Matt Oakley's nod-down to score the only goal of the game before half-time.
Bradford came back strongly after the interval, but Alan Connell's shot was cleared off the line and Garry Thompson's strike went wide.
The Bantams also wanted a penalty when Nahki Wells went down in the area, but the referee waved appeals away.
VIEW FROM THE DRESSING ROOM
Exeter City manager Paul Tisdale told BBC Radio Devon:
"I happen to think one-nil is exactly what we needed, it just shows to the players they can grit out 50 minutes of very threatening football.
"That's us at our best away from home.
"I went defensive but I'm not ashamed of that. We stuck it out and I think our physio is going to have a tough couple of days, we've got four or five players who are bruised and battered.
"We stuck it out, we got to the ball, it wasn't pretty but we did what we had to."
Live Text Commentary
Full Time The final whistle goes and the game is over.90:00 +2:47
Carl McHugh crosses the ball, save by Artur Krysiak.90:00 +0:31
John O'Flynn challenges Nathan Doyle unfairly and gives away a free kick. Matt Duke takes the direct free kick.89:22 Substitution
Substitution Guillem Bauza on for Jamie Cureton.89:22
Nathan Doyle concedes a free kick for a foul on Jamie Cureton. Free kick taken by Craig Woodman.87:07
John O'Flynn is ruled offside. Matt Duke takes the direct free kick.85:44
Matt Oakley gives away a free kick for an unfair challenge on Alan Connell. Direct free kick taken by Gary Jones.83:39 Substitution
Substitution Kevin Amankwaah is brought on as a substitute for Alan Gow.82:21
Gary Jones takes the outswinging corner, Effort from the edge of the box by Garry Thompson goes wide of the right-hand upright.79:12
Direct free kick taken by Gary Jones.79:12 Booking
Booking Matt Oakley booked.78:56
Free kick awarded for an unfair challenge on Gary Jones by Matt Oakley.77:15
Jamie Cureton takes a shot. Blocked by Rory McArdle.76:38
Corner taken short by Alan Gow.75:57
Nahki Wells challenges Pat Baldwin unfairly and gives away a free kick. Free kick taken by Artur Krysiak.75:08 Substitution
Substitution Garry Thompson on for Tom Naylor.74:32
James Hanson fouled by Craig Woodman, the ref awards a free kick. Free kick taken by Gary Jones.69:10
Free kick awarded for an unfair challenge on Danny Coles by James Hanson. Danny Coles restarts play with the free kick.66:58
Shot on goal comes in from Gary Jones from the free kick.66:58 Booking
Booking The referee shows Tommy Doherty a yellow card for unsporting behaviour.
Free kick awarded for an unfair challenge on Will Atkinson by Tommy Doherty.65:02
The ball is delivered by Steve Tully, Alan Gow takes a shot. Comfortable save by Matt Duke.63:20
Corner taken right-footed by Gary Jones from the right by-line, James Hanson produces a right-footed shot from inside the area that clears the crossbar.62:14
Unfair challenge on Nahki Wells by Pat Baldwin results in a free kick. Nahki Wells produces a strike on goal direct from the free kick, blocked by Matt Oakley.57:27
Alan Gow gives away a free kick for an unfair challenge on Will Atkinson. John Egan restarts play with the free kick.54:53
Alan Gow is caught offside. Matt Duke restarts play with the free kick.53:55
Handball decision goes against Alan Gow. Indirect free kick taken by Matt Duke.53:13
Alan Connell has an effort at goal from outside the box which goes wide right of the goal.52:00
Corner from the right by-line taken by Gary Jones, Headed effort from deep inside the area by John Egan misses to the right of the goal.51:33
Corner taken by Gary Jones, clearance made by John O'Flynn.51:14
The ball is sent over by Nahki Wells, Artur Krysiak makes a save.48:58
Outswinging corner taken right-footed by Gary Jones, John O'Flynn manages to make a clearance.48:24
Alan Gow takes a shot. Matt Duke makes a save.47:44
Free kick awarded for a foul by John Egan on Jamie Cureton. Free kick taken by Alan Gow.46:36
James Hanson is caught offside. Free kick taken by Artur Krysiak.45:15
Free kick awarded for an unfair challenge on James Hanson by Pat Baldwin. Gary Jones takes the direct free kick.45:01
The referee starts the second half.45:01 Substitution
Substitution Alan Connell joins the action as a substitute, replacing Craig Forsyth.45:01 Substitution
Substitution Scot Bennett goes off and Tommy Doherty comes on.45:00 +1:36 Half time
Half Time The whistle is blown to end the first half.45:00 +1:09
Carl McHugh takes a shot. Save by Artur Krysiak.45:00 +0:40
John O'Flynn challenges Carl McHugh unfairly and gives away a free kick. Direct free kick taken by Nathan Doyle.43:08
Matt Oakley provided the assist for the goal.43:08 Goal scored
Goal! - Jamie Cureton - Bradford 0 - 1 Exeter Jamie Cureton gets on the score sheet with a goal from inside the area to the bottom left corner of the goal. Bradford 0-1 Exeter.42:49
The ball is sent over by Liam Sercombe,40:16
Effort on goal by Liam Sercombe from long distance goes over the crossbar.35:59
Craig Woodman concedes a free kick for a foul on James Hanson. Direct free kick taken by Matt Duke.33:43
The referee blows for offside against John O'Flynn. Indirect free kick taken by Matt Duke.32:11
Free kick awarded for a foul by Will Atkinson on Alan Gow. Craig Woodman restarts play with the free kick.31:38
Inswinging corner taken by Liam Sercombe from the right by-line, comfortable save by Matt Duke.30:31
Liam Sercombe has an effort direct from the free kick, blocked by Will Atkinson.30:31 Booking
Booking The referee cautions Gary Jones for unsporting behaviour.30:15
Gary Jones gives away a free kick for an unfair challenge on Alan Gow.28:42
Free kick awarded for an unfair challenge on John O'Flynn by Rory McArdle. Free kick taken by Alan Gow.28:22
The offside flag is raised against Nahki Wells. Indirect free kick taken by Artur Krysiak.27:13
Inswinging corner taken by Craig Forsyth from the right by-line, Danny Coles manages to make a clearance.25:22
Steve Tully takes the inswinging corner, Shot from inside the area by Scot Bennett clears the bar.22:51
The referee blows for offside. Free kick taken by Artur Krysiak.21:44
Free kick awarded for an unfair challenge on Nahki Wells by Danny Coles. Free kick crossed by Gary Jones, clearance by Danny Coles.20:29
Inswinging corner taken right-footed by Gary Jones from the right by-line, Foul by James Hanson on Artur Krysiak, free kick awarded. Free kick taken by Artur Krysiak.13:51
Effort on goal by John O'Flynn from just inside the area clears the bar.13:10
Jamie Cureton has an effort at goal from just inside the box that bounces off the post.10:13
The ball is sent over by Craig Forsyth.8:38
Alan Gow fouled by Carl McHugh, the ref awards a free kick. Craig Woodman takes the free kick.6:38
Foul by Matt Oakley on Nahki Wells, free kick awarded. Centre by Gary Jones, Headed effort from inside the area by James Hanson misses to the right of the goal.3:31
Inswinging corner taken right-footed by Alan Gow, Headed effort from deep inside the penalty area by Danny Coles misses to the left of the goal.3:11
Alan Gow takes a short corner.1:51
Nahki Wells fouled by Pat Baldwin, the ref awards a free kick. Gary Jones restarts play with the free kick.1:26
The referee blows for offside against Nahki Wells. Indirect free kick taken by Pat Baldwin.0:00
The match begins.
Live data and text provided by our data suppliers