Skip to main content

The Dromo bees have been busy this summer making sweet sweet honey, and we are excited to share some it with you at last!

Headless API

First off, we're announcing the launch of the Headless API as a premium add-on to Dromo Pro. With Headless, you can import and clean data files (like CSVs and spreadsheets) programmatically.

The Headless importer has a "human-on-the-loop" design. It autonomously resolves common issues, but also allows for human intervention to handle complex edge cases and verify the final data.

Read more about getting started with the Headless API. Existing customers can request access to the private beta by emailing us.

Saved Schema API

The Saved Schema API is another notable addition that complements the Headless API (each headless import requires a reference to a saved schema).

This API allows you to create, edit, and delete saved schemas outside of the Schema Studio, giving you access to the complete array of settings and options that Dromo provides. This feature is particularly useful for defining hooks, updating schemas dynamically, and managing complex schemas for use with a headless import.

Read more about using the Saved Schema API.

New API Documentation

What better way to showcase our new APIs than with a new doc site, complete with a downloadable OpenAPI spec? Find endpoint descriptions, supported HTTP methods, request parameters, and response samples all in one place.

Check out the new API documentation.

Zapier Integration

We've integrated Dromo with Zapier, enabling you to trigger headless imports in response to web events or to connect your finished imports with hundreds of web services with just a few clicks.

For example, this integration allows you to launch a headless import in response to an upload to an SFTP server, notify a Slack channel of new finished imports, copy import results to Google Drive, or automatically add imported records to your CRM, among other things.

Read more about how to set up your first Zapier integration with Dromo.

Improved Schema Studio

The Schema Studio (formerly the Schema Builder) - located your account dashboard - now features a more intuitive layout and a powerful sidebar. The sidebar is home to all the information you need to deploy an importer quickly, as well as shortcuts to integrating completed imports with web services like Google Drive.

We now support one-click deployments that let you instantly share a production-ready, Dromo-hosted importer with your team or customers. Just select the "Enable Dromo hosting" option from the Deploy panel in the sidebar.

Check out the changes in the Schema Studio.

New Website

Last but not least, we've launched a new website with a blog full of case studies and detailed analyses, simplified pricing page, and downloadable ebooks, such as our Roadmap to Delightful Data Onboarding.

If you're a new prospect wondering about the ROI of upgrading your data onboarding flow, may we recommend "The Business Case for Data Onboarding".

If you're ready to buy an importer and choosing between alternatives, check out "Understanding the Pricing Models of Premium Data Importers: An In-Depth Comparison of Providers".

That's all for now. Back to the hive! 🐝

Another month, another round of improvements to Dromo! Here's what's new and updated:

Gorgeous error filtering

The review screen now sports a new UX for filtering errors, either across all rows or only in specific columns. Give it a spin in our demo here. Error filtering

Dromo goes global

Seeing as we now have customers on six continents and users around the world, it was time to up our language support. Dromo can now be run natively in over 30 languages, including Czech, Malay, and Icelandic. All you need to do is pass a locale setting.

A complete list of i18n options is in the docs.

Schema-based column matching

You can now opt for your users to match columns based on the fields in your schema, rather than the columns in their file. This can be useful when a file has a lot of irrelevant columns, or when you want the matching screen to look consistent across all your users.

Full details are here.

More customization options

In v2, we've expanded the options for overriding the default styling of the importer. Want to match the border radius of the modal to suit the look-and-feel of the rest of your app? No problem. Want to change the header weight to match your brand? Easy.

Read about all the options here.

Adding and removing rows programatically

Every row in a import is now assigned a unique identifier, which can be referenced in a row hook. This enables you to add or delete a row from within a step hook without trying to manage index positions.

Check out the new instance methods addRows and removeRows.

Bugs squashed 🐛

  • We resolved an issue where initialData was ignored when manualInputOnly was set to true.
  • We added an error message at the bottom of the column matching screen to alert the user to duplicate matches.
  • We improved the default mapping behavior of the required_with validator.

Today we are very excited to announce a brand new UI for Dromo!

Upload step

We've given the Dromo Importer a complete makeover, with a strong emphasis on usability - from a new customer importing their data for the first time to a support engineer running imports every day.

The new UI is available today, to everyone! To upgrade your importer, you only need to upgrade your Dromo SDK package (dromo-uploader-js, dromo-uploader-react, or dromo-uploader-angular) to version 2.0.0 or higher.

That's it! This update is 100% backwards compatible with all existing Dromo installations. This includes any style overrides you have configured to match Dromo to your branding.

Here are some highlights from the new UI:

Streamlined header row selection

