Will Graham (William Petersen) is a former FBI criminal profiler who has retired because of a breakdown after being attacked by a cannibalistic serial killer, Dr. Hannibal Lecktor (Brian Cox). Graham is approached at his Florida home by his former FBI superior Jack Crawford (Dennis Farina), who is seeking help with a new serial killer case. Promising his wife (Kim Greist) that he will do nothing more than examine evidence and not risk physical harm, Graham agrees to visit the most recent crime scene in Atlanta, where he tries to enter the mindset of the killer, now dubbed the "Tooth Fairy" by the police for the bite-marks left on his victims.
Having found the killer's fingerprints, Graham meets with Crawford. They are accosted by tabloid journalist Freddy Lounds (Stephen Lang), with whom Graham has a bitter history. Lounds' paper had run photographs of Graham taken secretly while he was hospitalized. Graham pays a visit to Lecktor, a former psychiatrist, in his cell and asks for his insight into the killer's motivations. After a tense conversation, Lecktor agrees to look at the case file. Lecktor later contrives to obtain Graham's home address by deceit.
Graham travels to the first crime scene in Birmingham, Alabama, where he is contacted by Crawford, who tells him of Lounds' tabloid story on the case. Crawford also patches Graham through to Frederick Chilton (Benjamin Hendrickson), Lecktor's warden, who has found a note in Lecktor's personal effects. Reading it, they realize it is from the Tooth Fairy, expressing admiration for Lecktor and an interest in Graham. Crawford brings Graham to the FBI Academy at Quantico, where a missing section of the note is analyzed to determine what Lecktor has removed. It is found to be an instruction to communicate through the personals section of the National Tattler, Lounds' newspaper.
The FBI intended to plant a fake advertisement to replace Lecktor's, but they realize that without the proper book code the Tooth Fairy will know it is fake. So they let the advertisement run as it is, and Graham organizes an interview with Lounds, during which he gives a false and derogatory profile of the Tooth Fairy to incite him. After a sting operation fails to catch the killer, Lounds is kidnapped by the Tooth Fairy (Tom Noonan). Waking in the killer's home, he is shown a slideshow of William Blake's The Great Red Dragon paintings, along with the Tooth Fairy's past victims and slides of a family the killer identifies as his next targets. Lounds is forced to tape-record a statement before being set on fire in a wheelchair and killed, his flaming body rolled into the parking garage of the National Tattler as a warning.
Graham is told by Crawford that they have cracked Lecktor's coded message to the Tooth Fairy: it is Graham's home address with an instruction to kill the family (ending with "Save yourself. Kill them all," revealing that Lecktor believes Graham would find the Tooth Fairy). Graham rushes home to find his family safe but terrified. After the FBI moves Graham's family to a safehouse, he tries to explain to his son Kevin why he had retired previously, and he does so at a supermarket, of all places. At his job in a St. Louis film lab, Francis Dollarhyde (the Tooth Fairy) approaches a blind co-worker, Reba McClane (Joan Allen), and ends up offering her a lift. They go to Dollarhyde's home, where Reba is oblivious to the fact that Dollarhyde is watching home-movie footage of his planned next victim. She kisses him and they make love. Dollarhyde is confused by this newfound relationship, though it helps suppress his bloodlust. Just as Graham comes to realize how much the Tooth Fairy's desire for acceptance factors into the murders, Dollarhyde watches as Reba is escorted home by another co-worker. Mistakenly believing them to be kissing, Dollarhyde murders the man and abducts Reba. When she calls him Francis, he tells her: "Francis is gone. Forever."
Desperately trying to figure out a connection between the murdered families, Graham realizes that someone must have seen their home movies. He and Crawford deduce where the films were processed. They identify the lab in St. Louis and fly there immediately. Dollarhyde has been casing the victims' homes through home movies, enabling him to prepare for the break-ins in extreme detail. Graham determines which employee has seen these films and obtains Dollarhyde's home address, to which he and Crawford travel with a police escort. At Dollarhyde's home Reba is terrified as he contemplates what to do with her. As he struggles to kill Reba with a piece of broken mirror glass, police teams assemble around the house. Seeing that Dollarhyde has someone inside with him, Graham lunges through a window. He is quickly subdued by Dollarhyde, who retrieves a shotgun and uses it to wound Crawford and kill two police officers. Wounded in the firefight, Dollarhyde returns to the kitchen to shoot Graham, but misses because of his injuries and is killed himself when Graham returns fire. Graham, Reba, and Crawford are tended to by paramedics before Graham returns home and retires permanently.