Data quality checker
Find missing values, duplicate records, invalid dates and numbers, and unexpected categories in a table. Review the issues and download the rows that need attention.
Your data stays in this browser. Nothing is uploaded. Privacy details
1 Load your data
Up to 5 MiB. Loading new data replaces the current data and checks.
Or paste text
Preview the first 5 data rows
No data loaded.
2 Choose your checks
Start with duplicate rows, then add checks for the columns you care about. Values are checked without changing the source.
3 Review and download
Plain text uses tabs between columns and quotes cells containing tabs or line breaks. Spreadsheet protection applies to CSV.
Protection adds an apostrophe to potentially executable values. Turn it off for exact cell text.
Preview shows the first 100 result rows. Copy and download include the complete selected report.
No report yet.
View formatted output
Preview limited to 30,000 characters. Copy and download include the complete output.
Check a table before importing it
Load a table, choose your checks, then select Check data. The example includes a repeated ID, a missing name, an impossible date, an invalid number and an unexpected category. Changing the source or checks clears the previous report until you run the checks again.
Issue details lists each problem with its data row, field, value and explanation. Rows needing attention includes each affected source row once, with row-number and issue-summary columns. Column overview shows blanks, distinct nonblank values and up to three examples per field. Example values longer than 100 characters are shortened only in the overview.
Data row 1 is the first row after the selected header, or the first record if headers are disabled. These are positions in the selected table, not physical file line numbers or Excel row labels. Source order and cell text are preserved in row exports. Findings describe the selected checks; a row without a flag may still have other data problems.
Required values and duplicate keys
Required fields reject empty and whitespace-only cells. Optional format checks skip these cells. A unique key can use one field, such as an ID, or several fields together. Every occurrence of a repeated key is flagged, including the first. Keys with any blank part are reported as missing and are excluded from duplicate-key matching. Whole-row checks compare all columns, including extra columns from uneven CSV rows.
Dates, numbers and categories
Date checks use an explicit calendar order: YYYY-MM-DD, day/month/year or month/day/year. Slash formats accept one or two digits for the day and month, with a four-digit year. Invalid days and leap years are checked without guessing a locale. Timestamps and two-digit years are not accepted.
Number checks accept a decimal point or decimal comma, chosen in the rule. Decimal numbers can use exponent notation. Whole numbers accept digits with an optional sign. Thousands separators and currency symbols are rejected. Numbers beyond the finite JavaScript numeric range fail. Values are validated as text and are not rounded or converted.
For categories, enter one allowed value per line. Matching follows the whitespace and letter-case options. No fuzzy matching or regular expressions are used.
Privacy and limits
Files, pasted text, rules and reports stay in browser memory. They are not uploaded, saved in browser storage or placed in URLs. Clear all data clears inputs and rules and cancels processing. Reloading clears tool data. Copy writes to the clipboard only when selected. Download saves a CSV to your device. Only the shared theme preference is stored. See privacy and analytics.
Input allows 5 MiB. Selected data allows 20,000 rows, 100 columns, 500,000 cells including headers, and 20 million characters. Field names allow 200 characters. Configure up to 100 column checks, one per field. Each category list allows 100 distinct values, 200 characters per value and 20,000 characters in total. Reports allow 100,000 issues and 20 million characters. CSV exports also allow 20 million characters. The table preview shows the first 100 result rows; copy and downloads include the full report.
CSV and TSV accept quoted cells, doubled quotes and embedded line breaks. Uneven rows are reported against the first record’s width. Missing cells appear blank, and extra cells are retained in extra columns. Malformed quotes prevent loading because record boundaries cannot be identified reliably. Blank physical lines are skipped. Blank, padded and duplicate headers receive unique trimmed names with a warning. Text files must use UTF-8.
Excel and JSON import reuse the data file converter. Select one worksheet or JSON collection. Excel displayed text preserves saved number formats; underlying values expose numeric date serials. Formula results come from the saved workbook and are not recalculated. Formulas without cached values prevent loading. Nested JSON objects flatten into columns, arrays become JSON text and null or missing fields become blank cells. JSON numeric digits are preserved. The converter’s archive, JSON nesting and worksheet limits also apply.
Hosted checks run in a background browser worker with a 20-second deadline per operation. Direct local-file use processes on the page and can briefly pause. Modern browsers with workers, File.arrayBuffer(), TextEncoder, TextDecoder and Blob URLs are required. Clipboard access may require HTTPS or permission. Excel support uses the locally bundled Apache 2.0 licensed SheetJS Community Edition.