Paid ads

Free Facebook ad copy generator with truncation preview

By Charles Summers · Updated · Free, no signup

Short answer

This writes Facebook and Instagram ad copy structured around your audience's awareness stage, then shows you where it gets cut. Primary text is split at roughly 125 characters, the length Meta recommends because the mobile feed collapses longer copy behind a "See more" link, and the tool prints the visible block and the hidden block separately. Headlines are checked against the narrower and wider placement limits, around 27 and 40 characters, and the link description is flagged because many placements never render it at all.

Use the facebook ad copy generator

What does this tool actually do?

This writes Facebook and Instagram ad copy structured around your audience's awareness stage, then shows you where it gets cut. Primary text is split at roughly 125 characters, the length Meta recommends because the mobile feed collapses longer copy behind a "See more" link, and the tool prints the visible block and the hidden block separately.

It runs entirely in your browser. Nothing you type is sent to a server, no account is required, and there is no usage limit, because there is no cost per run to control.

The "See more" cut is a line count in a fluid container, not a character limit

There is no number of characters at which Meta truncates primary text. The feed renders your copy into a container whose width depends on the device, then collapses it after a small number of rendered lines and puts a "See more" link at the break. Because the container is fluid and the font is proportional, the same copy collapses at a different word on a small Android phone than it does on a large iPhone, and differently again in the Instagram feed. Meta's own guidance recommends keeping primary text to about 125 characters, which is a sensible planning proxy for that behaviour rather than a limit the system enforces.

Two things move the cut earlier than the character count suggests. Line breaks are the big one: a break is a new rendered line, so a punchy three-line opener with blank lines between each can burn the entire visible block on twelve words. Long unbroken words and URLs are the other, since they cannot wrap mid-word and push the whole line down. If you want a specific line to be visible, put it first and do not put a blank line above it.

The practical consequence is that the first sentence carries almost all of the load, and everything after "See more" is read only by people who have already decided you are worth a tap. That inverts the usual copywriting instinct to build towards a point. On Meta the point goes first, and the build comes after, because the build is what you use to convert the minority who expanded rather than to earn the expansion in the first place.

This tool cuts at 125 characters on a word boundary and shows you both halves. Treat the visible block as approximately what a mobile feed user sees and the hidden block as optional reading. If your offer, your differentiator or the reason anyone should care sits in the hidden half, the ad is being judged on the visible half alone, and you have effectively written a different ad from the one you think you wrote.

Awareness stage decides the first sentence, and getting it wrong wastes the impression

Eugene Schwartz's awareness ladder is still the most useful framework for paid social, because Meta is an interruption medium and nobody arrived with a query. The reader is somewhere on a spectrum from not knowing they have a problem to knowing your product and weighing it up, and the first sentence has to meet them where they are. Copy aimed one rung above where they actually stand reads as a non sequitur; copy aimed one rung below wastes their time explaining something they already know.

The mistake this framework prevents is the most expensive one in paid social: running product-aware copy at a cold audience. An ad that opens with your offer assumes the reader has already accepted that the problem is real, that a solution category exists, and that you are a credible option. A cold prospect has accepted none of the three, so the offer reads as noise and the ad buys impressions from people who were never going to respond to that argument, whatever the creative looked like.

  • Unaware. They have absorbed the problem as normal work. The first line describes the situation, not the product, and its job is recognition: "that is my week."
  • Problem-aware. They know it hurts and have not named a fix. The first line names the pain precisely, in their words, and the body introduces a mechanism rather than a brand.
  • Solution-aware. They know solutions exist and are choosing between approaches. The first line has to be about your mechanism and why it differs, because "we solve X" is now table stakes.
  • Product-aware. They know you. Lead with the offer, the objection and the reason to act now, because everything else has already been established.
  • Most aware. Retargeting and existing customers. This is where a bare offer and a deadline earn their place, and where long copy usually costs you money.

The headline sits by the button, and the description often does not render

