Iām trying to find the best way for multiple users to import data (from XLS or CSV files) into the same base ā ideally directly through an Interface rather than the Extensions panel.
Weāve tried the CSV Import Extension, but:
The import mapping doesnāt save across users.
Even for the same user, it sometimes resets or forgets the previous mapping.
Thereās no way to create or reuse āimport templatesā for different file types or tables.
What weād really like is:
A way for different users to upload a file (XLS or CSV) through an Interface form or button,
Automatically import it into a target table using a consistent field mapping,
And ideally store those mappings permanently (so no need to re-map each time).
Is this possible to be done directly with airtbale? Has anyone found a good workaround or script/automation setup that achieves this? Would love to hear if thereās a best-practice approach ā either native or via scripting/integration tools.
Page 1 / 1
Airtable offers the ability to import CSV data directly into interfaces, but it comes with someĀ major limitations:
It requires a Business or Enterprise Plan.
It only works on list-based interfaces.
It canāt import data into linked record fields or attachment fields.
I donāt know if it remembers the mapping between imports, but even if it does, each user will still need to setup their own mapping during their first import.
The user can accidentally change the mapping during each import.
You canāt setup different ātemplatesā on the same page for different types of imports.
Works on ALL Airtable plans (not just Business and Enterprise Plans).
Works with ALL Airtable field types, including linked record fields and attachment fields.
The fieldĀ mapping is locked in and unchangeable by the user.
The field mapping is set in advance, so the user doesnāt need to set this during their first import.
Works on ALL interface pages (not just list pages), because your users will just click on a button to open a cloud drive folder to drop in their CSV files.
You can setup different ātemplatesā for different types of importsĀ by giving different buttons that lead to different cloud folders, each folder triggering a different automation. (This could be done with the same folder too, but itās way more complicated to setup.)
As mentioned above, your users would simply need to drop their CSV files into a cloud drive folder, which you can give them quick access to via a button that you add to any of your interface pages.
I demonstrate how to import CSV files into Airtable using Make onĀ this Airtable podcast episode.Ā This video willĀ give you a step-by-step walkthrough on how to set this up in Make.
Make (mentioned by Scott above) is great, and it seems that they have launched really interesting features these past few days.Ā Having said that, I usually solve this issue and (and all of my integrations/automations using n8n).
You might want to take a look at a high level comparison on the 3 biggest automation players here. (Might need to update some items given Makeās latest releases).Ā
Hmm, how bigās your CSV file?Ā If itās <100k characters (the max characters in a long text field) and <8k rows (max runs of a repeating group), you could try just using an automation + script to handle it and Iāve set it up here for you to check out.Ā Ā
The idea is to get them to paste the CSV data into a long text field and use a script to split out the CSV data with the headers so that you can use it in an automation with a repeating group and set the mapping yourself in the automation in a āCreate recordā step:
This is a basic example, but you could create one automation per CSV type and have your users select which CSV type theyāre importing so that the correct automation (with the correct mappings) gets triggered
let { csvData } = input.config();
// split into lines let lines = csvData.trim().split('\n');
// extract headers let headers = lines[0].split(',');
// map each line into an object using headers let data = lines.slice(1).map(line => { let values = line.split(','); let obj = {}; headers.forEach((h, i) => obj[h.trim()] = values[i]?.trim()); return obj; });
output.set('data', data)
Ā
If itās >10k chars and >8k lines, youād need to use a workaround, and oen of the popular ones is to upload the CSV and then use a script to read the CSV then create the records for you.Ā Hereās one where someone provided a script that worked for them:Ā
Pretty straightforward script really, try tinkering with ChatGPT for a bit and you should be good to go