The film begins with The Punisher, Frank Castle (Ray Stevenson), watching a news report on the Cesare mob family. The head of the family, a wheelchair-bound old man, was to be tried for murder but the witness at the last second backed out of testifying. The old man is now free. During the opening credits, Frank loads up his guns and sharpens his blades. That night, the Cesare family holds a big celebration for the old man’s victory at their mansion. Billy Russoti (Dominic West) shows up along with his henchmen Pittsy (Mark Camacho), his son Ink (Keram Malicki-Sanchez), and Nicky (Romano Orzari). Russoti pauses to check his looks in the side-view mirror of the car. His date strokes his chair, and Russoti chokes her for doing so. Meanwhile, police officer Martin Soap (Dash Mihok) and his partner observe the house from outside. Soap thinks that the Punisher will show up, and wants to take him in. Russoti and his guys are called upon to meet the old man. During the meeting, it’s revealed that Russoti got the witness to not testify. For that, the old man pays him. Russoti is also quite vain, constantly checking his looks in the mirror. Russoti is making a deal soon, having some biological weapons transported into his dock. The old man insults Russoti’s brother Looney Bin Jim, causing guns to be drawn. Things settle down, and the old man invites Russoti to eat dinner with him along with his other mob guests. The old man goes downstairs to eat, but Russoti refuses to eat with him. Frank sneaks up behind a guard outside and kills him quietly.

All the mob guys, minus Russoti and his men, sit down to eat dinner. Suddenly, the lights go out. Frank appears on the table and lights up a red flare. The light makes it hard for the mob guys to see. Frank runs across the table and practically slices Cesare’s head off. Cesare’s wife tries to kill him, but Frank snaps her neck. Frank then goes to town on the others, slicing them with blades and stabbing them in the head. The lights come back on, and he finishes off the others by pumping them full of bullets. One guy turns out not to be dead, and shoots Frank in the back. It has no effect though due to him wearing body armor. He lunges at the guy, head butts him, and finishes him off. He hears guards coming, and so he hangs from the chandelier and fires while spinning around, killing the guards. Russoti and his men escape while Soap and his partner decide to enter the mansion. After slaughtering everyone in his path, Frank winds up outside but is held at gunpoint by Soap’s partner. He tells him that Russoti got away, and is probably headed to his recycling factory down at the docks. He gives Frank his car keys and lets him go. After Frank leaves, the cop punches himself in the face to make it look like Frank hurt him. Russoti and his guys go to their factory at the docks. Frank follows them and sees that he broke his nose when he head-butted the guy earlier. He shoves a pencil into his nostril and snaps his nose back into place. He also sees Maginty (T.J. Storm) and his guys jumping all over the place (apparently they’re very acrobatic). Maginty and his guys meet Russoti, who gives them a job to do. After they hop away, Russoti says that the Punisher taking out all the mob guys worked in his benefit, since he’s now in charge. Russoti wants his money from Nicky, but he says that it’s being laundered and he’ll have to wait. Outside, we see FBI agent Miller (Larry Day) and other agents listening in to their conversation.

Frank shoots a guard in the neck with a tiny bow-and-arrow, and then jumps another guard. He sneaks into the factory and shoots Nicky in the chest, killing him. The FBI agents hear the gunshot and prepare to raid the factory. Russoti is on a catwalk and tries to shoot Frank, who in turn shoots out the railing behind him. Russoti falls into a big machine that crushes glass bottles. Frank turns the machine on, and Russoti is gruesomely cut up by the glass. Pittsy, Ink, and the remaining guards try to kill Frank. The FBI agents raid the factory, causing the remaining goons to surrender. While escaping, Frank sees that Nicky is wearing a wire. It turns out that Nicky was an undercover FBI agent. While the agents take everyone into custody, they see that Russoti is still alive, though all his skin is badly cut up. They also know that the Punisher is to blame for Nicky’s death. Frank goes to a subway station and runs on the train tracks. He lives deep within the station, and makes himself something to drink. He ends up smashing his cup in anger for killing the undercover agent. Eventually, Nicky has a big funeral. In attendance is his wife Angela (Julie Benz), his daughter Grace (Stephanie Janusauskas), his ex-partner Paul Budiansky (Colin Salmon), and Miller. Frank watches the funeral from afar. Afterwards, Budiansky vows to Angela to bring the Punisher to justice. Frank goes to the grave of his family. As he wipes the gravestone clean, he thinks back to when his family was killed. Frank breaks down and cries.