The headline is not the top of the ad. In a feed placement it appears underneath the creative, next to the call-to-action button, which means it is read after the image and usually after the first line of primary text. Its job is therefore not to hook, it is to answer "what happens if I press this." Repeating the primary text there is a wasted field, and the field is short: Meta's guidance points at roughly 27 characters for consistent display, and wider placements will show something closer to 40 before cutting.

The link description is the field most people over-invest in. It is not rendered at all on several major surfaces, including Stories and Reels, and even on feed placements it is frequently dropped depending on the format and whether the creative is a video or a single image. Write it as a bonus line that adds a qualifier, never as a place where a necessary piece of information lives. If the ad stops making sense when the description disappears, the description was doing a job that belonged in the primary text.

Because Advantage+ placements spreads one ad across more than a dozen surfaces with different aspect ratios and different visible field sets, the safe assumption is that any given viewer sees fewer of your fields than you filled in. Placement asset customisation lets you override text and creative per surface, which is worth doing for the two or three placements that actually get most of your spend, and not worth doing for the long tail.

When the algorithm does the targeting, the copy is the targeting

With broad targeting and Advantage+ audiences doing the work, your copy has become a self-selection mechanism. The ad that names a specific role and a specific pain teaches the delivery system who responds, and the system then finds more of them. Generic copy performs the opposite function: it collects cheap engagement from a wide, unqualified pool, and because the optimisation signal is downstream of that engagement, the system dutifully finds more people like the ones who were never going to buy.

This changes how to test. Three variants that differ only in wording tell you nothing worth acting on, because they represent one argument and will find the same audience. Test different arguments instead: a pain-led ad against an offer-led ad against a proof-led ad, and read which one the system can spend efficiently on. Meta documents that an ad set needs roughly 50 optimisation events per week to exit the learning phase, and every edit restarts it, which is why splitting a small budget across many near-identical ads is worse than running fewer, genuinely different ones.

Two habits make results readable. First, hold everything except the argument constant when you test copy, since a new image plus new copy tells you only that something changed. Second, judge copy on the metric it can actually move: cost per result and the ratio of expansions to impressions if you have it, rather than raw click-through, which rewards curiosity gaps that convert badly at the landing page.

Numbers worth knowing

MetricTypicalWhat it means
Primary text planning lengthabout 125 charactersMeta's own recommendation, and a proxy for the point the mobile feed collapses copy behind "See more". The real cut depends on device width, font size and your line breaks.
Headline display lengthroughly 27 to 40 charactersAround 27 displays consistently across placements; wider surfaces show more. It sits next to the call-to-action button, not at the top of the ad.
Link descriptionoften not renderedAbsent from Stories and Reels and dropped on many feed formats. Useful as a qualifier, never as the only place a necessary fact appears.
Learning phase exitabout 50 optimisation events per weekMeta's documented threshold per ad set. Any significant edit restarts it, which is the real cost of constantly tweaking copy on a small budget.
Placements one ad can run onmore than a dozen surfacesAdvantage+ placements spans feeds, Stories, Reels, Marketplace and Audience Network, each with a different aspect ratio and a different set of visible text fields.

Mistakes that quietly cost you results

Putting the offer in the fourth paragraph of the primary text
Only people who tapped "See more" will ever read it, and they are a small fraction of impressions. Anything the ad depends on has to sit in the first 125 characters, before the collapse.
Opening with a blank line or a three-line stacked hook
The feed collapses after a small number of rendered lines, so every line break spends part of your visible block. A stacked opener can burn the whole thing on a dozen words.
Running offer-led copy at a cold, broad audience
An offer assumes the reader already accepts the problem, the category and your credibility. At the unaware and problem-aware stages the first line has to earn recognition first, or the impression is spent arguing a point they have not reached.
Repeating the primary text in the headline
The headline sits next to the button and is read last, so it should answer what happens after the click. Duplicating the hook there wastes the one field that sets expectation for the landing page.
Testing three rewordings of the same angle
They will find the same people and produce the same result at three times the cost of learning nothing. Test different arguments, hold the creative constant, and let each ad set gather enough events to leave the learning phase.

