How to Write Facebook and Instagram Ad Copy With AI

Coding Liquids tutorial cover featuring Sagnik Bhattacharya for How to Write Facebook and Instagram Ad Copy With AI.
Coding Liquids tutorial cover featuring Sagnik Bhattacharya for How to Write Facebook and Instagram Ad Copy With AI.

Start with a short creative brief (offer, audience, the problem you solve, proof, the action, and claims you must never make), then ask AI for variations by angle rather than rewordings. Fit them to Meta's lengths: about 125 characters of primary text and a 40-character headline on Instagram feed, 27 characters for a Facebook feed headline. Check every claim against Meta's ad policies before launch.

Most AI ad copy fails for the same reason: the prompt is "write a Facebook ad for my cookery class", so the model writes the average cookery class ad, full of "unforgettable experiences" and "don't miss out". The brief is what makes the copy specific, and the angle instruction is what gives you variations worth testing instead of five versions of the same sentence.

Follow me on Instagram@sagnikteaches

The brief comes before the prompt

The example throughout is a community interest company that runs a café with a cookery school. It sells evening cook-along classes and team cooking sessions for businesses, and its profits fund free cooking courses for young people leaving care. The goal for this campaign is to fill November's Thursday classes. Its brief, filled in:

Connect on LinkedInSagnik Bhattacharya
CREATIVE BRIEF
Offer: Thursday cook-along classes, 6.30-9pm, $45 per person,
  12 places per class, you eat what you cook, all ingredients included
Audience: adults who like food, want a night out that isn't just
  a restaurant; couples, friends, people new to the area
Problem it solves: "same restaurants, same evening" / want to learn
  one proper dish without committing to a course
Proof: 4.8 average from 212 reviews (Google); 1,900 people taught
  since 2021; head chef ran a restaurant kitchen for 12 years
Mission (use lightly): profits fund free courses for young people
  leaving care
Action: book a Thursday class on the website
November dishes: fresh pasta; Thai green curry; ramen; pies
Never say: "best in the area", "Michelin", "guaranteed", any health
  claim, anything about the young people's personal circumstances
Tone: warm, a bit cheeky, no exclamation marks in every line

Two lines deserve attention. The "never say" list catches the claims AI loves to add. And "mission (use lightly)" matters for a social enterprise: the cause is a genuine reason to choose you, but ads that lead with the young people's stories can feel exploitative and may touch the policy problems covered below.

Subscribe on YouTube@codingliquids

What each part of a Meta ad does, and how long it can be

A standard Facebook or Instagram ad has a few text fields, and each has a different job. Meta's Ads Guide publishes recommended lengths per placement. These are recommendations rather than hard limits; longer text is truncated, not rejected.

FieldIts jobRecommended length (Meta Ads Guide)
Primary textThe message above the image: hook, offer, reason to actInstagram Feed: 125 characters. Facebook Feed: 50 to 150. Instagram Reels: 44
HeadlineThe bold line under the image; often the offer in briefInstagram Feed: 40 characters. Facebook Feed: 27
DescriptionSmall supporting line; not shown on every placementTreat as optional; never put essential detail here
Call-to-action buttonChosen from Meta's list: Book now, Learn more, Sign up…Pick the one that matches what happens next

The practical rule: write the primary text so the first 125 characters work on their own, because that's roughly what shows before "more" on the tightest placements, and keep a version under 44 characters for Reels. Meta recommends 4:5 images (1440 × 1800 pixels) for both feeds, so the copy has less room than you'd think once the image fills the screen.

Ask for angles, not rewrites

"Give me five versions" produces five paraphrases. "Give me five angles" produces five different reasons someone might book, which is what you actually want to test. Paste the brief with this prompt:

Using ONLY the facts in the brief below, write ad copy for 5 different
angles. Angles: (1) the evening out, (2) the skill you leave with,
(3) social proof, (4) the mission, (5) a gift for someone else.
For each angle give:
  - primary text: first 125 characters must work alone; max 250 total
  - a Reels version of the primary text, max 44 characters
  - 3 headlines, max 27 characters each
  - suggested call-to-action button
Count characters and show the count. Don't use: unforgettable,
experience, don't miss out, journey, elevate, exclamation marks.
[paste brief]

An illustrative extract of the output, for two of the angles:

ANGLE 1: THE EVENING OUT
Primary: "Swap Thursday's usual restaurant for a kitchen. Cook fresh pasta
with a chef, then sit down and eat it. $45, ingredients included." (130)
Reels: "Cook it, then eat it. Thursdays, $45" (36)
Headlines: "Thursday night, sorted" (22) / "Cook dinner, then eat it" (24)
  / "Fresh pasta, Thursday nights" (24)
