Multi-list set intersection
The parser splits input on `# List` header lines and collects the items beneath each header. The op then intersects every subsequent list against the first: an item survives only if it appears in *every* input list. Output preserves the order the item first had in list 1 and is deduped.
Two or more lists are required - a single block returns an empty result with a status-bar note. There is no upper limit; three-way, four-way, N-way intersections all work the same way.
Case sensitive (off by default) controls the compare key. Off: `Apple`, `APPLE`, `apple` collapse to the same item. On: they are treated as distinct. Trim is not an option here - surrounding whitespace differences count. Chain trim first if that matters.
How to use find common items across lists
- 1Paste two or more lists into the input panel
- 2Separate lists with header lines: `# List 1`, `# List 2`, ...
- 3Output is the intersection - items present in every list
- 4Toggle Case sensitive if you need strict-case matching
- 5For the opposite question (items in exactly one list), use Find distinct items
Keyboard shortcuts
Drive ListShift without touching the mouse.
What this tool actually does
Set intersection across any number of `# List N` blocks.
Two-or-more-list support
Works with exactly two lists (common two-way intersection) or N lists for N-way intersection. Each `# List N` header marks the start of a new block.
Order follows list 1
Kept items keep the order they first appeared in list 1. Predictable output, easy to diff across runs.
Automatic dedupe of the result
If an item appears multiple times in list 1 and survives the intersection, only the first occurrence is kept. The output is always unique values.
Case-insensitive by default
`Apple`, `APPLE`, and `apple` all collapse to the same compare key. Toggle Case sensitive on to treat them as distinct.
Whitespace is significant
Trim is not an option here - ` Apple` and `Apple` are distinct. If your lists have inconsistent leading/trailing whitespace, run trim first.
Worked example
Two lists with `Banana` and `Orange` shared. Output preserves list 1 order.
# List 1 Apple Banana Orange # List 2 Banana Grape Orange
Banana Orange
Settings reference
How each option shapes the output using the sample above.
| Setting | What it does | Effect on the sample |
|---|---|---|
| Case sensitive: off (default) | `Apple` = `apple` | Output: `Banana` / `Orange` |
| Case sensitive: on | Exact-case match required | Same result on this sample (both lists use matching case) |
| Single list (no `# List` header) | Returns empty output | Status bar: "Paste two or more lists separated by `# List X` headers" |
| List 1 item repeats (automatic) | First occurrence wins in the output | A duplicate `Banana` in list 1 would still appear once in the output |