What does the output look like?

This is the exact output the tool produces from the example inputs. It is generated by the same code that runs when you click the button, so what you see here is what you get.

AD SET: a scheduling app for clinics Audience: independent physiotherapists · Pain: no-shows and last-minute cancellations · Offer: a free 30-day trial Awareness stage: Problem-aware What the first line has to do at this stage: Name the pain in the first line, in their words, then introduce a mechanism rather than a brand. They know it hurts; they do not yet know what fixes it. PRIMARY TEXT (3 variants) Cut modelled at 125 characters, the length Meta recommends and a proxy for where the mobile feed collapses copy behind "See more". --- Variant 1 · structure: name the pain -> what it actually costs -> the mechanism -> the offer --- No-shows and last-minute cancellations: the real cost is bigger than the obvious one. The independent physiotherapists we speak to describe the same pattern. The work itself is fine and everything around the work is not, so time goes on chasing, re-checking and rebuilding what should already exist. What a scheduling app for clinics attacks is the coordination, not the work. A free 30-day trial, so you can measure the difference on real weeks instead of taking our word for it. Length: 480 characters (spaces included), 4 line breaks. VISIBLE before "See more": "No-shows and last-minute cancellations: the real cost is bigger than the obvious one. The independent physiotherapists we" (121 chars) HIDDEN until tap: "speak to describe the same pattern. The work itself is fine and everything around the work is not, so time goes on chasing, re-checking and rebuilding what…" (358 chars) Your pain phrase appears at character 0, inside the visible block. Your offer appears at character 377, which is 256 characters past the cut, so most people never see it. FOLD RULE (Problem-aware): the pain must be inside the visible block, because the whole bet at this stage is recognition, so if the pain phrase falls below the cut the ad is being judged on a generic opener. This variant passes. First line break at character 85. On mobile the collapse counts rendered lines, so a break this early shortens the visible block below the 125-character estimate above. --- Variant 2 · structure: pain as a question -> why the usual fix fails -> what works instead -> the offer --- Still dealing with no-shows and last-minute cancellations? The usual response is to add more process on top, which is why it keeps coming back: you end up managing the symptom on a schedule. What a scheduling app for clinics does instead is remove the step that generates it. A free 30-day trial, long enough to see whether the pattern breaks. Length: 343 characters (spaces included), 4 line breaks. VISIBLE before "See more": "Still dealing with no-shows and last-minute cancellations? The usual response is to add more process on top, which is why it" (124 chars) HIDDEN until tap: "keeps coming back: you end up managing the symptom on a schedule. What a scheduling app for clinics does instead is remove the step that generates it. A free…" (218 chars) Your pain phrase appears at character 19, inside the visible block. Your offer appears at character 276, which is 152 characters past the cut, so most people never see it. FOLD RULE (Problem-aware): the pain must be inside the visible block, because the whole bet at this stage is recognition, so if the pain phrase falls below the cut the ad is being judged on a generic opener. This variant passes. First line break at character 58. On mobile the collapse counts rendered lines, so a break this early shortens the visible block below the 125-character estimate above. --- Variant 3 · structure: the false diagnosis -> the real one -> where the gap is -> low-risk way to test it --- Most teams blame no-shows and last-minute cancellations on the people involved. It is almost always the handover instead: the point where information has to move and nothing is responsible for moving it. That is the specific gap a scheduling app for clinics closes for independent physiotherapists. A free 30-day trial, no rebuild required. Length: 340 characters (spaces included), 4 line breaks. VISIBLE before "See more": "Most teams blame no-shows and last-minute cancellations on the people involved. It is almost always the handover instead:" (121 chars) HIDDEN until tap: "the point where information has to move and nothing is responsible for moving it. That is the specific gap a scheduling app for clinics closes for independent…" (218 chars) Your pain phrase appears at character 17, inside the visible block. Your offer appears at character 299, which is 178 characters past the cut, so most people never see it. FOLD RULE (Problem-aware): the pain must be inside the visible block, because the whole bet at this stage is recognition, so if the pain phrase falls below the cut the ad is being judged on a generic opener. This variant passes. First line break at character 79. On mobile the collapse counts rendered lines, so a break this early shortens the visible block below the 125-character estimate above. HEADLINES (4) Around 27 characters displays consistently; wider placements show roughly 40. The headline sits next to the call-to-action button, so it answers "what happens if I press this", not "why should I care". 1. Fix no-shows for good 21 chars · fits every placement 2. The cause, not the symptom 26 chars · fits every placement 3. Built for independent physiotherapists 38 chars · fits wider placements, may cut on narrow ones 4. End no-shows and last-minute cancellations 42 chars · too long, expect a cut on most placements trimmed: End no-shows and last-minute (28 chars) LINK DESCRIPTIONS (2) This field is not rendered at all in Stories and Reels and is dropped on many feed formats. Treat it as a bonus qualifier. 1. A free 30-day trial, no card 28 chars · over 27 chars, may be cut where the field is narrow 2. Set up in an afternoon 22 chars · short enough to show wherever the field exists WHAT TO DO WITH THIS Longest variant is 480 characters and shortest is 340, a spread of 140 characters. Length is not the variable worth testing on its own: all three above make the same stage-appropriate argument, so run them against a variant built for a different awareness stage if you want a test that can change your mind. Hold the creative constant while you test copy, and give each ad set enough budget to gather roughly 50 optimisation events a week, or the comparison is noise. Field behaviour described here reflects how Meta currently renders these placements. Layouts, recommended lengths and which fields appear on which surface change without notice, so confirm in the Ads Manager preview for the placements taking your spend.

