Hungary, Iceland and Scotland were among the winners with three ties going to penalties.
Article top media content
Two of the impressive underdogs at UEFA EURO 2016, Hungary and Iceland, moved to within one game of next summer's tournament, while three teams required penalties to join them in the play-off finals.
Willi Orbán's chested 17th-minute opener, Zsolt Kalmár's long-range free-kick just after half-time and Nemanja Nikolić's header from a superb Szilveszter Hangya cross after 75 minutes took Hungary through. Georgi Yomov completed a fine team move for Bulgaria's late consolation on his senior international debut.
The UEFA EURO 2016 surprise package moved a step closer to a finals return thanks to two expertly-taken first-half goals from the irrepressible Gylfi Sigurdsson. Alexandru Maxim pulled one back from the spot against the run of play on the hour, but Erik Hamrén's side comfortably held on for victory.
Northern Ireland held their nerve in their first ever competitive shoot-out to stun Bosnia and Herzegovina in Sarajevo. The hosts began strongly and took a deserved lead through Rade Krunić, but Niall McGinn pounced after the break to ultimately force extra time. On it went to spot kicks, Liam Boyce converting the decisive effort.
The hosts scored all their penalties while Marek Rodák saved Alan Browne's spot kick and Matt Doherty hit the crossbar. Ireland came closest to winning it prior to the shoot-out with substitute Browne hitting the post in extra time. Both teams had chances cleared off the line: Shane Duffy blocked Lukáš Haraslín's goal-bound effort and Connor Hourihane was unable to convert from close range.
Substitute Sergej Milinković-Savić's double sent Serbia through to the final. His deft 102nd-minute chip secured victory after another replacement, Mathias Normann, had forced extra time for the hosts. Lazio midfielder Milinković-Savić opened his international account 90 seconds after coming on in the 80th minute following Aleksandar Mitrović's unselfish touch.
Scotland will face Serbia in next month's final after a penalty shoot-out victory over Israel. There was just one shot on target in the whole 120 minutes, from Israel's Eran Zahavi, although Scott McTominay headed a golden chance wide and Liam Cooper hit the post with the last kick. It was Zahavi's penalty that proved crucial, David Marshall saving as Scotland converted all five.
Tornike Okriashvili's coolly-taken penalty rewarded the hosts for an intense start inside seven minutes. Second-half substitutes Maksim Skavysh and Dzmitry Podstrelov fashioned Belarus' best opportunity as visiting goalkeeper Egor Khatkevich kept the contest close but, ultimately, Georgia's doggedness at both ends secured their passage.
The home side struck first when Stefan Ristovski's shot deflected in off Benjamin Kololli and, though Florent Hadergjonaj capitalised on a defensive mix-up to lob Kosovo level, Darko Velkoski quickly restored North Macedonia's lead in an entertaining first half. That was that as far as the scoring went, but the home team needed a dramatic double save from Stole Dimitrievski in the final seconds to preserve their advantage.