What this counter measures
Every ad platform draws a box around your copy. This tool counts your text the way the render does: characters are Unicode code points, so an emoji like 🧴 counts once, not the two units JavaScript's .length reports. Spaces, punctuation, and line breaks all count.
Over = characters − visible limit
The limits it checks are the visible windows, not the hard caps. Meta will accept far longer primary text than 125 characters; it just folds everything past that behind “See more.” The fold is the real limit, because the fold is all your prospect sees.
Worked example
The defaults load a Meta ad for a skincare brand. The primary text is a 22-word hook ending in a 🧴 emoji. It runs 115 characters, 10 inside Meta's 125-character visible window. The headline “Glow in 7 days” is 14 of 40. The description “Free shipping over $50” is 22 of 30. Every field fits; nothing gets folded.
The emoji is why code points matter: that primary text is 116 UTF-16 units, but 115 characters, because 🧴 is one code point. Count in the wrong unit and you will “fix” copy that already fits.
Now switch the platform toggle to TikTok. Same text, new verdict: 115 characters against a 100-character ad text window is 15 over, and TikTok truncates the ending, which is where the payoff (“visibly brighter skin by Friday”) lives. That is the argument for counting per platform instead of writing once and pasting everywhere.
Visible limits vs. hard caps
Two different numbers get called “the character limit,” and mixing them up costs money. The hard cap is what the platform's form will accept: for Meta primary text it is measured in the thousands. The visible limit is what renders before truncation, and it is the number this tool checks, because copy past the fold is copy you paid to hide.
Google is the exception: RSA limits are hard caps enforced at entry. A 31-character headline will not save, so “over” on the Google toggle means a rejection, not a fold. Meta and TikTok let you run long and quietly clip the overflow instead.
Treat the visible window as the creative. If a claim, price, or offer sits past the fold, it is not in the ad. It sits in an appendix a small minority of readers open.
The limits, platform by platform
These limits are directional, as of 2026: platforms adjust renders without announcements, and each placement clips differently.
Meta: about 125 characters of primary text render in feed before “See more,” with a 40-character headline and a 30-character description. The description only shows in some placements, so never park anything essential there.
Google RSA: 30 characters per headline across up to 15 slots, and 90 characters per description across up to 4. Google assembles combinations from your slots, so count your longest line; one over-limit headline blocks the save.
TikTok: a single ad text field with roughly 100 visible characters. Emoji and hashtags count against it, and the caption competes with the video for attention, so shorter is safer.
Front-load the hook
A 125-character allowance is not a 125-character assignment. Feeds get skimmed, and the opening line decides whether anyone reads line two, so put the claim in the first 40 characters and let the rest support it. The default primary text opens with the problem (“Dull, tired skin?”) in 17 characters, then spends the other 98 on mechanism and payoff.
This is the text equivalent of a video's 3-second hook window. The video side is measurable with the Hook Rate Calculator. And when copy needs cutting, cut from the end and re-count, rather than compressing every sentence into abbreviation soup. Moving the claim forward and trimming the runway is the core of a StefanBrain Copy Chief pass, applied here by hand.
Frequently asked questions
What happens if I go over the limit?
Depends on the platform. Meta and TikTok still deliver the ad but truncate the render: your overflow hides behind “See more” or an ellipsis. Google refuses at entry: an RSA headline over 30 characters will not save. Either way, treat an over-limit count as a rewrite signal, not a technicality.
Do emojis count as one character?
Mostly, yes. This counter counts Unicode code points, so 🧴 or 🔥 each count once. Compound emoji built from joiners are the exception: a family emoji like 👨👩👧 spans 5 code points here, and platforms disagree on how to count those sequences. If a single character decides whether you fit, do not spend it on a compound emoji.
Do spaces and punctuation count?
Yes: every space, comma, period, line break, and currency symbol counts. The default description “Free shipping over $50” is 22 characters, and 3 of them are spaces. Watch for trailing whitespace when pasting from a doc; it counts too, so trim before you paste into Ads Manager.
Are these limits the same in every placement?
No. Feed, Stories, Reels, and right-column placements each clip at different points, and Meta's description field does not render at all in many of them. The numbers here are feed-render windows, directional as of 2026. When one line must survive, like a compliance disclosure or a price, preview the exact placements you spend on.
Should I max out every field?
Separate length from slots. Length: no. Filling all 125 characters because you can buries the hook under warm-up copy. Slots: yes on Google. Filling more of the 15 headline and 4 description slots gives the system more combinations to test, as long as each line stays short and distinct. Both platforms reward density, not volume.
Where StefanBrain fits
This counter tells you whether the copy fits. It cannot tell you whether it sells. StefanBrain drafts primary text, headlines, and descriptions to each platform's window, runs them through Copy Chief review, and launches the winners to Meta. Once a variant is live, tag its link with the UTM Builder so click data says which version earned it. Then pressure-test the media plan behind it with the Ad Spend Calculator.
