Hashtag Counter & Instagram Caption Formatter

Paste your caption: the counter checks Instagram’s limits (30 hashtags, 20 @ tags, 2,200 characters), flags duplicate hashtags and gives you a tidy version to copy.

Hashtags (#) and mentions (@) are detected automatically – including accents and non-Latin scripts.

Your text stays in your browser – it is not sent, not stored and not added to the address bar.

Hashtags found

  • #Holiday 2× duplicate
  • #Beach 2× duplicate
  • #Portugal
  • #travel
30 is the maximum documented by Meta. The Instagram app may apply a stricter limit – if so, enter the lower number here.
If an app swallows blank lines, fill them with a dot or an invisible character (U+2800).

Result

Hashtags in your text
6 of 30
Unique hashtags
4
Duplicate hashtags
#Holiday (2×), #Beach (2×)
@mentions
1 of 20
Characters in your text
174 of 2,200
Formatted caption
Finally back at the sea! 🌊 First sunshine of the year with @lena.travels. Off to Porto tomorrow – any tips for a good café? #Holiday #Beach #Portugal #travel
Hashtags in the formatted caption
4 of 30
Characters in the formatted caption
159 of 2,200

How it is calculated

The hashtag counter reads your caption right in your browser. A hashtag is a “#” followed by letters (including é, ñ or non-Latin scripts), digits and underscores – a hyphen, full stop or space ends it. A “#” directly after a letter (as in “C#”) is not a hashtag. A mention is an “@” followed by a username made of letters, digits, full stops and underscores; email addresses are not counted.

Instagram’s limits

Meta’s Instagram Graph API documentation allows a post caption of at most 2,200 characters, 30 hashtags and 20 @ tags. Hashtags are not case-sensitive: #Holiday and #holiday are the same tag, so the counter flags them as duplicates. Characters are counted as Unicode code points; emoji built from several parts (skin tones, families, flags) can take up more than one character.

What the formatter does

Line breaks with a dot or an invisible character

Some apps and input methods strip empty lines, so your caption ends up as one block. A common workaround is to fill each blank line with a character: a visible dot “.” or the Unicode character U+2800 (Braille pattern blank), which looks like a space but does not count as whitespace. Either one counts as one character. The dot is the safer choice, as screen readers may announce U+2800 as a Braille character.

Frequently asked questions

How many hashtags does Instagram allow?

According to Meta’s Instagram Graph API documentation, up to 30 hashtags per post, plus 20 @ tags and 2,200 characters. If the app shows you a stricter limit, enter it above as the hashtag limit.

Do #Holiday and #holiday count as duplicates?

Yes. Hashtags are not case-sensitive, so the counter treats both as the same tag and the formatter keeps only the first one.

Why does a hashtag inside a sentence stay where it is?

Because it is part of the sentence. Only hashtags at the end of a line and hashtag-only lines are moved, so your text stays readable.

Is my text stored anywhere?

No. Everything runs in your browser; your text is not sent anywhere and not added to the address bar.

What is the invisible character?

The Unicode character U+2800 (Braille pattern blank). It looks empty but is not stripped as whitespace, so it keeps the gap between paragraphs. It counts as one character.

Sources and legal basis

As of:

Related tools