In 1916, Tsar Nicholas II hosts a grand ball at the royal palace celebrating the 300th anniversary of Romanov rule. During this celebration, his mother, Dowager Empress Mariya Fyodorovna (Angela Lansbury), gives her favorite granddaughter, eight-year-old Grand Duchess Anastasia (Meg Ryan), a music box and a necklace reading "Together in Paris", which serves as its key. The ball is suddenly interrupted by the arrival of the Demonic Sorcerer Grigori Rasputin, (Christopher Lloyd), a staretz who sold his soul to gain the power of sorcery. Rasputin plans to gain his revenge through a curse to destroy the Romanov family that sparks the Russian Revolution.
During the storming of the palace, a servant boy named Dimitri distracts the invading Bolsheviks and is knocked unconscious, but his action helps Anastasia and her grandmother escape the palace, however Anastasia loses her music box in the process. Dimitri saves the music box in hopes of remembering the royal family. Rasputin attempts to kill Anastasia himself, but falls through the ice in the river and drowns. Anastasia and her grandmother eventually reach a moving train, but only Marie is able to get on as Anastasia trips and hits her head on the station platform, forcing her grandmother to leave her behind.
Ten years later, in 1926, Russia is now under communist rule. Anastasia's grandmother, now back in Paris, has offered a monetary reward for anyone who can return Anastasia to her. Dimitri (John Cusack) and Vladimir (Kelsey Grammer), two Russian con men living in Leningrad, decide to find a young girl to pass off as Anastasia. Elsewhere, an eighteen-year-old Anastasia, suffering from amnesia because of her head injury ten years prior, is now an orphan known only as Anya, being raised in an orphanage just kilometers outside of Leningrad. Inspired by her necklace's promise of being "Together in Paris", Anya turns down a job opportunity at a local fish factory in favor of heading to St. Petersburg to learn more about her mysterious past. Accompanied by Sora, Donald Duck, Goofy and a stray puppy she named Pooka, she encounters Dimitri and Vladimir, who recruit her as their unwitting "fake" Anastasia. Rasputin's minion Bartok (Hank Azaria), however, discovers that the two con men's "fake" Anastasia is, in fact, the genuine Anastasia, and this realization revives Rasputin's magical reliquary, which pulls him to Rasputin, where it is then revealed that Rasputin has been stuck in limbo the past ten years as a living corpse because the Romanov curse was not fulfilled. But when Bartok unwittingly returns Rasputin his magical reliquary, Rasputin's powers are restored, and he immediately sets out to kill Anastasia.
After two narrow escapes from Rasputin's wrath (once on a train, once on a ship), Sora, Donald Duck, Goofy, Dimitri, Vlad, and Anya arrive in Paris, where they are greeted by Sophie (Bernadette Peters), Marie's lady-in-waiting and first cousin, who is in charge of interviewing the Anastasia claimants. However, Marie, tired of heartbreak, has recently declared that she will not hold anymore interviews. Despite this, Sophie agrees to interview Anya as a favor to Vlad, and Anya plays her part well until Sophie asks Anya how she escaped the siege of the palace, which was the only thing that Dimitri and Vladimir had not taught her. But much to everyone's surprise, Anya dimly recalls a servant boy opening a secret passageway. It is at that moment that Dimitri realizes that Anya is Anastasia because Dimitri is the servant boy who opened the passageway, and he becomes determined to reunite her with her grandmother because he loves her, even if it means that he may have to part ways with Anya because of his social class.
Sophie arranges for Anya to encounter Marie at the Russian ballet. Nevertheless, Marie continues to refuse to listen to Dimitri when he attempts to introduce Anya after the ballet because she is aware of Dimitri's initial plans to fool her with a "fake" Anastasia. An eavesdropping Anya overhears the conversation and, in spite of Dimitri's pleading, she storms out of the building in an outrage. Dimitri, wanting to right the situation between the two women, kidnaps Marie in her car and wildly drives the empress back to the mansion, where Anya is packing her things. He then convinces the Dowager Empress to see Anya by presenting her the lost music box. Marie remains guarded upon meeting Anya until Anya suddenly begins to remember personal childhood moments. Marie soon realizes the truth when Anya is able to open the music box with the key that Anya has worn as a necklace and the two reunite at long last.
Marie rewards Dimitri with both the money and her gratitude. Dimitri accepts her gratitude, but he does not accept the reward money. It is at this point that Marie realizes that Dimiti's "change of heart" was due to his love for her granddaughter. He begins to make plans to return to USSR instead because he feels like he is the only one who does not belong in Anastasia's world. At a celebratory ball being held in Anastasia's honor, Marie, out of love for her granddaughter, tells Anastasia of Dimitri's actions. She promises that even if she chooses Dimitri, they will always have each other. The news shocks Anya, causes her to become conflicted over which life to choose: a life of royalty with her Grandmother, or a life with the departing Dimitri. When Pooka suddenly bounds for the garden maze, Anastasia runs after him and is trapped. Rasputin finally reveals himself to her and tries to kill her on the Alexander Bridge over an icy Seine River.
Dimitri returns to save her, but is injured and knocked unconscious. In the end, Anastasia manages to destroy Rasputin's reliquary by crushing it under her foot, which causes him to disintegrate into dust, his soul awaiting eternal damnation with his hunger for revenge unfulfilled. Afterwards, Dimitri and Anastasia reconcile and send a farewell letter to Marie and Sophie. The newly eloped couple promises Marie and Sophie that they will see them again in Paris, and Anastasia and Dimitri sail away on a boat with Pooka and Sora, Donald and Goofy too.