NYPD police officer Billy Taggart (Mark Wahlberg) is arrested for the murder of Mikey Tavarez, who was believed to have raped and murdered 16-year-old Yesenia Barea but “walked” on a technicality. Chief Carl Fairbanks (Jeffrey Wright) goes to Mayor of New York City Nicholas Hostetler (Russell Crowe) with a witness and evidence incriminating Taggart, but Hostetler buries the evidence. A judge clears Taggart as having shot Tavarez in self-defense. In a private meeting with Taggart, the mayor calls him “a hero”, but still forces him to leave the police department.
Seven years later, Taggart is living with his girlfriend Natalie Barrow (Natalie Martinez), an aspiring actress. His private detective business is on the verge of bankruptcy when Mayor Hostetler hires him to investigate his wife, Cathleen Hostetler (Catherine Zeta-Jones), whom he suspects is having an affair. With his assistant Katy Bradshaw (Alona Tal), Taggart learns that Cathleen is visiting Paul Andrews (Kyle Chandler), campaign manager of Jack Valliant (Barry Pepper), Hostetler’s rival in the upcoming elections,
At a fundraiser for Hostetler’s campaign, Cathleen reveals to Taggart that she knows he has been following her and advises him not to trust her husband. Taggart gives the mayor photos of Cathleen meeting with Andrews.
At the debut screening of Natalie’s film, she reveals that her real name is Natalia Barea and that Yesenia was her sister. Taggart is shocked at Natalie’s sex scene and strongly disapproves. Consumed with guilt over working for Hostetler, Taggart drinks regularly, and argues with Natalie, and she breaks off the relationship.
Taggart gets drunk, brawling with strangers in the street. He receives a phone call from Katy and rushes to a crime scene to learn that Andrews has been found murdered.
Taggart tells Chief Fairbanks of his work for the mayor. They learn that Valliant was in Andrews’ apartment. Valliant reveals that Andrews was scheduled to meet Todd Lancaster (James Ransone), the son of Hostetler’s wealthy benefactor, contractor Sam Lancaster (Griffin Dunne).
A furious Cathleen tells Taggart that Andrews was a close friend, not her lover, and had promised her information about Hostetler’s plans for the Bolton Village Housing Project, expected to enrich both Sam Lancaster and the mayor. Hostetler wanted to discover Cathleen’s source, so he manipulated Taggart into tracking her.
Taggart decides to investigate Mayor Hostetler for corruption. He goes to Lancaster’s construction business and finds workers destroying documents. Stealing some, he discovers that Bolton Village has been sold to build high-rise office buildings, rather than a new housing development, leaving hundreds homeless while Hostetler and Lancaster profit. Taggart is pursued in a car chase by Hostetler’s men, who run him off the road and take back the documents.
Taggart visits Todd Lancaster, who says he had intended to give Andrews a copy of the demolition contract as evidence against Hostetler on the night Andrews was murdered, and gives Taggart the contract. Taggart confronts Mayor Hostetler, who is unfazed, and reveals a video showing Taggart murdering Tavarez in cold blood. Taggart records their conversation of the mayor admitting to his own corrupt dealings.
Despite the risk of further prosecution for Taverez’s murder, Taggart turns the recording over to Fairbanks. While Hostetler is at home celebrating a successful debate, Fairbanks arrives to arrest him, and tells the mayor that he was having an affair with Cathleen. In the film’s final scene, Taggart meets Fairbanks at a bar, and they toast to Valliant, who has won the election. Katy comes in to say goodbye before the two men leave the bar.