(Note: This is a remake of the 1974 crime film of the same name.)
The film opens in Chicago as two victims of a gunfight - a cop and a crook - are being taken to the hospital to be treated. Dr. Paul Kersey (Bruce Willis) is called in to tend to the cop, but he dies just as Paul enters the room. He then proceeds to go treat the other man, despite knowing the man killed a cop.
Paul lives with his wife Lucy (Elisabeth Shue) and daughter Jordan (Camila Morrone). Jordan just got into her dream school, and her parents are proud. They later take Jordan to one of her soccer games when the father of another girl starts yelling at the ref for making bullshit calls. Paul tries to calm him down, but it only makes the man angry and he hurls insults at Paul.
The Kerseys go out for lunch with Paul's older brother Frank (Vincent D'Onofrio). He asks Paul to loan him $2,000 to pay off a debt. Paul reluctantly agrees. As they leave, Frank tells the valet, Miguel (Luis Oliva), that Paul's "got the cash". Miguel goes to get the Kerseys' car, but he takes a picture of their address from their car.
The family tries to go out for a birthday dinner but must cancel. The next evening, Paul is working while Lucy and Jordan are together. Lucy prepares to bake a cake, but moments later, she hears a noise. Jordan is upstairs looking for an iPad, but Lucy knows something isn't right. Three masked men have broken in, and they take the ladies hostage. The leader, Knox (Beau Knapp), orders Lucy to open up their safe, or they will harm Jordan. Lucy does so and they leave Jordan with Joe (Ronnie Gene Blevins). Joe becomes lecherous and tries to rape Jordan, but the third man, Fish (Jack Kesy), stops him because Knox ordered him not to screw around. Jordan grabs a knife and slashes Joe across the face as Lucy and Knox return. Lucy throws boiling hot water in Joe's face to give Jordan a chance to run, but then two gunshots are heard.
Paul is alerted when Lucy and Jordan are brought to the hospital. After extensive surgery, he is told that Lucy's gunshot wounds were too severe and she is dead. Jordan is in a coma after suffering blunt force trauma. Paul later meets with Detectives Kevin Raines (Dean Norris) and Leonore Jackson (Kimberly Elise), who launch an investigation into Lucy's murder.
Paul attends Lucy's funeral with her family. After the service, Paul rides with Lucy's father. He notices poachers in the area as they have shot a deer. Lucy's father grabs his rifle and shoots after the men, but they get away. He then shoots the deer in the head to ends its suffering.
Paul sees a therapist as he is traumatized from his loss and has been having trouble sleeping. He goes out for a walk and notices two thugs harassing a woman. When Paul intervenes, the men go up to him and beat him up.
Paul sees an ad on TV for a gun store, and he takes an interest in purchasing a weapon. He goes to the store and speaks to the spokes girl, Bethany (Kirby Bliss Blanton), who tells him what process he will have to go through in order to secure a gun.
At the hospital, another gunshot victim is brought in, and his gun falls out. Paul kicks it under the bed and somehow manages to take it away undetected. He practices how to shoot before later that night when he goes out into the streets wearing a hoodie. He sees a carjacking take place as two thugs assault a man and take his girlfriend in their car. Paul shoots at the car and causes it to crash while also cutting his hand from the recoil. One of the carjackers is dead, and the other attempts to go after Paul before Paul shoots him dead. Raines and Jackson arrive on the scene hours later after speaking to a witness who recorded the incident.
The video goes viral, and Paul is dubbed "The Grim Reaper" for becoming a vigilante. At work, Paul tends to a boy who was shot in the leg. The boy tells Paul that he was walking on a street that is known as the territory of a local drug dealer called the Ice Cream Man (Moe Jeudy Lamour). Paul finds the street name and then goes to find the Ice Cream Man. He introduces himself as his "last customer" before Paul unloads his gun into the Ice Cream Man. The reaction following this is mixed, as people aren't comfortable with a random man taking justice into his own hands, but others think it's fine that he's going after criminals.
Yet another gunshot victim is brought in, and this time, it's Miguel, whom Paul recognizes from a tattoo he spotted on him when he was at the restaurant. Paul uses a defibrillator on Miguel, and the guy dies. Paul then takes Miguel's phone and unlocks it with his thumb and then finds the picture of his address on the phone. He also goes through his contacts and finds that all the stolen items from the safe are being sold at a pawn shop.
Paul visits the pawn shop/bar and talks to the owner, Ponytail (Ian Matthews). Paul name-drops Miguel, leading Ponytail to get suspicious. Ponytail goes for his gun but Paul stabs him in the hand and forces him to take him to his belongings. Ponytail also secretly sends a message to someone else. He takes Paul to the back to find his stuff, but moments later, Fish shows up and attempts to shoot Paul, but he kills Ponytail instead. Paul and Fish exchange gunfire until he manages to get Fish in the leg. Fish tries to weasel his way out by saying that it was Joe who shot Lucy. He tries to go after Paul again, but a loose bowling ball falls from up high and hits Fish in the head, leading him to fall and shoot himself in the head.
Paul goes to a garage where Joe works. He knocks him out by whacking him in the balls with a wrench, causing him to hit his head against the car he's working on. Paul then places Joe under the car, which is being propped up by a crowbar. Paul tortures Joe by cutting his leg and pouring brake fluid on it, causing it to painfully burn his leg. Joe admits that Knox was the mastermind behind the whole thing, but he isn't someone who is easily found. With all the information he needs, Paul yanks a chain that pulls the crowbar and causes the car to crush Joe's head messily.
Jordan finally wakes up at the hospital. Paul is forced to tell her what happened to her mother.
A news report is heard on a father of three who was shot dead after trying to follow Paul's lead and go after a thug in an alley.
Paul receives a text message from Knox ordering him to meet him at a nightclub. Paul follows the order and is told to go to the bathroom. Paul thinks he is in a stall and shoots at it, but nobody is there. This lets Knox know who Paul is, and they shoot at each other, but Knox gets away.
Frank finds Paul's now larger gun collection. He confronts Paul on the matter, but he says that somebody has to take justice into their own hands.
After Jordan returns home, Knox returns to the house with two other goons. Jordan hides in the closet as Paul deals with them. He kills the two goons, but Knox follows him to the basement and shoots him in the shoulder. Before he can kill Paul, Knox hears Jordan yelling. With him distracted, Paul opens a compartment under a table to pull out a huge gun and pump Knox full of lead.
Raines and Jackson arrive on the scene. Raines talks to Paul about what happened, questioning him about the guns. Although Paul's story is clearly suspicious, Raines appears to know what's up, but decides to make up a story that Knox returned because he thought Jordan would identify him, and Paul managed to kill him first.
Later on, Paul drops Jordan off at college. On his way out, he notices a man who just committed a robbery. He calls to the man and pretends to shoot him with his finger.