CSV Filter🔒 100% local
Filter CSV rows by column value. Privacy-first, no server uploads, no tracking.
Related Tools
Keeps only the rows of a pasted CSV that meet one condition, written on the last line as filter: age > 30, filter: name contains ann or filter: status == active. The column name is matched against the header row, the operators >, <, >= and <= compare as numbers, == and != compare the whole trimmed cell, and contains, starts and ends compare case-insensitively. The surviving rows come back as CSV with the header on top. Rows are compared in the page and nothing is uploaded.
How to use it
- Paste the CSV so that the first line is the header row.
- Add the condition as the last line, beginning with filter: or where:.
- Press Process and copy the filtered CSV.
Worked example
name,age
John,30
Jane,25
filter: age > 25becomesFilter: age > "25"
Rows: 1 of 2 matched
name,age
John,30The condition line is removed before rows are counted, which is why the total is 2 and not 3.
name,status
Ann,active
Bob,paused
filter: status == activebecomesFilter: status == "active"
Rows: 1 of 2 matched
name,status
Ann,activeThe value is echoed in the result as "active". == compares the cell exactly, so Active would not match; contains would.
When to use it
- You want only the failed rows out of a log export before pasting them into a ticket.
- You need to check whether a name appears in a long list of customers.
- You are trimming a pasted table down to the rows above a threshold.
What it does not do
- One condition per run, with no AND or OR. For two conditions, run the tool twice or use a spreadsheet.
- Values are compared with a lenient parse that stops at the first non-numeric character, so 1,200 is read as 1 and 30% as 30, while a cell such as $30 parses as not-a-number and its row is dropped without a warning.
- The condition line is only recognised with the filter: or where: prefix. Without it the line is kept as another data row, so a missing prefix changes your row count instead of producing an error.