· 5 min read · postpeg team
Instagram's 5-hashtag limit: what changed in December 2025 and how to adapt
Instagram now allows up to 5 hashtags per post or Reel, down from 30. What was announced, what is still unclear for the API, and how to adapt your captions and code.
Since 18 December 2025, Instagram allows at most five hashtags in the caption of a post or Reel, down from the long-standing 30. The in-app limit is clear. What is less clear is how the change applies to posts published through the official API, because Meta's developer documentation still says 30. This post covers what was announced, what is documented, what is not, and how to adapt your captions and your code.
What Instagram announced
The change was announced by Instagram's @creators account on Threads on 18 December 2025. The post reads: "Starting today, Instagram will allow up to 5 hashtags in a reel or post."
Social Media Today reported it the same day, describing it as a limit on the hashtags you can include in a caption for a Reel or post, rolled out gradually rather than to every account at once. Some coverage, such as Social Samosa, dates it 19 December, which is likely a time zone difference rather than a disagreement.
| Before | After (from 18 Dec 2025) | |
|---|---|---|
| Hashtags per post or Reel caption | 30 | 5 |
| Rollout | n/a | Gradual, account by account |
| Official source | n/a | Instagram @creators on Threads |
Why Instagram made the change
Instagram's stated reasoning, as reported by both outlets above, is that a few targeted hashtags work better than many generic ones, both for a post's performance and for the people browsing. The guidance also warns against broad tags such as #reels or #explore, and presents the cap as a way to reduce misuse by spammers.
This fits a message Instagram has repeated for years. In 2022, Adam Mosseri, head of Instagram, said in his Stories that hashtags help Instagram understand what a post is about, but should not be treated as a way to get more distribution.
What is still unclear
A few things the announcement does not settle. We would rather say so than guess.
- Comments. The announcement talks about captions for posts and Reels. It does not say whether hashtags in comments (including a "first comment" full of tags) are covered. Some third-party blogs report that comments with more than five tags are rejected, but we have not found an official source for that.
- What you see when you go over. The @creators post points to a carousel of slides for details, and descriptions of the in-app behaviour vary between reports (an error message, or the caption simply not accepting more tags). Test in the app on your own account rather than relying on a screenshot you found.
- Stories. The announcement mentions posts and Reels only.
- The API. See the next section.
What the Instagram API documentation says
If you publish through the Instagram Graph API (the Content Publishing flow of creating a media container with POST /{ig-user-id}/media, then publishing it), the documentation has not caught up with the app, as far as we can see.
At the time of writing, the IG User Media reference still describes the caption parameter as allowing a maximum of 2,200 characters, 30 hashtags and 20 @ tags. The Instagram API error codes page likewise still describes the caption limits with 30 hashtags, alongside error 2207010 for an over-length caption and 2207040 for too many tags (which that page explains in terms of the 20 @ tag limit).
We have not found any Meta changelog entry or developer documentation that says API-published captions are now limited to five hashtags, or what error a sixth hashtag would produce. Third-party guides disagree with each other on this point. So the honest position is: undocumented.
How to adapt your captions
Five tags is enough if you choose them well. Some practical habits:
Pick 3 to 5 specific tags
Choose tags that describe this post, not Instagram in general. A tag for the topic, one for the niche or community, and perhaps one for a place or event usually says more than five variations of the same broad word. Drop generic tags like #reels, #explore or #instagood, which Instagram's guidance specifically discourages.
If you want a starting list to prune from, the hashtag generator can suggest candidates. Treat its output as options to choose from, not as five tags to paste.
Put keywords in the caption itself
Instagram has said since 2021 that Search tries to match what people type against usernames, bios, captions, hashtags and places, and that for a post to be found in Search, keywords and hashtags belong in the caption rather than the comments. The same article recommends putting keywords about who you are in your bio.
In practice, that means writing captions in plain words people would actually search for. "Sourdough starter feeding schedule for beginners" does more work than #sourdough #bread #baking #homemade #bakersofinstagram.
Write alt text for images
The Graph API has an alt_text parameter for image posts, both single images and images inside a carousel, though the reference notes that Reels and stories are not supported. Write it for people using screen readers first: describe what is in the image. Instagram has not documented whether alt text feeds Search, so do not stuff keywords into it.
How to adapt your code
If your product composes captions (from templates, user input or a model), count hashtags before you send anything. Failing early in your own UI is kinder than a failed or silently trimmed post later.
Here is a small TypeScript sketch that counts hashtags with a Unicode-aware regular expression and trims anything after the fifth. It is a sketch, not Instagram's parser: Instagram does not publish its exact hashtag rules, so the pattern makes some assumptions.
// Sketch only: an approximation, not Instagram's own hashtag parser.
// A hashtag here is "#" followed by letters, marks, digits or underscores,
// containing at least one letter (so "#1" is not counted), and not
// preceded by a letter, digit, underscore or "&" (so "issue#2" and
// HTML entities like "'" are ignored).
const HASHTAG = /(?<![\p{L}\p{N}_&])#(?=[\p{L}\p{M}\p{N}_]*\p{L})[\p{L}\p{M}\p{N}_]+/gu;
export function countHashtags(caption: string): number {
return caption.match(HASHTAG)?.length ?? 0;
}
export function trimHashtags(caption: string, max = 5): string {
let seen = 0;
return caption
.replace(HASHTAG, (tag) => (++seen <= max ? tag : ''))
.replace(/[ \t]{2,}/g, ' ') // tidy the gaps left behind
.replace(/[ \t]+$/gm, '')
.trim();
}
const caption = 'Morning bake #sourdough #baking #pâtisserie #東京カフェ #breadmaking #rye';
countHashtags(caption); // 6
trimHashtags(caption); // "Morning bake #sourdough #baking #pâtisserie #東京カフェ #breadmaking"A few notes on using it:
- The
uflag and\p{L}(any letter) matter. A plain\wonly matches ASCII letters, so it would split#pâtisserieand miss#東京カフェentirely. See MDN's page on Unicode character class escapes. - It counts every occurrence, including repeats of the same tag. That is the cautious choice, since Instagram does not say whether duplicates count once or twice.
- Prefer warning over trimming. Silently removing a user's sixth hashtag changes their post. Showing "6 of 5 hashtags" next to the caption box and letting them choose is usually better.
If you are also checking length, remember the caption limit is 2,200 characters. Our character counter shows how a caption measures against each network's limit.
Where postpeg fits
postpeg does not count hashtags for you. When you publish to Instagram through POST /v1/posts, it validates the 2,200-character caption limit and Instagram's media rules (media is required, and images and video can be mixed) before anything is sent, but a caption with six hashtags passes that check, so keep a hashtag count like the one above in your own code. The Instagram API page and the publishing docs cover the rest of what is validated.