Frequently asked questions

Is 125 characters an actual Facebook limit?

No. It is the length Meta recommends for primary text, and it works as a planning proxy for where the mobile feed collapses copy behind "See more". The real cut is a line count in a fluid-width container, so it moves with device width, font size, language and your own line breaks. This tool cuts at 125 characters on a word boundary so you can see roughly what stays visible, and it separately reports where your first line break falls, because a break earlier than that shortens the visible block further.

Why does the awareness stage change the structure and not just the words?

Because each stage requires a different first move. Unaware copy has to describe a situation before it can name a problem. Problem-aware copy names the pain and introduces a mechanism. Solution-aware copy argues for one approach over another. Product-aware copy leads with the offer and handles the last objection. Those are four different argument shapes, so the tool builds different structures rather than swapping adjectives, and it labels the structure it used above each variant.

Should I write anything in the link description field?

Write one if you have a genuine qualifier to add, such as a price floor or an eligibility condition, and accept that many people will never see it. Stories and Reels do not render it and several feed formats drop it. The test is simple: delete the description and reread the ad. If it still makes sense, the description was doing its proper job as a bonus. If it does not, move that information into the primary text.

How does the tool decide where my offer sits in the copy?

It searches the generated primary text for the first few words of your offer and your pain, then reports the character position where each first appears and whether that position is inside or past the 125-character cut. That is a literal string position, not an interpretation, so if you write an offer in one form and the copy paraphrases it, the tool will tell you it is absent rather than guessing.

Do emoji count as one character?

Not reliably. The counter here counts code units, so many emoji register as two, and a visual counter would give a different answer again because an emoji occupies more width than a letter of the same count. If you use emoji at the start of primary text, assume they cost more of your visible block than the number suggests, and check the preview in Ads Manager before publishing.

Related free tools

Some links on this site are affiliate links, which means Hacking Demand may earn a commission if you buy through them at no extra cost to you. This does not influence which tools are listed. The tools on this page are free and have no affiliate relationship of any kind.