The film opens as we go through a home that appears to be underwater. We hear the voice of a man named Giles (Richard Jenkins) mention the story of a princess, the one she loved, and the monster that threatened to tear them apart.
Baltimore, c. 1962
Elisa Esposito (Sally Hawkins) is a mute young woman who lives alone but frequently spends time with Giles, her middle-aged bachelor neighbor, who lives next door to her in another small apartment overhead a local movie theater. She works at the Occam Aerospace Research Center as a janitor with her friend Zelda Fuller (Octavia Spencer). During their daily night shift, a vessel is brought into the facility containing a valuable asset. Elisa goes near the vessel, and something bumps against it from inside.
In the morning after work, Giles takes Elisa to his favorite pie shop where he frequently gets key lime pie. Elisa doesn't like it, but Giles enjoys the pie, as well as the conversations he has with the shop's "Pie Guy" (Morgan Kelly), whom the closeted homosexual Giles has a crush on. We also see Giles working on an ad design for a jello product for the company that he used to work for before being suspended, apparently because of a drinking problem.
At work, Elisa and Zelda are cleaning a bathroom when Colonel Richard Strickland (Michael Shannon) comes in and splashes some water after washing his hands before he uses the urinal. A while later, the ladies hear a scream coming from another room, and Strickland emerges with two fingers missing from his left hand. Elisa and Zelda must clean the blood in the room where they are keeping the new "asset". Elisa splashes a bucket of water on the floor, and Strickland's fingers come out from under a shelf. Elisa packs them in a bag to send to the hospital with him.
Elisa discovers that the Asset (Doug Jones) is a fish-like humanoid creature. She becomes fascinated by it and starts sneaking into the enclosure to spend time with it. Over the next few days, Elisa feeds it hard-boiled eggs, teaches it sign language, and plays music records to listen to. She hides when she hears someone enter. It's Strickland, coming to torture the Asset by zapping it with a cattle prod, merely to taunt it out of spite for his fingers.
Strickland's home life is soon revealed that he is married with two young children whom he does not seem to show any attention too. When his wife wants to have sex with him while their kids are at school, he has rough sex with her and doesn't slow down or stop when he becomes too rough on her.
A new doctor at the facility, Robert Hoffstetler (Michael Stuhlbarg), is actually a Soviet spy named Dimitri. He meets with his bosses, who take him to a Russian-themed restaurant to discuss the Asset. Hoffstetler tells the men that he believes the creature can communicate and is intelligent. The bosses later give Hoffstetler a poison to kill the creature to prevent the Americans from advancing their scientific research. Meanwhile, Strickland's own arrogant boss, General Hoyt (Nick Searcy), wants to harvest the Asset's body for space travel technology.
Elisa becomes fearful for the Asset's safety and lets Giles know that she wants to help it. Giles doesn't think it's a good idea, but Elisa sees no difference between the creature and herself as they are both individuals that are unlike regular people, and she is worried that if she does nothing, it will die.
Giles pays another visit to the pie shop. He starts a friendly conversation with Pie Guy until Giles reaches out to touch his hand, and the man reacts angrily. It gets worse when an African-American couple enters and the racist and homophobic Pie Guy tells them they can't sit at the counter. Giles is also told to leave and not return.
Meanwhile, Elisa becomes the unwanted attention by Strickland when he deliberately spills a glass of water in his office and forces her to clean it up. He then man-handles her, claiming that he is turned on by the fact that she is mute and tells her that if she spends more time with him, he can make her "squack". Elisa leaves.
Hurt and angry over being rejected and having to live his life in the closet out of fear in this homophobic society, Giles decides to help Elisa break out the Asset and uses his skills to decorate a van and make a fake ID for himself. Elisa initiates their plan by turning cameras away from the enclosure. She sneaks the Asset into a laundry hamper and wheels it away while Giles drives into the facility. Zelda is leaving work, but realizes what Eliza is up to.
At the same time, Hoffstetler is also preparing to take action, apparently to carry out his orders, but he discovers Elisa's plan and decides to help her. He shuts down power with a bomb device and uses a syringe on a guard. Strickland rushes to the exit, but is too late. Helped by Zelda and Hoffstetler, Elisa gets the creature inside the van, and Giles drives them away, wrecking Strickland's new car in the process.
Elisa brings the Asset to her apartment and keeps it in her bath tub with chemicals that Hoffstetler gave her, plus some salt to keep it healthy. When she goes to work the following night, Strickland interrogates her and Zelda but doesn't believe they could have been responsible. As she leaves, Elisa signs "fuck you" to Strickland, which Zelda translates as "thank you".
While Giles is tending to the Asset, he falls asleep. The Asset gets out of the tub and sees one of Giles's cats. The cat hisses at the Asset, and it growls back before it starts to eat the cat. Giles sees this and frightens the Asset. It runs out, scratching Giles's arm. When Elisa returns, Giles tells her what happened. She runs out to look for it, only to find it in the movie theater beneath the apartments. She brings it back upstairs and tends to it. The Asset touches Giles's head and arm, and it starts to glow a blue color.
In the morning, Giles discovers hair on his head where there previously was none. The cut on his arm is also completely healed.
Elisa and the Asset grow closer, and they make love in the bathroom. Elisa even floods the bathroom so that they can swim together, but it causes a leak into the theater, and Giles is forced by the theater owner to open the door and let the water out. She eventually plans to free the Asset into a canal with rainwater flooding it. Elisa grows more attached to the Asset, even imagining a scenario where she is in an old-timey musical number singing about her love for him.
Meanwhile, General Hoyt visits the facility to chastise Strickland for losing the Asset and gives him 36 hours to find it.
Hoffstetler's own bosses realize he didn't kill the Asset, but they spare Hoffstetler for the time being, telling him he will be extracted in two days time back to Russia.
On the day that Elisa plans to release the Asset, Zelda comes over and sees that its scales are peeling off, and they are out of the chemicals from the facility. They plan to take the Asset away that night.
Strickland follows Hoffstetler to his rendezvous point where he always meets his bosses. They shoot Hoffstetler repeatedly, but before they can finish him off, Strickland shows up and kills them first. He grabs Hoffstetler by the bullet hole in his cheek and tortures him to give up the Asset's location, thinking he is hiding it for other Soviet spies. With his dying breath, Hoffstetler laughs at Strickland and says, "No names. No rankings. They just clean."
Strickland then goes to Zelda's home to interrogate her and her husband Brewster (Martin Roach). Growing more mad and delusional, he tears off the two fingers on his hand that hadn't healed after being reattached. Zelda is silent, but Brewster tells him that Elisa has the Asset. After Strickland leaves, Zelda scolds Brewster and then calls Elisa to warn her. She and Giles take the Asset away before Strickland shows up. He breaks into Elisa's apartment and sees the note on her calendar that lets him know she's taking the Asset to the canal.
Elisa and Giles bring the Asset to the canal. They say their goodbyes to the creature, but it signs to Elisa, "Me and you together forever." She responds that he must go without her. Strickland shows up and punches Giles in the face before shooting both the Asset and Elisa. Thinking he just won, Strickland turns to leave but gets whacked in the face by Giles. The Asset revives itself and heals its own bullet wounds. Strickland is impressed and calls the Asset a god before it slashes Strickland's throat with its claws. Just as the police arrive, the Asset takes Elisa into the water as Giles and Zelda (who just arrived) watch.
Underwater, the Asset kisses Elisa, using its healing powers to revive her and give her gills where there were once scars on her neck. The two hold each other as Giles's voice closes the film saying that the two of them could now be together.