In Dorchester, Boston, private investigator Patrick Kenzie (Casey Affleck) and his partner, also his girlfriend, Angie Gennaro (portrayed by Michelle Monaghan), are drawn into a heart-wrenching case when they witness a televised appeal by Helene McCready (played by Amy Ryan) desperate to recover her abducted four-year-old daughter, Amanda (Madeline O'Brien), along with her beloved doll, Mirabelle. Amidst a frenzy of media attention, Amanda's distressed aunt, Beatrice "Bea" McCready (Amy Madigan), and her uncle, Lionel (Titus Welliver), engage Patrick and Angie to help locate the missing girl. Helene's best friend, Dottie (Jill Quigg), observes the chaos while Helene's abusive tendencies towards Patrick and Angie are evident. Despite the hostility, Bea persuades Patrick to take the case when they uncover that Helene frequents a local bar five nights a week, indulging in cocaine.
Through his criminal connections, Patrick learns of Helene and her boyfriend Ray's nefarious activities as drug mules for a dangerous local Haitian drug lord named Cheese (Edi Gathegi). The couple recently stole $130,000 from him, placing themselves and Amanda in dire peril. Helene discloses that during a drug run, cops raided a biker gang just after they delivered kilos to them, leading to a fatal miscommunication with Cheese.
Chaos ensues when Patrick discovers Ray has been murdered at the hands of Cheese's men. Now allied with police detectives Remy Bressant (Ed Harris) and Nick Poole (John Ashton), they devise a risky plan to find Amanda, whom they suspect Cheese has taken. In a moment of vulnerability, Helene shares that she buried the stolen money in her backyard and pleads with Patrick to ensure Amanda's safe return.
Patrick tries to broker a deal with Cheese himself, claiming that he intends to retrieve the money in exchange for Amanda’s release, but Cheese denies any involvement. However, circumstances take a critical turn when Captain Jack Doyle (Morgan Freeman) later reveals a crucial phone transcript from Cheese, suggesting an exchange at a quarry. The plan goes awry as a gunfight erupts while Patrick and Angie wait to rescue Amanda—a disastrous setup that results in Cheese's death and the tragic belief that Amanda drowned in the quarry's waters. Heartbreakingly, Amanda’s doll is found, leading to public outcry and Captain Doyle's early retirement from the force.
Two months later, a similar abduction occurs in Everett, leading Patrick to uncover an even darker conspiracy. Armed with insights about a known child molester, Corwin Earle (Matthew Maher), Patrick and the police make a harrowing late-night rescue attempt. In the chaos, the woman shoots her husband and fatally wounds Nick, leading Patrick to discover that Corwin murdered an innocent child, ultimately taking justice into his own hands.
As Patrick mourns for Nick and reflects on the case's dark realities, he unravels a grim truth: both Remy and Captain Doyle were complicit in staging the kidnapping, intending to seize the drug money. In a tense bar confrontation, Patrick confronts Lionel, who confirms the conspiratorial ties, revealing a deadly plan that led to the chaotic exchange at the quarry.
As tensions rise, a disguised Remy attempts to silence Patrick, but fate intervenes and the bartender shoots him, culminating in a rooftop chase where Patrick learns of even more treachery involving Doyle. Finally confronting Doyle at his home, Patrick discovers Amanda alive but caught in a morally complex bind. Doyle attempts to persuade Patrick that Amanda would be better off if he kept her away from her neglectful mother, Helene. Caught between his promises and moral integrity, Patrick ultimately decides to call the authorities, reminding himself of the promise he made to Helene to bring Amanda home. As the dust settles, Patrick’s relationship with Angie crumbles amidst the chaos of their shared ordeal.
In the poignant aftermath, Patrick makes an unexpected visit to Helene, only to uncover her neglect once again as they discuss Amanda. Sitting together, Patrick learns that Amanda has renamed her beloved doll Anabelle, prompting a painful realization about Helene's inattentiveness to her own child’s needs.