Dominika Egorova (Jennifer Lawrence) is a lead ballerina in the Bolshoi Company for Russia. The company takes care of her and her ailing mother, Nina (Joely Richardson). After the lead male ballet dancer falls on and breaks Dominika's leg during a performance, her career is over.
Dominika's uncle, Ivan Egorova (Matthias Schoenaerts), suggests that she work for him in the Russian Intelligence as an assassin as the Bolshoi won't pay for her mother's medical bills much longer. Dominkia agrees, for her mother. Her target is Dimitri Ustinov (Kristof Konrad) who rapes her but during the act a stranger (later revealed to be Simyonov (Sergej Onopko) strangles Dimitri to death.
Dominika is then placed into Sparrow school as the alternative is death as a witness to the murder. Dominika is put through various lessons and situations under the Matron's (Charlotte Rampling) tutelage.
Dominika is removed earlier than expected to carry out a mission under her uncle and General Vladimir Korchnoi (Jeremy Irons). The target is an American CIA operative, Nate Nash (Joel Edgerton). She is to find out the name of his Russian contact. She is placed in a rooming flat with Marta (Thekla Reuten) who also went to Sparrow school.
Nate has convinced Dominika to become a double agent and work with the CIA.
Dominika reveals to Marta that she was there when Dimitri Ustinov was killed. Marta takes that information over to Maxim Volontov (Douglas Hodge), their superior, which gets Marta skinned and gutted in the bathroom for Dominika to find.
Dominika, under a lie detector test, tells Marty (Bill Camp) and Trish (Sakina Jaffrey), Nate's superiors, about Marta's mission with an American chief-of-staff, Stephanie Boucher (Mary-Louise Parker) code name Swan who is providing Russia with information.
With Marta out of the way, Dominika and Maxim make the exchange with Stephanie. Unfortunately, Stephanie is drunk and gets spooked in front of a bus which kills her. Dominika is taken back to Russia for questioning and torture. Maxim is shot in the head while Dominika is allowed back in the field to find the mole.
Dominika and Nate reunite. Dominika awakes to find Nate gagged, partly tied to a chair and Simyonov strangling him. Dominika joins in the torture tying Nate fully to the chair. Suddenly she turns on Simyonov and stabs him. A fight ensues ending with Simyonov dead while Dominika and Nate are badly injured.
Dominika awakes in a hospital. The General approaches her and reveals that he is the mole. His reason is that an angry Russians official wouldn't allow an American to operate on his sick and dying wife. He allows Dominika to do what she wishes with this information as he is resigned to his fate.
Dominika identifies the mole's name to Zakharov (Ciarán Hinds) via phone. An exchange is made between Dominika and a masked man who is believed to be the Russian contact. When the mask is unveiled, it is the uncle who has undergone torture. Then a flashback to various events that Dominika did to set up her uncle for this moment. The uncle is shot in the head before he reaches the Americans.
In the final scene, Dominika is decorated with the General and Matron in the audience. Dominika is shown at home with her mother. She gets a call, and it is ballet music like Nate played for her as a calling card.