Header row selection

Your users can quickly click on the row containing column headers.

Simplified and intuitive column matching

Column matching

Users can see at a glance columns that were automatically mapped and what columns remain.

Column data is hidden by default, but just a click away for reference.

We've also added a new feature enabling users to add required columns as empty columns for files that may be missing required columns entirely.

An all-new data wizard

Auto-clean data

We've moved select field value matching from the column matching step to a new step dedicated to bulk operations to get your imported data into shape.

Select value matching has been supercharged with a much more powerful AI matching algorithm.

This is just the start for the Clean Data step - we're excited to add more great tools to enable your users to fix up their imports in record time.

Rich error export in the review step

Review step

Of course, the Data Review step got a glow-up to match, and also learned some new tricks! Users can now export all data in its current state, or just rows with outstanding errors, directly from the Review step.

Errors are exported as richly formatted Excel files, with all of the validation errors intact and available for reference.

Excel export

We've been perfecting the new Dromo UI for months, and we can't wait to hear what you think about it. Give it a try today!

Excel parsing in private mode

With the release of V2, we are also bringing another great feature out of beta.

The Dromo Uploader now offers parsing of Excel files (XLS and XLSX), even in private mode, out of the box. By parsing the Excel file directly in the end user's browser, we're able to accept every common spreadsheet format without any data ever being sent to Dromo's servers.

At Dromo, we're deeply committed to data privacy, and this is another key part of our trustless architecture.

Browser Excel parsing is enabled by default in v2, and you can customize this behavior with the browserExcelParsing setting.

Congrats on making it through the ides of March intact! Here's what's new in Dromo:

Additional settings when using the Schema Builder

Previously, if you were deploying an importer with a saved schema identifier (as opposed to the full JavaScript SDK), you were limited to the parameters available in the Schema Builder interface. Now you may change the developmentMode and headerRowOverride behavior dynamically, outside of the Schema Builder. More details are available in the docs.

Broader file type support

Dromo now offers support for all the legacy Excel formats (Excel 2007+, Excel 97-2004, Excel 2.0-5.0), spreadsheets from Lotus 1-2-3, Quattro Pro, Works, OpenDocument, Uniform Office Format, and Numbers, as well as DIF files, HTML tables, and RTF tables.

Require mapping for any field

Historically, the user only had to map required fields, in which cas any record missing a value would raise an error. Requiring mapping was tightly coupled with requiring values. But in some instances, you might want to require that a column appear in the final dataset without necessarily requiring a value for every record.

To support this, we have added a requireMapping boolean to the field object. When set to true, the user will not be able to progress to the data review screen unless this field has been matched to a column in the input file. More info is in the docs.

Version 2 is on the horizon

The entire team is heads down building the next generation of the Dromo importer. In addition to a cleaner overall design, it will feature a more intuitive column matching process, offline editing capabilities, and more powerful artificial intelligence. Stay tuned!

We've got a lot of great updates and improvements to share with you, so let's get right down to it.

The Schema Builder

First of all, if you haven't tried our fantastic Schema Builder yet, then run, don't walk over to the Dromo Dashboard to give it a spin!

The Schema Builder enables you to create full-featured data import schemas without writing a line of code. Just add your fields, define types and validations, give your schema a name, and if you like, tweak the appearance of the importer to match your branding.

Watch the video below for a quick overview, and try it yourself!

Dromo Express

We think the Schema Builder is so great that we created a new Dromo subscription centered around it!

If you want to get started with Dromo in a matter of minutes and don't need the power features of Dromo Pro, then Dromo Express may be perfect for you, and at an unbeatable price.

Find out more about Dromo Express here!

Bring Your Own Storage

When it comes to balancing data privacy requirements and data processing capabilities, Dromo offers an unprecedented number of options, and we think Bring Your Own Storage will hit the sweet spot for many organizations.

With Bring Your Own Storage, you get the best of both worlds: your imported data never transits Dromo's networks or servers, and you get data persistence and remote access. We achieve this by uploading the import results directly from your end-user's browser to your cloud storage bucket. We support AWS S3, Azure Blob Storage, and GCP Cloud Storage.

If you are interested in learning more about Bring Your Own Storage, get in touch with us! We'd love to tell you more.

Hidden fields

Dromo's family of hooks allow you to programatically validate and transform your user's imported data using any logic you can dream of. You can use hooks in conjunction with virtual fields to compute and store derived data from the imported file.

Sometimes, you may not wish to show these virtual fields to your users.

