Gloucestershire needed just 34 balls to claim the three wickets required for victory on day four against Middlesex at Lord's.
Resuming the final day on 167-7 in pursuit of an unlikely 288 for victory, the Middlesex tail mustered just 18 further runs as the hosts collapsed to their fourth defeat in as many Division Two fixtures.
Gloucestershire seamer Gemaal Hussain (5-46) struck the first blow of the morning when he dismissed Tim Murtagh in the third over of the day.
Fellow paceman Steve Kirby (3-36) then stepped up to claim the wickets of Iain O'Brien and Danny Evans to complete the win.
The 103-run triumph, Gloucestershire's first of the season, sees Alex Gidman's men leapfrog bottom-placed Middlesex and fixture-less Surrey into seventh-place.
Gloucestershire seamer Gemaal Hussain claimed four wickets as Middlesex slumped to 167-7 in pursuit of a victory target of 288 at stumps on day three at Lord's.
Opener Scott Newman (42) and Dawid Malan (60) both fell to Hussain (4-36) after making promising starts as wickets fell regularly during the run chase.
Eighth-wicket pair Shaun Udal (4no) and Tim Murtagh (1no) accepted an offer of bad light at 5.40pm and, weather permitting, will resume on the final morning with a further 122 still required to avert Middlesex's fourth straight defeat.
At the start of day three Gloucestershire had extended their second innings from an overnight position of 139-7 to 222 all out just under an hour before lunch.
Chris Taylor (61) and Jon Lewis (43) added 70 for the eighth wicket, while medium pacer Gareth Berg finished with 4-74.
Runs were scarce at Lord's as Middlesex edged the advantage over Gloucestershire on the second day of their Division Two clash.
After being dismissed for 203 to fall 95 behind in the first innings, Middlesex came back in the final two sessions of day two to reduce Gloucestershire to 139-7 at the mid-point, for an overall lead in the match of 204 runs.
The Middlesex top middle order struggled against the threatening Steve Kirby and Gemaal Hussain, who finished with 4-50 and 3-50 respectively.
The hosts were in real danger of missing out on a batting bonus point, but a vital half-century from skipper Shaun Udal allowed his side to creep past 200.
The Gloucestershire batsmen then struggled in the afternoon, with first innings top-scorer Hamish Marshall falling for nine as the collapse gathered pace.
A flurry of wickets saw four more of the visitors dismissed, then Gareth Berg claimed Steve Snell for a first-ball duck.
Middlesex paceman Iain O'Brien claimed his best LV= County Championship figures on Tuesday as Gloucestershire were dismissed for 268 at Lord's.
The New Zealand right-armer made best use of the opening two sessions to claim figures of seven for 48 - the return also being the second best of the 33-year-old's career.
He was not given the best of support by his colleagues, however, with Danny Evans best of the rest with two for 45, while Tim Murtagh leaked 81 runs from 20 wicketless overs.
Gloucestershire therefore gained two batting points, thanks largely to a third-wicket stand of 99 in 21 overs between the dogged Jonathan Batty (49) and Hamish Marshall (72) - the latter scoring at a run a ball before falling to his fellow Kiwi.
The Middlesex batsmen faired little better though and they slumped to 71 for four in the 25 overs through to stumps, with Lancashire-born firebrand Steve Kirby taking three for 23.
His prize scalp was that of England Test skipper Andrew Strauss, who departed having made a modest 18, with Owais Shah (20) and night watchman O'Brien (0) his other victims.