# Validation and corrections

> CSVJetty validates mapped CSV values before delivery and lets users fix problems inside the import flow.

Canonical HTML: https://www.csvjetty.com/docs/concepts/validation


![CSV review table with inline data corrections](https://www.csvjetty.com/5_DemoUserDataHealing.png)

The demo shows correction controls. Enable Require valid rows when invalid records must block delivery.

## When validation runs

After columns are mapped, CSVJetty validates each mapped row against configured destination fields. Validation is refreshed when a user edits a value during review.

Required fields are checked for missing values; configured field types apply their own format rules.

## Built-in validation

CSVJetty supports validation for text, email, number, date, select, phone, URL, currency, boolean, and regex fields. Synchronous custom validators can enforce row-level rules.

- Dates must be valid `YYYY-MM-DD` values.
- Numbers and currencies are delivered as JavaScript numbers when valid.
- Boolean fields accept true/false, yes/no, and 1/0 forms.
- Select values must match configured options.

## Inline corrections

Validation errors appear during review so users can correct source data before import. Editing a cell re-runs validation for the current data.

Custom validators run synchronously in the application. Checks that require a database, account state, or external service belong on the server after delivery.

## Invalid-row behavior

- **Skip invalid rows** removes invalid rows from delivery.
- **Require valid rows** blocks import while any row is invalid.
- If neither is enabled, users can continue with rows that still fail CSVJetty validation.

## Validate again on the server

Client-side validation improves data quality; it is not a security boundary. Treat delivered rows as untrusted input and apply normal server-side authentication, authorization, uniqueness, validation, and persistence rules.

Callback and webhook delivery can both report row-level business-rule errors so the final import result can distinguish accepted and rejected records.
