In Dorchester, Boston, P.I. Patrick Kenzie and his partner and girlfriend Angie Gennaro witness a televised plea by Helene McCready for the return of her abducted four-year-old daughter Amanda and the girl's favorite doll, Mirabelle. Amid a media frenzy, Amanda's aunt Bea and uncle Lionel hire them to find her.
Using his connections with various criminals, Patrick discovers that Helene and her boyfriend Ray are addicts and drug mules for a local Haitian drug lord named Cheese, and had recently stolen $130,000 from him. After discovering Ray has been murdered by Cheese's men, Patrick and Angie join police detectives Remy Bressant and Nick Poole in a plan to find Amanda, who they assume has been taken by Cheese. Helene reveals she buried the money in Ray’s backyard and tearfully makes Patrick promise to her that he will bring Amanda home alive.
Patrick meets with Cheese and tries to negotiate the return of the stolen money in exchange for Amanda, but Cheese denies any involvement in the girl's disappearance. The following day, Captain Jack Doyle reads Patrick a telephone transcript of Cheese calling into the station to set up an exchange for Amanda. The exchange at a nearby quarry is botched after a gunfight breaks out, and Cheese is killed. It is believed that Amanda fell in the quarry's pond and drowned; her doll is retrieved from the water by Angie and returned to Helene. Doyle, whose own daughter was killed years before, goes into early retirement following public outcry over the mishap.
Two months later, a seven-year-old boy is abducted in Everett, and Patrick receives information that he was taken by Corwin Earle, a known child molester, who is living with two married cocaine addicts. Patrick gains entry into the house and after observing evidence of the abducted boy, returns with Remy and Nick late at night to rescue him. Before they enter the house, the woman starts shooting and fatally wounds Nick before chasing Patrick into Corwin's room. Patrick discovers the dead child and he executes Corwin as Remy arrives and kills the woman. The following evening, an intoxicated Remy tries to alleviate Patrick's guilt and confides that he once planted evidence on an abusive husband to help the man's family escape with Ray's help. Patrick recalls that Remy had originally told him that he didn't know Ray.
Following Nick's funeral, Patrick speaks to a police officer named Devin and tells him that Remy lied to him about knowing Ray. Devin tells him that Remy and Doyle knew about Cheese's stolen money before Cheese even knew it was missing. Patrick goads Lionel into meeting him in a bar and pieces together that Lionel and Remy had conspired to stage a fake kidnapping in order to take the drug money for themselves and to teach Helene a lesson, which Lionel finally admits. Remy enters the bar wearing a mask, staging a robbery to interrupt their conversation. Patrick realizes that Remy plans to kill them so he yells aloud that Remy kidnapped Amanda. The bartender shoots Remy twice in the back. Remy flees, pursued by Patrick to the rooftop of a nearby building, where he dies from his wounds.
Patrick is questioned by the police and realizes Doyle is involved when he learns that the police don't use phone transcripts. Arriving at Doyle's home, Patrick and Angie find Amanda alive and well. Doyle admits he was part of the kidnapping and helped set up the fake exchange to frame Cheese. Patrick threatens to call the authorities, but Doyle tries to convince him that Amanda will have a better life with him instead of with her neglectful mother. Patrick discusses the choice with Angie who says she will hate Patrick if he returns Amanda to her mother. However, Patrick calls the police to collect Amanda, as he cannot bring himself to break his promise to Helene and believes she belongs with her mother, regardless of Helene's parenting. Doyle and Lionel are arrested, and Patrick and Angie break up.
Patrick later visits Helene as she is preparing for a date. He learns that she has not made appropriate plans for a babysitter so he volunteers to watch Amanda. After Helene leaves, Patrick sits down and asks Amanda about her doll Mirabelle, but Amanda says the doll's name is Anabelle. Patrick sits in silence, realizing Helene did not even know the name of her daughter's favorite doll.
Casey Affleck as Patrick Kenzie
Michelle Monaghan as Angie Gennaro
Morgan Freeman as Captain Jack Doyle
Ed Harris as Detective Sergeant Remy Bressant
John Ashton as Detective Nick Poole
Amy Ryan as Helene McCready
Madeline O'Brien as Amanda McCready
Amy Madigan as Beatrice "Bea" McCready
Titus Welliver as Lionel McCready
Slaine as Bubba Rogowski
Edi Gathegi as Cheese
Matthew Maher as Corwin Earle
Mark Margolis as Leon Trett
Michael K. Williams as Devin Amronklin
based on the 1998 novel of the same name by Dennis Lehane