L’histoire commence en Nouvelle Angleterre, en 1835. Sarah, une belle jeune fille, rencontre son père, Alex Stafford, pour la première fois. Sarah, âgée de six ans, apprend qu’elle est le fruit de la liaison adultère de Stafford avec sa mère, Mae. Mae a été incitée à avorter de l’enfant, mais a refusé de le faire. Cette décision les a séparés, Alex et elle, et a laissé Mae déprimée. Sarah commence à penser qu’elle est à blâmer mais elle espère qu’Alex ne reviendra jamais.
Plus tard dans l’année, Cleo, la bonne de Mae, emmène à contrecœur Sarah avec elle pour une excursion au bord de la mer, afin que Mae puisse avoir une visite privée avec Alex. Cléo emmène Sarah avec elle dans un bordel populaire où Cléo est connue et a un compagnon masculin. Après s’être saoulée, elle accepte de coucher avec lui pendant que Sarah attend dans le hall. Après que cet homme ait à nouveau laissé Cléo le cœur brisé, Cléo, à moitié ivre, dit à Sarah « la vérité de Dieu » et force une Sarah effrayée à l’écouter dire qu’aucun homme ne se soucie jamais d’une femme et que tout ce qu’ils veulent, c’est du sexe.
Mae et Sarah déménagent ensuite dans une cabane sur les quais, où Mae se prostitue pour joindre les deux bouts. Sa réputation est connue de toute la ville, et la jeune Sarah est obligée de subir le rejet des citadins à cause de cela. Grâce à cette expérience, Sarah apprend à masquer ses émotions et à les remplacer par un extérieur dur.
Quelques années plus tard, Mae meurt d’une terrible maladie, laissant Sarah seule à l’âge de huit ans avec un homme ivre nommé Rab. Ne sachant que faire de la petite enfant, Rab cherche un foyer pour l’enfant. Il trouve un homme qui cherche une petite fille pour son riche maître. Pensant que c’est le coup de chance de Sarah, Rab emmène Sarah dans le quartier riche. Ils sont accueillis à la porte par une femme qui exhorte Rab à emmener Sarah et à ne pas revenir. Ne se laissant pas décourager, Rab insiste sur le fait que Sarah est parfaite pour cet homme riche. La femme admet le couple et les envoie dans une chambre à l’étage où ils ont pour consigne d’attendre que son maître puisse les voir.
Duke, le maître de maison, accueille Sarah et Rab ; quelques minutes plus tard, Rab est étranglé sous les yeux de Sarah, son corps jeté dans une ruelle voisine. Duke, qui est un pédophile, avait écumé la ville non pas pour trouver une nouvelle fille, mais une nouvelle victime. Duke informe Sarah (rebaptisée par lui Angel) qu’il a beaucoup de choses à lui apprendre. Il lui donne sa première « leçon » le soir même.
Après une dizaine d’années passées avec Duke, Angel s’échappe enfin et embarque sur un bateau à destination de la Californie. Volée et forcée à l’option de se prostituer plutôt que d’être violée par les passagers majoritairement masculins, elle débarque à San Francisco avec rien de plus que les vêtements qu’elle porte. Angel est recueillie par « la Duchesse », propriétaire du Palace, un bordel à Pair-a-Dice, et devient une prostituée exclusive à prix élevé. Employée par la duchesse, Angel est constamment surveillée et ses maigres revenus lui sont cachés. Son seul réconfort est Lucky, un collègue prostitué qui est souvent ivre. Lucky rappelle à Angel sa mère.
Michael Hosea voit Angel pour la première fois lors d’un voyage à Pair-A-Dice pour vendre des produits. Il est prêt à partir quand Dieu dit à Michael « c’est elle », la femme qu’il est destiné à épouser. Michael découvre bientôt, à sa grande surprise, qu’Angel est une prostituée. Toujours déterminé à obéir à l’ordre de Dieu et à épouser Angel, Michael paie un prix élevé pour ses services dans l’espoir de la convaincre de partir avec lui. Elle rejette obstinément son offre. Découragé, Michael remet Dieu en question, mais obéit quand même. Il paie les honoraires d’Angel pendant trois nuits successives, parlant et raisonnant avec elle jusqu’à ce que son temps et son argent soient épuisés. Angel garde son front froid et sarcastique pour le dissuader, voulant échapper à la douleur que ses mots lui causent. Pendant ce temps, elle ne semble pas pouvoir échapper aux pensées de Michael et à son espoir grandissant d’une vie en dehors du Palais.
Après la dernière nuit avec Angel, Michael est frustré et quitte Pair-A-Dice. Quelques jours plus tard, il revient à Pair-A-Dice, incapable d’ignorer plus longtemps l’ordre de Dieu. Il trouve Angel presque mort après avoir été brutalement battu par Magowan, le garde du corps de la Duchesse. Prêt à utiliser tous les moyens pour préserver la vie d’Angel, Michael lui demande de l’épouser pour pouvoir l’emmener dans sa cabane. A peine consciente, Angel accepte en marmonnant « Pourquoi pas ? »
Michael soigne Angel dans sa cabane. Angel reste à peine tolérante de l’arrangement tant qu’il répond à ses besoins. Michael endure la dureté d’Angel, restant fidèle à sa nouvelle femme et au plan de Dieu. Paul, le beau-frère veuf de Michael, rentre chez lui après avoir fait de l’orpaillage dans les Sierras. Paul reconnaît immédiatement Angel comme la prostituée de luxe du Palace. Croyant qu’Angel a trompé Michael, Paul la traite mal. Paul tente d’expliquer à Michael le métier d’Angel, mais ne fait que le mettre en colère. Paul pense que Michael a épousé Angel par désir aveugle et sans savoir qu’elle était une prostituée. Au cours de sa visite, Paul pense qu’il y a un fossé entre lui et Michael à cause d’Angel, sans savoir que Michael aime Angel malgré son passé et que c’est lui qui est à l’origine du fossé entre eux.
Lorsqu’elle guérit enfin de ses blessures, Angel tente de fuir Michael dans l’espoir de retourner au bordel pour récupérer l’argent que La Duchesse lui avait caché et insistait pour qu’il soit dépensé dans les vêtements et la nourriture qu’Angel recevait. Lorsque Paul part vendre les produits de sa terre à Pair-A-Dice, Angel y voit un moyen pour elle de s’échapper. Alors que Michael travaille dans le champ, elle court après le chariot de Paul. Celui-ci accepte de la prendre avec lui si elle le rembourse avec son seul moyen de paiement : elle-même. Il est encore plus dégoûté par ses actions après qu’ils aient couché ensemble et espère que c’est la dernière d’elle qu’il verra jamais.
À son retour à Pair-A-Dice, elle voit que le Palace a brûlé tuant son plus cher compagnon Lucky, et une autre prostituée du nom de Mai Ling. N’ayant nulle part où aller, elle commence à travailler au-dessus d’un bar, une fois de plus en tant que prostituée. Même si elle déteste être considérée comme une prostituée, elle n’a pas d’autres compétences pour gagner sa vie. Un Michael livide la trouve dans une chambre avec un client et se bat pour sortir du bar rempli d’hommes ivres qui attendent leur tour avec Angel.
Ils retournent à la cabane, où Michael s’en remet à Dieu pour travailler à travers sa colère envers son infidélité. Angel commence à développer des sentiments affectueux envers Michael, ce qu’elle ne peut comprendre car elle ne s’est jamais autorisée à aimer un homme, car « la vérité de Dieu » disait qu’ils profiteraient d’elle ou l’abandonneraient, tout comme son père. Malgré sa froideur persistante, Michael l’aime inconditionnellement. En lui montrant un lever de soleil, il dit : « C’est ce que je veux te donner ». Angel se sent devenir douce de jour en jour, mais dans son incertitude et sa peur, elle refuse de le partager avec Michael. Elle éprouve un profond sentiment de honte face à sa « malpropreté ». Elle est adoucie par l’amour de Michael, mais ne peut se considérer comme digne de cet amour. Bien qu’ils aient couché ensemble régulièrement, Angel est très déconnectée de l’expérience du sexe, mais lorsqu’une nuit elle éprouve la même joie et le même plaisir que Michael (« Et elle s’envola, Michael avec elle, dans les cieux… »), cela l’effraie.
Elle s’enfuit une nouvelle fois, cette fois à Sacramento ; en chemin, un vieil homme qui vend des pots lui propose de la conduire. En arrivant à Sacramento, alors qu’elle cherche du travail, elle rencontre à nouveau Joseph Hochschild, qui a construit son nouveau magasin, et elle reste avec lui, sachant qu’il est un bon ami de Michael. Elle travaille pour lui dans son magasin, avec sa femme et sa mère. Lorsqu’une commande arrive pour Michael, elle essaie de partir, mais Joseph l’occupe et la fait attendre plus longtemps. Lorsqu’elle termine son travail et va fermer le magasin, Michael se tient sur le seuil de la porte, étant revenu la chercher. Elle avoue qu’elle est effrayée par l’idée d’être amoureuse de lui, mais il la rassure et la ramène à la maison.
À leur retour dans la vallée, ils rencontrent la famille Altman, qui a une roue cassée et est bloquée sur le bord de la route. Michael les aide à réparer leur chariot et les invite à rester dans leur cabane. Angel révèle à Mme Altman et à la fille aînée, Miriam, qu’elle a rencontré Michael dans un bordel, et est étonnée de constater qu’ils n’ont pour elle que de la compassion et non du mépris. Ils deviennent proches et Angel se prend d’affection pour la fille aînée, Miriam, qui commence à s’intéresser à Paul, qui vit à l’autre bout de la vallée. Lorsqu’Angel voit Miriam parler avec Michael, elle suppose qu’ils ont des sentiments l’un pour l’autre et en conclut qu’ils feraient un bien meilleur couple qu’elle et Michael. Paul souhaite que Michael finisse lui aussi avec Miriam, mais il a aussi commencé à développer des sentiments pour la jeune Miriam, âgée de 16 ans. Il nie ses sentiments uniquement parce qu’il souhaite voir Michael avec Miriam au lieu d’Angel.
Pendant ce temps, il est révélé dans un flashback que pendant son temps en tant que maîtresse de Duke, Angel est tombée enceinte deux fois et les deux fois, un Duke furieux a fait avorter un médecin, prenant des mesures la deuxième fois pour s’assurer qu’elle ne puisse plus jamais tomber enceinte. Angel le révèle plus tard à un Michael dévasté. Elle révèle également qu’elle a déjà eu des relations sexuelles avec son propre père, qui est venu dans son bordel, pour se venger parce qu’il avait quitté sa mère. Elle est submergée par la culpabilité pour la façon insensible dont elle l’a traité. Sachant que cela a choqué son mari, et se sentant coupable de ne pas pouvoir donner à Michael des enfants à lui, comme elle sait qu’il le désire, Angel s’enfuit une fois de plus, laissant son alliance derrière elle, dans l’espoir que Michael épouse Miriam et ait des enfants avec elle. Michael est effondré, mais dit qu’il ne s’en prendra plus à Angel si elle ne veut pas être avec lui.
Cette fois, Angel part pour San Francisco. A son arrivée, elle trouve un emploi auprès d’un homme doux appelé Virgil. Il l’accueille comme cuisinière dans son café, et prend soin d’elle. Mais après des mois de dur labeur, le café brûle, et avec lui toutes les économies et les biens d’Angel. En observant l’incendie dans la rue, Angel entend une voix familière : c’est Duke qui la salue. Craignant qu’il ne fasse du mal à Virgil, qui semble se méfier de Duke, Angel accepte de rentrer avec lui.
De nouveau sous le pouvoir de Duke, Angel est censée reprendre sa vie de prostituée. Cependant, la préférence sexuelle de Duke va aux jeunes filles, et il demande à Angel de gérer ses futures » compagnes « , mais seulement après une semaine de prostitution. Angel doit être présentée à une foule d’hommes. Elle commence à se débattre dans son esprit et crie intérieurement à Dieu. Elle est prête à monter sur scène pour divertir les hommes. Lorsqu’elle est enfin devant eux, la voix de Dieu lui dit de chanter et elle se met à chanter « Rock of Ages » devant la foule stupéfaite et confuse. Un homme aux cheveux gris chante avec elle et s’avance sur le devant de la scène. Elle oublie les paroles de la chanson et c’est lui qui la termine.
Après la présentation, Duke réprimande Angel. Cependant, il est accueilli par l’étranger qui chante dans la foule. Il menace de faire pendre Duke s’il pose un seul doigt sur Angel. Sur ce, l’homme escorte Angel vers la sortie, et sur leur chemin, Angel sauve deux autres jeunes filles que Duke utilisait comme victimes. Lorsque les hommes de la maison close voient les deux jeunes filles avec Angel, ils sont furieux et détruisent l’endroit. L’homme les emmène chez lui, où sa femme et sa fille s’occupent d’elles. Jonathan Axle, l’homme qui l’a sauvée, est un banquier riche et respecté, issu d’une solide famille chrétienne. Angel commence à fréquenter l’église avec la famille Axle et se prend d’affection pour eux.
Pendant ce temps, Miriam révèle qu’elle est amoureuse de Paul, et tous deux se marient pendant l’absence d’Angel. Michael attend toujours le retour d’Angel et prie continuellement pour qu’elle revienne. Voyant son chagrin, Miriam insiste pour que Paul aille chercher Angel, mais Paul, toujours plein de mépris pour la femme qu’il croit qu’Angel est, refuse.
Angel finit par reconnaître l’amour de Dieu pour elle et reçoit le Christ dans son cœur. Elle commence à travailler avec les prostituées en les aidant à quitter leurs anciennes habitudes et à apprendre de nouvelles capacités qui pourraient les aider à gagner leur vie. Susanna Axle, la fille de Jonathan Axle, l’aide à gérer la pension de famille.
Paul finit par céder à Miriam et se rend à San Francisco pour chercher Angel. Il la voit avec un vieil homme – Jonathan Axle – et pense qu’il est un client, et elle toujours une prostituée. Il est furieux d’avoir fait tout ce chemin et commence à inventer des excuses à Miriam pour ne pas avoir à la blesser en lui disant qu’Angel est une prostituée. Cependant, le lendemain, il décide de monter à la maison et de confronter Angel. Au début, il se montre froid, méprisant et sarcastique, mais il est surpris par son humilité et l’amour sincère qu’elle porte à Michael. Il est choqué d’apprendre qu’elle a quitté Michael dans l’espoir qu’il épouse Miriam pour avoir des enfants. Lorsqu’elle découvre que Paul est marié à Miriam, et que Michael l’attend toujours après trois ans d’absence, tout son monde s’écroule et elle ne se sent plus justifiée de rester à San Francisco.
Elle prend finalement la décision de laisser Susanna en charge de la maison, et retourne auprès de Michael. Elle le surprend dans le champ où il travaille, s’agenouille à ses pieds et pleure. Elle est peinée de voir à quel point la perte de Susanna a eu un effet profond sur Michael. Elle lui révèle que son vrai nom est « Sarah ». Michael, lui-même en larmes, la reçoit avec un amour bienveillant, pur et indulgent, et déclare qu’il croit que la révélation de son nom est une promesse de Dieu qu’ils pourront un jour avoir des enfants (la Sarah de la Bible était une femme stérile qui, par la grâce de Dieu, a pu avoir un fils). Ils commencent enfin une nouvelle vie ensemble, la vie dont ils ont rêvé.
Dans l’épilogue, il est dit que Michael et Sarah ont eu plus tard quatre enfants.