Steven MacLean kept St Johnstone's European hopes alive with a late winner against Inverness, who had David Raven sent off early on.
Referee Craig Thomson dismissed the defender for a professional foul on Rowan Vine in the 12th minute.
Gregory Tade and Mehdi Abeid hit the woodwork as the hosts pressed.
But the breakthrough came when Nigel Hasselbaink crossed for MacLean to head past Antonio Reguero, putting Saints fourth in the Scottish Premier League.
For long periods it seemed St Johnstone's profligacy in front of goal, which manager Steve Lomas has bemoaned many times this season, would again prove to be their undoing.
However the Perth side's ambitions were livened, and Caley Thistle's dented, by MacLean's 77th-minute strike while Inverness's grip on the third position that will guarantee a Europa League qualifying place looks a little bit looser.
Saints took the game to Inverness in the opening period, with Tade teeing up Abeid to shoot over from 12 yards.
Raven was judged to have fouled Vine as the forward chased a MacLean pass following visiting goalkeeper Reguero's mis-hit goal-kick.
Thereafter it was one-way traffic as the Perth side sought to make the most of their one-man advantage as soon as possible.
Kilmarnock-bound Reguero began to thrive as he protected the Inverness goalmouth, smothering Abeid's close-range effort and turning Vine's pile-driver of a free-kick round his post.
The sturdiness of the Spanish stopper's goal-frame was tested too. Tade's flick hit the outside of the post from Tam Scobbie's cross before the lively Abeid, on-loan from Newcastle, cut in from the left to curl the ball off the crossbar.
But Abeid's departure due to injury prompted a 10-minute spell prior to the break when Caley Thistle edged back into the contest.
Steve Lomas's side squandered another opportunity when Tade's second-half corner was headed wide at the back post by Steven Anderson.
Then Liam Craig's 25-yard free-kick, destined for the top left-hand corner, prompted more Reguero heroics.
Saints' pressure finally paid off with 15 minutes left as MacLean headed home his eighth goal of the season.
He benefitted from excellent work by substitute Hasselbaink, who jinked past Josh Meekings on the left-hand side before poking a cross with the outside of his right foot in MacLean's direction.
Further industry from Hasselbaink almost ended with Gwion Edwards tapping in an injury time second.
- 01 Mannus
- 02 MacKay
- 05 Wright
- 06 Anderson
- 33 Scobbie
- 07 Millar Booked
- 10 Craig
- 21 Abeid (Gwion Edwards - 42' )
- 09 Tade (Hasselbaink - 58' )
- 17 MacLean
- 23 Vine (Cregg - 87' )
- 15 Tuffey
- 18 McCracken
- 19 Miller
- 04 Cregg
- 14 Gwion Edwards
- 16 Doughty
- 11 Hasselbaink
Inverness Caledonian Thistle
- 12 Reguero
- 02 Raven Dismissed
- 03 Shinnie Booked
- 14 Meekings
- 27 Devine Booked
- 28 Taylor Booked
- 04 Tudur-Jones (Shinnie - 80' )
- 08 Draper
- 07 McKay (Ross - 65' )
- 09 Foran
- 17 Doran
- 31 Mathieson
- 06 Hogg
- 10 Shinnie
- 11 Ross
- 21 Polworth
- 22 Pepper
- 18 Sutherland
Live Text Commentary
Full Time The final whistle goes and the game is over.90:00 +3:31
Corner taken by Aaron Doran.90:00 +2:16
Ross Draper concedes a free kick for a foul on Gwion Edwards. Steven Anderson restarts play with the free kick.89:06
Short corner worked by Nigel Hasselbaink.88:20
Steven MacLean is caught offside. Antonio Reguero takes the indirect free kick.87:54
Nigel Hasselbaink takes a shot. Save by Antonio Reguero.87:22
Gwion Edwards is adjudged to have handled the ball. Charlie Taylor takes the direct free kick.86:31
David MacKay takes the direct free kick.86:31 Substitution
Substitution Patrick Cregg joins the action as a substitute, replacing Rowan Vine.86:31
Unfair challenge on Gwion Edwards by Aaron Doran results in a free kick.85:23
Foul by Chris Millar on Andrew Shinnie, free kick awarded. Richie Foran restarts play with the free kick.84:55
Liam Craig has an effort at goal from outside the area which goes wide left of the target.83:41
Nigel Hasselbaink is flagged offside by the assistant referee. Charlie Taylor restarts play with the free kick.82:37
Liam Craig challenges Nick Ross unfairly and gives away a free kick. Charlie Taylor produces a strike on goal direct from the free kick.79:17 Substitution
Substitution Andrew Shinnie on for Owain Tudur Jones.78:08
Liam Craig produces a left-footed shot from inside the area that goes over the bar.76:05
Assist on the goal came from Nigel Hasselbaink.76:05 Goal scored
Goal! - Steven MacLean - St J'stone 1 - 0 Inverness Steven MacLean finds the net with a headed goal from inside the six-yard box. St Johnstone 1-0 Inverness CT.74:29
Liam Craig takes the inswinging corner, Daniel Devine makes a clearance.72:24
Corner taken by Nigel Hasselbaink from the left by-line.
Richie Foran fouled by Rowan Vine, the ref awards a free kick. Graeme Shinnie takes the direct free kick.68:38 Booking
Booking Graeme Shinnie booked for time wasting.67:34
Ross Draper fouled by Frazer Wright, the ref awards a free kick. Josh Meekings takes the direct free kick.66:38
Corner taken right-footed by Nigel Hasselbaink from the left by-line, Unfair challenge on Antonio Reguero by Frazer Wright results in a free kick. Antonio Reguero takes the free kick.66:02
Ross Draper challenges Rowan Vine unfairly and gives away a free kick. Liam Craig has an effort direct from the free kick, save by Antonio Reguero.64:56 Substitution
Substitution Billy McKay goes off and Nick Ross comes on.62:44
Graeme Shinnie has an effort at goal from outside the penalty area missing to the wide left of the goal.62:29
Owain Tudur Jones takes a shot. Blocked by Frazer Wright.60:02
Charlie Taylor takes the free kick.60:02 Booking
Booking Chris Millar shown a yellow card.59:56
Chris Millar gives away a free kick for an unfair challenge on Aaron Doran.57:06 Substitution
Substitution Gregory Tade goes off and Nigel Hasselbaink comes on.55:11
Owain Tudur Jones takes a shot. Alan Mannus makes a save.53:36
Inswinging corner taken by Liam Craig, Steven Anderson has a headed effort at goal from close in which goes wide of the left-hand upright.47:38
Gregory Tade produces a right-footed shot from deep inside the penalty area which goes wide of the right-hand post.45:53
The official flags Steven MacLean offside. Antonio Reguero restarts play with the free kick.45:01
The referee starts the second half.45:00 +4:06 Half time
Half Time The players leave the pitch at half time.44:46
Graeme Shinnie has an effort from just inside the box that misses to the left of the target.43:41
Free kick awarded for a foul by Aaron Doran on Gregory Tade. David MacKay takes the free kick.43:01
Inswinging corner taken from the right by-line by Graeme Shinnie, David MacKay makes a clearance.41:20 Substitution
Substitution Gwion Edwards comes on in place of Mehdi Abeid.37:47
Shot from just outside the box by Ross Draper misses to the left of the target.36:53
Inswinging corner taken left-footed by Graeme Shinnie, Thomas Scobbie manages to make a clearance.35:21
Shot from just outside the box by Liam Craig misses to the right of the goal.32:27
Inswinging corner taken from the right by-line by Liam Craig.28:34
Mehdi Abeid gives away a free kick for an unfair challenge on Ross Draper. Direct free kick taken by Josh Meekings.27:57
Shot from just outside the box by David MacKay misses to the right of the target.27:43
Mehdi Abeid takes a shot.27:04
Inswinging corner taken by Liam Craig from the right by-line played to the near post, Owain Tudur Jones manages to make a clearance.26:02
Direct effort from the free kick comes in from Rowan Vine, save by Antonio Reguero.26:02 Booking
Booking The referee shows Charlie Taylor a yellow card.25:49
Charlie Taylor challenges Steven MacLean unfairly and gives away a free kick.23:45
Close range effort by Gregory Tade goes wide of the right-hand upright.21:24
Unfair challenge on Antonio Reguero by Liam Craig results in a free kick. Antonio Reguero restarts play with the free kick.19:56
Unfair challenge on Thomas Scobbie by Ross Draper results in a free kick. Mehdi Abeid takes the direct free kick.17:07
Mehdi Abeid gives away a free kick for an unfair challenge on Owain Tudur Jones. Direct free kick taken by Daniel Devine.16:24
Chris Millar takes a shot. Charlie Taylor gets a block in.15:50
Free kick awarded for an unfair challenge on Chris Millar by Richie Foran. Free kick taken by Steven Anderson.14:57
Unfair challenge on Richie Foran by Mehdi Abeid results in a free kick. Antonio Reguero takes the direct free kick.11:48
Liam Craig shoots direct from the free kick.11:48 Dismissal
Dismissal David Raven is sent off by the referee for professional foul.11:39
Free kick awarded for a foul by David Raven on Rowan Vine.11:01
Shot from outside the box by Rowan Vine goes wide right of the target.10:47
Rowan Vine takes a short corner.10:02
The referee blows for offside against Billy McKay. Alan Mannus takes the free kick.9:26
Free kick awarded for a foul by Liam Craig on Ross Draper. Antonio Reguero takes the direct free kick.6:08
Thomas Scobbie takes the free kick.6:08 Booking
Booking Booking for Daniel Devine for unsporting behaviour.6:01
Free kick awarded for an unfair challenge on Rowan Vine by Daniel Devine.4:18
Free kick awarded for a foul by Steven Anderson on Richie Foran. Josh Meekings takes the free kick.3:49
Shot from deep inside the area by Mehdi Abeid clears the bar.2:52
Corner taken by Liam Craig from the right by-line, Richie Foran makes a clearance.0:00
The ref blows the whistle to start the match.
Live data and text provided by our data suppliers