Result
This page has no server side at all. The table you paste is parsed by JavaScript inside your own browser, the chart is drawn on a canvas element on your machine, and the export file is assembled locally. Nothing is uploaded, stored or written to any log. You can disconnect from the network after the page has loaded and everything will still work — which is the simplest way to verify the claim yourself.
Facts and limits of this method
| Comparison unit | Whole line, not a substring or a single word inside it |
|---|---|
| Deduplication | Each list is deduplicated on its own before comparing, so repeats inside one list never inflate the counts |
| Case sensitivity | Off by default: "Apple" and "apple" are treated as different items unless the switch is on |
| Whitespace trimming | On by default: leading and trailing spaces on each line are ignored |
| Only in A / only in B | Items present in one list but absent from the other |
| In both | Items present in list A and list B at the same time, listed once each |
When it misleads you
- Comparison is exact, line by line — it does not catch near-matches like a typo, extra punctuation, or "Ltd." vs "Ltd" at the end of a name. Clean the lists first if that matters for your case.
- With case-insensitivity off (the default), "Apple" and "apple" count as two separate items in both the "only in A/B" and the "in both" groups, which can double-count what is really the same entry.
- The output preserves the exact casing of the first list an item appears in; if the same item shows up with different capitalization in both lists, only one spelling is shown in the "in both" group.
- Order in the output follows the order items appear in the source lists after deduplication — the three groups are not sorted alphabetically.
How it is calculated
Each list is split into lines, optionally trimmed, and deduplicated: only the first occurrence of a value is kept, using a lowercase key when case-insensitivity is on.
For "only in A", the tool checks every deduplicated item from list A against a lookup built from list B's items; anything without a match goes into this group, and the symmetric check produces "only in B".
"In both" collects every item from list A that does have a match in list B — so its count can never be larger than the smaller of the two deduplicated lists.
The three counts shown above each block always add up in a simple way: items in A = only in A + in both, and items in B = only in B + in both.
Questions and answers
Do duplicate lines inside one list affect the result?
No. Each list is deduplicated before comparison, so having "apple" three times in list A still counts as one item for every group.
Is the comparison case-sensitive by default?
No, case-insensitive comparison is off by default, meaning "Apple" and "apple" are treated as different items unless you turn the switch on.
What does "trim whitespace" do exactly?
It removes leading and trailing spaces from every line before comparing, so " apple" and "apple" are recognized as the same item. It's on by default.
Can I compare more than two lists at once?
Not in this tool — it compares exactly two lists. For more, run the comparison in pairs, or combine "in both" results across pairs manually.
Are my lists uploaded anywhere?
No. Everything runs in your browser; neither list is ever sent to a server.