Set in Bavaria during the Thirty Years' War (1618–1648), the novel opens with a prologue narrated by Elsebeth, one of its two protagonists. As a girl, she witnessed the burning of three accused witches. The third confessed to bargaining with the devil for a pot of soup, a dress, and shoes when she was starving. She wrenched herself free from the pyre, caught Elsebeth's eye with yellow, hare-like eyes, and grinned as though she recognized something in the girl. In Elsebeth's recurring dreams, the witch flies.
In 1635, Sister Ursula, a 25-year-old Catholic nun traveling in laywomen's clothes, freezes when soldiers ambush her group on a country road. Elsebeth, a 19-year-old Protestant peasant, drags her into the forest, killing a pursuing soldier with a rock. Elsebeth is heading north to find her aunt, the rest of her family dead. Ursula conceals that she is a nun whose cloistered order was forced to evacuate. They agree to travel together. That afternoon, they find a dying man with a skull adorned with stitched-on red hair and painted glass eyes. He claims he won it in a dice game and that reuniting it with its body will make the saint grant a wish. A map on the wrapping cloth marks the burial site. Elsebeth is skeptical but accompanies Ursula: If the wish is real, she could ask for her dead family back. Ursula hopes to intercede for the soul of Sister Hildegard, a fellow nun whose death she believes she caused.
Meanwhile, a necromancer (a sorcerer who commands the dead) confronts a mercenary named Otto at a farm raided by soldiers. The necromancer wants the skull, which another soldier, Gottfried, once possessed but lost in a dice game. When Otto cannot help recover it, the necromancer kills him and reanimates him as an undead servant compelled to obey.
Elsebeth deduces Ursula is a nun and confronts her. Ursula admits the truth: Hildegard, the choir mistress paired with her during the evacuation, fell ill and died on the road. Their bond deepens as they share beds, fairy tales, and lullabies in deserted villages. One night, a
Nachzehrer (a vampiric revenant from Germanic folklore) drags Ursula from their shelter. Elsebeth drives it back with fire. Furious and terrified, she kisses Ursula passionately, but when Ursula reaches further, Elsebeth recoils. Tension simmers, compounded by a fight about Elsebeth's sister Margarethe, who was murdered by soldiers. They reconcile over a fairy tale Elsebeth tells about washing away demons.
A dead, eyeless boy, an
Aufhocker (a revenant that demands to be carried to its resting place), leaps onto Elsebeth's back and leads them to a cottage where his starving mother lives. Elsebeth learns the boy was abandoned in the woods because his parents could not feed him, and she buries father and son together. That night, the necromancer and Otto burst in, kill the woman, and demand the skull. Otto, recognizing Elsebeth as Gottfried's former captive, advances on the necromancer's command. Ursula surrenders the skull to save their lives.
By a stream, Elsebeth reveals the full truth of her past. After Margarethe's murder, she fell in with the army's baggage train, the camp followers who trailed behind military forces. Gottfried groomed her with food and trinkets, then raped her repeatedly. She sometimes experienced involuntary physical arousal, which fills her with shame; this explains why she recoiled from Ursula's touch. Ursula insists that being raped is not a sin and that an involuntary physical response is not consent. Ursula then confesses about Hildegard: When men approached and Hildegard would not stop screaming, Ursula covered her mouth, and Hildegard suffocated.
Inspired by Elsebeth's fairy tale, Ursula leads Elsebeth into the stream and washes her body with water and sand, then beats her with branches at Elsebeth's insistence. The experience is intensely cathartic. Ursula declares she has cleansed Elsebeth and claimed her body from the man who violated it. They make love for the first time.
Ursula dreams of the skull, which identifies herself as Columba and commands Ursula to steal her back. They still have the embroidered map, which the necromancer never asked for. They fashion a fake skull using the head of the
Aufhocker's mother, whose red hair matches. At Ursula's convent, they find six nuns dead of plague. In the bell tower hangs the seventh: Sister Junius, the infirmarian (the nun who cared for the sick) whom Ursula loved most. Ursula screams until her voice breaks. In the crypt, she pries glass eyes from a wax death mask placed over the incorruptible body of Sister Anna, a body believed miraculously preserved from decay, to complete the fake skull.
They locate the necromancer's camp at night and swap the skulls while he sleeps. Otto, awake, warns that this is not a saint's skull but the necromancer's wife's. Otto attacks; Elsebeth stabs him and they flee. The necromancer recognizes the fake and crushes it. He releases the repentant Otto, who truly dies.
At the crossroads marked on the map, they dig up a headless skeleton whose bones match the skull. As Ursula prepares to reunite skull and body, the necromancer arrives and slashes her throat. Ursula dies. The necromancer reveals the skull belongs to his wife, not a saint. When his wife died, he sold his soul to Satan for the power of necromancy and brought her back, but her body continued to rot. She fled; peasants killed and decapitated her. Over centuries, the skull gained the power to enter dreams and spin illusions, manipulating Elsebeth and Ursula into reuniting it with its body. There never was a wish.
The necromancer reanimates Ursula's corpse to attack Elsebeth, intending to bind his wife's soul to the fresh body. Beaten and choked, Elsebeth calls on God; nothing happens. She calls on Satan, who appears as a large black snake with orange eyes. Elsebeth negotiates: She wants Ursula's soul returned, her body preserved from decay, and Ursula free to truly die whenever she chooses. In exchange, she signs Satan's book in her own blood, surrendering her soul. Satan heals her and freezes the necromancer until midnight. Elsebeth kills him, brings Ursula back, and sews shut the wound in her throat.
Ursula wakes to find Elsebeth's eyes changed to orange with round pupils, the mark of the devil's servant. Horrified that Elsebeth has sold her soul and that she herself is now a reanimated corpse, Ursula accuses Elsebeth of selfishness and flees. In a dream, Columba reminds Ursula that unlike Columba herself, trapped as a revenant forever, Ursula is free to truly die whenever she chooses. Elsebeth ensured this, even though it meant she might have sold her soul for nothing.
Ursula returns and tells Elsebeth she chooses to believe God's love is truly endless. If it is, then even Elsebeth is not beyond redemption. She commits to helping Elsebeth find her way back to God, not from pity or guilt but from love. They embrace and choose to go forward together.
In the epilogue, set three years later, they travel the roads visiting every shrine so Ursula can pray for Elsebeth's soul and for Columba, whose bones they carry. Elsebeth cannot enter holy places; an invisible barrier keeps her out. Her snake eyes keep them safe: Even soldiers flee at the sight. Elsebeth reflects that she is a witch, her soul pledged to Satan, but she cannot regret selling it. She declares her love three times, for three is the Lord's number and makes it true. As long as she is with Ursula, earth itself is heaven.