Find common items across lists

Paste two or more lists separated by `# List 1`, `# List 2`, ... headers and get the items that appear in *every* list (the set intersection). Order follows the first list. Case-insensitive by default - toggle Case sensitive if you need exact-case matches.

Input
Ready
Output
Live

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

  1. 1Paste two or more lists into the input panel
  2. 2Separate lists with header lines: `# List 1`, `# List 2`, ...
  3. 3Output is the intersection - items present in every list
  4. 4Toggle Case sensitive if you need strict-case matching
  5. 5For the opposite question (items in exactly one list), use Find distinct items

Keyboard shortcuts

Drive ListShift without touching the mouse.

Shortcut Action
Ctrl ZUndo last input change
Ctrl Shift ZRedo
Ctrl Shift EnterToggle fullscreen focus on the editor
EscExit fullscreen
Ctrl KOpen the command palette to jump to any tool
Ctrl SSave current pipeline draft Plus
Ctrl PRun a saved pipeline Plus

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.

Input
# List 1
Apple
Banana
Orange
# List 2
Banana
Grape
Orange
Output
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

FAQ

How do I separate the input lists?
Use header lines starting with `# List` followed by any label: `# List 1`, `# List 2`, `# List "Prospects"`, etc. The parser splits on those header lines and treats everything up to the next header as one block.
Can I intersect more than two lists?
Yes. Add `# List 3`, `# List 4`, ... headers and each block feeds into the intersection. An item must appear in every list to survive.
What determines the order of the output?
Items keep the order they first appeared in list 1. Duplicates within list 1 collapse to a single entry in the output, in the position of their first occurrence.
Does case sensitivity affect which items match?
Yes. With Case sensitive off (default), `Apple` and `APPLE` count as the same item. With it on, they are distinct - so an intersection might shrink or return nothing depending on casing.
What is the opposite operation?
Find distinct items - items that appear in exactly one list (and nowhere else). Together they partition a multi-list input into "shared" vs "unique to one list" sets.