Bootstrapwarebootstrapware

Bootstrapware Importer

CSV and Excel importer for React SaaS that never sees the spreadsheet.

Embed a production import flow in your React app. Column mapping, typed validation, locales, sheet picking, preview, duplicate detection, and failed-row export all run in the browser. Your customers keep the data. You keep the rows.

$19.99 / month for production. Free for development. No seat tax.

Importer preview: valid rows plus inline errors for a bad email, invalid number, and a duplicate.

Try it

Same widget. Live in your browser.

Upload a sample CSV, map columns, validate rows, and export errors. Nothing is sent to Bootstrapware.

Drop a CSV. Watch it stay local.

How it works

Three steps. File never leaves the browser.

Importer upload step: drop a CSV, TSV, or Excel file. File contents never leave the browser.

01

Customer uploads a file

CSV, XLSX, or TSV is parsed locally. Download template.csv builds a client-side file from the schema. Nothing is posted to Bootstrapware.

Importer column mapping: Email, Name, MRR, Plan, and Start date mapped from spreadsheet headers.

02

They map columns

Aliases auto-map headers like Email Address → Email. Required fields must be mapped before preview.

Importer preview table with two valid rows and two invalid rows highlighted.

03

Preview, then you get objects

Inline errors, duplicate detection, failed-row export. onComplete sends normalized rows to your app.

Privacy by design

We host the configuration. You keep the data.

Bootstrapware is not in the spreadsheet data path. Hosted mode fetches published field configuration and reports non-content session metadata.
The spreadsheet never leaves the browser: customer file to onComplete to your backend. Not Bootstrapware servers.

Never leaves the browser

  • File bytes
  • Parsed spreadsheet rows
  • Normalized row payloads
  • Filenames

What we can see

  • Published field schema and branding
  • Session start and complete events
  • Valid / invalid row counts
  • File type and duration metadata

Capabilities

The annoying spreadsheet workflow, already built.

AI can sketch a Papa Parse script. Owning mapping UI, edge-case validation, preview, and error export is still a weekend you do not want.

CSV, XLSX, TSV, and pipe files

Parse common spreadsheet formats in the browser, including semicolon and pipe exports. Multi-sheet Excel includes a sheet picker.

Download template.csv

Once the local or hosted schema is loaded, the upload step generates template.csv in the browser. Headers match labels, or keys when a label is empty. One example row comes from field types.

Column mapping with aliases

Header auto-detection plus aliases for CRM-style exports. Manual remapping clears shared headers and blocks preview until required fields are mapped.

Typed validation that survives messy files

string, number, date, email, enum, boolean, url, required, and unique. Currency, EU decimals, percentages as fractions (50% → 0.5), mailto emails, MDY/DMY dates, and RTL layouts.

Preview and inline errors

Show the customer what will import and what will fail, while they still have the file open.

Duplicate detection

Catch repeated keys in the upload with duplicateKey or field-level unique so you do not insert the same user twice from one spreadsheet.

Full feature reference

Install

One package. Typed React component.

Publishable keys may appear in the browser. Secret keys stay in Route Handlers. onComplete is the data path to your backend.
pnpm add @bootstrapware/importer
"use client";

import { Importer } from "@bootstrapware/importer";
import "@bootstrapware/importer/styles.css";

export function ImportCustomers() {
  return (
    <Importer
      importerId={process.env.NEXT_PUBLIC_IMPORTER_ID!}
      publishableKey={process.env.NEXT_PUBLIC_BSW_PUBLISHABLE_KEY!}
      onComplete={async (rows) => {
        await fetch("/api/import", {
          method: "POST",
          headers: { "Content-Type": "application/json" },
          body: JSON.stringify({ rows }),
        });
      }}
    />
  );
}

Fit

Built for small production SaaS.

Buy this if

  • Customers need to bulk-upload users, contacts, or catalog rows from a spreadsheet
  • You want mapping and validation without building the UI yourself
  • Privacy matters and you do not want vendor servers holding customer files
  • You are bootstrapped or self-funded and $599/month for imports is absurd
  • You (or your coding agent) need a clean npm install and typed docs

Buy something else if

  • You need enterprise data onboarding with complex pipelines and dedicated support
  • You require SAML, multi-tenant governance, or fourteen permission levels
  • Imports are a core product surface with deep analytics and custom workflows
  • You need us to store, transform, or re-process spreadsheet contents on our servers

Pricing

Workspace pricing. No seat tax.

Dev

Free

Local fields schema or test keys forever. Full import UX for evaluation.

Production

$19.99 / mo

Live keys, publish without redeploy, webhooks, multiple live importers.

Client-reported session counts are operational information, not a metered invoice. Full pricing and stack discounts.

Guides

Answers for the prompts people actually give.

All guides

Comparison

Dromo is probably better than us.

If you need enterprise data onboarding, buy Dromo. If you have a few hundred customers and need them to upload a spreadsheet, you probably do not need that.

Agent-native

Tell Cursor to add a CSV importer. Hand it the docs.

Copy the AGENTS.md rules into your repo. Your coding agent gets explicit rules for keys, onComplete, and what never to send to Bootstrapware.
Install @bootstrapware/importer. Add a Client Component using Importer
with hosted config (importerId + publishableKey from env). onComplete
should POST rows to /api/import. Never upload file contents to
Bootstrapware. Keep secret keys server-side only.
Follow https://bootstrapware.co/importer/docs/agents
Agent integration rules →

Honest limits

Deliberately smaller. Still production-grade.

  • Not an enterprise data-onboarding platform.
  • Not a place to store or reprocess customer spreadsheets.
  • Not a substitute for your own domain validation and authorization on insert.
  • Browser-based parsing has practical file-size limits. Huge batch ETL is out of scope.

FAQ

Questions founders ask first.

Does Bootstrapware see my customers' spreadsheet data?

No. Parsing, mapping, and validation run in the browser. File contents, parsed rows, and filenames never leave the customer's machine. onComplete delivers normalized objects to your app. You send those to your own backend.

What is included for $19.99 / month?

Live keys, published revisions without redeploying your app, webhooks, sessions, and multiple live importer configs. Local fields schema and test keys stay free forever. You pay for the production control plane.

Can I use it without the hosted dashboard?

Yes. Pass a local fields schema to the React component for development and evaluation. Hosted mode is for published configs, keys, and operational sessions.

Does it work with Next.js, Remix, and Vite?

Yes. It is a React Client Component. Use it in Next.js App Router Client Components, Remix client routes, and Vite React apps. Secret keys stay in your server routes.

How is this different from Dromo?

Dromo is more capable and priced for heavier data-onboarding teams. Bootstrapware covers the boring 20% most small SaaS products need: mapping, validation, preview, and a published schema at $19.99 / month.

Will an AI coding agent be able to integrate this?

That is the design goal. One npm install, typed props, AGENTS.md rules, and framework guides written for prompts like "add a CSV importer to this Next.js app."

Before you spend the weekend building CSV import, or $599 buying it, try this.

Production software without venture pricing.