The 2007 movie is split into reflections of contemporary and past settings. The contemporary setting is the trial of Gertrude Baniszewski (Catherine Keener), interspersed with lengthy flashbacks into the events described by the witnesses.
Sylvia (Ellen Page) and her sister, Jenny (Hayley McFarland), find themselves on the road living between their parents, Lester (Nick Searcy) and Betty Likens (Romy Rosemont). The Likens parents, who are professional carnival workers, go on tour together, leaving Sylvia and Jenny in the care of Gertrude Baniszewski, whose daughters the Likens girls have met in church.
The Baniszewski household is already overrun with children, and Gertrude is in dire financial straits. Sylvia befriends Gertrude’s oldest daughter, Paula Baniszewski (Ari Graynor), who confesses to Sylvia that she is pregnant by her married boyfriend. Sylvia swears not to tell.
Shortly after the Likens girls’ arrival, Gertrude Baniszewski is upset to find that Lester has not sent the weekly money for the girls’ board. She punishes the girls by whipping them with a belt. Soon thereafter, Gertrude receives the payment and a letter from the Likens, but throws the letter in the trash and says nothing to the Likens girls.
While Paula and Sylvia are out with friends, Paula’s boyfriend informs Paula that his wife has come back, then hits Paula when she pleads for him to stay with her. To stop the boyfriend’s attack, Sylvia tells him that Paula is pregnant. Paula, furious, vows that Sylvia will pay for spilling her secret. Ricky Hobbs (Evan Peters), who likes Sylvia, observes the scene.
Back at home, Paula tells Gertrude that Sylvia has been spreading lies about her. Gertrude forces Sylvia to apologize, and eventually has the second-youngest Baniszewski child, Johnny (Tristan Jarred), hold Sylvia so that Paula can beat her. Rumors spread around the school that Paula is pregnant.
Jenny finds the letter from her parents in the garbage, prompting Sylvia and her to phone their parents. The call is cut short when they see the Baniszewski children coming. The Baniszewski children tell Gertrude about the phone call. Gertrude believes they stole money to make the long distance call, although they had traded bottles in for money. As a punishment for “stealing”, Gertrude burns Sylvia with a cigarette.
At a church lunch, Gertrude’s youngest child’s (baby) father, Andy (James Franco), says Sylvia has been spreading rumors that Paula was pregnant. When Sylvia returns home, Gertrude accuses Sylvia of telling more lies about her daughter, then forces Sylvia to put a Coke bottle up her vagina in front of the family. Gertrude then orders Sylvia to the basement.
When Sylvia refuses, both Stephanie’s boyfriend, Coy (Jeremy Sumpter), and Johnny throw her down the stairs. Jenny asks how long Sylvia will be in the basement, to which Gertrude replies “until she learns her lesson.” Gertrude makes everyone swear that Sylvia was sent to juvenile hall. Johnny begins to bring neighborhood children into the basement so that they can torture Sylvia.
When they hesitate, Johnny assures them that it is all right because his mother said that they could. The children visit regularly to beat Sylvia and burn her with cigarettes.
Paula, who has begun to feel guilty, tells her mother she has been praying and thinks Sylvia has learned her lesson. Gertrude insists that Sylvia still needs to be punished, but Paula will have no part in it. When Paula confesses to her church pastor that she is pregnant, the pastor visits the Baniszewski home, where he is told that Gertrude sent Sylvia away for being a bad influence.
When the pastor leaves, Gertrude orders everyone in the basement. She begins to brand “I’M A PROSTITUTE AND PROUD OF IT” on Sylvia’s stomach with a hot needle, but is unable to finish. Ricky finishes the branding.
Late one night, Paula comes to help Sylvia escape. One of the Baniszewski sisters awakens Gertrude, who tries to prevent the escape. Paula stops Gertrude, and Ricky drives Sylvia to her parents, who are horrified at their daughter’s condition.
The three of them go immediately to the Baniszewski household to make sure that Jenny is safe. Sylvia walks into the house only to see her own body lying on the floor while Stephanie screams that Sylvia isn’t breathing. The standing Sylvia vanishes, making it plain that the “escape” was only a vivid hallucination before her own death.
While Gertrude continues to insist that Sylvia is faking, Ricky calls the police. As the police are leaving, Jenny approaches them and says, “Get me out of here and I’ll tell you everything.”
Jenny is shown on the stand, saying that Sylvia never did anything to Paula or Gertrude, but Gertrude had threatened her to keep quiet or she would get the same treatment.
Gertrude is found guilty of first degree murder after denying that she did anything and blaming the torture on her children. Gertrude is shown in her prison cell, where an image of Sylvia appears. Before Gertrude can ask for forgiveness, the vision vanishes.
Sylvia narrates the end, relating the punishments the others received. The film ends with Sylvia riding the carnival merry-go-round, where she always felt safe.