Hashtag Set Manager – Keep, Clean and Compare Your Tag Groups
Most people who post regularly end up with the same handful of hashtag blocks living in a notes app, a pinned message or the bottom of an old caption. They drift: one picks up a typo, another quietly becomes a near-copy of the first, and nobody notices because the two are never looked at side by side. This hashtag set manager is a workspace for that problem — build named hashtag sets, clean them, and see exactly how much they repeat one another.
Paste them however you already have them
The input box takes hashtags in whatever shape they arrive. One per line, comma separated, space separated, with or without the leading #, or an entire caption pasted wholesale. Every token is split, stripped of its markers — ##tag becomes tag — trimmed, and checked. Duplicates collapse case-insensitively, so #SummerSale and #summersale become one entry keeping the first spelling you used, and you are told how many were dropped rather than left to wonder where they went.
Because a pasted caption also contains ordinary words, a toggle decides what counts. Only words starting with # routes the text through the same scanner the Hashtag Extractor uses, which skips URLs and email addresses and knows that C# in a sentence is not a tag. Treat every word as a tag takes the lot. The mode is chosen for you based on whether the text contains a marker, and you can override it.
Per-tag checks that do not overclaim
Each tag becomes a chip with a status. A space is a hard error — no platform accepts a hashtag containing one. Everything else is a hedged warning, because platform tokenising rules run on somebody else's server and cannot be tested from a browser. A tag containing ., - or & is flagged as something that may register as a shorter tag; an all-numeric tag is flagged as something some platforms do not treat as a hashtag at all. Both say plainly that they were not verified here. No maximum tag length is asserted anywhere, because none could be sourced.
Fix casing, sort, and assemble the block
Fix casing runs every tag through the same converter the Hashtag CamelCase Formatter uses and shows a before-and-after list that you must confirm — nothing is ever changed silently. Capitalising is an accessibility fix: matching is case-insensitive on the major platforms, so the gain is that a screen reader can hear the word boundaries. Boundaries come from separators already present in the tag, such as an underscore; a tag that is one unbroken run has none, and this tool will not guess where the words are.
Sorting is both a view and a commit, so you can look at a list A→Z without permanently reordering it. The assembled block takes a separator — space, newline or comma — an optional # prefix, and up to five leading blank lines for the habit of pushing tags below the fold of a caption.
String.length). A flag emoji is one, two and four of those respectively, so a field can overflow on one figure while another still looks comfortable. All three come from the same counting helper the Character Limit Checker uses.The overlap matrix
The payoff of keeping several sets is seeing how much they repeat. The overlap matrix puts your sets on both axes; the diagonal is a set's own tag count and every other cell is the number of tags two sets share. Shading is the Jaccard index — shared tags over combined distinct tags — so a strong cell means two sets are nearly the same list. Every cell carries a written label as well as its shading, and selecting one lists the shared tags with buttons to remove them from either side. Alongside it, a bar list ranks the tags appearing in the most sets.
Your browser, and nowhere else
Sets are stored in this browser's local storage on this one device. There is no account, no sync and no server: the page makes no network request of any kind. That is stated permanently in the tool rather than buried here, because it has a real consequence — clearing site data or switching device loses them. Export to JSON for a portable copy, or CSV for a spreadsheet, with cells neutralised so a set name beginning = cannot execute as a formula. Import reads a local file, validates it against the schema before anything reaches the page, and asks whether to merge or replace.
What the tool will not do: predict performance. It publishes no per-post hashtag cap unless a platform's own page could be opened and the number recorded with its source and date, and it makes no claim about reach, impressions or discoverability. It counts and organises.