The opening chance of the first half fell to the hosts inside seven minutes, as Charles De Ketelaere latched onto a through ball and struck a powerful shot towards goal, but Lukasz Skorupski pulled off a great save.
Bologna then grabbed a foothold in the game, and a flurry of chances ended with Jens Odgaard striking narrowly wide from the edge of the box. Unfortunately for the Dane, he later had to be subbed off with an injury and was replaced by Benjamin Dominguez.
Both teams had further opportunities to score before the break, as Atalanta’s Isak Hien dragged his shot just wide from the edge of the area before Jhon Lucumí tried his luck from range for the visitors, but his effort was comfortably saved by Rui Patrício.
The pattern of the first half continued into the second as Atalanta started stronger, with Skorupski making another top save to get down low to stop Raoul Bellanova’s drive.
Mario Pasalic then tried his luck from just outside the box, but the goalkeeper was at hand to gather again. Bologna’s first chance of the second half came just after the hour-mark, as the ball fell kindly to Tommaso Pobega in the box, only for the defender to shoot inches wide.

Atalanta dominated in the latter stages, as Skorupski was called upon multiple times once more, denying both Marco Brescianini and Daniel Maldini from pot-shots inside the area. However, Bologna still posed a threat on the counter, and Patrício produced a fine save to deny Emil Holm.
With just 10 minutes to go, the visitors crucially went ahead through Santiago Castro, who rose highest to head the ball home from a free-kick in front of a jubilant away crowd.
Victory ensured that they can dream of their first Coppa Italia final since 1974 - the second of two occasions in which they won the competition - and meant that they have now won on their last three trips to Atalanta.
Flashscore Man of the Match: Santiago Castro (Bologna)
Check out all the match stats from the cup tie with Flashscore.