How to write Facebook ad copy that gets read
The fields do different jobs and the fold cuts your offer. How to write Facebook ad copy for primary text, headline and description, in read order.
The fields do different jobs and the fold cuts your offer. How to write Facebook ad copy for primary text, headline and description, in read order.
The brief comes back with everything the product does, so you paste it into primary text and ship. Four sentences, all of them true. Two weeks later the ad has spent enough to judge: clicks are cheap, nothing lands on the other side. You reread it in Ads Manager and it looks fine, because Ads Manager shows the whole thing. Then you find the ad on your phone and the offer you wrote in sentence four sits behind a grey "See more" that nobody taps.
Short answer: Facebook ad copy lives in three fields that do different jobs. The first line of primary text has to earn the tap on "See more", because everything past the fold is optional reading. The headline sits under the creative next to the CTA button and carries the offer. The description is reinforcement you may not get.
The takeaways
The creative does. Nobody reads a Facebook ad in the order the form collects it. The image or video stops the scroll, the primary text above it gets skimmed as a caption, and the headline arrives last, sitting directly beside the button at the exact second someone decides whether to tap. The form's top-to-bottom order is a data-entry sequence, not a reading order.
The consequence is practical. Whatever every viewer must know belongs in the creative or the headline, because those two are unconditional. Primary text past the first line depends on someone choosing to expand it. If the ad is video, the stop gets bought in the opening seconds, its own craft with its own metric (see how to write Facebook ad hooks).
Shorter than most people write it, at least in the visible part. Meta's own Ads Guide recommends 50 to 150 characters of primary text for a Facebook Feed image ad, far below what the field will happily accept. The recommendation is not an argument against long copy. It is an estimate of how much text a person reads before deciding whether the rest is worth their thumb.
So write the first line as the ad for the rest of the copy: one specific claim, or one problem named the way a buyer would name it. Then the long version runs underneath for the people who opted in.
I have shipped both lengths for years. Length was rarely the deciding factor. What killed those ads was an opening line that quietly assumed a tap it had never earned.
The offer, or the outcome the button delivers. Meta's Feed image spec recommends 27 characters, which is barely a phrase, and that constraint tells you what the field is for. It is a label sitting next to a call-to-action button, competing with it for the same glance.
Two habits waste it. Restating the primary text gives the reader the same sentence twice and new information zero times. Putting the brand name there duplicates the profile row sitting above the ad.
What works is the transaction in plain words: what they get, what it costs, or the condition attached. "Free shipping over €50" earns its 22 characters and answers a question the buyer was already holding. "Innovative solutions for modern teams" answers nothing, at any length, and it burns the one slot the button cannot cover.
No, and the spec sheet quietly agrees. Meta's Facebook Feed image ad guide does not list a description at all, because it renders on some placements and not others. The field exists in the form, which is why accounts treat it as required and drop something important into it.
Use it as a qualifier that helps when it appears and costs nothing when it does not: a shipping term, a price anchor, a "cancel anytime". Keep the offer and the proof your ad depends on out of it.
If the headline is already good, the honest default here is an empty description and the saved effort spent on the first line above the creative.
Because the fold moves. Feed, Reels, desktop and the in-stream surfaces each cut the primary text at a different point, driven by how many lines fit that screen rather than by a fixed character count. An offer sitting at character 200 is fully present in one placement and completely absent in another, from identical copy.
It is also why the "character limits" roundups ranking for this are risky to build on: they mostly repeat each other's maximums. Checking Meta's own Feed image spec while writing this, the recommended numbers (50 to 150, and 27) did not match the ones circulating in those posts.
Use Ads Manager's per-placement preview before publishing, and treat the earliest fold across your live placements as the real budget for the visible line.
Awareness decides that. Someone who knows your product and is comparing prices needs the offer and little else. Someone who has the problem but has never heard of your category needs it named in their own words before any product noun appears. Same offer, two very different word counts, and the mismatch is usually why copy "underperforms" against copy that says less (more on writing to awareness stages).
This is the part I ended up automating, because it is the part I got wrong most often. In Adscalr, ad concepts are generated from real audience quotes mapped to the five awareness stages, with brand voice as an input, so the text starts from a stage instead of an empty field. A copywriting critic scores each concept against six direct-response principles, pass or fail, with the offending line quoted. Nothing goes live on its own: it is draft, review, approve, and a person ships it. The mechanism is written up on the ad creation page.
None of that replaces the judgment in the first line. It stops you starting cold in a form that collects the fields in an order no reader uses.
This is the thinking behind Adscalr.
See the product →