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 MarkdownWhich 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
| Requirement | CSVJetty | ImportCSV |
|---|---|---|
| Package | csvjetty, default CSVJetty export | @importcsv/react |
| Hosting | Hosted importer required, including callback delivery | Open-source/local and hosted options |
| Files | CSV only | CSV and spreadsheet formats documented by the SDK |
| Validation | Ten field types and synchronous custom validators | Zod schema support |
| Hosted free plan | 100 imports/month; 10,000 rows/upload | 100 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 path | Callback rows bypass CSVJetty servers; metadata still uses the service | Depends on local, backend or cloud configuration |
Source: ImportCSV hosted plans →
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 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



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.
Customer-owned Supabase contacts →
Check saving separately from dashboard preview

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.
Build your importer
Configure the fields your app expects, then connect CSVJetty to your application.
Create an importer →