For example, suppose you are importing a CSV of addresses with fields for street address, city, postal code, and so on. You could use a row hook to connect with a geocoding service to get a latitude and longitude for each address. You want to import these corresponding coordinates, but you don't want your user to be able to see or edit them.

This is the kind of problem that hidden fields solve. They allow you to attach internal metadata to your imports, without displaying it to the user.

And they are super easy to use! Just pass the hidden attribute when defining your field, either in your base schema or with the addField method.

Removing fields

Dromo recently added the ability to remove fields, which allows you even more power and flexibility when defining your schema.

One common example of when you would want to remove fields is when you are concatenating two fields together. You could be importing a "full name" field, but your customers have files with separate first name and last name columns. In this case, you could define first name and last name columns in your schema, which your customers would match to their existing columns. Then, using hooks, you can concatenate the data in these columns into a new virtual field for the full name.

Previously, you would be stuck now with three columns – the imported first and last name columns, and the full name column which you will ultimately import.

Now, you can simply call removeField with the old first and last name columns and continue on in normalized data bliss!

As always, you can find more info in our docs.

Dynamic select options

Select fields are the perfect solution when you need to import a field with a list of valid options, giving your user an easy dropdown menu to choose.

Sometimes, however, the list of valid options may change based on other data in the row. For example, the list of valid states and provinces may change based on what country a row has.

Row hooks have gotten even more powerful, and now enable you to change the set of valid select options for a given field on a row-by-row basis. You can do this simply by returning a list of selectOptions for the given field from the row hook - read more here!

More powerful AI column matching

We're very excited to roll out a new AI engine powering our automatic column matching experience. This upgraded matching engine will result in even better column match suggestions, powered by some of the best AI technology on the market.

There's no action needed on your part – your users are already breezing past the column matching step!

More languages available

The Dromo Importer is fully localized, and we are happy to announce several more languages that are available now! This brings the full list to:

  • English
  • Chinese (Simplified)
  • Chinese (Traditional)
  • French
  • German
  • Indonesian
  • Japanese
  • Korean
  • Spanish
  • Thai
  • Vietnamese

Wrapping up

That was a lot of exciting news in one update!

We've got a lot more improvements and features in the works that we can't wait to share with you. Stay tuned!

Greetings, Dromaniacs, and happy New Year!

New plans for every product

Dromo has simplified its pricing model again. Now we offer three plans for every product: Flex, Unlimited, and Enterprise.

The Flex plan is a hybrid fixed/pay-as-you-go option that charges a modest flat fee for a generous monthly import allowance, and a small variable fee for additional imports each month. NB: imports in development mode are still free, and do not count against your monthly allowance. The Flex plan is well-suited for small teams with low or irregular import volume, or larger teams that want to experiment with an off-the-shelf solution on a monthly basis before making a bigger commitment.

An Unlimited plan allows for unlimited schemas and unlimited usage for one fixed annual fee. Unlimited is perfect for teams with moderate import volume who do not want the hassle of worrying about overages or variable fees.

An Enterprise plan is required for certain advanced features (such as on-premise deployments and Bring Your Own Storage) and support options. It is customized for each client in consultation with the Dromo support team.

Demo mode

Dromo has updated the free tier to include demo mode, which is engaged by default when using the Dromo importer with developmentMode=true without a paid plan. Demo mode limits the number of rows that may be uploaded at once, the number of schemas that you may define in the dashboard, and the number of uploads that will be saved in the backend. After upgrading to a paid plan, demo mode is automatically superseded by development mode.

Bugs squashed 🐛

  • Unique constraints now work with numbers as well as strings
  • Whitespace is now stripped from select options in the same way as for column headers
  • Fixed a bug that caused the column matching screen to prevent users from escaping if they had any unmatched columns

Greetings from Dromo HQ!

This week we have a whole smorgasbord of exciting news to share with you.

No cons, only Pro

First of all, we have debuted our new Dromo Pro plan, which takes the place of the Growth and Scale plans in the Dromo lineup.

Dromo Pro is designed to be a flexible plan which will adapt to your needs, whether you are importing thousands of small files every month, a smaller number of large files, or anywhere in between.

Dromo Pro operates on the concept of credits. Credits are consumed by each completed production import based on the size of the imported data:

Row volumeCredits consumed
1 - 101 credit
11 - 1002 credits
101 - 1,0003 credits
1,001 - 10,0004 credits
10,000+5 credits

Dromo Pro includes 500 credits, and you can add more credits in increments of 100 to match your needs.

We think Dromo Pro is a great billing model to support any data importing use case.

You can find more information on our beautiful new website. There, you can also find some sneak peeks at our upcoming products that will be joining Dromo Pro.

A new dashboard to match

