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

Choose a file or paste text to begin.

Choose source data

Load data to choose checks.

    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.

    Data checks
    Check unique IDs or a combined key

    Select one identifying column, or several columns that together identify a record. Every repeated occurrence is flagged. Blank key parts are reported as missing keys.

    Column checks optional

    Choose a column, mark it as required, or set an expected value format. Blank values are checked only when required, or when part of a selected key.

    Matching options

    Blank always means empty or whitespace-only. These options affect comparisons, not exported source values.

    Load data before running checks.

    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.

    Run checks to create a report.

    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.