How Do I Write Facebook and Instagram Ad Copy That Converts?
Write for one person, not a crowd. This guide covers the three text fields Meta gives you, four hook formulas that work for Indian audiences, twelve rewritten examples across six kinds of businesses, and the exact three-variant testing method I use to find a winner. Get the hook and the offer right, match the call to action to the page, and let cost per lead, not likes, decide what stays live.
Most Facebook and Instagram ads do not fail because of the budget or the targeting. They fail because of the words. I write and test Meta ad copy for clinics, coaches, salons, and local shops across Pune, and the copy that converts follows the same shape almost every time: a sharp hook, one clear promise, one honest proof point, and one call to action that matches the landing page. This guide is the practical version of that framework. It covers the three text fields Meta actually gives you and their real limits, hook formulas that work for Indian audiences, twelve rewritten examples across six kinds of businesses, how much of your primary text actually shows on a phone before someone has to tap "See more," matching your call to action to your form, when to write in English versus Hinglish, and a three-variant testing method that keeps my real estate clients around Rs 20 to 25 per lead once the winner emerges.
The three text fields and their real limits
A Meta ad is built from three separate text fields, and most people writing their first campaign treat them as one block of copy. They are not. Primary text sits above the image or video and is what most people read first; write roughly 90 to 125 characters if you want the whole thought to show before "See more" cuts it off, though Meta will accept far more. Headline sits just below the media in feed placements and is the shortest field on the ad, so keep it to roughly 25 to 40 characters, a name-the-outcome phrase rather than a sentence. Description is the field almost nobody notices, a small line under the headline that only shows in a handful of placements like the right column or some feed layouts; treat it as a bonus line, not somewhere you put anything essential.
The mistake I see constantly is writing one long, clever line and splitting it across all three fields by feel. Write each field for the job it actually does: the primary text earns the stop, the headline names the outcome in a glance, and the description is a small nudge for the placements where it happens to appear. If a reader only ever sees the primary text and the headline, and on many placements that is exactly what happens, your ad still has to work with just those two.
Hook formulas that work in India
The hook is the first line of your primary text, and it decides whether anyone reads the second line. Across the accounts I run in Pune, four hook formulas keep outperforming everything else, because each one does a specific job: it stops a specific kind of scroll for a specific kind of reader.
The price anchor hook
Open with the number. "Full mouth check-up and X-ray for Rs 199 this week" stops a scroll faster than any adjective ever will, because the reader can instantly judge whether the offer is for them. This works especially well in India, where price sensitivity is real and a specific rupee figure reads as honesty rather than a sales trick. Vague pricing language like "affordable" or "budget-friendly" does the opposite. It makes the reader wonder what you are hiding.
The local proof hook
Open with a place name or a number the reader can verify. "500+ Kothrud families trust us for their monthly grocery run" or "Booked out for three weeks, Baner clinic" both work because they are specific and local, not because they are impressive in the abstract. A stranger scrolling Instagram does not trust your brand yet, but they trust a number attached to their own neighbourhood far more than a generic claim about being "the best in Pune."
The question hook
Open with the exact question your customer is already asking themselves. "Still paying for a gym you have not visited since January?" or "Knee pain getting worse on the stairs?" A good question hook uses the customer's own words, the phrasing you hear on a call or read in a WhatsApp enquiry, not marketing language. It works because it feels like the ad is reading the reader's mind rather than interrupting their scroll with a pitch.
The before and after hook
Open with the contrast, not the process. "From a dull, patchy lawn to this in six weeks" or "Six months ago she could not climb a flight of stairs without stopping." This hook works best when you can pair it with a visual that shows the same contrast, because the words set up what the image or video is about to prove. It is one of the strongest formulas for services with a visible transformation: skin, fitness, home renovation, weight loss, interiors.
12 ad copy examples, rewritten line by line
Formulas are easier to use once you have seen them applied to a real business. Here are twelve rewrites across six categories I work in often, each showing the weak version most business owners write first and the stronger version that replaces it.
Clinic
Weak: "We are a leading dental clinic in Pune offering all services." Strong: "Free dental check-up and X-ray this week, Kothrud clinic. Book your slot before Saturday." The weak version lists nothing specific and asks for nothing. The strong version anchors a price (free), a place, and a deadline, all in one breath.
Weak: "Quality skincare treatments by expert dermatologists." Strong: "Still hiding acne scars under makeup every morning? Our laser sessions start at Rs 1,500, Baner clinic." The strong version opens with the question hook, then answers it with a price anchor, giving the reader two reasons to keep reading instead of one vague claim.
Salon
Weak: "Best salon in Pune for hair and beauty services." Strong: "Grey roots showing again? Full root touch-up for Rs 499 this week, Viman Nagar." The strong version speaks to one specific, recognisable moment instead of a generic superlative nobody can verify.
Weak: "We offer premium bridal makeup packages." Strong: "From this to this in ninety minutes, real bride, real salon, Kharadi. Book your trial before the season fills up." Pairing the before and after hook with real urgency does more work than "premium" ever could.
Real estate
Weak: "2 and 3 BHK flats available in a prime location." Strong: "2BHK in Wakad from Rs 62 lakh, possession this December. Site visit slots open this weekend." Specific pricing and a specific possession date filter out browsers and pull in buyers who are actually ready to compare.
Weak: "Luxury living redefined in the heart of the city." Strong: "Still paying rent in Baner? This EMI could be your own 2BHK instead, from Rs 45,000 a month." The question hook reframes the decision the reader is already quietly making.
Coaching
Weak: "Join our NEET coaching classes for the best results." Strong: "87% of our last batch cleared NEET on the first attempt. Free demo class this Sunday, Kothrud centre." A real, checkable number beats "the best" in every version of this ad I have tested.
Weak: "Learn spoken English with experienced trainers." Strong: "Still switching to Hindi mid-sentence in interviews? 6-week spoken English course, Rs 2,999, batches starting Monday." The question hook names the exact embarrassment the course solves, which does more than any list of features.
D2C
Weak: "High-quality cotton kurtas now available online." Strong: "From Rs 899, handloom cotton kurtas that do not fade after three washes. Free shipping across India this week." The strong version answers the one question every online shopper silently asks: will this actually hold up, and will I regret the price.
Weak: "Shop our new skincare range today." Strong: "Her skin, six weeks apart, same face, no filter. The serum is Rs 649." Pairing a visible before and after with an honest price does more selling than a full paragraph of ingredient claims.
Restaurant
Weak: "Delicious food, great ambience, visit us today." Strong: "Unlimited Sunday thali, Rs 349 per person, Kothrud. Table for four? Book before noon, we fill up fast." A specific dish, a specific price, and a real deadline beat "delicious" and "great ambience" on every metric that matters.
Weak: "Now delivering across Pune, order now." Strong: "Craving biryani at 11pm? We deliver till midnight across Kothrud and Karve Nagar. First order gets 20% off." The question hook names the exact moment the reader is in right now, which is when they are most likely to order.
The primary-text length reality on mobile
Meta lets your primary text run long, but a phone screen does not care what Meta allows. On most feed placements, only the first two to three lines show before the text cuts off and a "See more" link appears, and on Reels and Stories the safe zone is even smaller because captions sit closer to the edges of the screen. In practical terms, that is roughly 90 to 125 characters of primary text visible before the fold on a typical Android phone, the majority device in India. Anything after that point is a bet that the reader cares enough to tap and read more, and most scrolling thumbs do not make that bet.
This is why the hook formulas above matter more than the paragraph that follows them. Write the hook and the specific offer inside that first visible chunk, because for a large share of your audience, that chunk is the entire ad they will ever read. I still write a second and third line for context and proof, since a warmer reader who does tap "See more" deserves a complete thought, but I never bury the price, the place, or the deadline past the point where the fold cuts the text. If the ad only works after the tap, it is not working for most of the people who saw it.
Matching your CTA button to the copy and the form
Every Meta ad ends with a button, and the button, the copy, and whatever opens after the tap all have to agree with each other. If your primary text says "book your free consultation" and the button says "Learn more," you have quietly reintroduced the hesitation your copy just worked to remove. Pick the CTA that matches the actual next step: "Book now" for an appointment, "Get quote" for a price-driven enquiry, "WhatsApp us" when the conversation should start on WhatsApp, "Apply now" for admissions or courses. The button is not decoration. It is the last line of the ad, and it should read like a natural continuation of the hook.
The same discipline has to carry through to whatever the button opens, whether that is an instant form or a landing page. If the ad promises "free consultation, Baner clinic" and the form asks eight unrelated questions before it ever mentions Baner, the mismatch costs you the lead right there. Keep the form or page headline identical to the ad's promise, and cut every field that is not essential to the first call. My Facebook lead ads guide covers the exact form settings I use to keep that match tight, and if your ads are already getting clicks but not enquiries, why your Meta ads are not converting walks through the rest of the chain between the click and the sale.
Hinglish, Marathi, or English: choosing the right language
Language is part of your copy, not a translation task you do after the copy is finished. For mass-market local services, a tuition centre, a tiffin service, a salon, a home repair business, Hinglish or a mix of English with Marathi phrasing routinely outperforms clean English, because it reads like a message from a neighbour rather than a brochure. "Ghar baithe fresh sabzi, order today" earns more trust from the exact audience it targets than "Fresh vegetables delivered to your doorstep" ever could, even though the second version is grammatically cleaner.
For premium and considered purchases, a dermatology clinic charging four figures per session, a real estate project above a crore, a B2B service sold to other business owners, English-only copy tends to perform better, because the audience associates polished English with the professionalism they expect at that price point. The rule I actually use is simple: write the hook in the language your customer thinks in, not the language you are most comfortable writing in. When I am not sure which wins, I run an English variant and a Hinglish variant of the same hook side by side and let the testing method below decide, rather than guessing.
A copy-testing method: three variants and how to read them
No matter how good a hook formula looks on paper, you are a poor judge of your own ad copy, because you already know what you meant to say. The fix is a small, repeatable testing method, not a bigger opinion. This is the exact six-step process I run on every new Meta campaign, and it is what keeps local lead campaigns landing around Rs 20 to 25 per lead once a winner has been found.
Step 1: Write three variants that each change one big thing
Write three versions of the ad where each one changes a different hook formula, a different angle, or a different offer, never a swapped comma or a minor word choice. One variant might use the price anchor hook, the second the question hook, the third the before and after hook, all promoting the same underlying offer. Small tweaks do not produce a clear signal. Big, deliberate differences do.
Step 2: Keep everything else identical
The audience, the budget, the placements, the image or video style, and the landing page or form should stay exactly the same across all three variants. If more than one thing changes at a time, you will not know whether the copy, the audience, or the creative produced the result. Isolate the one variable you are actually testing.
Step 3: Launch with equal budget and let the learning phase run
Split the budget evenly across the three variants and resist the urge to touch anything for the first three to seven days. Meta's algorithm needs that window and roughly enough conversions per variant to learn who responds, and editing daily resets the clock every time you do it. Patience at this stage is what makes the rest of the method work.
Step 4: Read cost per lead, not likes or reach
Once the variants have run for a week, open the results and look at cost per lead first, then cost per qualified lead if you are tracking it. Likes, reach, and even click-through rate can all look healthy on an ad that never actually produces a customer. Cost per lead is the only number in the report that tells you which hook made someone act, not just notice.
Step 5: Pause the losers and let the winner take the budget
Turn off the two variants with the higher cost per lead and shift their budget to the winner. Do not keep all three running indefinitely out of fairness to the copy you liked writing the most. The numbers picked a winner. Let the winner run.
Step 6: Spin two new variants off the winning hook and repeat
Take the winning hook formula and write two fresh variations of it, a different specific proof point, a different price or offer detail, then run the same three-way test again. Creative fatigue sets in within two to three weeks in a tight local audience, so this loop, not the first lucky ad, is what keeps cost per lead low over months rather than days.
Mistakes that quietly kill Meta ad copy
These are the same handful of copy mistakes I find on almost every new account I audit, and each one is a five-minute fix once you know to look for it.
- Burying the offer past the "See more" fold. If the price, the place, or the deadline sits in line four, most readers never see it.
- Listing every service instead of picking one promise. An ad that mentions five treatments asks the reader to do the work of deciding which one applies to them.
- Using a CTA that does not match the copy. "Learn more" under a line that says "book now" reintroduces hesitation you already removed.
- Writing the hook in the wrong language for the audience. Clean English for a mass-market local offer often reads as distant rather than trustworthy.
- Testing tiny variations instead of real differences. Two ads that differ by one adjective will not tell you anything useful after a week of spend.
- Never refreshing the winner. The same ad shown to the same small radius for a month starts costing more as the audience tunes it out.
Frequently asked questions
What are the character limits for Meta ad primary text, headline and description?
Meta technically accepts long text in all three fields, but the practical limits are what matters. Keep primary text to roughly 90 to 125 characters if you want it to display in full before "See more" cuts it off. Keep the headline to roughly 25 to 40 characters, since it is the shortest field and only a short phrase fits before it truncates. Treat the description field, which shows in only a handful of placements, as a bonus line rather than somewhere essential information lives.
Should I write Meta ads in English, Hindi, or Hinglish?
Write the hook in the language your customer actually thinks in. For mass-market local services like tuition, tiffin, salons, and home repairs, Hinglish or a mix with Marathi usually outperforms clean English because it reads like a message from a neighbour. For premium or considered purchases, a clinic, real estate above a crore, or B2B services, English-only copy tends to perform better because it matches what that audience expects at that price point. When unsure, test both variants and let cost per lead decide.
How much of my primary text actually shows before "See more" on mobile?
On most feed placements, expect roughly two to three lines, around 90 to 125 characters, before the text truncates and a "See more" link appears, with an even smaller safe zone on Reels and Stories. Since a large share of your audience never taps to expand it, the hook, the specific offer, and the price or deadline all need to sit inside that visible chunk rather than further down the copy.
How many ad variations should I test, and how long before I pick a winner?
Test three variants that each change one big thing, a different hook formula, angle, or offer, never a minor word swap. Split the budget evenly, keep the audience and landing page identical across all three, and give the campaign three to seven days before judging anything. Read cost per lead, not likes or reach, pause the two variants that cost more per lead, and let the winner take the full budget.
What is a good cost per lead once the copy is working?
It depends on the industry, but for local service businesses in Pune running this hook, promise, proof, and CTA structure with a properly tested three-variant process, I regularly see cost per lead land around Rs 20 to 25 once a winner has emerged. Clinics and higher-consideration categories usually run higher. The number that matters most is not the industry average, it is whether your own cost per lead keeps falling each time you refresh the winning hook.
Related guides
- Why your Meta ads are not converting: if the copy is right but sales still are not happening, this covers the rest of the chain.
- Facebook lead ads guide: the exact instant-form setup that keeps the promise in your copy consistent through to submission.
- Meta ads targeting guide: pair the right hook with the right audience instead of guessing at both.
- What is a good cost per lead for Meta ads in India: benchmarks by industry so you know if your numbers are on track.
- How to reduce cost per lead on Meta ads: the levers beyond copy once your testing loop is running.
- How to build a high-converting landing page: give your ad copy a page that actually matches the promise.
- What is retargeting: bring back the warm clicks your first ad did not convert.
- SEO vs Google Ads: which should you do first: decide whether Meta ads should even be your first channel.
Get new guides in your Google Search & Discover feed.