Career criminals Neil McCauley (Robert De Niro) and his crew; Chris Shiherlis, Michael Cheritto, and Trejo, hire Waingro to help them rob $1.6 million in bearer bonds from an armored car. During the heist, Waingro impulsively kills a guard, infuritating McCauley. As the team attempts to kill Waingro, he escapes.
McCauley's fence, Nate, suggests he sell the stolen bonds back to their original owner, money launderer Roger Van Zant. Van Zant agrees, but instructs his men to ambush McCauley at the meeting. McCauley survives the ambush and vows revenge against Van Zant.
LAPD Lieutenant Vincent Hanna (Al Pacino), working with Sergeant Drucker and Detectives Sammy Casals, Mike Bosko and Danny Schwartz, investigate the heist and identify McCauley's crew as the perpetrators. They discover their next target to be a precious metals depository. The unit stakes out the depository and observe the crime in progress, but inadvertently alert McCauley to their presence. McCauley abandons the burglary. Hanna, dissatisfied with the lack of evidence, lets McCauley's crew escape.
Despite the increased police surveillance, McCauley's crew agrees to one last brazen bank robbery worth $12 million to secure their financial futures. Waingro approaches Van Zant with information about eliminating McCauley's crew. McCauley starts a relationship with Eady (Amy Brenneman), a designer he meets in a cafe. Hanna moves into a hotel after learning his wife Justine (Diane Venora) is having an affair.
Hanna pulls over McCauley on the freeway and invites him to coffee. Face-to-face, the aging professionals bond over their personal problems; Hanna's concern for his depressed stepdaughter Lauren and his string of failed marriages due to work, and McCauley's solitary life of a career criminal which, forbidding attachment and requiring mobility, makes his romantic relationships tenuous. Both men reaffirm their commitment to their work and to using lethal force if necessary to stop the other.
After coffee, Hanna discovers that McCauley's crew have evaded their surveillance. When Trejo withdraws from the robbery, McCauley recruits ex-convict Donald Breedan (Dennis Haysbert) into the crew. Hanna's unit receives a confidential tip and interrupt McCauley's crew in the middle of their bank robbery. In the ensuing gunfight, several police officers, including Bosko, are killed, while McCauley's crew loses Breedan and Cheritto. Shiherlis is wounded, but escapes with McCauley.
McCauley leaves Shiherlis with a doctor to treat his wounds. He breaks into Trejo's house to find Trejo near death. Trejo reveals that Waingro alerted Van Zant to their bank robbery, who subsequently informed the police. McCauley finishes off Trejo at his own request, then kills Van Zant at his home. McCauley approaches Eady, who has accepted his criminal activities, with a plan to flee to New Zealand.
Hanna orders police surveillance on Waingro and leaks his location to criminal channels, suspecting McCauley will attempt to kill him before leaving town. Shiherlis' estranged wife Charlene is detained in a police safehouse, where Drucker threatens her with criminal charges if she doesn't betray Shiherlis to police. Charlene agrees, but when Shiherlis shows up in disguise, she surreptitiously warns him, allowing Shiherlis to slip through the dragnet.
Hanna finds Lauren unconscious in his hotel room from a suicide attempt and rushes her to the hospital. McCauley and Eady drive to the airport when he receives word of Waingro's location at a nearby hotel. Initially dismissive, McCauley decides to risk his freedom for revenge. He infiltrates the hotel, pulling a fire alarm to distract security and confronts Waingro before killing him. Moments away from escape, he notices Hanna approaching through the crowds and is forced to abandon Eady for his freedom.
Hanna chases McCauley into a field outside the LAX freight terminal. In the cat-and-mouse shootout, McCauley is exposed, and Hanna mortally wounds him. Near death, McCauley offers his hand to Hanna, who takes it, and reverently watches his adversary die.
Output: Who is Lauren?