The winger had a volley saved by Cobblers keeper David Cornell early on, before his deft touch on the edge of the area played in Zach Clough for the winner at Sixfields Stadium.
The 24-year-old was replaced by James Henry with 18 minutes remaining of the League One clash.
Also in the third tier, Haris Vuckic appeared as a 66th-minute substitute for Bradford City, but couldn't prevent the Bantams from slipping to a 1-0 defeat at Swindon Town.
Full back Jamie Sterry missed out on Coventry City's 2-1 defeat at home to MK Dons, while forward Ivan Toney played the full 90 minutes and picked up a yellow card as Shrewsbury Town remained rooted to the foot of the table despite their 0-0 draw with Port Vale.
In League Two, Macaulay Gillesphey was an unused substitute as Carlisle United went top of the table after a 5-2 win at home to Mansfield Town, while Alex Gilliead came on after 72 minutes of Luton Town's 0-0 draw at Exeter City.
Forward Tom Heardman wasn't involved in Hartlepool United's 2-0 defeat at Wycombe, and Scotland Under-21 international Kyle Cameron missed out on Newport County's 4-1 reverse at Blackpool.
Barnsley's Adam Armstrong started their 5-2 Championship defeat to Nottingham Forest on Friday night, but was replaced by Tom Bradshaw after 65 minutes.
In the Eredivisie, goalkeeper Tim Krul wasn't involved in Ajax's 1-0 win at Heerenveen, while Siem de Jong was replaced after 67 minutes of PSV Eindhoven's 3-1 home win over ADO Den Haag.
Midfielder Henri Saivet helped Saint-Etienne to a 2-1 Ligue 1 win at Angers, playing 84 minutes, but Florian Thauvin couldn't stop Marseille from suffering a 4-0 defeat at Monaco, despite playing the full 90 minutes.
Kevin Mbabu picked up a booking in BSC Young Boys' 2-1 win over Lausanne Sport in the Swiss Super League as the defender got another 90 minutes under his belt, but in Spain, Emmanuel Riviere's introduction as a 57th-minute substitute didn't help Osasuna find a way back into the game as they suffered a 3-0 defeat to Atletico Madrid.
OUT ON LOAN
Siem de Jong - PSV Eindhoven (season-long loan)
Tim Krul - Ajax (season-long loan)
Henri Saivet - Saint-Etienne (season-long loan)
Florian Thauvin - Marseille (season-long loan)
Kevin Mbabu - BSC Young Boys (season-long loan)
Emmanuel Riviere - Osasuna (season-long loan)
Ivan Toney - Shrewsbury Town (loan until January)
Macaulay Gillesphey - Carlisle United (loan until January)
Adam Armstrong - Barnsley (loan until January)
Jamie Sterry - Coventry City (loan until January)
Haris Vuckic - Bradford City (loan until January)
Sammy Ameobi - Bolton Wanderers (loan until January)
Kyle Cameron - Newport County (loan until January)
Alex Gilliead - Luton Town (loan until January)
Tom Heardman - Hartlepool United (loan until January)
Paul Woolston - Blyth Spartans (work experience loan)