Ad copy — headlines, primary text, CTA

Per platform char limits and CTA enum. Meta 125/40/30; Google Search RSA 30/90; TikTok 100. Test 3-5 variations per ad set.

Written By Salvatore Sinigaglia

Last updated About 1 hour ago

Per platform char limits and CTA enum. Meta 125/40/30; Google Search RSA 30/90; TikTok 100. Test 3-5 variations per ad set.

Ad copy — headlines, primary text, CTA

Ad copy is the text that accompanies your creative. Per-platform character limits: Meta primary text 125 / headline 40 / description 30; Google Search RSA up to 15 headlines × 30 char + 4 descriptions × 90 char; TikTok 100. CTA from a platform-specific dropdown. Test 3-5 variations per ad set.

Who is this for

Mediabuyers + copywriters preparing ad text. Anyone whose ad got rejected for "too much text" or "wrong CTA".

The 4 text fields per ad

FieldPurposeUsed by
Primary textMain message above/below visualMeta, TikTok, Snapchat
HeadlineBold short statementMeta, Google Search, LinkedIn
DescriptionSupporting line under headlineMeta (optional), Google Search
CTA (button)Action promptAll platforms

Plus the destination URL (where the click goes — see cc-117 UTM Builder).

Per-platform character limits

Meta (Facebook + Instagram)

FieldMax charsMobile truncation
Primary text125~80 on small screens
Headline40~25
Description (link)30full
Link URL display30shortened to domain

Google Search (Responsive Search Ads)

FieldCountMax chars each
Headlinesup to 1530 each
Descriptionsup to 490 each
Path 1 / Path 2 (URL display)1 each15 each

Google auto-combines headlines/descriptions per query — provide many variations for max performance.

TikTok

FieldMax chars
Ad text100
CTAdropdown choice

Taboola

FieldMax chars
Headline60
Description200

Snapchat

FieldMax chars
Headline34
Brand name25
Description150

CTA options

Verified apps/backend/src/types/campaigns/canonical.enums.ts CallToAction enum covers the standard set:

CTABest for
LEARN_MOREAwareness, top-funnel content
SHOP_NOWE-commerce direct conversion
SIGN_UPAccount creation, newsletter
DOWNLOADApp install, content download
BOOK_NOWReservations, appointments
GET_OFFERPromo / discount campaign
SUBSCRIBESubscription product
CONTACT_USB2B inquiry, service-based
APPLY_NOWLoans, job applications
WATCH_MOREVideo content drive
...(full enum per canonical.enums.ts; also includes GET_QUOTE, INSTALL_APP, SEND_MESSAGE, CHAT_NOW, NO_BUTTON)

CTA must match objective (Sales objective → SHOP_NOW more sensible than LEARN_MORE).

How copy renders per placement

Meta Feed

[Profile pic] [Brand name][Primary text — main message — wraps after ~80 chars]Main image or video creative appears between primary text and headline.[Headline]              [CTA button][Description (optional)][domain.com display]

Meta Stories / Reels

Full-screen vertical creative appears behind the headline and CTA area.[Small overlay: brand + CTA][Swipe-up area at bottom]

Headline + description not visible in Stories — focus on visual + burned-in text + CTA.

Ad · [Headline 1] | [Headline 2] | [Headline 3]domain.com/path1/path2[Description 1]. [Description 2].[Optional sitelinks below]

Google picks 3 headlines + 2 descriptions per query from your set of 15 + 4.

TikTok In-Feed

[Full-screen vertical video][Bottom overlay]:  @brand  [Ad text — 100 chars truncated on small screens]  [CTA button]

Copy strategy

Test 3-5 variations per ad set

Same audience + same creative + different copy = clean A/B test. Common variations:

  • Hook angle: pain point vs aspiration vs curiosity vs authority
  • Length: short (40-60 chars) vs long (100-125 chars)
  • Question vs statement: "Tired of slow shipping?" vs "We ship in 24h"
  • Emoji vs no-emoji: Meta allows but doesn't heavily penalize/reward
  • CTA variation: Learn More vs Shop Now vs Get Offer

After 100+ clicks per variation, scale winners.