You may have also noticed that we released a completely overhauled dashboard! We redesigned the dashboard with an eye towards usability, and we think it doesn't look too shabby, either.

You can use your dashboard to find account information, review imports, and manage your Dromo plan.

We've got plenty more exciting updates to the dashboard coming soon. Stay tuned!

And a documentation glow-up

We've also been hard at work completely revamping our developer docs to be easy to use and navigate, comprehensive, and provide guidance for common complex use cases.

Whether you are just getting started with Dromo or adding an advanced data transformation to your import, the docs have an answer for you only a click away.

Have a look, and let us know if there is anything you would like to see in our docs.

It's been a busy few weeks at Dromo HQ, and we've got some great improvements for you!

Validate the complete dataset before finishing

Sometimes, you may have the need to validate the full imported dataset before the user finishes. For example, you may need to check that a certain total number of rows were imported. Or you may need to check to see if any duplicates have been added to your database since the import was started.

The new beforeFinish callback enables you to do just that. It runs after the user clicks "Finish" and immediately before the onResults callback. The callback receives the full data and metadata in the same format as the results callback. You can perform any final validation on the data, and if there are issues that need to be resolved, you can return the user to the Review step with an error message.

Find more details in the docs!

React to changes in bulk

One of the most powerful tools in the Dromo arsenal is the row hook, enabling you to build custom transformation and validation logic that operates on full rows, and which fire both at the start of the import process, and any time the user makes any changes.

Dromo now offers a variation on the row hook. It works very similarly, except that instead of firing once for every row on initialization and once for every row after a change, it will only fire once on initialization and once per change action, regardless of the number of rows that have changed.

We call it the bulk row hook. Instead of receiving and returning a single record, it receives an returns an array of records, allowing you to react to changes in bulk.

For example, if a user pastes 50 rows into the uploader, the bulk row hook will fire once with the 50 rows.

You can find more about bulk row hooks here!

More control over the data you send to Dromo

Dromo's backendSync setting has been superseded by a new backendSyncMode setting, giving you more control over what you send to Dromo's secure backend.

The backendSyncMode setting has three options:

  • DISABLED is equivalent to backendSync: false. With this setting, none of your data is ever sent to Dromo.
  • FULL_DATA is equivalent to backendSync: true. This enables all of the features that our secure backend offers -- notably the import data API.
  • MAPPINGS_ONLY is a new option, and finds a happy medium between the two existing backendSync options. With this backend sync mode, only your field mappings (imported column headers to schema fields) are sent to and stored on Dromo's servers. This enables you to use the autoMapHeaders feature. However, the full import data is not sent to Dromo's servers, preserving any data privacy requirements you may have.

The nitty-gritty on the new backendSyncMode can be found here.

Read-only fields

You can now define fields as read-only by adding the readOnly: true parameter to the field spec. These fields will be visually distinguished in the Review screen, and will not be editable by the user.

Read-only fields are great when you want to populate a value exclusively using a row hook, and you don't want the user to be able to change that value directly.

Frontend license key domain restriction

The frontend license key is what you use in your frontend to load the Dromo Uploader. It is a publishable and potentially public-facing key.

Dromo now enables you to restrict the domains which may use your organization's keys. These domains will be the only ones allowed to load the Dromo Uploader, when not in development mode.

You can find this setting on the Organization page of the Dromo Dashboard.

Bugs squashed 🐛

  • When a user performs an import using manual input, there would sometimes be a jumpy user experience if the data was entered on any row except for the first. Now the import starts with only the row that the user entered data on, no matter what.
  • The cancel callback would sometimes fire after a successful import. The cancel callback now only fires when the user cancels.
  • If initialData was supplied, and the Dromo importer was closed and then reopened, the initialData would be lost. It is now preserved across multiple opens.

You'll have to excuse the brief lull here on the Dromo Changelog – we've been hard at work on some big new features which we are very excited to announce today. Strap in, because Dromo just got dreamier!

Data types for your fields

One of our most requested features, the new field types make it easy to give your users a great import experience for numbers, dates, times, and emails. And you can rest assured that these values will end up in your results as clean, well-formatted values exactly as you need them.

Together with Dromo's existing string, select and checkbox field types, and our extensive set of validators, it has never been easier to implement Dromo in your application in a way that exactly matches your users expectations and your application's data requirements.

Allow us to introduce the new types in a bit more detail!


Number fields in action

Any time you are importing any kind of numeric value with Dromo, number fields are there for you.

Number fields automatically read the input data as a number, and add a validation error to the cell if the input can't be parsed as one.

