Pulter homepage

The only spreadsheet importer that you'll ever need

Pulter is an end to end data onboarding solution, that empowers your customers to clean, validate and upload your data. Pulter is very easy to setup and can be done within minutes









Onboarding

Let your engineers focus on the core components of your business. Pulter gives you the best spreadsheet import tool that can be implemented within minutes.

Customer Experience

With Pulter you can get your customer's data into your system as soon as possible. Let your customers experience the core value of your product instead of battling with clunky data.

Security

Trusting a 3rd party with your customer's data isn't easy, that's why we don't store your customer data anywhere in our platform. We provide different methods of getting your customer's data.

Integration

You can push the imported data to your favourite 3rd party app like Airtable, Notion, Google Sheets etc. You can also setup a webhook listener to receive imported data.

Easiest way to let your customers import CSV filesPulter is very easy to setup and customize, you can easily customize it to fit in with your brand, change the workflow and many more.
<Pulter isOpen={isOpen} onClose={onClose}
onSubmit={onSubmit}
fields={[
{
label: "Name",
key: "name",
alternateMatches: [
"first name",
"first"
],
fieldType: {
type: "input",
},
example: "Stephanie",
validations: [
{
// Can be "required" / "unique" / "regex"
rule: "required",
errorMessage: "Name is required",
level: "error",
},
],
},
]}
rowHook={(data, addError) => {
// Validation
if (data.name === "Stephen") {
addError("name",
{ message: "No Stephens allowed",
level: "warning" })
}
// Transformation
return { ...data,
name: "Stephen not allowed"
}
// Sorry Stephen
}}
initialStepState={{
type: StepType.matchColumns,
data: [
["Josh", "2"],
["Charlie", "3"],
["Lena", "50"],
],
headerValues: ["name", "age"],
}}
customTheme={{
colors: {
background: 'white',
rsi: {
50: '...',
500: 'teal',
900: "...",
},
},
components: {
Button: {
baseStyle: {
borderRadius: "none",
},
defaultProps: {
colorScheme: "yellow",
},
},
},
}}
translations={{
uploadStep: {
title: "Upload Employees",
},
}}
allowInvalidSubmit= {false}
maxRecords={100}
maxFileSize={1048576}
autoMapHeaders={true}
autoMapDistance={2}
/>
<Pulter isOpen={isOpen} onClose={onClose}
onSubmit={onSubmit}
fields={[
{
label: "Name",
key: "name",
alternateMatches: [
"first name",
"first"
],
fieldType: {
type: "input",
},
example: "Stephanie",
validations: [
{
// Can be "required" / "unique" / "regex"
rule: "required",
errorMessage: "Name is required",
level: "error",
},
],
},
]}
rowHook={(data, addError) => {
// Validation
if (data.name === "Stephen") {
addError("name",
{ message: "No Stephens allowed",
level: "warning" })
}
// Transformation
return { ...data,
name: "Stephen not allowed"
}
// Sorry Stephen
}}
initialStepState={{
type: StepType.matchColumns,
data: [
["Josh", "2"],
["Charlie", "3"],
["Lena", "50"],
],
headerValues: ["name", "age"],
}}
customTheme={{
colors: {
background: 'white',
rsi: {
50: '...',
500: 'teal',
900: "...",
},
},
components: {
Button: {
baseStyle: {
borderRadius: "none",
},
defaultProps: {
colorScheme: "yellow",
},
},
},
}}
translations={{
uploadStep: {
title: "Upload Employees",
},
}}
allowInvalidSubmit= {false}
maxRecords={100}
maxFileSize={1048576}
autoMapHeaders={true}
autoMapDistance={2}
/>
Different Client libraries are supported for different platforms.Add a snippet of our code to your app to start accepting spreadsheets from your customers.
import { Pulter } from '@pulter/react';
<Pulter templateId={'cl3xnfvty0844nk991z37kh8p'}
isOpen={isOpen}
onClose={onClose}
onSubmit={onSubmit}
fields={[
{
label: "Name",
key: "name",
alternateMatches: [
"first name",
"first"
],
fieldType: {
type: "input",
},
},
]}
allowInvalidSubmit= {false}
/>
import { Pulter } from '@pulter/react';
<Pulter templateId={'cl3xnfvty0844nk991z37kh8p'}
isOpen={isOpen}
onClose={onClose}
onSubmit={onSubmit}
fields={[
{
label: "Name",
key: "name",
alternateMatches: [
"first name",
"first"
],
fieldType: {
type: "input",
},
},
]}
allowInvalidSubmit= {false}
/>
Pricing

From solopreneurs to established startups, the most affordable pricing

Hobby$0/mBasic$19/mStartup$49/mPlus$99/mPro$199/m
Data TemplatesUnlimitedUnlimitedUnlimited
Imports1001K5K10K10K
Rows Per Upload10010K50K100K500K
Auto column matching Ok Ok Ok Ok Ok
Remove branding Minus Minus Ok Ok Ok
Custom Styling Minus Minus Ok Ok Ok
Custom Validations Minus Minus Ok Ok Ok
Data validation and transformation Minus Minus Ok Ok Ok
Zapier Integration Ok Ok Ok Ok Ok

Features

We have everything you need to build best data importing flow.

Support Multiple File Types

Pulter supports multiple file types CSV, Excel, multi-sheet Excel, TSV, and XML files

Automated Column Matching

Automatically map columns that are most likely value to your template values, so that your users don't have to

Data Validation

Client side validation based on predefined sheet rules allows your users to self clean data before upload.

Custom Hooks

You can transform and validate data with custom hooks. You can also validate against external data (such as data stored in your database)

Custom styling

You can customize the styling of the Pulter Importer to match the style of your brand and application.

Integrations

With the help of Zapier integration. You can push the imported data to your favourite 3rd party app like Airtable, Notion, Google Sheets etc.

Webhook

Webhooks allow you to receive uploaded data wherever you want, as soon as it's uploaded.

Translations

You can easily translate all the texts in Pulter Importer.