Avoid common rejection triggers

  • Excessive emojis (Meta sometimes flags)
  • ALL CAPS ("SUMMER SALE!!!" → rejected)
  • Excessive punctuation ("BUY NOW!!!!!!!" → flagged)
  • Misleading claims ("Lose 20 lbs in 1 week" → policy violation)
  • Comparative health claims without medical evidence
  • Personal attributes ("You look tired in those clothes" → policy violation, makes user uncomfortable)
  • Price claims without proof ("Now 90% off" — if regular price not legitimately 10x lower)
  • Trademarks misused (your competitor's brand name in your ad copy)

Match copy to funnel stage

StageCopy approach
AwarenessStorytelling, brand voice, education
ConsiderationValue prop, benefits, social proof
ConversionDirect offer, urgency, clear CTA
RetargetingPersonalized recap, "Still interested?", discount

Mobile-first writing

Most ad views are on mobile. Front-load value in the first 80 characters (after that, text often truncated).

Multi-language copy

For multi-country campaigns:

  • Pre-translate professionally (machine translation often inadequate for marketing copy)
  • Use per-country variants in Bulk Launch (one row per country, localized copy)
  • Or use Meta's Advantage+ multi-language (auto-translates within Meta)

In Wevion's launchers

Express creative step

  • Primary text field (with char counter)
  • Headline field (with char counter)
  • Description field (with char counter, optional)
  • CTA dropdown (filtered by platform)
  • Destination URL field
  • Inline preview on right (shows how copy renders per placement)

Pro mode

  • Per-ad copy with all fields
  • Multi-line text editor for primary text
  • Multi-headline / multi-description for Google RSA (add up to 15 headlines per ad)
  • Live preview per placement

Bulk Launch

  • Copy columns per row
  • For RSA: array fields (headlines: ["headline 1", "headline 2", ...])

In the data model

Verified CanonicalAd (apps/backend/src/types/campaigns/canonical.types.ts):

ad.copy.primaryTextad.copy.headlinead.copy.descriptionad.cta            // CallToAction enumad.destinationUrl

Common issues

  • Truncated on mobile: primary text too long. Move key message to first 80 chars OR shorten.
  • CTA not matching objective: validation warning. Use a CTA aligned with the campaign goal.
  • Headline rejected for trademark: avoid competitor brand names.
  • Copy rejected for policy: review Meta/Google's ad policies; rewrite without prohibited claims.
  • Special characters not rendering: some platforms strip emoji or special unicode. Test in preview.
  • RSA performance poor (Google): provide more headline variations (10+); Google needs variation to optimize.

Best practices for testing

Match creative + copy variations

Don't test creative changes AND copy changes simultaneously — can't tell what drove the result. Test one variable at a time.

Use Wavo for ideation

Ask Wavo: "Suggest 5 headline variations for this offer" or "What CTA should I use for this campaign?". Wavo references the campaign context.

Save winning copy as template

After identifying winning copy in a test: save as Campaign Template (cc-118) for reuse.

FAQ

What are the character limits for Meta ad copy?

On Meta, primary text allows 125 characters (roughly 80 visible on small screens), headline 40, and link description 30. Because most views are mobile, front-load your key message in the first 80 characters before truncation. Wevion's creative step shows a live character counter and a per-placement preview for each field.

How does Google Search copy differ in Wevion?

For Google Responsive Search Ads, Wevion lets you add up to 15 headlines (30 characters each) and up to 4 descriptions (90 characters each), plus two 15-character URL paths. Google auto-combines them per query, so provide many variations — 10 or more headlines — for the best performance. Pro mode and Bulk Launch array fields support this.

How do I set the CTA button on an ad?

The CTA comes from a platform-specific dropdown backed by Wevion's CallToAction enum, covering options like LEARN_MORE, SHOP_NOW, SIGN_UP, DOWNLOAD, BOOK_NOW, and GET_OFFER. Match the CTA to your objective — a Sales objective pairs better with SHOP_NOW than LEARN_MORE — or Wevion shows a validation warning when they conflict.

How many copy variations should I test?

Test 3-5 copy variations per ad set, keeping the same audience and creative for a clean A/B test. Vary the hook angle, length, question versus statement, or CTA, then scale winners after 100+ clicks per variation. You can ask Wavo to suggest headline variations and save winning copy as a Campaign Template.