Skip to content

CSVJetty vs. ImportCSV: integration, limits and pricing

Compare CSVJetty and ImportCSV for embedded CSV imports: deployment, validation, delivery, file support, limits and published pricing.

View as Markdown

Which importer fits your application?

CSVJetty and ImportCSV both address interactive React imports. The main choice is whether you want CSVJetty’s hosted CSV workflow within its published limits, or ImportCSV’s local/open-source option and broader spreadsheet capabilities. Evaluate the installed SDK version and deployment mode rather than assuming the two services share an architecture.

Choose ImportCSV when a local/open-source deployment or its documented spreadsheet formats are requirements. Evaluate CSVJetty when a hosted CSV-only flow, a public importer key and an application-owned callback fit the app. The lower published CSVJetty paid price covers a smaller allowance; it is not evidence that it is cheaper at every usage level.

Compare the documented capabilities

RequirementCSVJettyImportCSV
Packagecsvjetty, default CSVJetty export@importcsv/react
HostingHosted importer required, including callback deliveryOpen-source/local and hosted options
FilesCSV onlyCSV and spreadsheet formats documented by the SDK
ValidationTen field types and synchronous custom validatorsZod schema support
Hosted free plan100 imports/month; 10,000 rows/upload100 imports/month; 10,000 rows/import
Hosted paid plan$9/month; 500 imports/month; 20,000 rows/upload$49/month Pro; 2,000 imports/month; 100,000 rows/import
Row data pathCallback rows bypass CSVJetty servers; metadata still uses the serviceDepends on local, backend or cloud configuration

Source: ImportCSV hosted plans →

Source: ImportCSV source and local/backend modes →

Source: ImportCSV Next.js and Zod setup →

What a CSVJetty integration requires

Create an importer in the CSVJetty dashboard, choose OnData Callback, and copy its public importer key. Enable Require valid rows so customers must fix browser validation errors before delivery. Development Mode still calls your save handler; use test data and a test database. Dashboard preview does not deliver rows.

CSVJetty dashboard listing a configured importer
Open an importer in the dashboard before connecting it to your application.
CSVJetty column definition screen with names, types and examples
Configure destination fields and their types. This recording frame uses the demo schema; use the schema specified in this guide.

CSVJetty supports React 18/19 and CSV files up to 20 MB. The free plan permits 10,000 rows per upload; paid permits 20,000. Configure at most 30 destination fields. Callback mode keeps row data out of CSVJetty servers while configuration and import metadata still use the hosted service. It is not a fully offline or self-hosted importer.

Compare the difficult part of the workflow

CSVJetty prepare-file screen listing required fields and examples
The preparation step explains the expected fields before upload. The fields shown belong to the demo importer.
Destination column selector above the CSV data preview
Review header matches and assign destination fields. The demo schema differs from this guide’s example.
An invalid email being edited in a CSVJetty review table
Correct invalid values in the review table. The demo permits invalid rows; enable Require valid rows for the examples in this guide.

Use the same realistic file for both products. Include an ambiguous heading, a missing required value, an invalid email and a duplicate business key. Confirm that the correction workflow enforces the desired policy and that backend failures do not become false success messages.

For CSVJetty, configure Require valid rows to block unresolved browser validation errors. A custom validator must be synchronous. Duplicate database records, authorization checks and persistence remain application responsibilities. No browser importer can replace database constraints.

Plan the migration at the save boundary

Inventory your current schema, mapping rules, transformations, validation hooks, event handlers and retry policy. Recreate the destination fields with CSVJetty columns and adapt the callback to receive { rows, rowNumbers, importId }. The APIs are not drop-in interchangeable; preserve behavior with a test file before replacing production imports.

The wrapper’s callback rows stay out of CSVJetty servers, but the hosted service still handles configuration and metadata. Webhook delivery routes rows through CSVJetty. If a requirement is fully offline operation or self-hosting the entire importer, the hosted CSVJetty architecture does not meet it.

Complete React integration →

Customer-owned Supabase contacts →

PostgreSQL and Drizzle example →

Full capability and limit reference →

Check saving separately from dashboard preview

CSVJetty dashboard preview complete with no records delivered
Dashboard preview only: 24 records are prepared, but none were sent to an application. Verify database persistence separately from this screen.

A successful dashboard preview proves only that records can be prepared with the configured schema. Embed the component in your app, use a test database, interrupt one save and retry it. Check actual persisted rows, rejected record numbers and duplicate behavior before deciding that a migration is complete.

Make the decision against your own import requirements

For a team weighing hosted integration against self-hosting flexibility, begin with a representative customer file rather than a feature count. Compare the hosted-service requirements, open-source deployment options and ownership of the import interface. Use the same valid file, malformed values, renamed headers and duplicate identifiers in each evaluation.

Choose CSVJetty when its hosted React workflow, CSV-only format, current file and row limits, and application-owned persistence fit the job. If a required capability falls outside those boundaries, verify the alternative directly. A cheaper monthly plan does not compensate for a missing required format or an incompatible delivery architecture.

Before migrating, record the current destination field names, aliases, validation rules, invalid-row policy and save-handler contract. Recreate the schema, test row-level errors, and verify both retry behavior and repeat-file duplicate handling. Run the replacement against a test database before switching customers.

Use the selection checklist →

Build your importer

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

Create an importer →