# 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.

Canonical HTML: https://www.csvjetty.com/guides/choose-csv-importer

## 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.

| Requirement | CSVJetty behavior |
| --- | --- |
| Framework | React 18 or 19; Next.js App Router and Pages Router |
| Mapping | Automatic header matching, configured aliases, manual selection |
| Validation | Required values, ten field types, synchronous custom validators |
| Correction | Editable review table before delivery |
| Callback delivery | Rows passed to your onData callback without routing row data through CSVJetty servers |
| Webhook delivery | Signed HTTPS requests; records pass through CSVJetty for delivery |
| Configuration | Dashboard fields or per-session columns overrides |

[Exact component props](https://www.csvjetty.com/docs/reference/component)

## 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.

| Constraint | Requirement |
| --- | --- |
| File format | CSV only in the supplied implementation; do not promise XLSX or TSV support |
| File size | Up to 20 MB |
| Rows | Free: 10,000 per upload; paid: 20,000 per upload |
| Configured columns | 1–30 destination fields |
| Source headers | 1–100 unique, nonempty headers |
| Custom validators | Synchronous functions; async validation belongs in application delivery logic |
| Server responsibility | Authenticate, 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](https://www.csvjetty.com/docs/reference/limits)

[Parser versus import workflow](https://www.csvjetty.com/guides/csv-parser-vs-importer)

## 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](https://www.csvjetty.com/samples/contacts.csv)

## Choose the implementation path

[React: complete workflow and saving through your API](https://www.csvjetty.com/guides/react-csv-import)

[Next.js: App Router and Pages Router](https://www.csvjetty.com/guides/nextjs-csv-import)

[Save CSV records to Supabase](https://www.csvjetty.com/guides/import-csv-supabase)

[Save CSV records with Prisma](https://www.csvjetty.com/guides/import-csv-prisma)

[Signed webhook receiver](https://www.csvjetty.com/guides/import-csv-webhook)

[Troubleshoot an integration](https://www.csvjetty.com/guides/csv-import-troubleshooting)

## Compare alternatives

[CSVJetty vs. building your own CSV importer](https://www.csvjetty.com/guides/csvjetty-vs-build-your-own)

[CSVJetty vs. CSVBox: compare CSV import workflows](https://www.csvjetty.com/guides/csvjetty-vs-csvbox)

[CSVJetty vs. Dromo: CSV import scope, privacy and pricing](https://www.csvjetty.com/guides/csvjetty-vs-dromo)

[CSVJetty vs. Flatfile: importer or data onboarding platform?](https://www.csvjetty.com/guides/csvjetty-vs-flatfile)

[CSVJetty vs. UseCSV: React CSV importers compared](https://www.csvjetty.com/guides/csvjetty-vs-usecsv)

## AI builders and complete application workflows

[Add CSV import to a Lovable app](https://www.csvjetty.com/guides/lovable-csv-import)

[Add CSV import to a Bolt.new React app](https://www.csvjetty.com/guides/bolt-csv-import)

[Add CSV import to a Replit React app](https://www.csvjetty.com/guides/replit-csv-import)

[Add CSV import to a v0-generated Next.js app](https://www.csvjetty.com/guides/v0-csv-import)

[Import CSV into Supabase from a Lovable app](https://www.csvjetty.com/guides/lovable-supabase-csv-import)

[Let customers upload CSV data into Supabase](https://www.csvjetty.com/guides/supabase-user-csv-upload)

[Build a CSV contact importer with duplicate handling](https://www.csvjetty.com/guides/import-contacts-csv)

[Import CSV with Drizzle ORM and PostgreSQL](https://www.csvjetty.com/guides/import-csv-drizzle)

[Import CSV into Neon with React and Next.js](https://www.csvjetty.com/guides/import-csv-neon)

[Build a product catalog CSV importer with SKU validation](https://www.csvjetty.com/guides/import-product-catalog-csv)

[CSVJetty vs. ImportCSV: integration, limits and pricing](https://www.csvjetty.com/guides/csvjetty-vs-importcsv)

[CSVJetty vs. OneSchema: integration, limits and pricing](https://www.csvjetty.com/guides/csvjetty-vs-oneschema)

## Choose by the workflow your application needs

| Requirement | What to evaluate | Where CSVJetty fits |
| --- | --- | --- |
| Parse a known file in a script | Delimiter, encoding, streaming and memory usage | A parser may be enough; an interactive importer adds little to a fixed backend job. |
| Customers upload inconsistent spreadsheets | Header mapping, aliases, required fields and correction UX | CSVJetty provides the browser upload and review flow for CSV files. |
| Keep imported rows away from the importer provider’s backend | Actual delivery path, metadata handling and hosting model | Callback delivery keeps row data out of CSVJetty servers; configuration and metadata still use its service. |
| Save records to the current account | Authentication, authorization, unique constraints and retries | Your app owns persistence; use the authenticated database examples. |
| Import Excel workbooks or very large datasets | File formats, workbook support, upload limits and processing architecture | CSVJetty currently accepts CSV only, up to 20 MB and the plan’s row limit. |
| Run entirely offline or self-host all services | License scope and required hosted services | The 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](https://www.csvjetty.com/guides/import-contacts-csv)

## 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.
