Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Using @impler/angular package you can embed CSV Excel Importer into your application with just few lines of code.
Here is the step-by-step guide to embed CSV Excel Importer into your angular application using @impler/angular
.
You copy this snippet to your code before the closing body tag.
It will add impler
variable in window
, so you can call its init
and show
method.
Add @impler/angular
in your application by running the following command.
@impler/angular
provides ImplerService
that you can use to initialize and show an importer to your application.
UPLOAD_STARTED
Upload Partial Information
An event that gets triggered when a user starts the upload.
UPLOAD_TERMINATED
Upload Partial Information
An event that gets triggered when a user leaves import in the middle.
UPLOAD_COMPLETED
Upload Information
An event that gets triggered when a user completes the import.
CLOSE_WIDGET
-
An event that gets triggered when the widget is closed by the user.
DATA_IMPORTED
Imported Data
WIDGET_READY
-
An event that gets triggered when the import widget is opened.
Your application may be developed by keeping dark and light modes in mind. So to let the Import widget show the widget overlay properly, you need to pass colorScheme
in showWidget
function.
Allowed values for colorScheme are light or dark.
You can provide default data to fill in the Sample file that gets generated from the Import widget. Default data acts as a placeholder for the user to add or update the data further.
Here is an example of how to provide data to fill in the sample file,
The schema and output provided in the web.impler.io portal for any import behave as default values for any Import. It's possible to override the default schema and output, to adapt a dynamic nature of Import.
Here is an example of how to provide dynamic schema and output,
You can provide Advanced Validations in the column as validations
key,
If you're using typescript, you can leverage typescript types, like,
It's an obvious need that we want to pass parameters like userId
or orgId
representing who imported the data. In that case, you can pass that data in an extra parameter.
You can pass string
, object
, or array
in extra. Here is an example of how to do it,
The extra parameters get sent to an application during the webhook call.
Impler's import widget provides closeWidget
a method that closes the import widget. Useful to close the import widget once data is imported.
By default, the Import widget takes the name of the Import to show in the title. But it's possible to change the title
from the implementation side too. Helpful to keep the title separate from what the name is given in the web portal.
You can pass a primary color to the import widget, which will update the colors of all buttons accordingly to match your app's theme color.
In case the backend endpoint is authenticated with the token, it's possible to provide token value from the implementation side. You can provide a string or async function that returns the token value.
You can customize any text in the import widget, here is the sample. All customizable texts are available at .
An event that gets triggered with all imported data. Read more at
Impler is open-source data import infrastructure, built for engineering teams to help them build rich data import experience without constantly reinventing the wheel.
The ability to import data is often needed in the application. It usually starts the same, reading .csv
or .xlsx
file and insert records into the database. But after a while, you'll find yourself looping over large files, validating rows, and providing support for file types that you've never heard of before.
Impler's goal is to help developers create an efficient and smooth data import experience between the product and its users. All with an easy-to-use API and outstanding developer experience.
Integrating the import widget into your product can take just a few minutes. The feature-rich experience of the widget makes the data onboarding experience fun for users. Users can map columns and even review invalid records in their spreadsheets so that the right data gets imported.
As developers, we tend to care about the performance of the application, but following the growing number of file types support, mapping, and data validation become a burden on the team and make life hard.
One of the reasons for making Impler open-source was to ensure privacy and give back to the community. We heard from many teams and we also felt How hard it's to give support for Data import functionality
. So to make it accessible to everyone, we decided to build the Impler with awesome people like you.
Using @impler/react package you can embed CSV Excel Importer into your application with just few lines of code.
Let's do a quick review of how to use @impler/react
in your application.
You copy this snippet to your code before the closing body tag.
It will add impler
variable in window
, so you can call its init
and show
method.
Add @impler/react
in your application by running the following command.
@impler/react
provides headless useImpler
hook that you can use to show an import widget in your application.
isImplerIntiated
becomes true when the import widget is ready to open and import data. It remains false when there are some errors with the provided values. Errors get logged in the console panel of the browser.
onUploadStart
(value) => void
Function that get's called when user starts upload
onUploadTerminate
(value) => void
Function that get's called when user leaves spreadsheet import in between
onUploadComplete
(value) => void
Function that gets called when user completes the import
onWidgetClose
() => void
Function that gets called when widget is closed
onDataImported
(data) => void
Your application may be developed by keeping dark and light modes in mind. So to let the Import widget show the widget overlay properly, you need to pass colorScheme
in showWidget
function.
Allowed values for colorScheme are light or dark.
You can provide default data to fill in the Sample file that gets generated from the Import widget. Default data act as a placeholder for the user to further add or update the data.
Here is an example of how to provide data to fill in the sample file,
The schema and output provided in the web.impler.io portal for any import behave as default values for any Import. It's possible to override the default schema and output, to adapt dynamic nature of Import.
Here is an example of how to provide dynamic schema and output,
You can provide Advanced Validations in the column as validations
key,
If you're using typescript, you can leverage typescript types, like,
It's an obvious need that we want to pass userId
or orgId
representing who imported the data. In that case, you can pass that data in an extra parameter.
You can pass string
, object
, or array
in extra. Here is an example of how to do it,
The extra parameters get sent to an application during the webhook call.
Impler's import widget provides closeWidget
a method that closes the import widget. Useful to close the import widget once data is imported.
By default, the Import widget takes the name of the Import to show in the title. But it's possible to change the title
from the implementation side too. Helpful to keep the title separate from what the name is given in the web portal.
Here is how,
You can pass a primary color to the import widget, which will update the colors of all buttons accordingly to match your app's theme color.
In case the backend endpoint is authenticated with the token, it's possible to provide token value from the implementation side. You can provide a string or async function that returns the token value.
Add readymade, scalable, and powerful CSV Excel import experience in your Bubble.io application.
You must have a paid bubble application plan to use the Bubble Data API, which is necessary to push external data into the Bubble data store.
Prepare a data type in your Bubble app where you want to push the CSV data. Ensure that the data type is Publicly visible
. Add custom fields to the data type as per your requirements.
Important: Manually add at least one entry to the data type to map columns accurately.
Go to the API tab
Click on Enable Data API
Activate API for the data type where you want to push the imported data
Generate the API Private Key and save it.
Visit web.impler.io and log in.
Go to the destination tab and enable Bubble.io. Fill in the following information,
Bubble App Name - This is the name of your Bubble.io app, in most cases it's available in a URL like https://bubble.io/page?name=index&id=impler-app&tab=tabs-1, in which impler-app
is the id.
Environment - Pick from a development or production environment, based on which environment your app is running on.
Custom Domain Name - If the environment is production, provide a domain name address like example.com if you have attached any custom domain to your application.
API Private Key - It is the API token that you have generated while configuring the ii. API Settings Bubble app.
Data Type - The name of the data type where data will be sent.
Once done click on Test and Save, which will check details with bubble.io and save the data.
Click on Map Columns to automatically map fields from bubble data type to Impler.
The last step is to add a CSV Excel Import plugin to your application.
Go to Plugins and click on Add Plugins
Search for CSV Excel Import Plugin
Click on Install
Now go to the Design panel (1) and search for CSV Excel Importer (2) which is available in the Visual Elements Section. Drag and drop Importer on the UI panel. It doesn't have any visuals so we can hide (3) it.
Go to workflow panel (1). Click on Add Event and add Page Load event (2). For the added event add Initialize Import Widget action, which is available in Element Actions (3).
From the design section add Button (1), which will open its properties from there click on Add Workflow.
From workflow panel (1), for Button (2) add the Open Import Widget action.
Project Id, Template Id, and Access Token are found in the Snippet section of the application.
Once done CSV & Excel Import functionality is ready in your application.
The impler import plugin provides a field for User Id, where one can provide static text or dynamic value as User ID. It's optional. Very useful while adding a relationship with the user.
If you're taking static or dynamic userId field, you have to append "user": {{extra.userId}}
in output schema.
Here user is the field name in Bubble.io. You need to follow the name you have in your Bubble.io application.
Provide Primary Color in properties to change the color theme of Importer.
In Progress
If you are using a (currently) unsupported client framework, you can use our embedded script. This will show the Widget inside an iframe.
You copy this snippet to your code before the closing body tag.
It will add impler
variable in window
, so we can call its init
and show
methods later.
Import widgets get opened when the user clicks on Import
button. So let's add an import button,
Before the widget gets shown you have to call its init
method. So write this code, after added embed
script.
Here is the description of what we just did,
generateUuid
the function generates UUID which helps add multiple import widgets on the same page.
init
method on impler initializes impler widget.
readyCheckInterval
calls impler isReady()
method in the interval of 1 second to check whether the impler widget is initiated or not.
Once Impler
is ready we remove disabled
attribute from the import button, which the user can click to open the import widget.
After the initialization, when the user clicks on the Import button we will call show
method to open the widget,
That's it, your app is now ready to onboard user data into your application.
Impler instance provides message
an event listener which gets called for various events happening with the widget. Here is how to attach event listener,
eventData
follows the { type, value }
structure.
You can provide default data to fill in the Sample Excel file that gets generated from the Import widget. Default data act as a placeholder for the user to further add or update the data in the file.
Here is an example of how to provide data to fill in the sample file,
Here is an example of how to provide dynamic schema and output,
It's an obvious need that we want to pass userId
or orgId
representing who imported the data. In that case, you can pass that data in an extra parameter.
You can pass string
, object
, or array
in extra. Here is an example of how to do it,
The extra parameters get sent to an application during the webhook call.
By default, the Import widget takes the name of the Import to show in the title. But it's possible to change the title
from the implementation side too. Helpful to keep the title separate from what the name is given in the web portal.
Here is how,
You can close the import widget programmatically by calling close
method on impler instance,
Here is how,
You can pass a primary color to the import widget, which will update the colors of all buttons accordingly to match your app's theme color.
In case the backend endpoint is authenticated with the token, it's possible to provide token value from the implementation side.
You can customize any text in the import widget, here is the sample. A full list of available texts is available at .
Function that gets called with all imported data. Read more at
Go to Settings
You can pass more parameters to show
a method like schema, data, etc. Have a look at section on React embed.
You can customize any text in the import widget, here is the sample. A full list of available texts is available at .
You can provide in the column as validations
key,
The schema and output provided in the portal for any import behave as default values for any Import. It's possible to override the default schema and output, to adapt dynamic nature of Import.
UPLOAD_STARTED
UploadData
User has started import by selecting file and clicking on See Mapping
UPLOAD_TERMINATED
UploadData
The user canceled the import in the middle of the import process.
UPLOAD_COMPLETED
UploadData
The user has completed the import.
CLOSE_WIDGET
The user has closed the import widget.
DATA_IMPORTED
ImportedData
Imported data has received on frontend.
Leverage Impler capabilites to build rich, scalable and user friendly data import experience
Impler is built around configuring your import once and letting the user import spreadsheet data every time using Widget.
Head over to Impler by visiting https://web.impler.io and log in using your credentials
After logging in, you will land on the dashboard. Click on Create Import
which will open the create modal asking you to give the appropriate name to the Import.
Once you've created a new import, you need to add columns to your import spreadsheet. The columns represent the data fields you wish to import.
The image represents a few fields and a button to add a new field.
You can send Imported data to your backend application or Bubble.io application.
Enable Webhook
destination and provide a REST api endpoint in case you want to send imported data to your application.
It's time to import your CSV or Excel file. We can do it in two ways:
Import from Dashboard: You can click on Import
the button and the import widget will be opened. Which allows you to use data import functionality without any extra configuration.
Embed Widget into Application: You can embed CSV Excel Import widget into your application too, regardless of which tech stack you're using. Follow the steps mentioned in Snippet
section of Importer, to embed a widget into your application. Read more in Importer
And that's it! With these five straightforward steps, you are well on your way to revolutionizing your data onboarding process and delivering an exceptional user experience.
Customize Import Widget to match tone of your application. Use this feature to update text or localize the Import Widget
Text customization is possible from the application using Customize Texts (React) and Customize Texts (HTML & JS). With this powerful feature, you can update every text on the Import widget. Useful for updating text on import widgets or even implementing localization.
Although you may not need to update every text on the import widget. Here is the complete text object which is used in Impler.
Texts contain variables, Like {total}
which is used to put dynamic value. For example, 12K
in the case of import confirmation.
When doing manual import of data the most commonly used texts are mentioned below. You can customize the same texts if you want to change language.
No need to download Excel, do mapping, review, and complete import. Directly write data into the importer and finish your import in just one step.
The normal importer flow has a higher number of steps to import the file and follows the below structure,
Download Sample File.
Write data into the file using spreadsheet editing software like Excel, Libre Office Calc, Numbers, etc.
Upload the file in which data is entered.
Select the header row.
Map columns.
Review data and fix invalid data if there is any.
Complete the Import.
This process takes a lot of time and involves many steps in the data import process. We introduced the facility to "Directly enter your data" to reduce the time and effort required to complete the import.
Open the Importer and click on Directly enter your data
.
The spreadsheet editor will be opened which will show the column names as header and as per column types, columns will be shown. For example, for the date column, a date picker will be shown.
Data will be validated instantly, so you can just continue editing the data and the importer will continue validating it in the background.
While pasting the data directly from the spreadsheet, the validation will be performed after pasting is done.
The user can not Finish Import if the data contains invalid values.
Need to import a file that doesn't have a header or data starting after a few rows? Choose to import the file with headers or select the header row from where the data is starting.
Open the Importer and select the file you want to import.
Select Header
step will be opened. Which shows the first 15 rows for header selection. You can select the Header row of your choice or continue importing without headers by clicking on File does not have headers
.
Mapping will be based on the selected header row. Rows above the header row will not be imported.
In the case of importing files without headers, the first row will be shown in the Mapping Step.
Validations help you to ensure that data is in the format you want them to be in. A tooltip will be shown for invalid data and you can ensure that errors get resolved before data gets submitted.
Validates that field's values for Number
and Double
columns fall within a min
and max
values. Either min
, max
or both
must be defined. Values are inclusive.
Validates that field's value for String
column falls within min
and max
number of characters.
Either min
, max
or both
must be defined. Values are inclusive.
Validate uniqueness across multiple fields. To use it, place a unique_with
validation on each field that you want to be part of the uniqueness validation, all sharing the same uniqueKey
.
Here is an example set of fields using unique_with
validations used to validate that the combination of department code
and employee Id
fields are unique.
Here is the example of unique_with
validation in action,
Click on Validations
while adding column or click on Edit
to edit the column.
Assign validations as needed,
On finish the data will be sent to frontend (), Webhook (), or Bubble () as per the destination.
You can check the advanced validations sections in react( ), angular ) and javascript ()
validate
range
min
max
errorMessage
validate
length
min
max
errorMessage
validate
unique_with
uniqueKey
errorMessage
Get data right into the application whenever the user imports the file
Once the user completes importing the spreadsheet in the widget, the impler sends imported data to the callback URL mentioned in the destination.
If the callback URL is protected, there is a facility to add header-based authentication. To activate it you can mention authHeaderName
in the destination section and its value to the import
button as authHeaderValue
prop.
Open the Import and go to the Destination
section.
Enable Webhook
.
Provide REST API Endpoint of your application.
You can provide Chunk Size
too, which defines how many records Impler will send you in one request.
Impler will call your API endpoint from the server, so it will not be visible to anyone. For additional security, you can provide Auth Header Name
which will be the key of headers sent, while the value will be taken from the application when import starts.
Details to provide Auth Header Value
is available at Providing Authentication Header Value for react and at Providing Authentication Header Value for HTML & JS Embed.
template
CODE
of the template
uploadId
Upload ID
data
Array of data in JSON format
totalRecords
Total number of records in uploaded spreadsheet
totalPages
Total number of pages the data is divided on
page
Current page number
pageSize
Size of the data being sent
extra
Extra string or JSON if it's being passed to Import
button
Utilize default validation options to build your desired data import experience.
String Validator: This validator ensures that the column value is a string. String and Number are both valid values.
Number Validator: The Number validator verifies that the column value is a valid numeric entry. It only permits numerical values like 12
but will not allow 12.33
and john
.
Double Validator: The Double validator verifies that the column value is either a Number or a Number with decimals. Valid values are 12
and 12.5
but john
is not valid.
Email Validator: With the Email validator, you can ensure that the column value conforms to a valid email format. Valid values look like [email protected]
while values like john
and john.com
are not valid.
Regex Validator: The Regex validator enables you to define a custom regular expression pattern that the column value must match.
Select Validator: Use the Select validator to restrict column values to a predefined set of options. For instance, you can use it to ensure that a "Gender" column contains only values like "Male" or "Female."
Any Validator: Any validator offers maximum flexibility by allowing any value in the column.
isRequired: Ensures that a value must exist in each cell for the column.
isUnique: Ensures that the value is unique throughout the column.
allowMultiSelect: Accepts multiple values separated by ,
for the cell.
It's possible to extend validation functionality to adjust according to your needs. Read more in Custom Validation.
Get sanitized and formatted user-imported data Directly on your frontend application. Helping you to access data directly.
Available from @impler/[email protected] SDK. Not advisable to access imported data on the front end, if importing more than 10K records.
Once the user completes importing the spreadsheet in the widget, you access imported data immediately on the frontend application.
Open the Import and go to the Destination
section.
Enable Get Imported Data in Frontend
.
Once the destination is enabled Impler will start sending Imported data on the frontend.
To access we can use onDataImported
method at Listening for Events if using react or can check for aDATA_IMPORTED
event as per Listening to Events if using HTML & JavaScript.
Add description to your columns to help users understand what value to put into column.
Users filling excel sheet often get's confused with "What value will go into this column?", "In which format I need to add phone number?", "What format to follow for date?", etc. We can answer these user questions with Column Descriptions.
Description
input is available in Column Details Form, which get's opened by clicking on Validations
Button.
Or by clicking on Edit
Column button.
Which opens column modal which has input for column description.
Provided column description gets visible in review step while showing imported data to user.
It's possible to change border of tooltip by providing primaryColor while opening import widget.
Impler allows facility to automate data import from remote locations. Data import from remote locations makes it easy when data needs to be imported automatically without human intervention.
The process of automatic data import looks the same as manual data import, where the user uploads a file and impler imports the data. To convert any import to automated import we just need to switch its mode from Manual
to Automatic
. Once done your import is transformed from Manual
to Automatic
Import Mode.
When we switch import mode to Automatic, the Import widget gets transformed and instead of accepting the file from the user, the import widget asks the user for a source from where data will get imported on interval.
At the moment impler accepts RSS URL
as a source from where data will be fetched at user-specified intervals. The embed process of automatic import is the same as manual import. Here is how automatic import works:
The first step is to provide a source from where data will be imported at regular intervals. Here on RSS URL input, the user can provide the RSS URL and Impler will keep importing data from the URL.
The second step is to Map appropriate columns from the RSS file. As RSS follows XML structure, Impler parses the RSS file, extracts all paths for possible values in the XML file, and returns headings. Users can pick an appropriate heading for the column.
Impler imports data from specified sources at regular intervals. In the schedule step user defines the Interval. The ability to specify intervals in Minutes, Hours, Days, Months, and Days makes it limitless for a user to provide any timing.
At the end, impler confirms the automated import configuration. Which shows the source and when it will run.
You can provide anything in externalUserId
. ID or Email address that uniquely identifies the user is best suitable for value in externalUserId
.
Automated Imports refers to the user. It becomes obvious to show users import jobs into your application. Here are all the APIs to deal with import jobs in Impler.
Automated Import feature is available in the Scale plan only! Feel free to in case you want to try it out!
Automated imports are associated with users. Users referred to here are users of end application who uses Impler. To mention userId we have to provide externalUserId
extra parameters. As mentioned in (React) and (HTML & JS).
Write your own validation code, making it possible to perform complex checks, such as validating data against external databases or APIs.
Available after impler version 0.9.1
To implement custom validation logic, you can use the code editor provided in the Validator
tab of the Import Details page.
Your custom validation function should adhere to this structure:
The code
function must have the name code
, and it can return an array of error records if validation failures occur. Impler will call this code
function when performing custom validation.
The params
object provided to your custom validation function contains essential information about the import process and the data being validated. It follows this structure:
uploadId
is the id of import happening at the moment.
extra
is the string
, number
or json
provided at the time of import.
fileName
is the name of file that is being imported.
data
is the array of records, where each record follows this strcuture:
index
of the record
record
the actual record object being imported
errors
is an key-value pair of errors for key of record
if there is any
isValid
flag indicating whether current record has errors or not
totalRecords
number indicating totalRecords being imported
chunkSize
number indicating current size of records
Error records returned from your custom validation code should follow this structure:
In the case of all records passing validation, return an empty array []
.
Here's an example of how to validate data against data from a database using the Axios library:
Developers can access schema keys by pressing Ctrl + Space
to display a list of available variables and selecting from it.
Additionally, the suggestion box contains variables available in params
, such as params.uploadId
, params.fileName
, and more.
Your custom validation code can make HTTP calls using libraries like Axios. For example, you can retrieve data from your own API and validate it against the imported data.
The custom code function is executed in chunks, typically in batches of 500 records.
For example, if you are validating 10,000 records, the function will be called 20 times to validate the data in manageable segments.
Error records generated from your custom validation code are merged with errors generated from Impler's static validation processes, creating a comprehensive error report.
Impler's custom validation functionality is built on a scalable architecture, allowing you to handle and validate large datasets, even in the millions.
With custom validation in Impler, you have the flexibility to implement intricate validation logic, ensuring data integrity and quality in your import processes.
This feature empowers you to customize your imports to meet your specific needs, making complex data imports more accessible and efficient.
Impler allows importing data files with images. Image import is useful in scenarios like Employee data with profile photos, Products with images, or Assets with pictures.
Excel with the Image Import feature is available in the Scale plan only. Feel free to contact us if you want to try it out!
The first step for image import is to add or update a column with the Image
type. In case providing Runtime Schema keep column type as Image
and importer will be ready to import images.
Once the import is configured to import data with Image. We can start importing data with Images. Here is the image import flow,
The first step is to upload all images and generate a template with uploaded image names. All columns with the type Image will appear in Select Column
dropdown and Uploaded images will be shown below Upload Image
section.
Once all image files are selected, click on Generate Template
to generate an Excel file holding the names of all uploaded images.
Clicking on Generate Template will download an Excel file and Importer will move to the Upload section. You can enter data in the downloaded Excel file and select image names for image columns.
It's possible to generate a template again by clicking on Generate Template
.
Once selected click on Map Columns
.
Click on Review Data
to verify data getting imported.
The review step checks if image columns contain the name of the uploaded image. If not shows a validation error.
Click on Re-Review Data
to complete the import, once all records are valid.
Imported data will be sent to a webhook with an endpoint to download and access the uploaded file.
The download file endpoint is secured using accesskey
which is available in Settings
section on the left side. Here is the CURL for a review,
Default value facility empowers developers to specify fallback values for empty or missing columns. This ensures data consistency and completeness while receiving the data.
Till the date, if imported spreadsheet contains missing value or any column is not mapped, the response uses {{key}}
as placeholder. By utilizing Default Value functionality developer has more control over format of response they will receive.
Default value can be applied to columns either at the time of adding column or updating column. Wildcard values like null
, undefined
can also be used, which available in the dropdown.
Means developer can choose one of these predefined values or write default value as a string of their choice.
null: Represents the null value.
undefined: Represents an undefined value.
Empty String: Represents an empty string.
Empty Array ([]): Represents an empty array.
Boolean true: Represents the boolean value true
.
Boolean false: Represents the boolean value false
.
While providing custom schema you can mention with defaultValue
key and put your desired string or appropriate value
from mentioned table.
null
<<null>>
undefined
<<undefined>>
Empty String
<<>>
Empty Array ([])
<<[]>>
Boolean true
<<true>>
Boolean false
<<false>>
The provided default value is used when imported data gets sent to application as response. The default value will be applied to column when,
Column Not Required and Not Selected During Mapping:
When a column is not marked as required, and the user chooses not to select the column during the mapping phase, the default value will be used in response.
Column Not Required and Contains Empty Value:
When a column is not marked as required, and the column contains an empty value, the default value will be applied to fill the gap.
Web portal GUI makes it easy to assign default value to column. Based on needs you can provide default value while providing schema during runtime too.
The Default Value functionality provides flexibility and control to developers when importing data. Whether dealing with optional columns or handling empty values, this feature enhances the overall data import experience.
Do you need to import data in columns that are not fixed firsthand? Impler provides a facility to provide schema at the moment of opening the import widget.
Available after the impler version 0.9.1
Consider you have an ERP application that needs to import sales information. Our system provides a way to add extra information to sales information, like challan-no
. Other users might have different columns.
In that case, fixing the import data structure is impossible. So we need to pass schema during run time when the user clicks on Import
button to import the data.
Here are the keys
name (required)
: The name of the column, will be displayed in the import widget during mapping.
key (required)
: The key of the column, will be used to create an Excel file and match it with available headings in the file.
type (optional)
: One of the types from String
, Number
, Date
, Email
, Regex
, Select
, and Any
to override the existing type for the column.
isRequired (optional)
: A boolean value indicating whether values in the current column are required.
isUnique (optional)
: A boolean value indicating whether values in the current column must be unique.
selectValues (optional)
: Select values indicating what are the possible values when the type is select.
regex (optional)
: A regular expression to override when the type is regex
.
dateFormats (optional)
: Date formats indicating a list of formats acceptable for the date field. Required when type is Date
. For example, ['dd/mm/yyyy','dd/mm/yy']
Populate essential data fields in your Excel samples with Data Seeding. Simplify data input by preloading records, allowing users to build upon or modify data.
Available after impler version 0.9.1
To seed the file that gets downloaded as Sample
, one need to pass data
in showWidget
function, which is exported from the useImpler
hook.
This function, when provided with your data, allows Impler to automatically populate sample files with the specified information.
Here is how to do it,
Import the useImpler
Hook: Start by importing the useImpler
hook from @impler/react
into your project. This hook provides access to essential Impler functions.
Initialize Impler: Create an instance of Impler by calling useImpler
with the required configuration, including templateId
, projectId
, and accessToken
.
Define Your Data: In the onShowWidgetClick
function, gather the data you want to prefill into the sample file. This data should match the structure and content you expect in the final imported files.
Call showWidget
: Pass your data to the showWidget
function, which will handle the process of populating the sample files.
Downloading sample file with data: Finally, when user clicks on button with text Import
, the Import widget gets opened. Where by clicking on Download sample
the user can download the excel file with data provided.
Efficient Data Import: Simplify the process of importing relational data by seeding sample file.
Developer-Friendly: Integrate data sources seamlessly into Impler's import workflow.
User-Focused: Enhance the user experience by providing prepopulated sample files for download.
With the Data Seeding feature in Impler, you can save time and effort by automating the generation of sample files.
This is particularly valuable when importing data with complex relationships, ensuring a smooth and efficient data import experience.
You can find relevant implementation for react in and for HTML & HS in
Customize output format to receive data in a manner that the system can use.
There are chances that the system which is receiving data is not made or managed by us. But as a plugin or integration, we need to send imported data to that system. In that case, Impler allows changing the output format which follows the system's syntax.
If you're providing schema runtime from the application, in that case, default provided output isn't taken into consideration. Because columns defined in the output might not match with columns getting imported.
In that case, we need to provide schema runtime. We have listed examples for react in Providing Runtime Schema and for HTML & JS versions in Providing Runtime Schema.
This output customization capability empowers you to direct imported data to any destination and in any preferred format.
Freeze columns in excel and editor to better view data while editing and adding records
We can freeze columns in many ways. Here is how,
Click on the +
button to add a new column.
Provide column Name
, Key name
and rest of the values based on your choice.
Check Frozen?
checkbox for the column.
Click on the Pencil (Edit) icon for any created column.
Check the Frozen?
checkbox.
Click on Save
.
We can freeze the column while providing a custom schema too with the isFrozen
flag in our frontend code.
The generated sample file will have specified columns freeze on the left side. So they won't gets hidden if we scroll to the right.
While importing data spreadsheet editor freezes two default Checkbox
and Sr. No.
Columns. Other mentioned columns get frozen as per schema.
Impler will send you alert mail for anything that goes wrong during importing data
We heard issues like "I imported data but didn't receive callback", "Imported data is not showing in my application", "Validation code is not working as expected", etc. Also, "imported data not seen in the application", is something no one wants to face.
As a solution, Impler will send alert mail to users in the following scenarios,
Added webhook endpoint is not proper.
Application threw an error while sending imported data over the webhook.
Validation code throws an error during execution, which happens when data import is in progress.
Here is the sample mail,
The Multiselect feature in Impler allows users to pick multiple values for a single cell. This feature is useful in various scenarios like selecting categories for products, tagging items, and more.
Click on the +
button to add a new column.
Provide column Name
and Type
= Select
.
Click on Validations
.
We can provide allowed values in Select Values
.
We can also enable Multi Select for select column. Which allows user to select multiple values in the cell.
Additionally we can sepcify ,
or ;
as delimiter for multi-select values.
We can enable the Multiselect feature by providing a custom schema with the allowMultiSelect
flag in our frontend code.
Impler creates .xlsx
and .xlsm
files based on the columns' configuration:
.xlsx File: Generated if no columns have Multiselect enabled.
.xlsm File: Generated if any column has Multiselect enabled.
When a column is marked as Multiselect, Impler appends #MULTI
to the end of the column name in the Excel file. This allows users to select multiple options in the cell.
For detailed steps on how to write in .xlsm
files refer to Writing effectively into .xlsm files.
Columns with the Multiselect feature will send an array of selected values when sent to application Using Webhook or Using Frontend Callback.
Your hub for tracking and understanding your import activity.
The Activity Page provides a comprehensive overview of your data imports, giving you insights into import statistics, trends, and detailed histories.
Let's explore the various sections and functionalities that the Activity Page has to offer.
The Activity Page greets you with key statistics that provide a quick snapshot of your data import activity:
Total Imports: The count of all imports conducted using Impler.
Total Records: The cumulative number of records imported across all your imports.
Total Error Records: The count of records that encountered errors during the import process.
A graphical representation of the import count over the last seven days is displayed using a bar chart. This visual tool allows you to quickly identify trends and fluctuations in your import activity.
The Import History Table presents a paginated view of your import history, facilitating a deeper dive into each import's details. This table consists of the following columns:
Import Id: A unique identifier for each import.
Name: The name associated with the import.
Date: The date on which the import occurred.
Time: The time at which the import was initiated.
Status: The status of the import, categorized as Upload, Mapped, Review, Confirmed, or Completed. The "Completed" status indicates that the imported data has been successfully sent to the application.
Total Records: The total number of records in the import.
The Import History Table offers filtering capabilities, allowing you to narrow down the displayed history by date and import name. This enables you to quickly locate specific imports and track their progress over time.
The Activity Page serves as a valuable resource for gaining insights into your import operations:
Overview: Get a bird's-eye view of your import statistics.
Trends: Identify patterns and trends in your import activity with the import count bar chart.
Detailed History: Dive deep into each import's journey, from initiation to completion.
Error Analysis: Monitor error records to address data quality issues.
Whether you're seeking a quick overview or a comprehensive analysis, the Activity Page equips you with the tools you need to assess your data import processes effectively.
Impler's Activity Page is designed to streamline your import tracking, optimize your workflow, and empower you with data-driven decision-making capabilities.
Group your Imports into projects to make managing multiple imports easy
Projects in Impler play a vital role in organizing imports effectively. You can invite your peers to the team and collaborate on Imports.
Click on your project name on the top left corner of the Impler platform below the Impler logo to open Projects Modal.
You can create unlimited projects in Impler. To create a new project write the project name in text input and click on Create
. Upon creating a project you will be switched to a new project automatically.
Once the project is created it will be shown on the projects menu. As Owner
only you can delete the project.
Only the Project Owner can delete the project.
Invite your peers and make your team on Impler with facility to invite, manage and remove team members.
With inspiration from Birds of a feather flock together
, you can invite your peers in Impler with different background, who are responsible for different work. Here are the details about which role has which capabilities in Impler.
Manage Imports
View Activity
Manage Secrets
Manage Cards
Buy Plan
View Subscription
View Team Members
Add/Remove Team Members
The person who created project will be on Admin
role by default.
Based on your current plan you can invite members to your team. Provide email IDs of your members and their roles. An invitation email will be sent to the invited members with a link to take action on the invitation.
Invited members will get an email to accept the invitation or you can copy the invitation link from Sent Invitations
section on Team Members
.
On visiting the invitation link, if anyone is new to Impler, they can create an account or if they already have an account they can simply click on Accept Invitation
.
Signup
Email will be automatically filled while going to signup from invitation section.
Get idea about how subscription works in impler. How pricing will be calculated, payment gateway being used internally and how it will affect usage.
Impler provides the most generous way to integrate world-class CSV Excel Import functionality in any application. Impler only considers Imported Records as a metric to collect the amount and not additional parameters like no. of imports and no. of templates.
Impler assigns every user the Starter Plan, which includes 5,000 free records per month. Here’s how the subscription and billing process works:
The Starter Plan Includes 5,000 free records per month. Importing more than 5,000 records incurs a charge relative to $1 for every 10,000 records.
By default, the Starter Plan renews every month. If you have imported more than 5,000 records, you must pay the outstanding amount to renew your subscription. You can choose an appropriate plan to cover this.
You must add a card before purchasing any plan. Adding a card creates a mandate of a certain amount, which helps the user to not provide payment details repeatedly and backend to deduct the amount at intervals.
Plan upgrades take effect immediately. While Plan downgrades occur at the end of the current billing cycle.
Users can cancel their plan anytime. Upon cancellation, the canceled plan does not renew at the end of the billing cycle, and the default Starter Plan is reactivated. Outstanding amounts are deducted at the end of the billing cycle after cancellation.
Find answers to most common questions our users have while using Impler
Guide on various building blocks of Impler, How they communicate and How Impler works?
Impler is built upon scalable architecture to validate and process records of any size.
Separation of concern helps organizing code across various packages, libraries and apps. The idea is that app is divided into various parts, and each one is responsible for a spacific task.
Let's dive deep into building blocks of Impler.
Widget is the main app where import happens. Widget provides UI to upload, map, validate and reivew data files. Widget gets embedded into iframe using embed
script. It communicates with API to accomplish file processing work.
Queue manager handles processing data. Once user completes file import, the command gets passed to Queue Manager
app to start processing data and sending it to application in chunks.
API keys are used to authenticate APIs happening from import widget. Additionally developers can integrate Impler into their application by manually calling Impler API.
Chunk
contains chunked data along with import information. More information on
SDKs removes the need of managing import widget manually. In case of missing SDK developer can take reference of to embed widget into application.
Learn how to update your database data through migrations.
Occasionally, Impler might add features that call for data or database schema alterations. This typically occurs when a feature requires certain data to be present on a database entity to function. To make these modifications to your database, you can utilize migrations.
To run data migrations, enter the following sequence of commands in your terminal from the impler/api
repository root:
Certain features can require more than one migration; in that case, you must do each migration in the following order.
Below you will find a list of migrations introduced in previous versions of Impler, alongside the migration path to use in the script above.
Date format consideration
./src/update-date-formats/update-date-formats.migration.ts
Revision of template files according to new structure
./src/migrations/regenerate-templates/regenerate-templates.migration.ts
0.24.0
Verify user email using verification code
./src/migrations/verify-user/verify-user.migration.ts
0.27.0
Migrate users for teams support
./src/migrations/shift-environment-key/shift-environment-key.migration.ts
What do you need to run Impler locally and how to perform the setup?
Node.js version v18.13.0
MongoDB
RabbitMQ
localstack (required for storing files)
(Optional) pnpm - Needed if you want to install new packages
You can also run docker containers for MongoDB, RabbitMQ, and Localstatck.
After installing the required services on your machine, you can clone and set your forked version of the project:
Fork Impler's repository. Clone or download your fork to your local machine.
Run the initial setup command npm run setup:project
to install and build all dependencies.
Run the project locally using npm run start:dev
The npm run start:dev
will start all of the services in parallel including APIs and Widget clients. if you only want to run parts of the platform, you can use the following run commands from the root project.
start:api - Starts the API in watch mode
start:dal - Builds the Data Access Layer package in watch mode
start:embed - Serves the embed script via HTTP, which is required to open the widget
start:widget - Starts the widget project that shows the widget inside an iframe
start:queue-manager - Starts the Queue manager application that processes sending data via webhook
start:web - Starts the web application, where you can create manage imports.
You can run pnpm start:<APP>
command one by one too, in case you want to run applications separately.
The command npm run setup:project
creates default environment variables that are required to run Impler in a development environment. You can change them based on your requirements. These are all the available environment variables:
Writing tests are currently In Progress. You can test packages or apps using appropriate CLI commands:
To run the API tests, run the following command:
3000 - API
4701 - Embed
3500 - Widget
4200 - Web
Step-by-step guide showing how you and your users can handle .xlsm file constraints, while editing into it.
The .xlsm
file format includes macro code that enables the Multiselect feature in Impler. Due to varying security protocols on different operating systems, there are specific steps to follow to ensure these macros run effectively.
Microsoft Excel on Windows restricts macro execution by default due to security concerns. Follow these steps to enable macros and use the Multiselect feature:
Download the Sample File:
First, download the sample file generated by Impler. If any column has Multiselect enabled, it will be in .xlsm
format.
By default, Microsoft Excel displays an Security Risk
error for such files in its latest versions.
Mark the File as Safe:
Navigate to the file location.
Right-click on the .xlsm
file and select Properties
.
In the Properties window, under the Security
section, check the Unblock
checkbox.
Click Apply
.
Enable Macros:
Open the file in Microsoft Excel.
An orange banner will appear at the top, indicating that macros are disabled.
Click on Enable Content
it to allow the macros to run.
These steps will ensure that the macro code for the Multiselect feature is enabled, allowing you to select multiple options within the specified columns.
Linux users typically use LibreOffice Calc, which does not run macro code by default. However, you can still work with the Multiselect feature by manually entering options.
Open the .xlsm File:
Open the .xlsm
file in LibreOffice Calc.
A warning message about macros will appear.
Manually Enter Options:
Since macros do not run in LibreOffice Calc, you need to manually type in the options for Multiselect.
For example, if you are entering countries, you can write New York,India,Canada
in the cell.
By following these steps, you can effectively use the Multiselect feature in .xlsm
files on both Windows and Linux.
Download the .xlsm
file.
Mark the file as safe through Properties.
Enable macros in Excel to use the Multiselect feature.
Open the .xlsm
file in LibreOffice Calc.
Manually type the options in multi-select fields.
If you have any questions, suggestions, or comments. Feel free to reach out to us over Discord. We’re constantly improving to deliver the best Data Importer for your product, and we value your input.
If you have any questions, suggestions, or comments. Feel free to reach out to us over Discord. We’re constantly improving to deliver the best Data Importer for your product, and we value your input.
If you have any questions, suggestions, or comments. Feel free to reach out to us over Discord. We’re constantly improving to deliver the best Data Importer for your product, and we value your input.
If you have any questions, suggestions, or comments. Feel free to reach out to us over Discord. We’re constantly improving to deliver the best Data Importer for your product, and we value your input.
If you have any questions, suggestions, or comments. Feel free to reach out to us over Discord. We’re constantly improving to deliver the best Data Importer for your product, and we value your input.
If you have any questions, suggestions, or comments. Feel free to reach out to us over Discord. We’re constantly improving to deliver the best Data Importer for your product, and we value your input.
If you have any questions, suggestions, or comments. Feel free to reach out to us over Discord. We’re constantly improving to deliver the best Data Importer for your product, and we value your input.
If you have any questions, suggestions, or comments. Feel free to reach out to us over Discord. We’re constantly improving to deliver the best Data Importer for your product, and we value your input.
If you have any questions, suggestions, or comments. Feel free to reach out to us over Discord. We’re constantly improving to deliver the best Data Importer for your product, and we value your input.
If you have any questions, suggestions, or comments. Feel free to reach out to us over Discord. We’re constantly improving to deliver the best Data Importer for your product, and we value your input.
If you have any questions, suggestions, or comments. Feel free to reach out to us over Discord. We’re constantly improving to deliver the best Data Importer for your product, and we value your input.
If you have any questions, suggestions, or comments. Feel free to reach out to us over Discord. We’re constantly improving to deliver the best Data Importer for your product, and we value your input.
If you have any questions, suggestions, or comments. Feel free to reach out to us over Discord. We’re constantly improving to deliver the best Data Importer for your product, and we value your input.
If you have any questions, suggestions, or comments. Feel free to reach out to us over Discord. We’re constantly improving to deliver the best Data Importer for your product, and we value your input.
If you have any questions, suggestions, or comments. Feel free to reach out to us over Discord. We’re constantly improving to deliver the best Data Importer for your product, and we value your input.
If you have any questions, suggestions, or comments. Feel free to reach out to us over Discord. We’re constantly improving to deliver the best Data Importer for your product, and we value your input.
If you have any questions, suggestions, or comments. Feel free to reach out to us over Discord. We’re constantly improving to deliver the best Data Importer for your product, and we value your input.
If you have any questions, suggestions, or comments. Feel free to reach out to us over Discord. We’re constantly improving to deliver the best Data Importer for your product, and we value your input.
If you have any questions, suggestions, or comments. Feel free to reach out to us over Discord. We’re constantly improving to deliver the best Data Importer for your product, and we value your input.
If you have any questions, suggestions, or comments. Feel free to reach out to us over Discord. We’re constantly improving to deliver the best Data Importer for your product, and we value your input.
If you have any questions, suggestions, or comments. Feel free to reach out to us over Discord. We’re constantly improving to deliver the best Data Importer for your product, and we value your input.
If you have any questions, suggestions, or comments. Feel free to reach out to us over Discord. We’re constantly improving to deliver the best Data Importer for your product, and we value your input.
If you have any questions, suggestions, or comments. Feel free to reach out to us over Discord. We’re constantly improving to deliver the best Data Importer for your product, and we value your input.
If you have any questions, suggestions, or comments. Feel free to reach out to us over Discord. We’re constantly improving to deliver the best Data Importer for your product, and we value your input.
If you have any questions, suggestions, or comments. Feel free to reach out to us over Discord. We’re constantly improving to deliver the best Data Importer for your product, and we value your input.
If you have any questions, suggestions, or comments. Feel free to reach out to us over Discord. We’re constantly improving to deliver the best Data Importer for your product, and we value your input.
If you have any questions, suggestions, or comments. Feel free to reach out to us over Discord. We’re constantly improving to deliver the best Data Importer for your product, and we value your input.
If you have any questions, suggestions, or comments. Feel free to reach out to us over Discord. We’re constantly improving to deliver the best Data Importer for your product, and we value your input.
If you have any questions, suggestions, or comments. Feel free to reach out to us over Discord. We’re constantly improving to deliver the best Data Importer for your product, and we value your input.
If you have any questions, suggestions, or comments. Feel free to reach out to us over Discord. We’re constantly improving to deliver the best Data Importer for your product, and we value your input.
If you have any questions, suggestions, or comments. Feel free to reach out to us over Discord. We’re constantly improving to deliver the best Data Importer for your product, and we value your input.
If you have any questions, suggestions, or comments. Feel free to reach out to us over Discord. We’re constantly improving to deliver the best Data Importer for your product, and we value your input.
If you have any questions, suggestions, or comments. Feel free to reach out to us over Discord. We’re constantly improving to deliver the best Data Importer for your product, and we value your input.