Jeff Hughes scored in each half as League One Notts County upset Doncaster to reach the FA Cup fourth round.
Midfielder Hughes was gifted the opening goal when he steered in at the back post after Doncaster failed to clear Alan Sheehan's free-kick.
Giles Barnes passed up the Championship side's best opportunity of the game when he shot over from close range.
With 20 minutes left, Hughes secured the surprise win with a penalty after Kyle Bennett fouled Sheehan.
DID YOU KNOW?
- Notts County had lost their last three meetings with Doncaster in the FA Cup: in 1963 (second-round replay), 1968 (first round), and 1989 (first round).
Doncaster had come into the game on a run of three consecutive home victories but were more than matched in all departments by Martin Allen's side.
County enjoyed their first opening just before the quarter-hour mark when Sam Hird supplied Karl Hawley, who shot narrowly wide.
The visitors settled impressively and Lee Hughes was inches away from breaking the deadlock with a header from full-back Julian Kelly's excellent cross.
Doncaster midfielder Brian Stock then carelessly gave away possession inside his own half with 23 minutes gone, allowing Alan Judge to advance for the Magpies and drill wide from 20 yards.
Judge made another chance following some smart work in the inside right position, but home goalkeeper David Button reacted sharply to parry clear.
At the other end, Barnes spurned a free header from James Coppinger's 32nd-minute centre, nodding into the arms of grateful Magpies keeper Stuart Nelson.
It was a miss Dean Saunders's side would regret soon afterwards when some sloppy defending allowed Jeff Hughes to score his first, turning the ball in at the back post with eight minutes of the opening period remaining.
The South Yorkshire side made the brighter start to the second half as Bennett brought a fine save from Nelson with a swerving, dipping drive.
Lee Hughes had an effort deflected wide as Notts County continued to threaten on the break, before Doncaster's James Hayter had a penalty appeal rejected when he went to ground under pressure from Stewart shortly after the hour.
Coppinger almost found a fortuitous equaliser when his arching cross had Nelson backpedalling to tip around a post.
The resulting corner was only partially cleared and, when Coppinger sent the ball back into the area, it fell to Barnes who blazed wastefully over from 10 yards.
Once again, a Barnes miss was followed by a County goal as Bennett hacked through the back of Sheehan in the box and Jeff Hughes coolly found the corner.
Bennett had the chance to redeem himself when Hayter played him into space in the County area, but he slashed wide before El-Hadji Diouf followed up a booking for dissent by heading wide from fellow substitute Martin Woods's free-kick.
Doncaster Rovers manager Dean Saunders told BBC Radio Sheffield:
"I'm really disappointed. No matter how much you warn the players, I knew Notts County were a decent team. They are well organised and good at set-plays.
"Last week we gave it everything we had and this week we just looked off the pace. We never did anything that we did last week which is really frustrating. We conceded a terrible goal from a ball just punted into the box. We had everyone in position and we went over it this morning and still conceded.
"With half an hour to go we were still in the game and I still thought if we got a goal we would go on and win the game but then Kyle gives a ridiculous penalty away and that put us behind the eight ball."
Notts County manager Martin Allen told BBC Radio Nottingham:
"The atmosphere from the start to the finish even in the pre-match warm-up was magic.
"We deserved to win it, played some good football and defended valiantly to keep a clean sheet
"All the players have played superbly well."
Live Text Commentary
Full Time The match has reached full-time.90:00 +3:06
Outswinging corner taken by John Oster, Headed effort from inside the area by David Button misses to the left of the target.90:00 +0:29
Shot from just outside the box by Martin Woods misses to the right of the goal.88:45
Centre by Kyle Bennett, Jeff Hughes gets a block in. Martin Woods takes a inswinging corner from the right by-line played to the near post, clearance by Hamza Bencherif. Inswinging corner taken left-footed by Martin Woods, Header from close in by El-Hadji Diouf misses to the left of the target.87:54 Booking
Booking Booking for El-Hadji Diouf.87:12
Handball decision goes against El-Hadji Diouf. Free kick taken by Stuart Nelson.85:20
Hamza Bencherif concedes a free kick for a foul on Brian Stock. Martin Woods has an effort direct from the free kick.84:36
Brian Stock produces a right-footed shot from just outside the box that goes wide right of the goal.82:42
Foul by Martin Woods on Neal Bishop, free kick awarded. Free kick taken by Neal Bishop.81:31 Substitution
Substitution El-Hadji Diouf on for James Coppinger.80:23
Alan Judge takes the inswinging corner, David Button makes a save.80:23 Substitution
Substitution Ben Burgess replaces Lee Hughes.79:21
James Hayter is flagged offside by the assistant referee. Stuart Nelson takes the free kick.78:30
Jon Harley takes a shot.77:44
Effort from outside the penalty area by Brian Stock goes wide left of the goal.77:33
The ball is swung over by John Oster, Damion Stewart makes a clearance.75:36
James O'Connor crosses the ball, Damion Stewart manages to make a clearance. Effort from the edge of the area by Kyle Bennett goes wide of the left-hand post. James Coppinger takes a shot. Save by Stuart Nelson.74:10
Brian Stock challenges Alan Judge unfairly and gives away a free kick. Direct free kick taken by Stuart Nelson.73:35
Karl Hawley produces a cross, James O'Connor makes a clearance.72:31
Unfair challenge on Alan Sheehan by James Hayter results in a free kick. Free kick taken by Alan Sheehan.
Free kick taken by Alan Sheehan.71:46 Booking
Booking Kyle Bennett receives a caution.71:42
Free kick awarded for an unfair challenge on Alan Sheehan by Kyle Bennett.71:05
Free kick awarded for a foul by Lee Hughes on Martin Woods. Sam Hird takes the direct free kick.69:56 Substitution
Substitution Martin Woods joins the action as a substitute, replacing Giles Barnes.69:33 Goal scored
Goal! - Jeff Hughes - Doncaster 0 - 2 Notts Co Placed penalty scored by Jeff Hughes. Doncaster 0-2 Notts County.68:30
Kyle Bennett challenges Alan Sheehan unfairly and gives away a Penalty.67:16
James Hayter is ruled offside. Stuart Nelson takes the indirect free kick.64:10
Corner from the right by-line taken by Brian Stock, clearance by Damion Stewart. Effort from deep inside the area by Giles Barnes clears the bar.64:10 Substitution
Substitution (Notts County) makes a substitution, with Jon Harley coming on for Julian Kelly.64:10
The ball is sent over by James Coppinger, save by Stuart Nelson.63:14
James Coppinger crosses the ball, Damion Stewart makes a clearance.59:42
Kyle Bennett gives away a free kick for an unfair challenge on Alan Sheehan. Neal Bishop takes the direct free kick.56:54
Direct free kick taken by David Button.56:54 Substitution
Substitution John Oster on for Mamadou Bagayoko.56:54
Lee Hughes takes a shot. Habib Beye gets a block in. Alan Sheehan takes a inswinging corner from the right by-line to the near post, Damion Stewart challenges David Button unfairly and gives away a free kick.55:52
The ball is swung over by Kyle Bennett, save by Stuart Nelson.55:26
Jeff Hughes concedes a free kick for a foul on Adam Lockwood. Direct free kick taken by Brian Stock.55:07
Karl Hawley concedes a free kick for a foul on Sam Hird. Free kick taken by Sam Hird.51:58
Unfair challenge on Mamadou Bagayoko by Hamza Bencherif results in a free kick. Free kick crossed right-footed by Brian Stock, Lee Hughes manages to make a clearance.51:26
Brian Stock sends in a cross, Alan Sheehan makes a clearance.51:04
Brian Stock decides to take the corner short.47:46
Kyle Bennett takes a shot. Save by Stuart Nelson.46:59
Lee Hughes is flagged offside by the assistant referee. Free kick taken by Sam Hird.45:52
Liam Chilvers concedes a free kick for a foul on Mamadou Bagayoko. Direct free kick taken by Brian Stock.45:28
James Coppinger crosses the ball, save made by Stuart Nelson.45:01
The referee gets the second half underway.45:00 +1:29 Half time
Half Time The referee calls an end to the first half.45:00 +1:16
The ball is crossed by James Coppinger, save by Stuart Nelson.44:27
James Coppinger sends in a cross, clearance made by Liam Chilvers.43:57
James O'Connor sends in a cross, clearance by Liam Chilvers.42:17
Brian Stock crosses the ball in from the free kick, save by Stuart Nelson.42:17 Booking
Booking Alan Sheehan goes into the referee's book for unsporting behaviour.41:50
Alan Sheehan concedes a free kick for a foul on Kyle Bennett.38:58
Julian Kelly challenges Mamadou Bagayoko unfairly and gives away a free kick. Free kick crossed by Brian Stock, clearance by Damion Stewart.38:08
Free kick awarded for an unfair challenge on Adam Lockwood by Lee Hughes. David Button takes the direct free kick.36:54
Assist on the goal came from Alan Sheehan.36:54 Goal scored
Goal! - Jeff Hughes - Doncaster 0 - 1 Notts Co A goal is scored by Jeff Hughes from inside the six-yard box to the bottom right corner of the goal. Doncaster 0-1 Notts County.36:17
Unfair challenge on Karl Hawley by Adam Lockwood results in a free kick. The ball is swung over by Alan Sheehan,32:13
Karl Hawley is ruled offside. Indirect free kick taken by David Button.31:08
The ball is sent over by James Coppinger, Giles Barnes takes a shot. Save by Stuart Nelson.29:54
Foul by Alan Judge on Kyle Bennett, free kick awarded. Brian Stock restarts play with the free kick.29:14
Alan Judge takes a shot. Save by David Button.26:09
Foul by Kyle Bennett on Julian Kelly, free kick awarded. Stuart Nelson restarts play with the free kick.25:04
Foul by Jeff Hughes on Giles Barnes, free kick awarded. Brian Stock restarts play with the free kick.24:16
The ball is crossed by Habib Beye, save by Stuart Nelson.22:25
Alan Judge produces a left-footed shot from long range which goes wide right of the goal.21:18
Unfair challenge on Kyle Bennett by Alan Judge results in a free kick. David Button takes the free kick.18:49
Lee Hughes is flagged offside by the assistant referee. David Button takes the indirect free kick.17:15
Julian Kelly produces a cross, Headed effort from deep inside the area by Lee Hughes misses to the right of the target.16:04
Karl Hawley takes a shot. Adam Lockwood gets a block in. Corner taken right-footed by Alan Judge, save by David Button.12:04
The ball is crossed by Lee Hughes, Effort from deep inside the area by Karl Hawley misses to the right of the goal.9:27
The assistant referee signals for offside against Mamadou Bagayoko. Stuart Nelson takes the free kick.8:57
Free kick awarded for an unfair challenge on Kyle Bennett by Neal Bishop. Habib Beye takes the free kick.7:26
Julian Kelly crosses the ball, James O'Connor manages to make a clearance.6:48
Kyle Bennett takes a shot. Stuart Nelson makes a save.4:58
Julian Kelly produces a cross.3:07
Hamza Bencherif gives away a free kick for an unfair challenge on Mamadou Bagayoko. Sam Hird takes the direct free kick.2:04
James O'Connor crosses the ball, Headed effort from deep inside the penalty area by Mamadou Bagayoko misses to the left of the goal.0:00
The game begins.
Live data and text provided by our data suppliers