Shorts ad copy: 40-character headline, 90-character description
Google recommends 40-character headlines and 90-character descriptions for the Shorts ad CTA card. Draft copy in bulk with Sume and check lengths before upload.

For the mobile call-to-action overlay card on a YouTube Shorts ad, Google Ads Help says to provide headlines of 40 characters and descriptions of 90 characters, and notes that channel descriptions are limited to 90 characters (read 2026-10-03). Text over one line on mobile or two lines on desktop and TV is truncated.
Sume can draft copy variants in bulk, but its output is a draft: a length check in your own code is what keeps overlong lines out of the upload.
Which limits apply?
The numbers are short enough to check in one pass. They are the page's recommendations for the card, not limits that Google Ads enforces on every field.
- Shorts ads use your channel name and description.
- Hooks belong in the first seconds of the video, not only in copy.
- The page does not say how Google counts characters in every script.
| Field | Google says | Check |
|---|---|---|
| Headline | Provide 40 characters | len(text) <= 40 |
| Description | Provide 90 characters | len(text) <= 90 |
| Channel description | Limited to 90 characters | len(text) <= 90 |
| Truncation | Over 1 line on mobile or 2 on desktop and TV is cut | Preview the card |
How do I draft copy in bulk?
A bulk queue can take one item per product with the instruction "headline up to 40 characters, description up to 90 characters". Models do not count characters reliably, so treat that line as a request, not a guarantee.
The Format run returns an output; bind an output_schema if you want it as JSON with named fields rather than prose.
How do I check lengths?
Run the check on whatever comes back, before it goes near an ad account. The script below reads a list of pairs and prints the ones that are over; it has no network calls, so it is safe to run in CI.
Python's len counts code points, which is the simple standard. If you ship in a script with combining marks, confirm the limit against Google Ads' own editor preview.
ROWS = [
("Free shipping ends Sunday", "Gift-ready sets, wrapped and sent in two days."),
("The holiday gift set people actually keep using all year long",
"A short description that stays under the limit."),
]
LIMITS = {"headline": 40, "description": 90}
bad = 0
for head, desc in ROWS:
for name, text in (("headline", head), ("description", desc)):
if len(text) > LIMITS[name]:
bad += 1
print(f"{name} {len(text)}>{LIMITS[name]}: {text}")
print("ok" if bad == 0 else f"{bad} over limit")What Sume does not do
Sume has no Google Ads integration: it cannot push copy into a campaign or read what Google shows. Trim and approve text in your own tooling, then paste or import it in Google Ads.
Sources
Related posts
More in Formats
- Ready-made Formats for product video: the Sume Format catalog
Sume ships ready-made Formats for product and UGC-style video and images, each callable from your backend with one HTTP request at the reserved sume handle.
- What is a Sume Format? Turn an agent thread into one API call
A Sume Format is a saved video recipe your backend calls by handle and slug. One POST runs it in a fresh sandbox and returns media plus optional typed JSON.
- How to embed AI video generation in your product with Sume Formats
To embed AI video generation, your server holds one Sume API key and runs a Format per customer, with a derived Idempotency-Key, spend cap, and webhook.
- Sume Format bulk runs: queue up to 100 renders in one request
A Sume bulk request queues 1 to 100 ordinary Format runs on the server and keeps 1 to 16 in flight. Poll one queue URL; read each child as a normal run.
Written by Sume