Kevin Lomax (Keanu Reeves) is a successful defense attorney in Gainesville, Florida. After successfully defending a high school teacher, Gettys, who is accused of molesting a young girl named Barbara (Heather Matarazzo). He is celebrating with his wife Mary Ann (Charlize Theron) when he is approached by a representative for a New York law firm, Leamon Heath (Ruben Santiago-Hudson). The Lomaxes go to New York, and Kevin proves his expertise while picking a jury. A sharply-dressed John Milton (Al Pacino) watches him from afar. The next day, Kevin receives word that Gettys has been acquitted. More so, the jury only deliberated for 38 minutes before bringing in the verdict.
Heath shows Kevin around the office, and he is distracted by Christabella (Connie Nielsen), a beautiful young lawyer. He meets Milton, and reveals part of his success is due to eavesdropping on juries while they deliberate. Milton shows Lomax the roof, which contains an infinity pool, and quizzes Lomax about his history. A job offer is implied. Heath and his wife Jackie (Tamara Tunie) takes the Lomax's to their spacious, luxurious apartment.
The next day, Kevin meets the team and Pam (Debra Monk), who hands him his first case. He meets his client, Phillipe Moyez (Delroy Lindo), who practices voodoo and is on trial after being found sacrificing a goat. Kevin begins his research while Mary Ann tries to decorate the apartment. Kevin successfully defends Moyez and Milton is impressed.
The Lomaxes attend a party at Managing Director Eddie Barzoon's (Jeffrey Jones) lavish apartment. Milton flirts with Mary Ann, suggesting she change her hair, and Kevin chats with Christabella. Milton brings Eddie, Heath and Kevin to his suite and tells them he wants Kevin for the high-profile murder trial of Alexander Cullen (Craig T. Nelson), a businessman accused of killing his wife, his wife's stepson, and a maid. Eddie and Heath are not happy with the decision to use Kevin as council. That night, Kevin returns to his apartment to find Mary Ann furious that she was left alone at the party.
Kevin meets Alexander and convinces him that he can defend him. Mary Ann, Jackie and Eddie's wife Diana (Pamela Gray) try on expensive dresses, and Mary Ann watches as Jackie's face transforms into a demonic scowl. Kevin tries to console Mary Ann to no avail. After sadly claiming that she misses Kevin and feels lonely, Kevin suggests that they try to have a child. They begin to have sex, and Kevin imagines Mary Ann as Christabella. Mary Ann realizes something is wrong, and they stop.
Kevin conducts a briefing of Alexander, and shows skill. On the way back from a fancy dinner, Kevin, Mary Ann and Kevin's mother (Judith Ivey) meet Milton. Milton tries to charm her, but she seems struck by Milton, as if she knows him from somewhere. Kevin resists the impulse to meet with Milton and hot women in his suite, but Mary Ann sees through it and gets angry. Kevin's mom tries to convince him to leave and return to Florida.
Kevin begins research and interviews. He finds Eddie working late, shredding documents. Eddie tells Kevin to ignore the activities going on, and mentions Weaver at the Justice Department. Milton shows up and invites Kevin to a boxing match. On the subway, they are accosted by a punk, and Milton tells him (in perfect Spanish) to check on his girl, who is cheating on him...
The night continues, with Milton partying and Kevin trying to explain himself to Mary Ann over the phone. Milton and Kevin sit with a group of beautiful women, Kevin talking with them as Milton watches with a smile. Meanwhile, Mary Ann is awakened by a noise, and finds a child in the apartment. She notices, to her horror, that the child is playing with a pile of ovaries. The next day, Kevin tells her it's a dream, but she is still freaked out. She tells Kevin that she found out that she's incapable of bearing children. He's interrupted by the phone.
Alexander tells Kevin he's been unfaithful, and was having an affair with his secretary during the night of the murder. Milton wants Kevin to quit the case and take care of Mary Ann, but Kevin wants to prove himself. Milton relents.
The trial starts. Kevin's strategy is to make Alexander look awful, so he can later prove Alexander was sleeping with his secretary at the time of the murder.
Eddie later confronts Kevin about his promotion, and threatens to go to the Justice Department. Kevin tells Milton about the threat, and Eddie is chased by phantom joggers, then is beaten to death by homeless men who appear as demons. Mary Ann watches from her apartment window.
Kevin briefs the secretary, Melissa (Laura Harrington), and in doing so figures out that she has never had sex with Cullen. He then learns about Eddie's death. He is perturbed by both the death and the secretary's lies. On the subway again, Milton tells Kevin to go with his gut. Back in the courtroom, as Milton watches, Kevin calls the secretary to the stand. She testifies, and Alexander is cleared. Upon returning home, Kevin discovers Mary has gone to a local church and is very ill.
Mary Ann tells Kevin that Milton came to the apartment and talked with her for hours. Lonely and desperate, Mary Ann began to have sex with Milton, but when she told him to stop, Milton violently raped her. Kevin thinks Mary is crazy, as he had seen Milton in court. She insists that she isn't crazy and shows Kevin that her body is covered with bloody scratches. Thinking that she has done this to herself, he has her committed to a mental hospital.
Later, Kevin attends Eddie's funeral, and Alexander arrives with his 14-year-old stepdaughter, Alessandra. Kevin watches as Cullen begins stroking Alessandra's skin sensually, and suddenly has a vision of Cullen as Gettys, the pedophile he had defended in Gainesville. Realizing that Cullen was having an affair with his underaged stepdaughter and that Mary Ann may not be crazy after all, Kevin leaves the church. He is met by Mitch Weaver (Vyto Ruginis), who tells him that Eddie was going to testify against Milton. He convinces Kevin only after telling him that Gettys was found with the body of ten-year-old girl in the trunk of his car. Weaver tries to cross to Kevin to talk further, but is hit by a car and killed. As this happens, Milton smirks and boils holy water with his touch.
Kevin goes to visit Mary Ann in the psych ward, and his mom is there. She tells Kevin his father was a NYC waiter, and Mary Ann sees Pam as a demon. She locks the door and slits her throat while Pam looks on. Later, Kevin's mother tells him the truth about his father - it's Milton! Kevin realizes Milton has been watching and helping him all along.
Kevin leaves to see Milton, and Pam reassures him. No one is on the streets as he walks through New York. Kevin confronts Milton in his office and shoots him, but it has no effect. Milton reveals that he indeed is Satan, and Christabella is his half-sister. Milton wants them to take over the firm and conceive a baby. Kevin starts negotiating the deal, and the sculptures come alive. Christabella seduces Kevin, but at the critical moment, he commits suicide by shooting himself in the head.
Enraged, Milton explodes into flames. As Kevin falls to the floor, Christabella shrivels to a mummified corpse, and Milton changes to his true angelic form, which looks exactly like Kevin. Suddenly, the entire scene rewinds back to the opening scene of the movie where Kevin finds himself facing a restroom mirror in the Florida courtroom. Kevin is contemplating defending the teacher whom he knows is guilty. He also finds Mary Ann waiting for him outside the men's room as he returns to the courtroom to begin cross examination of Barbara the victim to discredit her testimony. Before he can begin, he announces to the judge and jury that he cannot proceed with the trial and quits as the legal council saying that it's the right thing. Kevin, aware of what has happened to him, realizes that by divine intervention, he has been given a second chance to do good rather then for what he is told to.
As Kevin and Mary Ann leave the courthouse, he is pursued by a reporter (the same one from the restroom at the beginning) to ask him for an exclusive interview about his decision to quit the case and of being "a lawyer with a conscience". Kevin initially refuses, but when the reporter and Mary Ann both encourage him, Kevin agrees to phone him later for the exclusive.
As Kevin and Mary Ann walk out of the courthouse, the reporter morphs into John Milton, who smiles and adds the closing line: "Vanity... definitely my favorite sin."