Budiansky goes to the police station and talks to Captain Ross (Ron Lea) about taking down the Punisher. Ross says that he’s too busy working with Homeland Security about a possibly biological threat to the city. Budiansky calls him out on being lazy on the Punisher manhunt, and so Ross tells him that he can join the Punisher Taskforce in the basement. After Budiansky leaves, Ross and the cops laugh at him. He goes to the basement, where Soap is waiting for him. He informs Budiansky that he’s been following all of the Punisher’s kills in the last five years and knows practically everything about him. He was an ex-soldier and loving family man. One day he took his family to have a picnic in the park. They happened to see a gang execution, and so they were murdered for being witnesses. The basement is filled to the brim with documents about each kill the Punisher has been held accountable for. Meanwhile, Micro (Wayne Knight) goes down to the subway station and hands Frank a new bag of guns. Frank pays him too much, and he says that this is the last time he’ll be buying weapons from him. Micro knows that he’s remorseful for killing the undercover agent, but tells him that he can’t quit. Frank tells him to leave him alone, and so Micro leaves. Elsewhere we see Russoti, Pittsy, and Ink at the finest plastic surgeon in the city. The surgeon says that he has done everything he could for Russoti, and that he shouldn’t have even survived what happened. He tries to warn him that there was no skin left on his face when he arrived, but Russoti (wearing bandages on his face) wants him to hurry up and uncover him. The surgeon takes off the bandages from his face. Pittsy is shocked, and Ink can’t help but vomit upon the sight. Russoti looks in a mirror and orders his men to wait outside. Pittsy gets after Ink for vomiting and upsetting the boss. They enter the office and find that Russoti has stabbed the surgeon in the forehead with a pair of scissors. While driving around, Russoti says that they’re going to kill the Punisher and get their money back. But first, Russoti wants to get his brother out of the insane asylum and announces that from now on, he will be called Jigsaw.

Frank looks at Grace playing at her school and Angela picking her up. As she does, Frank can’t help but think about his own children. At the insane asylum, we see a fat orderly carrying a tray of food to a room. Looney Bin Jim (Doug Hutchison) has his arm tied to the wall and his legs tied to the bed. The orderly feeds Jim his medicine and then eats his apple sauce. A doctor knocks on the door, and so the orderly lets him in. It turns out that he was being held by Jigsaw, Pittsy, and Ink. Jigsaw snaps the doctor’s neck and unties Jim from his bed. Jim looks at Jigsaw and tells him that he has a beautiful face. Jigsaw’s about to kill the orderly, but Jim wants to kill him. Jim jumps the orderly, rips his chest open, and eats his liver. Pittsy asks Jigsaw if maybe they should bring Jim’s medication, but Jigsaw says that Jim’s fine (even though he’s eating the orderly). At night, Frank goes to Angela’s house and tries to drop off a bag of money for her. Instead, he finds Grace drawing outside on the porch. He gives her a flashlight, and Angela holds Frank at gunpoint while she gets Grace inside the house. She recognizes him as the Punisher and asks him what he’s doing there. He tries to give her the money, but she refuses. Instead, she wants to kill him. Frank, guilty, wants to die and urges her to pull the trigger. Grace interrupts them, and Angela winds up telling him to leave them alone.

Elsewhere, Jigsaw and his guys show up at a building to meet Cristu about their biological weapons deal. While in the lobby, Jigsaw looks at himself in the mirror and cries. Jim embraces him and promises that he’ll kill the Punisher painfully and slow. He also says that as long as he’s around, Jigsaw won’t have to look at any more mirrors. Jim goes around and breaks all the mirrors around them, usually by smashing his own body into them. Jigsaw laughs, and they go upstairs for the meeting. Cristu (David Vadim) is worried about the deal happening, since the Punisher could mess it up. Jigsaw says that they’re going to take care of the Punisher. Cristu’s right-hand man insults Jigsaw, and Jim is ready to pounce for the kill. The right-hand man spits at Jigsaw, which of course doesn’t please him. He breaks a wine glass and stabs the man in the throat with it. Cristu’s guys draw their guns along with Jigsaw’s guys. Things calm down, and Jigsaw request twelve million dollars for delivering the biological weapons to them. While walking around, Frank sees Carlos (Carlos Gonzalez-vlo) getting guns out of the trunk of car and entering a building. Frank follows, and it turns out to be Micro’s apartment. Carlos used to be a gang banger, but he’s straight now and helps supply Micro with weapons. Micro takes care of his disabled mother, who mostly just watches TV. Frank says that he’s leaving the city and won’t be coming back. Micro tells him that Russoti is still alive and is most likely going to go after Angela for revenge. Frank leaves the apartment, but as Micro predicts, he shortly comes back. Carlos gives Frank some guns, and Frank asks Micro who’s associated with Russoti. Since Frank killed mostly everyone, the only one left they know of is Maginty, who’s constantly high on meth. Micro sends Carlos with Frank to track down Maginty.

