Harlequins suffered a third defeat in their opening five Premiership games as London Irish ran in two tries in four second-half minutes to secure victory.
Shane Geraghty, for the Exiles, and Quins' Nick Evans exchanged two first-half penalties each.
Evans and Ben Botica missed chances from the boot for the visitors, who were punished as Blair Cowan and Alex Lewington crossed in quick succession
Danny Care's score for Quins set up a tense finish, but Irish held on.
Harlequins, play-off semi-finalists last season and champions in 2012, now find themselves sixth in the table after an under-par start to the campaign.
But they were on top for the best part of the game at the Madejski Stadium and can point to errant kicking for not establishing a firm lead over the hosts.
Irish were dealt a setback early on when Kieran Low was taken off with a shoulder injury, but Geraghty soon booted his side in front.
Evans levelled things up, before Quins suffered their own injury disappointment as Tom Casson was forced to make way.
Geraghty and Evans were once again successful from the tee, but the Irish fly-half missed the opportunity to give his side a half-time lead, opting for a quick tap when presented with a penalty 20 metres out.
After Evans and Botica failed to fire between the posts and put the visitors in front, Irish grew in confidence in the pack and Cowan took advantage to drive over for his first try for the club, with Geraghty kicking the extras.
And shortly after the restart Quins surrendered possession and Topsy Ojo kicked Lewington through for a well-finished score.
England scrum-half Care stepped off the bench and coasted in from 25 metres to bring Quins back into the game and although Evans converted to put Quins into bonus-point territory, Irish, who tackled brilliantly all game, were resolute enough to see it through.
VIEW FROM THE DRESSING ROOM
London Irish director of rugby Brian Smith:
"It was by no means a perfect performance but we found a way to get over the line.
"Every time we had a hurdle we found a way to get over it and I am very proud of the squad.
"It was a really courageous performance, especially after we lost Kieran Low after three minutes. We knew that they would throw the kitchen sink at us but you don't beat Quins by surprise or chance so we deserve a lot of credit."
Harlequins director of rugby Conor O'Shea:
"In the first half we had nearly all the territory and possession but we had inaccuracies all over the place.
"I'm really frustrated by our performance as you can't go out and play with such lack of precision and control."
London Irish: Ojo, Yarde, Mulchrone, Sheridan, Lewington, Geraghty, O'Leary, Yapp, Paice, Halavatau, Skivington, Gough, Low, Cowan, Treviranus.
Replacements: Tagicakibau for Mulchrone (61), Dorrian for Geraghty (78), Allinson for O'Leary (66), Parr for Yapp (70), Hagan for Halavatau (63), Evans for Gough (61), Sinclair for Low (2).
Not Used: Stevens.
Harlequins: Brown, Smith, Hopper, Casson, Monye, Evans, Dickson, Marler, Buchanan, Collier, Easter, Robson, Fa'asavalu, Robshaw, Guest.
Replacements: Walker for Smith (67), Botica for Casson (25), Care for Dickson (48), Lambert for Marler (56), Sinckler for Buchanan (61), Ward for Collier (61), Merrick for Fa'asavalu (70), Wallace for Robshaw (52).
Referee: David Rose (RFU).