X (Twitter) 280-Character Tweet Limit: Specs & Counting Rules

X caps every Promoted Tweet at 280 characters — the same hard limit as organic tweets, applied uniformly across Promoted Ads, Video Ads, Vertical Video Ads, and Takeovers. The character math, however, is not what most copywriters assume. This page documents the exact counting rules and what gets rejected.

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 for all paid tweet formats. There is no exception for ad accounts, no Premium override for promoted content, and no overflow into a second tweet. The X Ads API rejects the tweet on submission with a 186 error code ("Tweet needs to be a bit shorter") — the campaign will not save until you trim.

Why 280? X doubled the original 140 cap in November 2017 after research showed only 9% of English tweets hit the old limit, while Japanese, Korean, and Chinese tweets — where one character carries more meaning — rarely came close. The 280 figure was chosen to give Latin-script languages roughly the same expressive room CJK languages already had. CJK characters still count as 2 against the limit (so the practical Japanese cap is 140), which is the closest thing X has to a built-in fairness adjustment.

How X counts characters (the rules that trip people up):

  • URLs always cost 23 characters. Whether you paste https://x.com (13 chars visible) or a 180-character UTM-loaded link, X's t.co wrapper charges a flat 23. Do not pre-shorten with Bitly — you'll pay the 23-char tax twice (once for the Bitly URL, once when t.co re-wraps it).
  • Emoji cost varies. Most single emoji count as 2 characters. Compound emoji built with zero-width joiners (👨‍👩‍👧‍👦, skin-tone modifiers, flag sequences) can cost 4-8 characters each. The 👨‍👩‍👧‍👦 family emoji is 11 UTF-16 code units but X charges 8.
  • @mentions and #hashtags count fully. @getadplus is 10 characters. There is no discount.
  • Line breaks count as 1 character each. Three-line tweets with double-spacing burn 4-6 characters on whitespace alone.
  • RTL languages (Arabic, Hebrew) count by code point, same as Latin script — no 2x penalty.
  • Quote tweets don't include the quoted tweet's text in your 280, but the quoted-tweet URL costs 23.

Truncation behavior: X does not truncate paid tweets — it rejects them outright at the API level. This differs from Google Ads (silent truncation with …) and LinkedIn (visible "see more"). If your tweet is 281 characters, it will not run. Period.

Copy rules for fitting 280:

  • Front-load the value prop in the first 70 characters. That's what shows in the timeline preview on narrow viewports before any "show more" wrap.
  • Put the URL at the end, not the middle. URL-in-middle tweets read as press-release boilerplate and historically underperform on CTR.
  • One CTA verb. "Get," "Try," "See," "Read." Multi-CTA tweets ("Learn more or sign up today") waste 15-20 characters on hedging.
  • Aim for 71-100 characters of body copy + URL. Twitter's own 2014 research (still cited) showed tweets in this range earned the highest engagement; nothing in the 280 era has overturned it.
  • Avoid ALL CAPS WORDS — they trigger X's spam-signal weighting on Promoted Tweets and don't save characters.

Card vs. text: When you attach a Website Card or Image, the card preview replaces the URL visually but the URL still counts as 23 in the body. You cannot "hide" the URL by attaching a card — you can only choose whether it shows as raw text or as a card unfurl.

Worked trim — 60 chars down to fit alongside a URL:

Original headline (62 chars): Reconcile 10 ad networks in one dashboard — try AdPlus today

With URL appended: 62 + 1 space + 23 = 86. Under 280, fine. But to hit the 100-char engagement sweet spot with room for one hashtag:

Trimmed (51 chars): 10 ad networks, one dashboard. Stop reconciling.

Final tweet (78 chars total): 10 ad networks, one dashboard. Stop reconciling. https://t.co/x #adops

Example

A B2B tweet reads: "We built AdPlus because reconciling 5 ad platforms every Friday wasted 6 hours. Now: 10 networks, one login. [URL]" — that's 108 chars of copy + 23 for the URL = 131 total. Well inside 280, inside the engagement sweet spot, with 149 characters of headroom for a hashtag or emoji if needed.

Tip — Paste your draft into the validator with the URL included as raw text — don't strip it to "check the copy alone." The `23`-character URL tax is the single most common reason tweets that look fine in a Google Doc get rejected at upload.

Questions

Does X Premium's 25,000-character limit apply to ads?
No. Premium (formerly Blue) raises the organic posting limit to `25,000` characters, but Promoted Tweets remain capped at `280` regardless of the advertiser's or author's Premium status. The Ads API enforces this at submission. If you need long-form paid content on X, your only options are a thread (each tweet capped at `280`) or a Website Card driving to an off-platform landing page.
How do I count characters accurately for non-English tweets?
For Latin, Cyrillic, and Arabic scripts, count code points — `1` character = `1`. For Chinese, Japanese, and Korean, each character costs `2`, so your effective limit is `140` CJK characters. Mixed-script tweets are charged per-character (a Japanese tweet with an English brand name pays `2` per kanji and `1` per Latin letter). The X web composer's character counter handles this correctly; most third-party tools do not.

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