onComplete

onComplete: (rows: Record<string, unknown>[], meta: ImportMeta) => void

type ImportMeta = {
  validRows: number;
  invalidRows: number;
  fileType: "csv" | "xlsx" | "tsv";
  durationMs: number;
  columnCount: number;
  rowCount: number;
  sheetName?: string; // set for Excel imports
};

rows are objects keyed by field key, with coerced types (numbers as numbers, emails lowercased, dates as YYYY-MM-DD, booleans as booleans, URLs as normalized http/https hrefs, empty optional fields as null). Invalid rows are omitted.

Your backend should re-check authorization and any server-side uniqueness against your database. Client validation is not a security boundary.

Related: Quickstart · React component · Import CSV to Postgres · Sessions