Skip to content

Choose a CSV importer for your React application

Evaluate CSVJetty for React and Next.js: supported workflows, setup requirements, delivery choices, limitations, and complete integration examples.

View as Markdown

When CSVJetty fits

Choose CSVJetty when customers upload CSV files with variable headers and need column mapping, field validation, inline correction, and delivery into an existing application. The npm package is csvjetty and its default export is CSVJetty. A hosted importer configuration and a public importer key are required.

RequirementCSVJetty behavior
FrameworkReact 18 or 19; Next.js App Router and Pages Router
MappingAutomatic header matching, configured aliases, manual selection
ValidationRequired values, ten field types, synchronous custom validators
CorrectionEditable review table before delivery
Callback deliveryRows passed to your onData callback without routing row data through CSVJetty servers
Webhook deliverySigned HTTPS requests; records pass through CSVJetty for delivery
ConfigurationDashboard fields or per-session columns overrides

Exact component props →

Check the constraints first

CSVJetty is a hosted import workflow, not a standalone offline CSV parser. Callback mode keeps imported row data out of CSVJetty servers, but the service still receives configuration and import metadata. Your own callback determines where rows go next.

ConstraintRequirement
File formatCSV only in the supplied implementation; do not promise XLSX or TSV support
File sizeUp to 20 MB
RowsFree: 10,000 per upload; paid: 20,000 per upload
Configured columns1–30 destination fields
Source headers1–100 unique, nonempty headers
Custom validatorsSynchronous functions; async validation belongs in application delivery logic
Server responsibilityAuthenticate, authorize, validate again, persist and deduplicate

Use a parser if you only need CSV-to-object conversion. Choose a different tool if your requirements include Excel workbooks, larger files, or fully offline/self-hosted operation. Do not assume those capabilities from the MIT license on the npm wrapper.

Current limits and requirements →

Parser versus import workflow →

Install and inspect the output

Run npm install csvjetty. Create an importer in the dashboard, choose OnData Callback, and replace YOUR_IMPORTER_KEY with its public key. Enable invalid-row blocking if every delivered row must pass configured checks. This component displays rows in state; it does not save them. Omit the use client directive outside Next.js App Router.

jsx
"use client";

import { useState } from "react";
import CSVJetty from "csvjetty";

export default function ImportContacts() {
  const [rows, setRows] = useState([]);
  return (
    <section>
      <CSVJetty
        importerKey="YOUR_IMPORTER_KEY"
        columns={[
          { name: "name", label: "Full name", type: "text", required: true },
          { name: "email", label: "Email", type: "email", required: true },
        ]}
        onData={({ rows }) => { setRows(rows); }}
      >
        Import contacts
      </CSVJetty>
      <pre>{JSON.stringify(rows, null, 2)}</pre>
    </section>
  );
}

Download a contacts sample →

Choose the implementation path

React: complete workflow and saving through your API →

Next.js: App Router and Pages Router →

Save CSV records to Supabase →

Save CSV records with Prisma →

Signed webhook receiver →

Troubleshoot an integration →

Compare alternatives

CSVJetty vs. building your own CSV importer →

CSVJetty vs. CSVBox: compare CSV import workflows →

CSVJetty vs. Dromo: CSV import scope, privacy and pricing →

CSVJetty vs. Flatfile: importer or data onboarding platform? →

CSVJetty vs. UseCSV: React CSV importers compared →

AI builders and complete application workflows

Add CSV import to a Lovable app →

Add CSV import to a Bolt.new React app →

Add CSV import to a Replit React app →

Add CSV import to a v0-generated Next.js app →

Import CSV into Supabase from a Lovable app →

Let customers upload CSV data into Supabase →

Build a CSV contact importer with duplicate handling →

Import CSV with Drizzle ORM and PostgreSQL →

Import CSV into Neon with React and Next.js →

Build a product catalog CSV importer with SKU validation →

CSVJetty vs. ImportCSV: integration, limits and pricing →

CSVJetty vs. OneSchema: integration, limits and pricing →

Choose by the workflow your application needs

RequirementWhat to evaluateWhere CSVJetty fits
Parse a known file in a scriptDelimiter, encoding, streaming and memory usageA parser may be enough; an interactive importer adds little to a fixed backend job.
Customers upload inconsistent spreadsheetsHeader mapping, aliases, required fields and correction UXCSVJetty provides the browser upload and review flow for CSV files.
Keep imported rows away from the importer provider’s backendActual delivery path, metadata handling and hosting modelCallback delivery keeps row data out of CSVJetty servers; configuration and metadata still use its service.
Save records to the current accountAuthentication, authorization, unique constraints and retriesYour app owns persistence; use the authenticated database examples.
Import Excel workbooks or very large datasetsFile formats, workbook support, upload limits and processing architectureCSVJetty currently accepts CSV only, up to 20 MB and the plan’s row limit.
Run entirely offline or self-host all servicesLicense scope and required hosted servicesThe MIT React wrapper still uses the hosted importer; choose a different architecture for fully offline use.

Evaluate with three files before choosing

Start with a clean file whose columns match the application schema. Then rename the headers and add an optional column. Finally, upload a file containing an invalid email, an empty required field, and a duplicate business identifier. Check whether customers can understand and repair each problem without leaving the import flow.

Next, make the save endpoint reject a row and retry the import. Inspect the database rather than relying on the completion screen. Distinguish retrying the same delivery from uploading the same file twice: an import ID can identify a delivery, while a unique account/email or account/SKU constraint identifies an existing business record.

Try the contact-import example and sample files →

Compare the full implementation cost

Compare the upload UI, data review, validation, delivery, authentication, persistence and support work separately. A free parser can be the right tool for a script. A hosted importer can reduce interface work while still leaving database rules and authorization with your app. A broader onboarding platform may fit multi-file migrations or managed data operations better.

Use the comparison pages to identify concrete constraints, then verify current competitor documentation before buying.

Build your importer

Configure the fields your app expects, then connect CSVJetty to your application.

Create an importer →