Russia is being terrorized by an evil witch known as Baba Yaga (voiced by Andrea Martin), and the only one who is not afraid of her is Bartok the Magnificent (voiced by Hank Azaria). Bartok, an albino bat, has just arrived in Moscow and is impressing everyone with his performances, including Tsarevich Ivan Romanov (voiced by Phillip Van Dyke). However, Ivan's advisor, Ludmilla (voiced by Catherine O'Hara), finds Bartok annoying and naive, and she tries to make a cossack stop his performance. After Bartok's show, a bear suddenly attacks. Bartok saves everyone by stunning the bear, knocking it over, and trapping it in a wagon.
Delighted with Bartok's bravery, everyone around him rewards him with gold, including Prince Ivan, who gives him a royal ring, much to the displeasure of Ludmilla, who reminds him that the ring is only for members of the Romanov family, not commoners. She asks that he take the ring back, but Ivan disagrees, saying it is time for a change. Ludmilla, seeing that she cannot dissuade him, reluctantly allows it and they leave.
Ludmilla is still upset that Ivan has given a ring to a commoner, especially a street performer. Ivan retorts that that was his intention, and Ivan's friend Vol (voiced by Diedrich Bader) agrees that Bartok was funny. Ludmilla, on the other hand, believes that Ivan needs to respect his duty to the crown, which incites Ivan, who is tired of listening to her, to say that he will do as he pleases and it is she who must respect the crown.
Meanwhile, Bartok is counting the money he received when the bear wakes up and scares him. It turns out Bartok's amazing rescue was just another act - the bear is Zozi (voiced by Kelsey Grammer), Bartok's business partner. Zozi is apprehensive about Ivan's ring and agrees with Ludmilla, that the ring should be returned. Bartok stubbornly refuses to give it back since it was a gift.
Back in Moscow, Ivan is kidnapped by Baba Yaga, which leads to an immediate investigation. Ludmilla finds one of Baba Yaga's iron teeth, and she informs the people what has transpired. When she asks for someone brave enough to rescue Prince Ivan, two children (voiced by Kelly Marie Berger and Zachary B. Charles) nominate Bartok.
Bartok and Zozi are on their way to St. Petersburg when Zozi spots the Cossacks coming after them. The pair become worried because they assume that Ludmilla wants Ivan's ring returned. Bartok tries to conceal his identity, but he is brought before the people, who explain that Ivan has been taken by Baba Yaga, and that they are relying on him to rescue their prince. Bartok reluctantly accepts, and he and Zozi head to the Iron Forest to confront Baba Yaga and save Prince Ivan.
They find Baba Yaga's hut, but must answer a riddle given by a giant skull (voiced by Tim Curry) to enter. When the riddle is answered, Baba Yaga successfully captures Bartok and explains that to save Ivan, Bartok must gather three items from the forest without any help from Zozi, or they'll "both die": Piloff, Oblie's Crown, and the Magic Feather. However, these tasks are very hard, for Piloff (voiced by Jennifer Tilly) is frozen to a boulder, Oble (voiced by French Stewart), a giant blacksmith surrounded by an aura of fire, must be tricked into letting his crown to be stolen, and the magic feather must be caught without flight, using only the boulder Piloff was stuck to and Oblie's crown.
He gathers the objects demanded, but Baba Yaga still needs something from Bartok himself. He offers everything he can think of, but Baba Yaga rejects everything and bursts out laughing. Bartok, outraged, begins to yell, and he upsets Baba Yaga by accusing her of lying and cheating, and claiming that everyone hates her. After he apologizes to her, he starts crying and Baba gets the most important ingredient: tears which are from Bartok's heart. She makes a magic potion from the items she had Bartok collect and reveals that she never took Prince Ivan and that the potion she made was meant for Bartok himself. Baba Yaga explains that when Bartok drinks the potion, whatever he is in his heart will show ten times in his exterior.
Bartok and Zozi return to town and lead Ludmilla and Vol up to the top of the tower where Ivan is imprisoned. However, when they arrive, Ludmilla locks Bartok and Vol up with Ivan and reveals she had Vol kidnap the prince (telling him to 'get him out of the way' as in kill him, while Vol misunderstood and locked him up, supposedly for his own safety) while she framed Baba Yaga as part of her scheme to take the Russian throne. She steals Bartok's magic potion and leaves Bartok, Ivan, and Vol trapped in a well tower filling up with water.
She drinks it, believing her beauty will become tenfold, singing "The Real Ludmilla Comes Out" as she descends the tower. Unbeknownst to her, the potion causes her to steadily transform into an enormous dragon. Upon this discovery, the incensed woman goes on a rampage through Moscow, setting many buildings alight with her fire breath. Zozi then comes to the rescue, saving Bartok, Vol, and the Prince. Bartok battles Ludmilla and tricks her into climbing the tower. When it gets to the top, the tower starts to become unstable and causes the top of the tower to fall, flooding the streets and dousing the flames. As the townspeople gather around Ludmilla's dead body, Zozi reveals that Bartok is a true hero not only because he stopped Ludmilla but because he showed Baba Yaga compassion.
Bartok returns Ivan's ring and Baba Yaga appears, writing "Bartok, The Magnificent" in the sky. Bartok gives Baba Yaga a goodbye hug as she and Pillof depart.