In Heaven (which resembles a modern police headquarters), angels are tasked with ensuring that mortals on Earth find love. The "Captain", Gabriel (Dan Hedaya), is upset at reviewing the file of angel partners O'Reilly (Hunter) and Jackson (Delroy Lindo), all of whose recent cases have ended in divorce or misery. Gabriel is being pressed for results, so he introduces a radical new incentive: if their latest case isn't "cracked" – meaning, if the pair in question do not fall, and stay, in love, O'Reilly and Jackson must stay on Earth forever, which does not appeal to them. They open their case file to learn their tasks.
Celine Naville (Cameron Diaz) is the spoiled twenty-something daughter of a wealthy businessman. When one of her suitors, a loathsome dentist named Elliott Zweikel (Stanley Tucci), proposes marriage to her, she offers to say yes, but only if he agrees to play "William Tell with an apple on his head. As she takes aim with a pistol, Elliot's nerves fail; his move results in a minor head wound.
Robert Lewis (Ewan McGregor) is a janitor employed in the basement of Celine's father's company. His dreams for writing a best-selling trash novel are shot down by his co-workers. His manager tells him he is to be replaced by a robot. As he drowns his sorrows at a local bar, his girlfriend, Lily (K.K. Dodds) tells him she is leaving him for an aerobics instructor.
O'Reilly and Jackson pose as collection agents to repossess Robert's things and evict him from his apartment. Robert storms to the high-rise office of the company boss, Mr Naville (Ian Holm), while Naville is berating his daughter Celine for the William Tell fiasco. Security guards run in and start to attack Robert but he holds them off. When Celine introduces herself, Robert decides to kidnap her.
He drives her to a remote cabin in the California woods. Celine easily slips free but decides to stick around. She stays for the adventure and revenge against her father, suggesting that they extort a huge ransom.
O'Reilly and Jackson pose as bounty hunters, and contract with Naville to retrieve Celine and kill Robert.
Robert's first attempt to collect the ransom fails but Celine encourages him. They go out to a rustic bar, where they sing along to the karaoke machine. When Robert wakes up the next morning, he is stunned to see that he and Celine have slept together.
Robert makes a second demand for the ransom, with a letter written in Celine's blood. Naville gives O'Reilly and Jackson the money, and they go to meet Robert in the forest. To their disappointment, Robert appears willing to let Celine go in exchange for the money before O'Reilly stops his getaway. Aside, Jackson confesses his fears that the two are not in love yet. O'Reilly responds, "Jeopardy, Jackson. Always works."
While O'Reilly and Celine wait by their car, Jackson takes Robert into the woods to execute him. Before he can, Celine decks O'Reilly, runs into the woods, and knocks Jackson out with a shovel. As Robert and Celine drive away, O'Reilly grabs the towbar and rides along. As she points her gun, Robert and Celine jump from the car, and it careens off a cliff, with the money still inside.
Since they are short of money, Celine decides to rob a bank with Jackson's pistol. The robbery goes smoothly, until a security guard shoots at Celine. Robert pushes her out of the way, taking a bullet in the thigh. Celine hurriedly drives him back to the city, to be operated on by Elliot (the closest thing she can find to a discreet medical specialist). A little later, when Robert regains consciousness, he is appalled to see Celine playing a sleazy sexual role-playing game with Elliott. A fight breaks out, and Robert knocks Elliott unconscious. As they drive away, Celine explains that she only agreed to Elliott's request so that he would help Robert – and, in any case, it's none of Robert's business, since he and Celine aren't "involved," whatever he might think. Hurt, Robert gets out of the car and walks away.
To get them back together, Jackson writes a love poem in Robert's handwriting and sends it to Celine. Overcome, she runs back to the bar, where Robert has started working as a janitor, and says he has won her heart with the poem. O'Reilly and Jackson, listening, dance for joy... until Robert says that he's never written a poem in his life. Humiliated, Celine runs out again. But after she's gone, Robert's boss, Al (Tony Shalhoub), knocks some sense into him: Robert has nothing in his life except the improbable love of "an intelligent, passionate, beautiful, rich woman... so why are you even thinking about it?" Robert runs after Celine, but is too late: O'Reilly and Jackson, believing they have failed, decide to make their Earth-bound lives bearable by kidnapping Celine for ransom.
Robert tracks Celine to their hideout. He knocks O'Reilly down and, struggling with Jackson, tells Celine he loves her. The door is kicked down by Naville's butler, Mayhew (Ian McNeice), who shoots the two angels in the head (apparently killing them). Leaving Celine locked in the trunk, Naville and Mayhew drive Robert and the two angels' bodies to the cabin, planning to fake a murder-suicide.
In Heaven, Gabriel's secretary begs him to intervene, but he refuses. He phones God and asks him to do so. A neighbour releases Celine from the truck. Taking his gun, she runs to the cabin and confronts her father, while Mayhew holds Robert at gunpoint. Robert has had recurring dreams of being saved by being shot through the heart by an "arrow of love." Celine shoots Robert and the bullet passes through, to hit Mayhew in the shoulder. After a whispered conference in Al's bar, Robert and Celine walk outside to their wedding.
In an epilogue, Gabriel frees O'Reilly and Jackson from a pair of body bags. After Gabriel congratulates them on a successful case, the two angels embrace as they prepare to return home. In a second epilogue (filmed with claymation), Robert and Celine retrieve the suitcase full of money and settle in their new castle in Scotland.