Logo

MonoCalc

/

Hashtag Set Manager

Social Media
Saved in this browser only
Sets are saved in this browser only. They are not sent anywhere, are not tied to an account, and are lost if you clear site data or switch browser or device. Export to keep a copy.

Your sets

0 / 50

No sets yet. Create one, or load two example sets to see what the overlap matrix does.

Nothing selected

Create a set on the left, then paste your hashtags into it.

Set overlap

With two or more sets this becomes a grid of every set against every other, showing how many tags each pair shares and how heavily they repeat one another. Create a second set to see it.

Export and import

An export is the only copy of your sets that survives clearing site data or moving to another browser. Import reads a file from this device — there is no URL import, because there is no server here to fetch one.

About This Tool

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.

Three counts, because they are three questions
The block is measured in grapheme clusters (what a reader perceives as characters), code points and UTF-16 code units (JavaScript's 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.

Frequently Asked Questions

Is the Hashtag Set Manager free?

Yes, Hashtag Set Manager is totally free :)

Can I use the Hashtag Set Manager offline?

Yes, you can install the webapp as PWA.

Is it safe to use Hashtag Set Manager?

Yes, any data related to Hashtag Set Manager only stored in your browser (if storage required). You can simply clear browser cache to clear all the stored data. We do not store any data on server.

How does the hashtag set manager work?

You build named sets of hashtags and the tool keeps them in your browser so you can reuse, compare and edit them later. Paste tags however you have them — one per line, comma separated, space separated, with or without the leading hash, or a whole caption pasted wholesale — and the parser splits them, strips the markers, drops empties and collapses duplicates case-insensitively while keeping the first spelling you used. Extraction from a caption is the same scanner the Hashtag Extractor uses, casing is the same converter the Hashtag CamelCase Formatter uses, and the character counts come from the same helper the Character Limit Checker uses, so the tools can never disagree with each other. Everything runs in your browser and the page makes no network request of any kind.

Where are my sets saved, and can I lose them?

They are saved in this browser's local storage, under one key, on this one device. They are never uploaded, there is no account, and nothing is synced. That means they are lost if you clear site data, use a private window that discards storage on close, or move to another browser or another device — and a browser that blocks site data entirely will make the tool work as an in-memory scratchpad for the session, which it tells you on screen. Use the JSON export to keep a real copy, and the import to load it back or move it to another machine.

What does the overlap matrix actually show?

It is a square grid of your sets against themselves. The diagonal cell is a set's own tag count; every other cell is the number of tags that two sets share, compared case-insensitively so #SummerSale and #summersale count as one tag. The shading is the Jaccard index — shared tags divided by the combined distinct tags — so a faint cell means two sets barely touch and a strong cell means they are nearly the same list. Every cell carries a written label as well as its shading, and clicking one lists the shared tags underneath with buttons to remove them from either side.

Why are there three different character counts?

Because they answer three different questions and conflating them is how length bugs happen. Grapheme clusters are what a reader perceives as characters, measured with Intl.Segmenter. Code points are Unicode scalar values. UTF-16 code units are what JavaScript's String.length returns. A flag emoji is one grapheme cluster, two code points and four UTF-16 code units, so a field that a platform measures one way can overflow while another figure still looks fine. The tool labels all three separately rather than picking one and calling it the character count.

Does this tool tell me how many hashtags to use?

No, and that is deliberate. It publishes no per-post hashtag cap unless a platform's own documentation could be opened and the number read, with the source URL and the date it was checked recorded alongside it — and no such page was reachable when this tool was built, so the cap table ships empty and you see raw counts with no capacity bar. It also makes no claim about reach, impressions, engagement or discoverability, because there is no source for one that could be read without guessing. This tool counts and organises; it does not predict performance.

Why does a warning say a tag "may" register as something shorter?

Because the browser cannot verify what a platform's tokeniser does. Characters such as a full stop, a hyphen or an ampersand end a hashtag on many platforms, so #black-friday may be read as #black — but that is a rule on someone else's server, not something this page can test, so the warning is phrased as a possibility and says it was not verified. The same applies to all-numeric tags, which some platforms do not treat as hashtags at all. A space is the one hard error: no platform accepts a hashtag containing one.