La historia comienza en Nueva Inglaterra, 1835. Sarah, una hermosa joven, conoce a su padre, Alex Stafford, por primera vez. Sarah, de seis años, se entera de que es el producto de una aventura adúltera de Stafford con su madre, Mae. Mae fue instada a abortar al niño, pero se negó a hacerlo. Esta decisión la separó de Alex y dejó a Mae deprimida. Sarah empieza a pensar que ella es la culpable, pero espera que Alex no vuelva nunca.
Más tarde, ese mismo año, Cleo, la criada de Mae, lleva a Sarah a regañadientes a un viaje a la orilla del mar, para que Mae pueda tener una visita privada con Alex. Cleo lleva a Sarah con ella a un popular burdel donde Cleo es conocida y tiene un acompañante masculino. Tras emborracharse, acepta acostarse con él mientras Sarah espera en el vestíbulo. Después de que este hombre deja a Cleo con el corazón roto de nuevo, Cleo en un estupor medio borracho le dice a Sarah «la verdad de Dios» y obliga a una asustada Sarah a escucharla decir que ningún hombre se preocupa por una mujer y que todo lo que quieren es sexo.
Mae y Sarah se mudan entonces a una choza en los muelles, donde Mae se dedica a la prostitución para llegar a fin de mes. Su reputación es conocida en todo el pueblo, y la joven Sarah se ve obligada a sufrir el rechazo de la gente del pueblo por ello. A través de esta experiencia, Sarah aprende a enmascarar sus emociones y a sustituirlas por una dura apariencia.
Unos años más tarde, Mae muere a causa de una terrible enfermedad, dejando a Sarah sola a la edad de ocho años con un hombre borracho llamado Rab. Sin saber qué hacer con la pequeña, Rab busca un hogar para la niña. Encuentra a un hombre que busca una niña para su rico amo. Pensando que este es el golpe de suerte de Sarah, Rab lleva a Sarah al barrio rico. Los recibe en la puerta una mujer que insta a Rab a que se lleve a Sarah y no vuelva. Rab no se deja disuadir e insiste en que Sarah es perfecta para ese hombre rico. La mujer admite a la pareja y los envía a un dormitorio en el piso de arriba, donde se les indica que esperen hasta que su amo pueda verlos.
Duke, el amo de la casa, recibe a Sarah y a Rab; minutos después, Rab es estrangulado ante los ojos de Sarah, y su cuerpo arrojado en un callejón cercano. Duke, que es un pedófilo, había estado rastreando la ciudad no en busca de una nueva hija, sino de una nueva víctima. Duke informa a Sarah (rebautizada por él como Ángel) de que hay muchas cosas que quiere enseñarle. Le da su primera «lección» esa misma noche.
Después de unos 10 años con Duke, Angel finalmente escapa y se embarca en un barco con destino a California. Robada y obligada a la opción de prostituirse en lugar de ser violada por los pasajeros, en su mayoría hombres, desembarca en San Francisco con nada más que la ropa que lleva puesta. Angel es acogida por «La Duquesa», la dueña de «El Palacio», un burdel situado en Pair-a-Dice, y se convierte en una prostituta exclusiva y de alto precio. Empleada por la Duquesa, Ángel es vigilada constantemente y sus escasos ingresos le son ocultados. Su único consuelo es Lucky, un compañero de la prostitución que suele estar borracho. Lucky le recuerda a su madre.
Michael Hosea ve por primera vez a Angel en un viaje a Pair-A-Dice para vender productos. Está listo para irse cuando Dios le dice a Michael que «ella es la elegida», la mujer con la que debe casarse. Michael pronto descubre, para su sorpresa, que Ángel es una prostituta. Decidido a cumplir el mandato de Dios y casarse con ella, Michael paga la elevada tarifa por sus servicios con la esperanza de convencerla de que se vaya con él. Ella rechaza obstinadamente su oferta. Desanimado, Miguel cuestiona a Dios, pero sigue obedeciendo. Paga los honorarios de Ángel durante tres noches sucesivas, hablando y razonando con ella hasta que se le acaba el tiempo y el dinero. Ángel mantiene su fachada fría y sarcástica para disuadirlo, queriendo escapar del dolor que sus palabras le causan. Mientras tanto, ella parece no poder escapar de los pensamientos sobre Michael y su creciente esperanza de vida fuera del Palacio.
Después de la última noche con Ángel, Michael se frustra y abandona Pair-A-Dice. Unos días después, regresa a Pair-A-Dice, incapaz de seguir ignorando el mandato de Dios. Encuentra a Ángel casi muerto por una brutal paliza que le propina Magowan, el guardaespaldas de la Duquesa. Dispuesto a utilizar cualquier medio para preservar la vida de Ángel, Michael le pide que se case con él para poder llevarla a su cabaña. Apenas consciente, Ángel acepta, murmurando «¿Por qué no?»
Michael atiende a Ángel en su cabaña. Ángel sigue tolerando a duras penas el acuerdo mientras éste sirve a sus necesidades. Michael soporta la dureza de Ángel, permaneciendo fiel a su nueva esposa y al plan de Dios. El cuñado viudo de Michael, Paul, regresa a casa después de una infructuosa búsqueda de oro en las Sierras. Paul reconoce inmediatamente a Ángel como la prostituta de alto precio del Palacio. Creyendo que Ángel ha engañado a Michael, Paul la trata mal. Paul trata de contarle a Michael sobre la profesión de Ángel, pero sólo lo enfurece. Paul cree que Michael se casó con Ángel por ciega lujuria y sin saber que era una prostituta. Durante su visita, Paul piensa que hay una ruptura entre él y Michael por culpa de Ángel, sin saber que Michael ama a Ángel a pesar de su pasado y que es él quien provoca la ruptura entre ellos.
Cuando por fin se cura de sus heridas, Ángel intenta huir de Michael con la esperanza de volver al burdel para recuperar el dinero que La Duquesa le había retenido y que insistía en que se gastara en la ropa y la comida que recibía Ángel. Cuando Paul se va a vender los productos de su tierra en Pair-A-Dice, Ángel ve esto como una forma de escapar. Mientras Michael está trabajando en el campo, ella corre tras la carreta de Paul. Él acepta llevarla con él si le paga con su única moneda: ella misma. Él está disgustado por sus acciones aún más después de que tienen sexo juntos y espera que es la última de ella que va a ver nunca más.
Al regresar a Pair-A-Dice, ella ve que el Palacio se ha quemado matando a su compañero más querido Lucky, y otra prostituta con el nombre de Mai Ling. Sin ningún otro sitio al que ir, empieza a trabajar encima de un bar, de nuevo como prostituta. Aunque detesta que la vean como una ramera, no tiene otra habilidad para ganarse la vida. Un lívido Michael la encuentra en una habitación con un cliente y luchan por salir del bar lleno de hombres borrachos que esperan su turno con Angel.
Vuelven a la cabaña, donde Michael confía en Dios para superar su ira por la infidelidad de ella. Ángel comienza a desarrollar sentimientos afectivos hacia Michael, que ella no puede comprender porque nunca se ha permitido amar a ningún hombre, pues «la verdad de Dios» dice que se aprovecharán de ella o la abandonarán, como su padre. A pesar de su continua frialdad, Michael la ama incondicionalmente. Al mostrarle un amanecer, le dice: «Eso es lo que quiero darte». Ángel siente que su corazón se ablanda día a día, pero en su incertidumbre y miedo se niega a compartirlo con Michael. Siente una profunda vergüenza por su «impureza». El amor de Miguel la ablanda, pero no puede considerarse digna de él. Aunque han dormido juntos con regularidad, Ángel está muy desconectado de la experiencia del sexo, pero cuando una noche experimenta el mismo gozo y placer que Michael («Y ella voló, Michael con ella, hacia los cielos…»), eso la asusta.
Huye una vez más, esta vez a Sacramento; en el camino le ofrece llevarla un viejo que vende macetas. Al llegar a Sacramento, mientras busca trabajo, se encuentra de nuevo con Joseph Hochschild, que ha construido su nueva tienda, y se queda con él, sabiendo que es un buen amigo de Michael. Trabaja para él en su tienda junto con su mujer y su madre. Cuando llega un pedido para Michael, ella intenta marcharse pero Joseph la mantiene ocupada, haciéndola esperar más tiempo. Cuando termina sus tareas y va a cerrar la tienda, Michael está de pie en la puerta, habiendo vuelto a buscarla. Ella admite que le asusta la idea de estar enamorada de él, pero él la tranquiliza y la lleva a su casa.
Al llegar de nuevo al valle, se encuentran con la familia Altman, que tiene una rueda rota y está varada en el arcén de la carretera. Michael les ayuda a arreglar la carreta y les invita a quedarse en su cabaña. Angel revela a la Sra. Altman y a la hija mayor, Miriam, que conoció a Michael en un burdel, y se sorprende al ver que sólo sienten compasión por ella en lugar de desprecio. Se hacen íntimas y Ángel se encariña con la hija mayor, Miriam, que empieza a encariñarse con Paul, que vive en el otro extremo del valle. Cuando Ángel ve a Miriam hablando con Michael, supone que sienten algo el uno por el otro y llega a la conclusión de que harían mucha mejor pareja que ella y Michael. Paul también quiere que Michael acabe con Miriam, pero también ha empezado a desarrollar sentimientos por Miriam, de 16 años. Él niega sus sentimientos sólo porque desea ver a Michael con Miriam en lugar de con Ángel.
Mientras tanto, se revela en un flashback que durante su tiempo como amante de Duke, Ángel se quedó embarazada dos veces y ambas veces un enfurecido Duke hizo que un médico la abortara, tomando medidas la segunda vez para asegurarse de que nunca pueda volver a quedarse embarazada. Más tarde, Angel se lo revela a un devastado Michael. También revela que una vez tuvo relaciones sexuales con su propio padre, que acudió a su burdel, en un intento de venganza porque abandonó a su madre. La culpa la invade por la forma insensible en que lo trató. Sabiendo que eso ha escandalizado a su marido, y sintiéndose culpable por no poder darle a Michael ningún hijo propio, como ella sabe que él anhela, Ángel huye una vez más, dejando su anillo de bodas, con la esperanza de que Michael se case con Miriam y tenga hijos con ella. Michael está destrozado, pero dice que no volverá a perseguir a Ángel si ella no quiere estar con él.
Esta vez Ángel se va a San Francisco. Cuando llega, consigue un trabajo con un gentil hombre llamado Virgil. Él la acoge como cocinera en su cafetería y la cuida. Pero tras meses de duro trabajo, el café se incendia, y en él todos los ahorros y posesiones de Ángel. Observando el incendio en la calle, una desolada Angel escucha una voz familiar: es Duke, que la saluda. Temiendo que haga daño a Virgil, que parece desconfiar de Duke, Ángel acepta volver con él.
Una vez más bajo el poder de Duke, se espera que Ángel retome su vida de prostituta. Sin embargo, la preferencia sexual de Duke es por las chicas jóvenes, y le pide a Ángel que maneje a sus posibles «compañeras», pero sólo después de una semana de prostitución. Ángel debe presentarse ante una multitud de hombres. Ella comienza a luchar en su mente y clama a Dios internamente. Se prepara para subir al escenario y entretener a los hombres. Cuando por fin está ante ellos, la voz de Dios le dice que cante y ella empieza a cantar «Rock of Ages» a la asombrada y confundida multitud. Un hombre canoso canta con ella y se acerca al frente del escenario. Ella olvida la letra de la canción y él la termina.
Después de la presentación, Duke reprende a Ángel. Sin embargo, es recibido por el extraño cantante de la multitud. Amenaza con hacer colgar a Duke si pone un solo dedo sobre Ángel. Con eso el hombre escolta a Ángel fuera, y en su camino de salida Ángel rescata a otras dos jóvenes que Duke estaba utilizando como víctimas. Cuando los hombres del burdel ven a las dos jóvenes con Ángel, se enfurecen y destruyen el lugar. El hombre las lleva a su casa, donde su mujer y su hija las cuidan. Jonathan Axle, el hombre que la ha salvado, es un banquero rico y respetado con una sólida familia cristiana. Ángel comienza a asistir a la iglesia con la familia Axle y se encariña con ellos.
Mientras tanto, Miriam revela que está enamorada de Paul, y los dos se casan mientras Ángel está fuera. Michael sigue esperando el regreso de Ángel y reza continuamente para que vuelva. Al ver su dolor, Miriam insiste en que Paul debe ir a buscar a Angel, pero Paul, todavía lleno de desprecio por la mujer que cree que es Angel, se niega.
Angel finalmente reconoce el amor de Dios por ella y recibe a Cristo en su corazón. Comienza a trabajar con prostitutas ayudándolas a dejar sus viejas costumbres y a aprender nuevas habilidades que puedan ayudarlas a ganarse la vida. Susanna Axle, la hija de Jonathan Axle, la ayuda a llevar la pensión.
Pablo finalmente cede ante Miriam y va a San Francisco a buscar a Ángel. La ve con un anciano -Jonathan Axle- y piensa que él es un cliente y ella todavía una prostituta. Está furioso por haber venido hasta aquí, y empieza a inventarse excusas para dar a Miriam y no tener que herirla diciéndole que Ángel es una prostituta. Sin embargo, al día siguiente decide subir a la casa y se enfrenta a Ángel. Al principio actúa con frialdad, desprecio y sarcasmo, pero se sorprende por su humildad y el amor genuino que alberga por Miguel. Se sorprende al saber que ella dejó a Michael con la esperanza de que se casara con Miriam para poder tener hijos. Cuando descubre que Paul está casado con Miriam, y que Michael sigue esperándola después de tres años de ausencia, todo su mundo se desmorona y ya no se siente justificada para permanecer en San Francisco.
Finalmente toma la decisión de dejar a Susanna a cargo de la casa, y vuelve con Michael. Lo sorprende en el campo donde está trabajando, arrodillándose a sus pies y llorando. Está apenada al ver cómo la pérdida de ella ha tenido un profundo efecto en Michael. Le revela que su verdadero nombre es «Sarah». Michael, entre lágrimas, la recibe con un amor bondadoso, puro y perdonador, y declara que cree que la revelación de su nombre es una promesa de Dios de que algún día podrán tener hijos (la Sara de la Biblia era una mujer estéril que, por la gracia de Dios, pudo tener un hijo). Por fin comienzan una nueva vida juntos, la vida que han soñado.
En el epílogo se dice que Michael y Sarah tuvieron después cuatro hijos.