X (Twitter) Ads Character Limits & Specs

X has the simplest character math in paid media: the 280-character tweet limit applies to every standard ad format. No separate headline, no description field — the tweet body *is* the ad creative, and that 280 covers your hashtags, mentions, and link.

Use the Ad Specs Validator

Paste your copy once. See if it fits Google, Meta, LinkedIn, TikTok, and 8 more ad networks — instantly.

Open the Specs Validator →

The hard limit: 280 characters. This applies to Promoted Ads (formerly Promoted Tweets), Video Ads, Image Ads, Carousel Ads, and Amplify pre-roll companion copy. X Premium accounts can post up to 4,000 characters organically, but Ads Manager still caps promoted creative at 280 for standard placements.

How URLs count. Every URL — regardless of actual length — counts as exactly 23 characters once X auto-shortens it through the t.co wrapper. A 90-character UTM-tagged link and a 12-character bit.ly both eat 23 characters. This is the most common miscount when copywriters paste raw URLs into a character counter outside of X.

What counts toward 280:

  • Plain text characters (1 each)
  • Spaces and line breaks (1 each)
  • Hashtags including the # (full length)
  • @mentions including the @ (full length)
  • URLs (23 each, always)
  • Standard emoji (2 characters each — X counts them as surrogate pairs)
  • Most non-Latin scripts (Japanese, Chinese, Korean, Arabic, Hebrew, Cyrillic, etc.) get a 2x weighting bonus — a tweet in Japanese effectively allows ~140 glyphs but X's counter treats them as half-weight, so you get more visual real estate.

What happens when you exceed it. X Ads Manager rejects the creative at upload — there's no silent truncation like you'd see on Google RSAs or Meta primary text. The composer counter turns red at 280 and the "Promote" button disables. This is one of the few networks where the validator behavior is binary: it either ships or it doesn't.

Why 280 (and not 140). X doubled the limit from 140 to 280 in November 2017 after data showed only 9% of tweets actually hit the 140 ceiling. The 280 figure is tied to the average length where users stopped self-editing — long enough to express a complete thought, short enough to preserve the scroll-friendly density that makes the feed work. For ads, that density matters: a 280-character ad sits in roughly the same vertical space as 4-5 organic tweets, so over-stuffing visually flags as ad creative before the user reads a word.

Image and video specs:

  • Single image: 1200x1200 (1:1) or 1200x628 (1.91:1). Max 5MB. PNG/JPEG.
  • Carousel: 2-6 cards, 800x800 minimum, 1:1 only.
  • Video: 15 seconds recommended, 2:20 max for standard, 10 minutes for premium. MP4 or MOV. Max 1GB. Aspect ratios 1:1, 16:9, or 9:16.
  • App install card image: 800x800 (1:1) or 800x418 (1.91:1).

Practical fit rules for 280 characters:

  • Front-load the value prop in the first ~70 characters — that's what shows above the "Show more" fold on some clients and in notification previews.
  • Reserve 23 for your URL before you start writing.
  • One hashtag, max two. Each hashtag burns 5-15 characters and tweets with 3+ hashtags see measurable engagement drops in X's own advertiser docs.
  • Line breaks cost 1 character each but dramatically improve scannability — worth the spend.
  • Emoji at the start of a line acts like a bullet point and improves dwell time, but at 2 characters each, budget them.

Trimming a 60-char headline to fit alongside a CTA and link. You have 280 - 23 (URL) - ~40 (CTA + line breaks) = ~217 for body copy. That's roomy. The real constraint isn't 280 — it's the ~125 characters that render before truncation in the mobile timeline preview. Optimize for that, not the hard limit.

Example

Original headline draft (62 chars): "Reconcile all your ad platform spend in one dashboard, weekly."

Trimmed for a 30-char Google RWS headline: "All ad spend, one dashboard" (27 chars).

Full X ad version (198 chars including URL): "Reconcile 10 ad platforms in one dashboard. No more Friday afternoon spreadsheet hell.\n\nPublic beta opens May 12 — first 500 accounts free for 6 months.\n\nhttps://getadplus.com/beta"

Tip — X's `t.co` URL shortener counts every link as exactly 23 characters, but the *displayed* link in the tweet is truncated to about 20 visible characters with an ellipsis. If you want the destination domain visible to users, put it in your body copy as plain text in addition to the link — costs you the characters but lifts CTR by 8-15% in tested campaigns.

Questions

Do quote tweets and replies have different character limits for ads?
No — all promoted formats use the same 280-character cap. Quote tweets do not include the quoted content's character count against your limit, since the quoted post is rendered as an embedded card. Replies you promote (rare, but possible via the API) also follow 280, and the @username you're replying to does not count against the limit if it's at the start of the reply.
How are emoji and special characters counted toward the 280 limit?
Most standard emoji count as 2 characters because X uses UTF-16 encoding and emoji are surrogate pairs. Compound emoji like family or skin-tone variants can count as 4-7 characters each — a single 👨‍👩‍👧‍👦 burns 11 characters. Accented Latin characters (é, ñ, ü) count as 1, but combining diacritics and zero-width joiners count separately. When in doubt, paste into the X composer itself rather than trusting a third-party counter.

AdPlus is live — free Starter tier

One login for 12 ad networks. AI plans your campaign, validates every asset automatically, and publishes across every connected account. Start on the free Starter tier.

Get started