Embeddable Importer

Embeddable CSV importer for B2B SaaS onboarding, with guided mapping and validation built in.

Free forever

Step 1 · Choose how to import

Let users paste data or upload a CSV/XLSX file from their system.

  • Drag & drop upload
  • Manual entry
  • Paste from clipboard
Step 1 · Choose how to import mockup

Step 2 · Map and prepare fields

Guide users to match their columns to your schema and apply transforms.

  • Best‑match suggestions
  • Required field indicators
  • Preview of mapped headers
Step 2 · Map and prepare fields mockup

Step 3 · Review and clean data & Submit

Show a live preview with inline validation so issues are fixed before import.

  • Row‑level errors
  • Filters for invalid rows
  • Quick fixes for common issues
Step 3 · Review and clean data & Submit mockup

1 · Install from npm

Add the React SDK to your application:

Shell
npm install @filefeed/react
# or
yarn add @filefeed/react

2 · Minimal sheet config

Describe the data you expect to receive. FileFeed uses this config for mapping, validation and transformation.

React
import type { Filefeed } from "@filefeed/react";

const sheetConfig: Filefeed.SheetConfig = {
  name: "Contacts",
  slug: "contacts",
  fields: [
    { key: "firstName", type: "string", label: "First name", required: true },
    { key: "lastName", type: "string", label: "Last name", },
    { key: "email", type: "email", label: "Email", },
    { key: "company", type: "string", label: "Company" },
  ],
};

3 · Minimal React example

Minimal usage: define a sheet, render a button, and include FilefeedSheet.

React
import type React from "react";

import {
  FilefeedSheet, useFilefeed, type Filefeed
} from "@filefeed/react";

const sheetConfig: Filefeed.SheetConfig = {
  name: "Contacts",
  slug: "contacts",
  fields: [
    { key: "firstName", type: "string", label: "First name" },
    { key: "lastName", type: "string", label: "Last name" },
    { key: "email", type: "email", label: "Email" },
  ],
};

export default function Importer() {
  const { open, openPortal, closePortal } = useFilefeed();

  return (
    <div>
      <button onClick={() => (open ? closePortal() : openPortal())}>
        {open ? "Close Importer" : "Open Importer"}
      </button>

      <FilefeedSheet
        config={sheetConfig}
        onSubmit={({ rows, slug }) => {
          console.log("Imported", rows.length, "rows for", slug);
        }}
      />
    </div>
  );
}

Frequently Asked Questions

Is FileFeed an alternative to Flatfile or OneSchema for CSV imports?

Yes. It provides mapping, validation, normalization, and delivery without hosting your own importer or ETL glue.

Can I control the schema and validation rules?

You define the sheet config and can enforce required fields, data types, and formats. Invalid rows surface before submission.

How does delivery to my app work?

After validation, FileFeed delivers structured JSON to your API via webhooks or REST. You keep ownership of your data plane.

Will it feel native inside my product?

Yes. You embed the importer, style with your brand, and keep your own auth/session—users never leave your app.

What if customers bring messy headers or different formats?

Header suggestions and mapping help align to your schema; transforms and validations catch issues before import.

Ready to add file imports to your app?

Start with our free embeddable importer and add professional CSV/XLSX import functionality to your product in minutes.

No credit card required • Unlimited end users • Free forever

Schedule

Ready to automate your file workflows?

Tell us how you exchange files today, and we’ll show you how to replace manual uploads and scripts with a single, automated pipeline.