Carlos goes to a bar and founds out that Maginty and his guys are robbing a place that night. Budiasky finds Soap drinking at a bar, and wants to know how to find the Punisher. Soap usually just sits in his car and follows the calls on the CB radio. Elsewhere, we see Maginty and his guys hoping around after shoving a machete into a man’s face and robbing his store. Budiasky and Soap hear about the robbery and drive there. The cops try to chase them, but they’re too fast and jump all over the rooftops. Frank catches up to them and blows up one of the guys while he jumps in mid-air with a grenade launcher. He then shoots the other guy in the forehead, and shoots Maginty in the legs. He asks Maginty where Russoti is, but he corrects him that it’s Jigsaw now. He says that he’s on his way to Angela’s house to get his money back, since he thinks Nicky stole it. Budiasky and Soap drive into an alley just in time to see Maginty being thrown down and impaled on a spiked fence. Budiasky sees Frank and chases after him. He eventually catches up to him and tries to arrest him. Frank fights back, but Budiasky refuses to back down. They beat the crap out of each other and it appears as though Budiasky won’t get back up. Frank sees that he’s an FBI agent, and then Budiasky handcuffs himself to Frank. He tries to tell him that Angela and Grace are in danger, but Budiasky still plans on bringing him in to the station.

At Angela’s house, Jigsaw and his guys have shown up. While Pittsy and Ink watch over Angela and Grace, Jigsaw and Jim tear the house apart looking for the money. A cop car shows up outside and hears all the noise coming from the house. They knock on the door, and Jim answers. He lets them inside and bashes a cop’s head in with a baseball bat. The other cop is impaled on a sword by Ink. While driving Frank to the station, Soap says that he can’t get into contact with the cops he sent to the house. They pull up to the house and Budiasky plans to go in alone. Frank tells him to release him so that he can help, but he refuses. Budiasky enters the house but is forced to drop his weapon or else Angela and Grace will be killed. It turns out that Soap sometimes helps Frank out, and he lets Frank free to help Budiasky. While Jigsaw and Jim tear their way upstairs to find the safe in the bedroom, Ink hears a noise coming from downstairs. He goes to investigate, but winds up sniffing cocaine. Frank surprises him and punches his hand through his face/head, killing Ink. Budiasky is able to disarm Pittsy and has him sit down. He plans on arresting him, but Frank blows Pittsy’s face off with a shotgun. Frank then leaves with Angela and Grace. Jigsaw and Jim get into a shootout with Budiasky, but wind up surrendering. Budiasky figures out that Soap works with the Punisher, since he let him go free. Jigsaw and Jim are arrested, and Ross plans on burning them with the cop killings. Jigsaw however is not scared at all.

Frank brings Angela and Grace to his subway home. He lets Grace play with his dead daughter’s toy and wear her hair clips. He tells them that they’re going to stay there until its safe. Back at the police station, Miller comes down and meets with Ross. Jigsaw is planning on making a deal to get out of their predicament. Miller enters the interrogation room and sees that Jim has broken the window. Jigsaw says that he’ll give up Cristu and the biological deal he’s doing that night in exchange for total immunity (along with Jim). Miller tells him no way, but Jigsaw says that it’ll look bad if half the city dies and it’s leaked that they had a lead to stop it but did nothing. Miller agrees, and Jigsaw says that he has one more request. Later that night, Jigsaw and Jim meet Cristu at his factory and make the deal. Homeland Security raids the factory, and Cristu promises to get revenge for Jigsaw setting him up. Afterwards, Miller gives Jigsaw and Jim their second request  information on Micro, the Punisher’s last known associate. While Grace and Angela sleep, Frank hears a noise and becomes alert. Carlos shows up and says that Micro sent him. Frank realizes that something’s wrong, and so he suits up. He orders Carlos to stay with Angela and Grace and protect them. Frank goes to Micro’s apartment and finds it completely trashed. He also finds that Micro’s mother has had half her head blown off.