When displaying numbers to the user, Dromo provides many useful presets out-of-the-box for you to show numeric values to the user in an intuitive format. These include percentages, integers, currencies, fixed precision values, and more. If none of the built-in presets suit you, you can make your own!

Numbers are output to the result JSON as (maybe you guessed it already) numbers. If you want to get the output as a string in a specific format, that's an option as well.

Date, datetime, and time

Date, datetime, and time fields

Date and time parsing is notoriously finicky, but we've cooked up a great solution for importing temporal values into your application.

Dromo now has three new field types to handle every situation: standalone dates, standalone times, and combined datetimes.

Dromo handles importing these values in a variety of common formats, and displays these values to the user using the locale that you specify. If you want to get even more detailed, you can easily define a format of your own.

Temporal values are output by default as ISO-8601 strings. Of course, that's customizable too!


You have googled "email regex" for the last time! Dromo now supports validating email addresses just by declaring a field as the new email type.

Email, checkbox and select fields

All of these new types join our existing field types: select fields for giving your user a pick list, checkbox fields for boolean values, and of course, the trusty old string field.

Detailed information for all of the types can be found on the Fields page of our documentation.

We're excited to see how you use the new types to make great import experiences for your users! As always, we'd love to hear your thoughts and ideas about fields, how they work for you, and how they could be even better.

Angular SDK

Joining our vanilla JS and React SDKs, we're pleased to announce the Dromo Angular SDK! This new package makes it easy to implement the Dromo Uploader in your Angular application.

The Angular SDK provides a component that you can simply drop in to your Angular app, and you can give your users a fantastic import experience in no time.

The Angular SDK is currently in beta, and we would love to hear from you if you would like to use it in your application.

Export error rows as CSV

Dromo makes it easy for your user to find and correct data errors in the import process. Sometimes, it's not feasible to correct the errors all at once. Now, when there are outstanding validation errors, Dromo provides the option to download all rows with errors as a CSV file.

Export error rows dialog

Your users can then fix the errors offline, and reimport the data when ready.

New API endpoint to list uploads

If you use the backendSync feature, Dromo now offers a new API endpoint to list all uploads stored by Dromo for your organization. This is great for checking you haven't missed a webhook or performing any periodic cleanup you may need to do.

The endpoint is at /api/v1/uploads/ and you can learn more in the docs!

Access to output values in row hooks

When a row hook runs (either at the start of the review step, or when a user changes data), you get access to all of the data in that row. Previously, we would just expose the data in the format shown to the user. Now, row hooks also have access to each cell's outputValue, which is the value exactly as it will appear in the results.

For example, if you have a date field with value: "1/19/1988", that field would now have an additional key, with outputValue: "1988-01-19".

Wow, that was a lot! It's a banner week here at Dromo, and we hope you find all of these improvements useful. We always want to hear from you: comments, questions, feedback, cries of disbelief, or just saying hi. Drop a line!

React to row deletions

On Dromo's review screen, your users have the opportunity to delete any rows that shouldn't be there by right clicking on a row and selecting "Remove row".

If you need to react to this situation programmatically, this is now possible with row delete hooks. As you might guess, they will fire any time a row is removed, with relevant information about the removed row.

Give your user the low-down during slow-running hooks

If you have hooks that do long-running tasks like accessing slow external APIs, sometimes you have no choice but to keep your user waiting while they run.

Now, you can provide your users with some context while your hooks are running at the beginning of the Review step. Just set the reviewStep.processingText setting to the message you want to show the user.

The processingText setting in action

More metadata about fields and headers

Hooks unlock the full power of Dromo, allowing you to deeply integrate the upload process into your app. We are always looking for ways to make them more powerful, and one common request was to have more context about the original file and how it was mapped.

The REVIEW_STEP and REVIEW_STEP_POST_HOOKS hooks as well as the onResults callback now provide you with comprehensive metadata about all of the fields that will be present in the results. As always, full information can be found in the docs.

Is there something you would like to see in the hooks? Let us know!

Opt out of fuzzy matching

When your user imports a file, we do our best to save them time by matching the file headers to the fields in your schema. As with all fuzzy matching, it's possible for these suggestions to sometimes be wrong.

If you have some critical column matching that is evading our matching algorithms, you can now opt out of the fuzzy matching functionality by setting matchingStep.fuzzyMatchHeaders to false.

Bugs squashed 🐛

  • The Dromo uploader will no longer show a warning to the user when they go back from the Review step if they have not changed any data
  • Fixed buggy behavior when attempting to automap a field that no longer exists in your schema
  • Improved behavior when making rapid edits in combination with slow-running row hooks