CTA: Book now

ANGLE 3: SOCIAL PROOF
Primary: "Rated 4.8 by over 200 people who've cooked with us. This month:
fresh pasta, Thai green curry, ramen and pies. $45 a place." (123)
Reels: "Rated 4.8 by 200+ home cooks" (28)
Headlines: "Rated 4.8 by 212 cooks" (22) / "1,900 people taught" (19)
  / "Loved by home cooks" (19)
CTA: Book now

What to fix. Angle 1's primary text is 130 characters, slightly over the 125 target, so "then sit down and eat it" became "then eat it". Angle 3 says "home cooks", which the brief never said; the reviewers include beginners, so it became "people who've cooked with us". And check the model's character counts yourself with any counter: models count characters unreliably. "Fresh pasta, Thursday nights", marked "(24)", is actually 28 characters, which is over the 27 recommended for a Facebook feed headline, so it became "Fresh pasta, Thursdays" (22).

Hooks: the first line decides whether the rest is read

People scroll past ads faster than posts, so the opening line of the primary text carries most of the weight. Three illustrative before-and-afters from the cookery school's drafts:

  • Before: "Looking for something fun to do this week?" After: "Make fresh pasta on Thursday. Eat it at 8.30."
  • Before: "Discover the joy of cooking with our expert chefs!" After: "Twelve people, one chef, one proper Thai green curry."
  • Before: "Calling all foodies!" After: "The ramen class sold out in October. November's has 12 places."

The "after" lines all contain something concrete: a dish, a time, a number. The last uses scarcity honestly, because it's true; the brief would need updating if it weren't. Ask the AI for ten opening lines per angle and pick the one with the most concrete detail.

Policy traps AI walks into

AI writing habits collide with Meta's advertising standards in predictable ways. The most common is the personal attributes rule: ads mustn't assert or imply things about the viewer's personal characteristics, such as health, financial status, age, religion or other attributes, especially by combining "you" with the attribute. Meta's own examples include "Depression counseling" being acceptable but "Depression getting you down? Get help now." not. Illustrative rewrites for the cookery school:

AI draftProblemRewrite
"Lonely since you moved to a new city? Make friends over dinner."Implies the viewer is lonely and has moved (personal circumstances)"New to the area? Our Thursday classes are a good way to meet people."
"Struggling to eat healthily on a budget?"Implies financial status"Four affordable dinners you'll learn to cook this month."
"Newly single? Treat yourself."Implies relationship status"A Thursday night out that ends with dinner you made."
"Lose weight with healthy home cooking."Health claim the business can't supportDelete: not in the brief, not something the class offers

The first rewrite is a judgement call ("new to the area" is phrased as a general invitation rather than a statement about the viewer); if in doubt, remove the "you" and describe the class instead. Other traps: invented urgency ("only 2 places left" when there are 9), invented reviews or quotes (never let AI write a testimonial), and ads touching housing, employment, credit or financial products, or social issues, which fall under Meta's special categories and restrictions. The mission angle needs care here: "profits fund free courses for young people leaving care" is a fact about the business; a heart-tugging story about one young person is not something to put in an ad. For a fuller claims check, use fact-checking AI marketing copy before it goes live.

Match the words to the image and the placement

Copy and creative are read together, so write them together. Tell the AI what the image shows and ask it not to repeat it: if the photo shows a table of people rolling pasta, the primary text doesn't need to say "join our pasta class", and can spend its characters on the time, the price and the fact you eat what you make.

For Reels, much of the message moves into text on the video. Meta's guidance is to keep roughly the top 14%, the bottom 35% and 6% at each side free of text and logos, because interface elements cover those areas. An illustrative pairing:

  • On-screen text (three cards, centre of the frame): "Thursday 6.30pm" / "You cook the ramen" / "Then you eat it"
  • Primary text (Reels, under 44 characters): "Ramen class, Thursdays. $45, all included"
  • Button: Book now

The on-screen text tells the story; the primary text gives the facts; the button matches the booking page it leads to. If the landing page doesn't mention Thursday ramen near the top, the best copy in the world loses the booking, which is why building a landing page that converts is worth doing alongside the ads.

Meta's own text generation versus your own variations

Meta's Advantage+ creative includes text generation: when you set up an ad, Meta can suggest alternative primary texts and headlines based on your copy and landing page, and in 2026 it began rewriting the headline text on images you upload to match. Look in the Advantage+ creative section for any brand or tone settings your account offers, because they change what the generator suggests. It's convenient, and the suggestions have improved, but they're drafts you haven't reviewed unless you look at every one.

