Set in Los Angeles, California, John Constantine (Keanu Reeves), a chain-smoking cynic, has the ability to see half-angels’ and half-demons’ true forms. He seeks salvation from eternal damnation in Hell for a suicide attempt in his youth, by sending half-demons back to Hell with his sidekick Chas (Shia LaBeouf). However, full demons have begun attempting to cross over. Disturbed by this information and with his death looming over him due to lung cancer, Constantine seeks an audience with the androgynous half-breed angel Gabriel (Tilda Swinton). Gabriel tells him that as he does his exorcisms to escape Hell and for his own benefit, they are vain acts that will not spare him. Departing, he encounters LAPD officer Angela Dodson (Rachel Weisz), investigating the death of her twin sister Isabel, who leapt from the roof of the mental hospital she was committed to. Constantine is attacked by a true demon, but kills it. Upon attempting to speak with former witch-doctor turned owner of a nightclub that serves as neutral ground for half-breeds; Papa Midnite (Djimon Honsou) about this attack, he is rebuffed and dismissed. Constantine, with the help of his associates Beeman (Max Baker), Hennessy (Pruitt Taylor Vince), and Chas, begins investigating the situation.
Constantine tells Angela that God and Lucifer have a standing wager for the souls of all mankind. The rule for this wager is that angels and demons cannot manifest on Earth (however, half-breeds can), but can possess and influence humans. Afterwards, Constantine finds out Isabel was psychic, and her visions led to her institutionalization. With the help of Hennessy and Beeman, Constantine finds out that the demons are working for Mammon, Lucifer’s son, who wishes to create his own kingdom on Earth. In order for Mammon to come to Earth, he needs divine assistance and a powerful psychic, for which reason half-demon Balthazar (Gavin Rossdale) locates Isabel and Angela. Angela reveals that she possessed the same gift but denied hers to the point that it became inactive. At her request, Constantine reawakens it, by leading her to a death experience (drowning her in the bathtub) so she can see demons’ and angels’ true forms.
Constantine attacks and interrogates Balthazar, who reveals that Mammon has obtained the Spear of Destiny, which has the blood of Jesus Christ encrusted on it. Angela is kidnapped to be used as the portal for Mammon’s entrance to Earth. Constantine storms Midnite’s club and after a brief scuffle, Midnite allows Constantine access to “the chair,” an old electric chair from Sing Sing Prison that had killed over 200 people. It grants Constantine visions which show him that the Spear was discovered in Mexico and that it is already in L.A. Constantine and Chas go to Isabel’s hospital, where Mammon is conducting the ritual to rise in Angela’s body. After exorcising numerous half-breed demons, the pair interrupt the ritual and attempt to exorcise Mammon from Angela, costing Chas his life at the hands of an invisible party.
Using sigils on his arms, John forces the party, Gabriel, to reveal itself, but Constantine is promptly subdued. Gabriel resents God’s favoritism towards humanity, and the forgiveness they are readily given. Gabriel believes that by bringing Hell to Earth, humans can become worthy of God’s love through repentance and faith. Gabriel throws Constantine from the room and begins to release Mammon. As Gabriel goes to stab Angela with the Spear and release Mammon, Constantine slits his wrists. Time stops and Lucifer (Peter Stormare), who hates Constantine enough to collect his soul personally, arrives. Constantine tells Lucifer about Mammon’s plan and Lucifer sends Mammon back to Hell to keep Mammon from conquering Earth before him. Gabriel attempts to smite Lucifer, but is relieved of his holy powers and defeated.
In return for helping Lucifer, Constantine is owed a favour, but rather than asking for an 'extension' and be restored to life, he instead asks that Isabel be allowed to go to Heaven. Lucifer happily obliges, but, as he begins to drag Constantine to Hell, Heaven appears before him; by sacrificing himself for Isabel when there was clearly nothing in it for him, Constantine has proven himself worthy to enter Heaven. Infuriated, Lucifer heals Constantine’s wounds and cures him of his cancer so that Constantine would have a second chance to 'prove that [he] truly belongs in Hell'. Constantine retrieves the Spear and departs with Angela, but not before a now-human Gabriel attempts to goad Constantine into committing murder, only for Constantine to simply respond by punching the now-fallen angel, introducing a part of humanity: physical pain. Gabriel, defeated, nevertheless delighted in Constantine's choosing "the higher path", saying, "You could have shot me, John...look how well you're doing!"
Constantine then gives the Spear to Angela and instructs her to hide it where no one can find it. The final shot before the credits reveals that Constantine has switched from cigarettes to gum.
After the credits, Constantine visits Chas’ grave and sees Chas rise into Heaven as an angel.