At the subway station, Carlos plays with Grace when Jim shows up. Jim attacks Carlos and hacks at him with an axe. After capturing Angela and Grace, Jim drives to an abandoned hotel. Jigsaw puts the power back on and looks in Jim’s trunk. In addition to Angela and Grace, Micro has also been kidnapped. Jigsaw orders Jim to bring them all up to the top of the hotel. Frank returns to the subway station and finds what’s left of Carlos. He’s barely alive, and pleads with Frank not to let him die like this. Frank pulls out a pistol and puts Carlos out of his misery. Carlos also had a note pinned to his body, telling Frank that if he wants the hostages back he’ll have to show up at the hotel. Later on, Frank goes to a church. Father Mike (Edward Yankie) is surprised to see Frank there, since he hasn’t seen him since his family’s funeral. He’s been reading about the Punisher in the papers, and he says that Frank will be judged/punished by god in the same way that he has judged/punished all the criminals he’s killed. Frank doesn’t care, and says that he’d like to get his hands on god. It turns out that he called Budiasky, who shows up at the church. He says that Jigsaw has Angela and Grace, and he’s going to give himself up to save them. He needs Budiasky to help him with the transaction. Budiasky recruits Soap and they go to the Russians. The head Russian is the father of Cristu, and wants revenge on the man who is sending his son to prison. Budiasky tells him that Jigsaw will be at the hotel that night, and makes him promise to kill him. Meanwhile, Jigsaw and Jim go all around the city to all the different gangs. They recruit all of them to stand together and kill the Punisher once and for all. He also adds that they will be paid for their services. All the gangs show up at the hotel and barricade it, arming themselves to the teeth. Frank, Budiasky, and Soap see the Russians arrive at the hotel. They say they are there for the Punisher party. They are allowed inside and arm themselves with machine guns. Budiasky wants to go in with Frank, but he knocks him out with his rifle butt.

Frank goes to the building across the street. The Russians turn their guns on a gang and kick-start a massive shootout. Frank jumps through a boarded-up window and proceeds to gun down everyone he sees. He enters a room and gets shot in the back, but his armor catches the bullet. He kills the guy who tried to kill him and then throws a grenade down the hall, killing the remaining gang members on that floor. We see that Jigsaw and Jim are upstairs at an empty pool area that has a fire in the middle of it. Angela and Grace are tied to a pillar, and Micro is tied to another. Frank continues to make his way through the hotel and comes across an empty hallway. He hears some goons and finds that there’s a whole group of them hiding behind a door. Frank loads his grenade launcher, shoves his gun through the door, and fires at the center of the room. The guys are blown apart and blown out the windows. Frank enters and kills off the surviving guys. Frank then comes across an elevator that has smoke coming out of it. He opens the door and finds a fat guy smoking inside. Frank blows his head off, and is then kicked in the face by Jim. Jim jumps all over him and beats him, but Frank throws him into the bathroom. Frank kicks the door down and tries to fend off Jim, but he fights like a wild animal. Jim kicks him in the crotch and viciously beats him. Frank throws Jim into a stall and then into a mirror. He moves in to kill him, but Jim throws broken glass in Frank’s face and runs off.

Frank chases him to the pool area and aims his gun at Jigsaw. Jim holds a gun to Grace’s head, and Jigsaw aims his gun at Micro’s head. He tells Frank to drop his weapon, and so he does. Jigsaw picks it up and finds that there are four bullets left. He shoots Frank three times and then hands him back the gun. Jigsaw says that if Frank kills one of the hostages, he’ll let the other two live. Micro tells Frank to kill him, since it’ll save Angela and Grace. Jigsaw counts to three, and Frank tells Micro that he won’t feel a thing. Frank uses his last bullet to shoot Jim through the forehead. Jigsaw shoots Micro in the head and then tries to shoot the others, but Frank blocks the shots by jumping in front of them. Frank tackles Jigsaw into the pool and fights him. While Jigsaw is down, Frank unties Angela and Grace and tells them to leave. Frank smashes bottles over Jigsaw’s head, and Jigsaw beats Frank with a pipe. Frank takes control of the pipe and impales him through the chest. Frank then shoves Jigsaw on top of the fire, burning him alive. Angela and Grace run outside to Budiasky. Frank emerges from the hotel and starts to walk away with Soap. Angela tells Frank that Nicky used to talk about the Punisher, and how he was one of the good guys. Frank and Soap walk off and wind up in front of a church. While Soap talks, he finds that Frank has disappeared. Suddenly, an armed mugger appears and robs Soap. Soap calls out for Frank, and he appears. The film ends with Frank killing the mugger, and Soap complaining that he has brains all over him.