Second-half substitute Thompson’s 85th-minute header enabled Bradford to leapfrog Crawley into 13th place in the table.
After an uneventful first half, Bradford went in front after 50 minutes when Nathan Doyle found Aaron Mclean with a chipped pass over the visitors’ defence and the striker scored with a shot into the corner from 10 yards.
The goal came less than a minute after Crawley had almost taken the lead after Gwion Edwards’ corner, Bradford goalkeeper Jon McLaughlin managing to block Kyle McFadzean’s shot before grabbing the ball at the second attempt.
Crawley equalised after 66 minutes through substitute Jamie Proctor following a misunderstanding between McLaughlin and substitute defender Carl McHugh.
McFadzean made a timely interception in his own half before finding Proctor with a through pass and, when McHugh left the ball to the advancing McLaughlin, Proctor nipped in between the two Bradford players to score with a smart lob from just outside the penalty area.
The match looked set to end in a draw before Thompson scored the winner with a close-range header from skipper Gary Jones’ corner five minutes from the end.