The novel begins in 1931 with the suicide of an insurance agent named Robert Smith. Smith jumps off the Mercy Hospital, located in an unnamed town in Michigan on the so-called Not Doctor Street. Shortly after this mysterious incident, a woman named Ruth, the daughter of Doctor Foster, for whom Not Doctor Street is named, becomes the first black woman to give birth in Mercy Hospital.
Ruth is married to Macon Dead II, a cold, often violent man who has built up quite a bit of wealth and acts as a landlord for much of the town. In addition to the boy Ruth gives birth to in the hospital, they have two daughters, First Corinthians and Lena — Macon names the daughters by randomly choosing a name from the Bible. Macon was once close with his sister, Pilate, but a mysterious incident in a cave has left them estranged. Though Ruth makes some efforts to get close to Macon early in their marriage, she eventually gives up, retreating into her own memories of her father. When she’s alone in the house, she breastfeeds her son, Macon Dead III, even though he’s a bit too old for breastfeeding. One day, Freddie, a janitor and errand-runner who works for Macon Dead II, sees Ruth breastfeeding her son, and calls the son Milkman — the nickname sticks.
When Milkman is 12, he meets a slightly older boy named Guitar. Guitar takes Milkman to meet Pilate, whom Milkman has been forbidden to see and who lives with her daughter, Reba, and her granddaughter, Hagar. Milkman is instantly attracted to Hagar. Later, Macon is angry with Milkman for visiting Pilate, but Milkman stands up to his father. Macon calls Pilate a “snake,” and reveals that he and Pilate grew up on a huge farm with their father. Their father was illiterate, and accidentally took the name “Macon Dead” because the registrar at the Freedman’s Bureau misinterpreted what he said about his own father having died in Macon. Soon after, Macon puts Milkman to work as a rent collector.
Several years later, Ruth angers Macon while the family is eating dinner and he hits her. Milkman immediately pushes Macon into the radiator and tells him he’ll kill him if he touches Ruth again. Macon is secretly proud of his son for standing up to him. That night, he tells Milkman that years earlier he caught Ruth kissing her dying father’s fingers, and implies that the two of them were in an incestuous relationship. Milkman begins to feel disgust around all women, including Ruth. He has also been feeling tired of Hagar, with whom he has been having a relationship for years. He ends the relationship, leaving her devastated. He also learns that Guitar might be involved in a series of murders intended to avenge the deaths of black people at the hands of racist whites. Guitar says that all white people are hateful and evil, even the supposedly good ones.
Furious with Milkman, Hagar tries and fails repeatedly to kill him. When Ruth learns that Hagar and Milkman were involved with each other romantically, she angrily confronts Pilate, who tells her about her life. After leaving her father’s farm in Danville, Pennsylvania following his murder at the hands of a racist white family who wanted his land, Pilate traveled through Virginia, where she slept with a man and gave birth to Reba; she refused to marry the man because she was afraid he’d be afraid of the fact that she had no navel. She also tells Ruth that as she journeyed she met the spirit of her dead father, who told her, “Sing,” which is why she continues to sing so often and joyously.
Macon, however, tells Milkman about a bag of gold that he believes Pilate keeps in her house. When he and Pilate were children, he says, they wandered through forests and caves because their father’s death left them homeless. One night, they slept in a cave, where they discovered a mysterious man — afraid, Macon killed the man and then discovered that the man was carrying gold. Pilate insisted that they leave the gold with the dead man, and pushed Macon out of the cave — Macon ran off, and when he returned, Pilate and the gold were gone. He asks Milkman for his help in retrieving the gold. Milkman enlists Guitar’s help, and the two of them sneak into Pilate’s house and steal the green sack that hangs from her ceiling. When they open it, they’re disappointed to find only bones. The two of them end up getting arrested and the police are suspicious of them because of the bones. Pilate covers for both of them instead of pressing charges, which makes Milkman feel guilty for stealing from her in the first place.
Milkman’s sister, Corinthians, is forced to work as a maid, despite her college education. A poor man named Henry Porter, a yard worker and formerly a drunken tenant of Macon Dead’s, makes her acquaintance and tries to woo her. At first, Corinthians is reluctant to marry someone with lower social status than she, but eventually she gives in, realizing that no one else wants her. The first time Corinthians goes home with Porter he has sex with Corinthians against her will, but afterwards she stays with him.
In the second part of the novel, Milkman travels to Danville, Pennsylvania to find the cave where he thinks Pilate left her gold. He meets people who remember his father and are glad to hear that Macon Dead II is now wealthy and powerful. Searching for the cave, Milkman also meets Circe, the tremendously old and devoted midwife who delivered Pilate and his father. Circe tells Milkman that his grandfather’s real name was Jake, and that Jake’s body was thrown in the river after the powerful Butler family killed him. She tells him where to find the cave, but when he goes to the cave he doesn’t find the gold there. Based on Circe’s information, he decides that Pilate has been lying about returning to the cave, and decides to follow her path to Virginia to trace where she might have hidden the gold.
Milkman arrives in the town of Shalimar, where he learns that someone from Michigan — Guitar, he guesses — has been looking for him. The townspeople harass him for his snobbish attitude, and he begins to see that they have a point — he’s spent his entire life caring only for himself. Milkman goes hunting with some of the men of Shalimar. During the hunt, Guitar tries to kill him. Though he doesn’t yet know why Guitar wants to kill him, he guesses that he’s motivated by the gold.
Milkman next traces Pilate to the house of a woman named Susan Byrd, who tells Milkman that his grandfather, Jake, married a woman named Sing, who had Indian blood. When leaving Byrd’s house, Milkman runs into Guitar, who accuses him of trying to steal the gold for himself. Guitar wants Pilate’s gold to fund his vigilante group the Seven Days, who kill whites in retribution for any murder of a black person (regardless of whether the particular whites killed were involved in the original murder). Guitar warns Milkman, and then departs.
While walking through Shalimar, Milkman realizes that the nursery rhyme the children are singing is based on his own family. Inspired, he returns to Byrd’s house, where he learns that he has a great-grandfather named Solomon who supposedly flew back to Africa, leaving his wife and children to fend for themselves. Though Byrd thinks this is all just a fairy-tale, Milkman is overjoyed with what he has heard and believes it. As he travels back to Michigan, he feels like a new man, thinking that every name tells a story.
Back in Virginia, Milkman learns that Hagar has died of grief after trying to make herself more beautiful for him. He feels horribly guilty, and goes to see Pilate, who hits him with a bottle and knocks him out, but doesn’t kill him. Milkman then tells Pilate that the body she found in the cave when she returned there — the body she’s been carrying for years — belonged to her own father. Together, they return to Shalimar to bury the bones. As soon as they bury it, Pilate collapses — she’s been shot by Guitar, who was aiming for Milkman and is still bent on obtaining the gold that neither Pilate nor Milkman has. In the final scene, Guitar puts down his gun, and Milkman offers him his life. He leaps toward Guitar, flying through the air, leaving it unclear if he intends to attack him or embrace him.