Sort, dedupe, and clean lists

List Clean & Sort.

Paste a list. Remove duplicates. Sort alphabetically, by length, or numerically. Reverse it. Shuffle it. All without leaving the page.

Input list
Cleaned
Ready.

What this tool does

Lists need cleaning constantly. A list of emails copied from a spreadsheet has duplicates. A list of product names from a vendor file has trailing whitespace. A list of city names needs to be sorted A to Z for a dropdown. A list of integers needs to be in numeric order, not alphabetical.

This tool handles all of those cases. Paste a list, check the boxes for what you want, and the cleaned, sorted result appears instantly.

Sort options

Alphabetical (A → Z and Z → A)

Standard text sort. Capital letters sort before lowercase by default; check "Case-insensitive sort/dedupe" to ignore case for sorting and duplicate detection. Z → A reverses the alphabetical order.

By length

"Shortest first" and "Longest first" sort by character count. Useful for ranking strings by complexity, finding short names in a list of identifiers, or grouping related-length entries.

Numeric

If your list contains numbers (integers or decimals), choose "Numeric ascending" or "Numeric descending" for proper numeric ordering. Without this option, alphabetical sort treats "10" as less than "9" because "1" comes before "9" character-wise. Numeric sort puts them in mathematical order.

Mixed numeric/text lists work too — the tool sorts by parsing each line as a number, with lines that don't parse to numbers grouped at the end.

Reverse current order

Doesn't sort — just flips the existing order top-to-bottom. Useful when you want the original sequence reversed without applying alphabetical or numeric logic.

Shuffle

Randomizes the order. Useful for randomized selection from a list, generating sample orderings, or breaking up alphabetical bias in lists where the order shouldn't matter.

Cleaning options

Remove duplicates

Keeps only the first occurrence of each line. Combined with case-insensitive matching, "Apple" and "apple" are treated as the same entry. Without case-insensitive matching, they're separate.

Duplicate detection happens after trimming, so "apple " (with a trailing space) and "apple" (without) are treated as duplicates if "Trim each line" is also checked.

Trim each line

Removes leading and trailing whitespace from each line. This is on by default because it almost always produces cleaner results — copy-paste from spreadsheets, emails, or PDFs frequently introduces stray spaces that you don't want to keep.

Remove blank lines

Lines containing only whitespace (or nothing) are filtered out. Also on by default — blank lines in a "list" are usually accidental.

Strip prefix

Removes a literal prefix from the start of each line. Useful for cleaning Markdown lists ("- item one" → "item one"), removing bullet characters ("• apple" → "apple"), or stripping a common identifier prefix from a list of items.

Only an exact-string prefix is removed — there's no regex matching for this option. Lines that don't start with the prefix are left unchanged.

Common use cases

  • Deduplicating email lists for a mailing campaign
  • Sorting tag lists for category dropdowns or taxonomy
  • Cleaning up imports — paste content from a sales prospect list and remove duplicates and trim whitespace before importing into a CRM
  • Building config files — sort a list of allowed values for predictable diffs
  • Ranking by length — finding short codes, short URLs, short identifiers in a longer list
  • Random sampling — shuffle a list and take the top N for a random selection
  • Numeric sorting — error codes, port numbers, ID lists where numeric order matters

Order of operations

Cleaning happens before sorting. So the sequence is: trim → strip prefix → remove blank lines → dedupe → sort. If you trim and dedupe, "apple " and "apple" are correctly merged because both become "apple" before deduplication runs.

What this doesn't do

This tool treats each line as an atomic value. It doesn't parse CSV or JSON or any structured format. If you need to dedupe rows of a CSV based on a specific column, or sort JSON arrays, use a spreadsheet or a script — this is for flat one-value-per-line lists.

It also doesn't preserve original ordering across multiple operations. If you want the "first occurrence" of each duplicate, the tool keeps the topmost one in your input. There's no option for "last occurrence" or "most frequent" — though those are uncommon needs.

Privacy

All processing happens in your browser. Lists never leave your machine.