How to use the Bulk Caption Counter
- Paste or drop your captions. Choose one caption per line, or CSV and paste it or drop a file. For a CSV, tell the tool whether the first row is a header and which column holds the caption. It guesses from names such as caption, text or copy.
- Pick your networks. Tick the networks you post to. Each one adds a count, its limit and an over or ok flag to every row. The default set is X, Instagram and Threads.
- Filter and sort. Show only the rows that are over a limit, or sort by how far over they are. Row numbers match your original file, so you can find the cell to edit.
- Export the results. Download a CSV that keeps all your original columns and adds words, hashtags and the per-network columns. Open it in any spreadsheet.
What the bulk counter checks and how
Counting rules per network
X: 280 weighted characters per the open twitter-text rules. Each link counts 23, an emoji sequence counts 2 in total, and characters outside the Latin ranges, such as CJK, count 2. Text is normalized to NFC first. Source: docs.x.com, counting characters.
Instagram: 2200 characters, counted as Unicode code points, per the Instagram Graph API media reference. TikTok: 2200 UTF-16 units, so an emoji outside the basic plane costs 2, per the TikTok Content Posting API reference. Threads: 500 characters, counted as graphemes, per the Threads API posts guide. Bluesky: 300 graphemes, the maxGraphemes value in its post lexicon. Mastodon: 500 by default with every link counted as 23, from the server's status length validator; individual servers can raise the limit.
LinkedIn: 3000 characters counted as graphemes. This number is widely documented but not confirmed against an official help page, so it is labeled approximate.
How the CSV is read
The parser follows the common CSV convention: fields can be wrapped in double quotes, a doubled quote inside quotes is one quote, and commas and line breaks inside quotes stay in the field. CRLF, LF and CR all end a row, a leading byte order mark is dropped and blank lines are skipped.
If a row has fewer cells than the widest row, the missing cells are treated as empty and the tool tells you. If a quote never closes, the tool warns you, because everything after it would otherwise merge into one caption.
Limitations
X link detection recognizes addresses that start with http, https or www, and bare domains on a list of common endings. It approximates X's full matcher, so check borderline captions in the composer. Platforms can change their limits at any time, and some accounts may have different limits. The counter applies the standard figures listed above only. In the exported CSV, any cell that starts with =, +, - or @ gets a leading apostrophe so a spreadsheet shows it as text instead of running it as a formula.
Frequently asked questions
How is this different from the single-caption counter?
It uses the same counting rules, but it runs them over many captions at once. The character counter is built for tuning one draft while you type. This one is for a content calendar you already wrote in a spreadsheet and now want to check before you schedule it.
Will it handle commas and line breaks inside a caption?
Yes, as long as the caption is wrapped in double quotes, which every spreadsheet does when it exports a CSV. A comma, a line break or a doubled quote inside quotes stays part of the caption. Tab and semicolon separated files are detected automatically.
Why can one caption be over on X but fine on Threads?
The limits differ and so does the counting. X allows 280 weighted characters, where every link costs 23 and emoji and Chinese, Japanese and Korean characters cost 2. Threads allows 500 characters. A 320 character caption fails on X and passes on Threads.
Which numbers are official and which are approximate?
X, Instagram, TikTok, Threads, Bluesky and Mastodon come from the networks' own documentation or published source code. The LinkedIn figure of 3000 is widely documented but we could not confirm it against an official page, so treat that one as approximate.
Is my CSV uploaded anywhere?
No. Parsing, counting and the export all happen in your browser. Nothing is sent to a server, so unpublished campaigns stay on your machine.
Does a hashtag count toward the limit?
On every network here a hashtag is ordinary text, so it counts like the rest of the caption. The hashtag column is there because some networks cap or discourage large numbers of tags, which is easier to spot when you can see the count per row.