A poison-gas attack on a Kolkata Metro Rail compartment kills the passengers on board. Two years later Vidya Bagchi (Vidya Balan), a pregnant software engineer, arrives in Kolkata from London during the Durga Puja festivities in search of her missing husband, Arnab Bagchi. A police officer, Satyoki "Rana" Sinha (Parambrata Chatterjee), offers to help. Although Vidya claims that Arnab went to Kolkata on an assignment for the National Data Center (NDC), initial investigations suggest that no such person was employed by the NDC.
Agnes D'Mello, the NDC's head of human resources, suggests to Vidya that her husband resembled former employee Milan Damji (Indraneil Sengupta), whose file is probably kept in the old NDC office. Before Agnes can provide any further help she is killed by Bob Biswas (Saswata Chatterjee), an assassin working undercover as a life insurance agent. Vidya and Rana break into the NDC office and find Damji's file, barely escaping an encounter with Bob, who is searching for the same information. Meanwhile, the attempts to obtain Damji's records have attracted the attention of two Intelligence Bureau (IB) officials in Delhi—the chief Bhaskaran K. (Dhritiman Chatterjee) and his deputy Khan (Nawazuddin Siddiqui). Khan arrives in Kolkata and reveals that Damji was a rogue IB agent responsible for the poison-gas attack. In spite of Khan's warnings, Vidya continues her search, fearing that Arnab's resemblance to Damji may have led him into trouble.
The address on Damji's record leads Vidya and Rana to a dilapidated flat. An errand boy from neighbourhood tea stall identifies R. Sridhar, an NDC officer, as a frequent visitor to Damji's flat. Bob attempts to kill Vidya, but fails, and is run over by a Tempo during a chase. Examination of Bob's mobile phone leads Vidya and Rana to an IP address sending instructions to kill her. They break into Sridhar's office to verify his IP address, but he is alerted electronically and returns to his office. Vidya accidentally shoots Sridhar dead during a scuffle, which upsets Khan, who had wanted him alive.
Sridhar's computer data reveals a code, which when deciphered reveals Bhaskaran's phone number. Vidya calls Bhaskaran to tell him that she has retrieved sensitive documents from Sridhar's office. She asks Bhaskaran to help find her husband in exchange for the documents, but Bhaskaran tells her to contact the local police. Vidya soon gets a call from an unknown number, however, warning her that she should hand over the documents to the caller if she wishes to see her husband alive. Khan thinks the caller is Milan Damji.
Vidya goes to meet Damji, followed by Rana and Khan. Damji cuts the meeting short when Vidya expresses her doubt that he will be able to return her husband in exchange for the sensitive file, and he attempts to leave. Vidya tries to stop him, and in the ensuing struggle, Damji draws a gun on her. Vidya disarms him using the prosthetic belly, she has been using to fake her pregnancy, before shooting him with his own gun. She flees into the crowd before the police arrive, leaving a thank you note for Rana and a pen drive containing data from Sridhar's computer, which leads to Bhaskaran's arrest. Rana concludes that no Vidya or Arnab Bagchi ever existed and that Vidya had been using the police and the IB to achieve her own ends.
Vidya is revealed to be the widow of Arup Basu (Abir Chatterjee), an IB officer and Damji's colleague, who was killed in the poison-gas attack. In her mission to avenge his death, Vidya was helped by retired IB officer Pratap Bajpayee (Darshan Jariwala), who suspected the involvement of a top IB official.