Lila Nash, a law clerk at the Hennepin County Attorney's Office in Minneapolis, carries the hidden scars of a trauma that nearly killed her. Eight years earlier, she was drugged with GHB (gamma-hydroxybutyric acid, a date-rape drug) at a party near Uptown and raped by two unidentified men. The attack led to self-harm and a suicide attempt that resulted in a two-week psychiatric hospitalization. Now on the verge of a legal career, Lila counts her steps as a coping mechanism and secretly applies scar-reduction cream to cuts on her arm. She loves her boyfriend, Joe Talbert, a reporter, but deflects his hints at marriage, believing she has not truly healed.
At a Sunday wedding, Gavin Spencer, a freelance photographer with a severe lateral lisp, fixates on a bridesmaid named Sadie Vauk after she repeatedly mocks him. Gavin has killed four women over the past eight years, spacing his crimes two years apart. Using a hidden laptop, a 1986 Ford Bronco with no GPS, and a bottle of GHB, he books an after-hours appointment at Sadie's hair salon under the alias Kevin, drugs her water, assaults her, and drives her to Nicollet Island to drown her in the Mississippi River upstream of St. Anthony Falls, a waterfall that destroys physical evidence on the bodies.
Sadie, a former state champion swimmer, fights the current and reaches the rocks of a nearby power plant, where a security guard rescues her. Gavin destroys all evidence and alters his appearance, shaving his head and getting a spray tan. He saves photos from the crime to a private server hidden in his mother's garage attic.
At the County Attorney's Office, Lila's professional life shifts when Frank Dovey takes over the Adult Prosecution division after its head is hospitalized. Dovey holds a grudge against Lila for helping defeat him in the Ben Pruitt murder trial during law school, a loss that cost him a judgeship. He reassigns Lila to Andrea "Andi" Fitch, a demanding prosecutor in Sex Crimes and Homicide, hoping to build a paper trail to justify firing her. Andi, however, quickly recognizes Lila's strategic mind.
Detective Niki Vang of the Homicide unit takes over Sadie's case and connects it to three cold cases of women found drowned in the river: Eleanora Abrams, Virginia Mercotti, and Chloe Ludlow. All were fully clothed, had no signs of sexual trauma, and had GHB in their systems. Sadie recalls her attacker's distinctive lisp but cannot identify him visually. Niki traces the wedding photographer to Gavin Spencer, whose Ford Bronco matches surveillance footage. Gavin agrees to a lineup, confident his altered appearance will protect him. Sadie fails to pick him out by sight, but when Niki asks each man to repeat Gavin's words with a lisp, his speech impediment breaks through and Sadie identifies him. He is arrested, but his house yields no physical evidence.
At Gavin's first court appearance, his lisp triggers a panic attack in Lila. She cannot breathe or speak, and Andi takes over the hearing. Dovey witnesses the episode. Lila visits her therapist, Dr. Stephen Roberts, who finds a note from an old hypnotherapy session mentioning a man who slurred his words. Roberts also reveals that Lila's mother, Charlotte, forged a letter ending Lila's therapy years earlier because Charlotte feared being blamed.
Lila and Niki access Lila's cold rape case file and discover that John Aldrich, the boyfriend of Lila's former best friend Sylvie Dubois, was the prime suspect; he lied to detectives about leaving the party alone. Meanwhile, Niki builds connections between Gavin and each cold-case victim: He photographed events shortly before each woman's death or disappearance.
In jail, Gavin recognizes Lila as the woman he raped eight years ago and resolves to eliminate her before she connects him to that crime. He hires Leo Reecey, a disgraced attorney, and bribes Reecey to smuggle a burner phone into court. Through coded letters mailed by a fellow inmate, Gavin sends instructions to his accomplice from that night, someone he calls Jack. One message spells KILL SADIE VAUK; another leads to a blackmail photo on his server, ensuring compliance.
Lila visits Sylvie, now married to John, seeking information about anyone with a lisp at the party, but Sylvie erupts in fury. At her mother's house, Lila finds a photograph of John with his cousin Silas Jackson, who has a criminal record of voyeurism and sexual assault, and investigates him as a possible accomplice. Dovey escalates by reporting Lila's hospitalization and suicide attempt to the Board of Law Examiners using confidential information from her active rape investigation, a violation of the Data Practices Act. Lila confronts Dovey and his superior, Colin Nelson, at a restaurant, accusing Dovey of breaking the law to force her out.
Andi takes Lila rock climbing. When Lila freezes near the top of the bluff, Andi shouts that she will never see the inside of a courtroom if she lets fear stop her. Lila leaps, catches the wall, and hauls herself over, filled with a self-trust she has never known.
Lila confronts Charlotte, pressing her mother to acknowledge the rape for the first time. Charlotte admits she ended the therapy sessions because she believed ignoring the trauma would make it disappear. She finally kneels before Lila and says aloud that the rape was not her fault. Something softens inside Lila as she settles into an embrace she thought she would never feel again.
A certified letter leads Niki to Gavin's impounded Bronco. Though stripped clean, it bears a tear-shaped stain matching surveillance footage and a witness description from Chloe Ludlow's case. Lila devises a legal strategy: convict Gavin for Sadie's case first to establish his
modus operandi, then use that pattern to prosecute the cold-case murders, which carry life sentences.
Then Sadie is shot and killed in a parking lot. Without her testimony, Gavin's constitutional right to confront his accuser collapses the case, and Andi dismisses the charges without prejudice, preserving the option to refile. Before Gavin leaves court, Lila shows him a photograph from former classmate Sean Daniels depicting Gavin at the Uptown party, proving he was not at his high school graduation in Indiana, as his alibi claimed, the night of her rape.
Gavin follows Lila toward the Stone Arch Bridge, but Lila has planned the encounter with Niki. She wears a wire and a climbing harness under her raincoat, with a rope clipped to the railing and police cars stationed at both ends. She baits Gavin by naming Silas Jackson as his accomplice. Gavin's denial reveals knowledge only her actual rapist would possess. Lila shouts her signal word, and police lights flash. Gavin lunges, and they topple over the railing, but the rope catches Lila. Gavin clings to her, choking her. She strikes his throat, and he falls into the Mississippi River, where he drowns.
The investigation unravels Gavin's network. A SIM card hidden in his folder contains texts sent to Sylvie's phone. Niki's colleague Matty discovers that Sylvie and Gavin were cousins; Gavin called her Jack because his lisp made her name difficult to pronounce. Confronted by Lila, Sylvie confesses she helped Gavin photograph Lila as revenge for sleeping with John but insists she did not know Gavin would assault her. A search of Gavin's mother's house reveals the hidden server with photo files of all five victims, the gun used to kill Sadie, and blood evidence on her white SUV, the vehicle used in Sadie's murder. Gavin's mother, Amy Spencer, is arrested for Sadie's murder and confesses to killing her second husband, Richard Balentine.
Dovey resigns, forced out after Lila's confrontation with Nelson. Andi takes over Adult Prosecution and promises to advocate for Lila with the Board of Law Examiners. The cold cases are closed. Lila forgives Sylvie and asks that she not face prison time. As her scars fade nearly to invisibility, Lila puts on a sleeveless shirt for the first time. While preparing dinner for Joe's return, she passes a jewelry store and walks inside, ready at last to say yes when the time is right.