A realistic example of why that matters: for the cookery school, one generated variant read "Learn from Michelin-trained chefs every Thursday". Nobody on the team is Michelin-trained, and "Michelin" was on the brief's "never say" list, but Meta's generator never saw that list. The school now writes its own five primary texts and five headlines per ad from the angle prompt, switches text generation off, and occasionally switches it on for a single test ad with every suggestion reviewed. If you do the same, deciding which Advantage+ settings to leave on covers the other enhancements.

Testing copy on a small budget

Meta lets you add several primary texts and headlines (up to five of each) to one ad and mixes them automatically. That's efficient for performance but poor for learning, because you can't easily tell which message worked. For a small budget, a cleaner approach:

  1. Pick two or three angles, not five. At $15 to $20 a day, five angles each get too little spend to tell apart.
  2. One ad per angle, same image, same audience, same budget split. Only the words differ.
  3. Judge on bookings or cost per booking, not clicks. A cheeky hook can win clicks and lose bookings.
  4. Run for one to two weeks, then keep the winner and test a new challenger against it.

In round numbers for the cookery school: at $20 a day for two weeks ($280), split across two angles, if a booking costs about $14 in ad spend, each angle gets roughly ten bookings. That's enough to see a big difference (say 14 against 6), not a small one. Testing ad variations with AI on a small budget goes further on reading results, and none of it works unless bookings are being tracked properly; conversion tracking before you let AI spend your budget is the step to check first.

Different copy for people who nearly booked

People who visited the booking page but didn't book are a different audience and need different words. They already know what the class is; they need a reason to act now. Build a website custom audience of recent visitors to the classes page, excluding people who booked, and give the AI a separate brief line: "Audience: visited the class page in the last 14 days, didn't book." Illustrative copy it produced after editing:

"Still thinking about the ramen class? Thursday 20 November has 5 places left, and it's $45 with everything included. Bring someone who'd rather cook than queue for a table."

Check the "5 places left" line on the day the ad runs, and update or pause the ad as places sell. Retargeting audiences are small, so they see the same ad often; Ads Manager's frequency figure (average times each person has seen it) tells you when to swap. For the school, frequency passed 4 within ten days, and a fresh angle, the pie class with a photo of the finished pies, brought clicks back up.

Replies to comments on your ads

Ads attract comments, and an unanswered question under an ad is an advert for your silence. Prepare replies for the questions you can predict before launch, using the brief so they're consistent: "Is it suitable for vegetarians?", "Can I buy a place as a gift?", "Is there parking?" An illustrative reply, drafted by AI from the brief and edited: "Yes, every class has a vegetarian version of the dish. Just tick the box when you book." Keep replies short and factual, answer within a day, and move anything personal (allergies, access needs) to a direct message.

The same brief for a business buyer

The school's second product, team cooking sessions for businesses, uses the same method with a different audience line. The buyer is an office manager or team leader organising a Christmas social, and the angle list changes: (1) the easy option for whoever is organising, (2) a team activity people actually enjoy, (3) the mission as a reason to choose them over a restaurant, (4) practical detail. An illustrative result after editing:

Primary text: "Organising the team Christmas do? Book a cooking session for up to 12: you cook three courses together, then eat them. $600, everything included, profits fund free courses for young people leaving care."

Headline (27 max): "Team Christmas, cooked" (22 characters)

Button: Learn more (it leads to an enquiry form, not a checkout)

"Organising the team Christmas do?" addresses a role, not a personal attribute, so it sits comfortably within the rules. And the button is "Learn more" rather than "Book now", because the next step is an enquiry, not a booking. Matching the button to what actually happens is a small detail that stops people feeling misled.

Before any ad goes live

  • Every fact matches the brief: price, times, what's included, review figures.
  • Nothing on the "never say" list, including in any Meta-generated variant.
  • No "you" plus a personal characteristic; no health or money claims.
  • Primary text works in its first 125 characters; Reels version under 44; headlines within length.
  • Character counts checked with a counter, not the model's own count.
  • The image and the words don't repeat each other.
  • The button matches the page it leads to, and the page matches the ad.
  • Voice sounds like the business. If more than one person writes ads, an approval workflow for AI-drafted content keeps it consistent.

Keep the brief, the angle prompt and the checklist together in one document or Project. The next campaign starts from there, and the second one takes half the time of the first.

Further reads

Sources: Meta Ads Guide (Facebook Feed and Instagram Feed image specs, Instagram Reels specs and safe zones); Meta transparency centre ad standards on personal attributes; Meta for Business page on Advantage+ creative; Jon Loomer Digital on Advantage+ text generation (July 2026).

Want your ad copy briefed and tested properly?

On a 1:1 call we'll write your creative brief together, set up angle-based prompts in your AI tool, and plan a small test that tells you which message works.

Book a 1:1 call with me