An inbound Los Angeles Blue Line train pulls in to Firestone light rail station, and professional thief Neil McCauley (Robert De Niro) exits, disguised as a paramedic. He enters a nearby hospital, where the uniform allows him to walk through the emergency room unnoticed. He registers the activity going on around him as he travels down the hall holding a clipboard, acting like just another employee as he drives off in a Goodhew ambulance.
At a construction supplier, one of Neil's associates, Chris Shiherlis (Val Kilmer), purchases some explosive charges, showing a valid driver's license, and pays in cash when the clerk asks him how he wants to pay.
Meanwhile, Lieutenant Vincent Hanna (Al Pacino), a robbery-homicide detective for the Los Angeles Police Department, after having sex with his wife Justine (Diane Verona), leaves for work. Just after he leaves, his 15-year-old stepdaughter, Lauren (Natalie Portman), suffers a slight breakdown in front of her mother while she's preparing to meet her father.
This same day, Neil, Shiherlis, and three other men, Trejo (Danny Trejo), Waingro (Kevin Gage), and Michael Cheritto (Tom Sizemore), carry out the robbery of a Gage armored car. Neil and Shiherlis, wearing paramedic uniforms, station the stolen ambulance on Venice Boulevard just east of the Interstate 10/Interstate 110 overpass. While this happens, Waingro is picked up at a café by Cheritto in a stolen green big rig tow truck. As they drive towards the scheduled ambush point, Waingro tries to make conversation with Cheritto, who merely asks for him to shut up. Waingro is quite agitated at the order. They park their truck underneath the highway at a 90 degree angle to the street. Trejo tails the armored car as it leaves the depot and radios in its location as it gets closer to them.
When Trejo radios back that the armored car is 300 yards away, Neil, Shiherlis, Cheritto and Waingro slip on hockey goalie masks to conceal their faces. They then move their vehicles into position. Neil puts the ambulance in drive, activates the lights and siren, and starts to execute a three-point turn to block the armored car as it approaches from the west on Venice Boulevard, while Cheritto floors the gas pedal of the tow truck. The armored car stops, its path obstructed by Neil. The two guards in the back are reading their newspapers, oblivious to what is about to happen. As he waits, the driver looks left and his eyes go wide when he sees the tow truck bearing down on him. The tow truck rams the armored car at full speed, and the impact partially caves in the truck's grille, while the armored car turns over and slides 50 feet on its passenger side into a car dealership parking lot.
As the dust settles, the robbers climb out of their vehicles carrying assault rifles and pistols and take up positions around the overturned truck as one of the guards makes a radio call for help. Hearing a dispatch call for a "211" (armed robbery) on his police scanner, Trejo radios to the others that they have three minutes, and Neil starts a stopwatch. Shiherlis sets off an explosive charge to blow open the back doors. Neil and Cheritto then climb into the armored car and drag out the now-deaf and shaken guards, and hand them over to Waingro, who holds the them at bay on the sidewalk with a pistol. While Neil and Cheritto cover the street, Trejo runs a spike strip across the street to stop any police that pursue them, and Shiherlis searches the truck for several envelopes. When Neil yells that they have eighty seconds remaining on the clock, Waingro suddenly gets aggressive and pistol-whips the first guard, who can't hear Waingro's order to back up. Cheritto harshly admonishes Waingro, calling him "Slick."
Once Shiherlis has found the specific envelope the crew is after, he exits the back of the truck and the men begin to head back to the ambulance and move out. Waingro mutters something about the guard challenging him and suddenly shoots the first guard in the face, killing him instantly. The second guard tries to reach for a backup revolver in his ankle holster, but Neil shoots him with an automatic rifle. The guard is thrown back against the armored car and crumples dead. Cheritto holds his rifle on the last guard, looking to Neil with approval. With a slight nod from Neil, Cheritto aims his rifle at the guard, and shoots him twice in the chest. He then steps forward and shoots the guard again in the head. They then run back to the ambulance, removing their masks as Trejo drives. Neil is quite angry at Waingro for shooting the 1st guard, Waingro insisting the man was making a move to stop them.
As the crew speeds away from the scene, the first police cars come speeding towards the scene from the other direction. The first three units are unable to see the spike strip in time, blow out their tires, and crash into each other. The police officers jump out of the cars and run over, frantically signalling the units right behind them to stop just in the nick of time. As the police descend on the area, Neil and his crew pile out of the ambulance a few blocks away and climb into a nearby station wagon. Shiherlis plants a firebomb in the back of the ambulance that destroys their weapons and gear as they drive away.
That evening, Neil meets in a parking garage with Nate (Jon Voight), his money-laundering expert. Nate tells Neil that the envelope they stole contains hundreds of millions in bearer bonds from a company called Malibu Equity & Investments, owned by a crooked entrepreneur named Roger Van Zant (William Fichtner). Nate agrees to set up a meeting where Van Zant will send someone with cash to exchange for the bonds. Nate tells Neil of another job offered by a man named Kelso, that will bring in at least $10 million. Neil agrees to meet with Kelso (Tom Noonan). Nate also asks Neil what went wrong with the heist, but Neil refuses to talk about it.
At the scene of the heist, Hanna arrives and begins investigating. With Hanna are his team of detectives, Detective Casals (Wes Studi), Detective Bosko (Ted Levine), Sgt. Drucker, (Mykelti Williamson) and Det. Schwartz (Jerry Trimble). The vehicles left at the scene of the robbery have been identified - the big rig was reported stolen out of Fresno two weeks earlier and Trejo's pickup truck out of Whittier two days prior to the robbery. Other than that, there are no leads -- only a nickname, "Slick", dropped by Cheritto, was heard by a homeless man across the street. Hanna is able to recount the heist itself quite accurately, noting that those who committed it are definitely professionals. He orders his team to begin talking to their informants and fences to find out who might be handling the money. He also charges Casals with running the name "Slick" as an alias to the FBI, knowing that it likely won't lead anywhere but wants it checked anyway.
At a truck stop diner in a different part of town, the rest of the crew and Waingro wait for Neil, who shows up. He tells them all that Waingro has forfeited his share of the heist and he beats him briefly in full view of the other diners. Neil is nervous because of the killings of the three guards which will warrant a deeper investigation by the LAPD's robbery/homicide unit. As they all leave, Neil suddenly hits Waingro, and throws him to the pavement with the intention of killing him. He is about to shoot Waingro with his pistol when Cheritto yells for him to stop. He has spotted a police car on the street. They watch nervously, hoping the police officers haven't noticed them. There is a sigh of relief when the police car suddenly activates its lights and siren, makes a u-turn, and drives away. When Neil looks back, Waingro has vanished. He and the others search the immediate area, but find no sign of him.
At his home, Chris gets into a heated argument with his wife, Charlene (Ashley Judd) about the amount of money he's brought home from the heist -- it's considerably less than Charlene was expecting. Chris tells her he'd paid off his bookies. When she challenges him on his gambling problem, he tells her she can leave and storms out.
The next morning, Hanna and Drucker bust in on the chop shop of Albert Torena (Ricky Harris), one of Hanna's informants. After a tense conversation where Hanna intimidates Albert and threatens him with jail time, Albert tells Hanna that his brother Richard will meet with Neil at a club in Koreatown at 2 AM with a possible lead in the case.
Neil meets with Nate's associate, Kelso (Tom Noonan). Kelso tells Neil about a new potential heist - the main downtown branch of the Far East National Bank collects hard currency for distribution to its other branches. On certain days of the week, the bank holds at least $10 million. Neil scoffs at the idea at first; it would be impossible for his team to rob the bank without at least one employee setting off an alarm that the police would respond to rapidly. Kelso, a computer hacker himself, tells Neil that he knows how to reprogram the alarm system to shut itself down 15 minutes before they arrive. Neil agrees to take the job and Nate gives him Van Zant's business number.
Neil returns to his Spartan oceanside apartment and finds Chris sleeping on his living room floor. Neil makes him coffee and asks him what's going wrong with his personal life and his marriage. Chris explains a few things and Neil reminds him of an inmate they knew in Folsom who's longtime mantra was not to have anything serious enough in their personal lives that they can't leave behind in a hurry ("30 seconds flat") if they know they'll be caught as criminals. Neil tells Chris they're going to get their money from Van Zant for the bearer bonds they'd stolen and then take Kelso's bank job.
Neil sets up arrangements to transfer the bonds. A few days after the armored car robbery, he calls Roger Van Zant at a payphone and tells him to have one of his employees call him back with an arranged meeting point to exchange the bearer bonds for cash. While he's on hold, Neil notices Charlene (Ashley Judd), Shiherlis' wife, at a cheap hotel with another man, Alan Marciano (Hank Azaria). One of Van Zant's bookies calls back to inform Neil that the meeting will be tomorrow at a drive-in movie theater. Afterward, Neil confronts Charlene, warning her to give Chris one last chance.
Hanna goes to the club in Koreatown Torena mentioned, and talks to Richard who tells him that he was incarcerated with a man whom he saw outside prison recently who pulls off large heists, getting Cheritto's name. He calls his unit immediately and tells them to set up extensive surveillance on everyone Cheritto associates with.
Neil goes to the drive-in theater where Van Zant has arranged to make the exchange. The drop man arrives shortly thereafter in a pickup truck. Neil orders the driver to hold his hands up to prove that he is not holding any weapons, and then instructs the man to toss the package with his right hand into Neil's shotgun seat. Unbeknownst to Neil, an assassin armed with a machine pistol is hiding in the back of the pickup and preparing to kill him.
As the assassin creeps up to the passenger's side window of Neil's car and aims his gun, Shiherlis, armed with a rifle and stationed on the rooftop of the projection building, spots him and gives Neil a warning through his headset. The next moments happen in an instant: Neil looks in his rear-view mirror, sees the assassin, and instantly floors the car in reverse, crushing the assassin against the pickup and injuring his leg. Shiherlis rolls over once, aims his rifle, and fires at the pickup truck. Bullets hit the windshield, splintering it, and the truck pulls forward. The assassin, struggling to regain his footing, fires a wild burst at Neil's car, and Neil fires back through his windshield with his pistol. Now with a clean opening, Shiherlis draws a bead on the assassin and shoots him in the back. The hit spins the assassin around, at which point Neil fires another round that hits him in the chest, before his car runs over the assassin, killing him. Just as the driver is about to reach the exit, Cheritto steps out from behind the fence and kills him by emptying a shotgun into the truck. The now driverless and bullet-riddled truck rolls to a stop against the berm. As they leave, Neil examines the package and finds nothing but scrap paper. Neil later calls Van Zant and tells him to forget about the payment and very slyly threatens to kill him.
What Neil, Shiherlis and Cheritto do not realize is that in this time, Waingro has started to work for Van Zant. Nor do they know that the guard Waingro shot in the armored car robbery is not Waingro's first victim: he is a serial killer who kills young prostitutes. Later, while at a party with his fellow detectives, Hanna is called away to a motel where one of Waingro's victims has been found stuffed into a garbage can by a pool. Hanna is exasperated upon learning that the dead girl's family has shown up. When the distraught mother arrives, Hanna stops her from seeing her daughter's body and holds her while she wails.
Neil and his men begin to pull another heist at a precious metals repository. Cheritto deactivates the alarm system above the ground on a utility pole and Shiherlis begins to crack a safe inside, while Neil himself stands guard out front watching for trouble. Across the street, hidden in moving vans, Hanna, his detectives, and a SWAT team, observe the scene, watching Neil stand guard, on infrared monitoring equipment. While they watch, one of the SWAT team members in Hanna's van sits down, banging his rifle against the wall of the truck. Neil, standing watch outside, hears the noise. He looks right in the direction of the police surveillance trucks. Realizing they're being watched, he quickly enters the repository and orders Shiherlis and Cheritto to withdraw, to Shiherlis' chagrin. The three men leave empty-handed and Hanna orders the SWAT officers on the stakeout to let the crew go, as he knows that simple breaking-and-entering would carry a shorter sentence than outright theft would.
A short time later, Hanna and his team observe Neil, Cheritto and Shiherlis seemingly casing another job near a shipyard. When Neil and his guys leave, Hanna and his men go to the scene and try to figure out what Neil's next heist will be. They determine that there's nothing worth stealing from any of the businesses in the immediate area. Suddenly, Hanna has an epiphany; he realizes that Neil's casing of the area was a ruse to lure himself and his crew out in the open. Neil, from a high vantage point on a cargo crane, takes pictures of the detectives with a high-powered camera. With the pictures, Neil is able, through Nate, to identify Hanna and his men. When Neil meets with Nate to pick up the schematics for Kelso's bank heist, Nate tells him about Vincent, who has a long and successful history of taking down major criminals and that Vincent "admires" Neil. Neil decides that the heist is still worth the risk.
Vincent returns to his house & finds that his wife is gone. Vincent decides to join a surveillance team trailing Neil in unmarked cars and a helicopter on an LA freeway. Vincent is taken to one of the ground units and pulls Neil over, seemingly on a routine traffic violation. He cheerfully invites Neil to join him at a nearby restaurant where they both reflect on their own personal lives. During their meeting Hanna says that while he may not like it, he will kill McCauley if need be to prevent the latter from killing an innocent. McCauley points out the "flip side" by saying that he will not hesitate to kill if the cops box him in. McCauley also explains the purpose of his "30 seconds" creed by saying he never wants to go back to prison.
The best-laid plans of the thieves for the bank heist are being secretly thwarted behind the scenes by Waingro. Waingro has been laying low since Neil's attempt on his life at the truck stop; he eventually meets Van Zant after looking for criminal work in a biker bar after one of his prostitute killings. Waingro leads Van Zant to Trejo, who calls Neil and tells him that the police are following him. Neil tells Trejo to head in the opposite direction to throw the police off them. When Neil receives the call, he, Shiherlis and Cheritto are eating at a local diner. Neil has just spotted an old prison friend of his behind the grill - an ex-con named Donald Breedan (Dennis Haysbert), who is currently frustrated with his job as a short-order cook, especially since the manager is a jerk who treats him like dirt and extorts part of his pay. Neil approaches Breedan and offers to give him the job of getaway driver as a last-minute substitute for Trejo. Given how much he hates his boss, Breedan simply cannot refuse Neil's offer and quits, pausing momentarily to throw his slimy and oppressive boss to the floor.
With his wife being beaten and raped by Waingro and Van Zant's crew, Trejo is forced to reveal Neil's latest plans. One of Van Zant's subordinates, a police informant named Hugh Benny (Henry Rollins), then tips off the police as to which bank Neil plans to hit.
At 11:30 A.M., Neil's enters the Far East National Bank downtown. While Breedan waits in the car, Neil, Cheritto and Shiherlis take up strategic positions inside the bank's lobby wearing business suits to hide their weapons and spare magazines. They enter through different doors to avoid raising suspicion. Once inside the lobby, they take up positions near lobby guards. Neil and Cheritto station themselves at either end of the lobby, while Shiherlis waits in line at a teller's desk.
Cheritto gives a small cough, signaling for him and Neil to slip on their ski masks. At that point, Shiherlis sets down a briefcase at the teller's desk, then suddenly whirls around and hits the guard closest to him with a small sap, and tackles him to the floor. Simultaneously, Neil and Cheritto whip out assault rifles, order everyone in the bank to get on the floor, and disarm the other guards by binding their hands behind their backs with zip ties and then removing their service weapons. Neil stands atop the teller windows and informs the customers that they are not going to be hurt and they won't lose their own money because it's insured by the federal government. He then punches an uncooperative bank manager in the mouth, grabs the man's vault key, and hands it to Shiherlis. While Neil and Cheritto guard the lobby, Shiherlis unlocks the double doors to the vault, unloads a set of empty gym bags, and begins packing the money into them. The money sheets are packed so tightly that Shiherlis has to cut the wrapping open with a folding knife to fit them in. Shiherlis loads three bags, each one containing $4 million - two for Neil and one for himself. Neil relays one bag over to Cheritto in the lobby, who removes his ski mask, dons a set of sunglasses and begins to walk out.
Meanwhile, at LAPD headquarters, a detective receives a phone call from Hugh Benny about Neil and his crew planning to rob the bank and quickly relays it to Casals who shouts out the location and all of the officers, Hanna included, race to the bank. When they arrive, they see that Neil and his crew have already begun to exit the bank. Hanna orders everyone to capture them in the car and to watch their backgrounds if they have to begin shooting.
At the bank, Neil and his crew quietly leave the bank carrying their bags over their shoulders. Cheritto walks across the plaza to the getaway car where Breedan waits, climbs into the backseat, and laughs as he pats Breedan's shoulder. Once Cheritto has gotten into the car, Neil walks across the plaza and climbs into the shotgun seat.
The last to cross the plaza is Shiherlis. Just as Shiherlis reaches the getaway car, a U-Haul truck moves and he spots an armed Drucker and Casals standing across the street. Shiherlis immediately raises his rifle and opens fire on Drucker and Casals. As bystanders dive for cover, Hanna and Bosko, stationed just up the sidewalk, open fire on Shiherlis. Cheritto fires a burst out the left passenger window, and Shiherlis turns and fires at Hanna and Bosko. Despite wearing a bulletproof vest, Bosko suddenly falls when a bullet hits him in the neck and is killed almost instantly. Shiherlis then gets into the car as Hanna checks Bosko's pulse. Breedan starts to pull away from the curb, tires screeching, as Shiherlis fires a burst out the rear window.
Drucker and Casals break cover and run down the street. Cheritto fires at them through a side window. Seeing a police roadblock forming ahead of them, Neil fires through the front windshield. Sprinting to the street corner, Drucker raises his shotgun and shoots out the getaway car's left rear tire. As Breedan tries to regain control of the car, Drucker and Casals open up on the car. Breedan is killed when a bullet strikes him in the head, and the getaway car rear-ends an abandoned vehicle. Neil, Shiherlis and Cheritto get out of their car as police officers behind the roadblock begin firing pistols and shotguns at them, and open fire.
Hanna and his remaining detectives, pursuing on foot, fire on the three robbers from behind as they exchange fire with the police officers, whose only cover is a chain of six police cars. Several of the officers manning the roadblock are wounded. Neil, Cheritto and Shiherlis fire back at Hanna's men, providing suppressing fire for each other as they advance up the street, while the others shoot at the blockade, riddling the police cars with bullet holes. Cheritto manages to shoot one of Hanna's other detectives, Schwartz (Jerry Trimble), and becomes separated from Neil and Shiherlis. Shiherlis reaches the roadblock first, and while firing at a police car has failed to check to his left. Casals spots Chris and shoots him in the shoulder. Neil fires another suppressing burst at the police cars, bringing down another officer, then slings the wounded Shiherlis over his shoulder and carries him toward a grocery store parking lot.
As Neil makes his way across the parking lot, two officers - one carrying a shotgun and another carrying a pistol - come running around the corner. Neil fires a burst at the officers. At that point, Hanna comes running around. Neil fires another burst, and the shotgun-wielding officer is hit in the chest. Hanna is pinned down as Neil continues firing at him. With a clean opening, he fires four times at Neil, but misses. Neil promptly returns fire, and Hanna is unable to fire back because of civilians running around in front of him trying to avoid Neil's gunfire. By the time he has a clean aim, Hanna can only watch as Neil puts Shiherlis into the backseat of an abandoned station wagon, climbs into the front seat, backs out onto the street (pushing another car with it), and drives off.
Hanna hears more shots and takes off running towards the sound. The noise is Cheritto, who is being chased by Drucker and Casals. As Cheritto exchanges fire with them, Hanna arrives. As bystanders flee a nearby plaza, a little girl remains behind. Cheritto then trips in a water fountain, gets back up, and grabs the little girl as a human shield. He then opens fire on Drucker and Casals with his rifle. Hanna runs over, takes up a position behind Cheritto, and draws a bead on him. Hanna waits until Cheritto turns around towards him, giving him a clean aim. When Cheritto turns around, he has only a split second to realize he has forgotten to check his surroundings before Hanna fires, the bullet hitting Cheritto flush in the forehead, killing him instantly. Hanna then grabs the little girl and carries her away as Drucker, Casals, and two uniformed officers run up to the fallen Cheritto and train their weapons on him.
Neil takes Chris to a cooperative doctor named Bob (Jeremy Piven), who treats Chris' wound. Neil arranges for Nate to pick Chris up and keep him hidden until Neil can find another way for them to escape LA - Neil doesn't trust the "out" he'd already arranged and has to find a new way to leave town which could take several hours for Nate to arrange. Chris is heavily sedated after having his wound treated but tells Neil he won't leave without Charlene. Neil tells him to seriously consider the idea because of the high risk. Neil also tells him that he believes it was Trejo who betrayed them and he has to find him.
Neil goes to Trejo's house with the intent to kill him, only to find he's too late: Trejo lies severely beaten and dying and his wife already dead. In his final moments, Trejo tells Neil that Waingro and Van Zant are responsible. Trejo inquires into his wife's whereabouts, and Neil informs him that she is dead. Distraught over his wife's death, Trejo tells Neil, "Don't leave me like this". Respecting Trejo's final wishes, Neil mercifully kills him and goes to Van Zant's house, where Van Zant is watching a hockey game. As he's watching, he is startled when Neil throws a patio chair through the living room window, shattering it. Neil trains his pistol on Van Zant and demands to know Waingro's whereabouts. When Van Zant claims he doesn't know, Neil shoots him dead.
Meanwhile, the police move Charlene and her son Dominic to a safe house. Sgt. Drucker explains that Charlene will be charged as an accessory to her husband and serve jail time if she refuses to turn him over to the police. Drucker also informs her that her son will become a foster child and more prone to a criminal life if she will not cooperate. Shiherlis, slightly recovered from the bullet wound he received from Casals, eventually shows up, sporting a new hairstyle to disguise his identity. However, despite their marital problems, his wife surreptitiously warns him that the police are present. The two share one last emotional look before Chris gets back in his car. He comes close to being caught as he passes a police checkpoint, but a fake ID card shows that he has a different identity and Drucker orders Chris to be let go.
Neil inadvertently breaks his "30 seconds" creed by asking his new girlfriend Eady, who he met while researching the precious metals heist, to flee the country with him. Nate had made prior arrangements for the two to escape to New Zealand; however, upon receiving a tip concerning Waingro's whereabouts from Nate (thanks to Nate's police contacts), Neil makes the impulsive decision to kill him in his hotel room, which is near the airport. After setting off the hotel's emergency alarm to clear the area, Neil breaks in and executes Waingro by shooting him twice in the chest and once in the head, then escapes after disarming a stakeout detective.
Having beaten further information out of Hugh Benny, Hanna finds out where Waingro is staying and had one of his detectives leak Waingro's location to other snitches, bail bondsmen and criminals on the street in the hope that Neil would go for him. From a distance, Hanna spots Eady calmly waiting in Neil's car. Recalling the "30 seconds" discussion that he and Neil had at the coffee shop (during which Neil mentioned his girlfriend), Hanna becomes suspicious and approaches Eady. At that moment, Neil emerges from the building and begins heading for his car, only to realize that Hanna has spotted him. Hanna grabs a shotgun and begins moving towards Neil. At this critical and emotional moment, Neil defaults to his "30 seconds" rule and abandons Eady; he disappears into the crowd with Hanna in pursuit.
Neil jumps over the perimeter fence of the airport and heads to the freight terminal. Hanna is close behind and the two briefly exchange gunfire until Neil moves again, finding refuge behind the ILS and electronic control system buildings near one of the airport's runways. Hanna follows and the two play a tense game of cat-and-mouse in the dark. Neil notices that bright runway lights turn on periodically for landing planes; realising that Hanna will be temporarily blinded, he makes a move to take out Hanna. However, as Neil steps out to shoot with the lights at his back, Hanna is able to see Neil's shadow and, by a fraction of a second, shoots first, hitting Neil in the shoulder. As the lights go down, Hanna quickly gains clear sight of Neil and, knowing he will not go quietly, shoots him several times in the chest. Hanna, knowing that he has more in common with Neil than anyone else in his life, moves to comfort his would-be killer and takes his hand in his own. Neil reciprocates, taking some solace in his mortal wounds as he will not have to go back to prison. The two men share a final, reflective moment together before McCauley dies.