Airtable forms give you the ability to easily collect information from a wide variety of users and capture the data in a structured way in your Airtable base.
Using Airtable’s form builder and easy base UI, you’ll be up and running in minutes to create forms for any occasion, from a simple contact form to more complex order entry.
In this article, we’re going to do a deep dive into the functionality of Airtable forms. Don’t worry if you don’t need all of the information now as you build your first forms - this guide will help you whether you are a beginner or a seasoned expert in the world of form building.
What’s exciting about Airtable forms?
Easy to deploy
With most other form builder tools, you have to carefully plan and map all of the different form fields that you want to collect information about.
But with Airtable, the heavy lifting has already been done when you first set up your base. All of the fields are automatically created for you on your form, all you need to do is decide which fields you want to add, remove or reposition!
Works with the Airtable ecosystem
Data is data in the world of Airtable. It doesn’t matter if a record is created via a form or via a user entering it into the UI, you’ll get full access to the suite of Airtable tools, including automations and API, regardless of the subscription plan you are on.
Easy to manage
Simple embedding of forms, conditional logic to create personalized form experiences, creating different forms for a single base - you don’t have to be a technical wizard to start using Airtable forms. You’ll be up and running with the basics in minutes.
Airtable quick start
Creating a form view
A form, in Airtable world, is just another view of a table that you have. Airtable has many different kinds of views that you can utilize. The default is a grid view, but you can add your form view by clicking the plus button next to form under “Create…” (in the lower left-hand corner of the side panel.
Managing fields
If you’ve already created fields in the default Grid view, these will display and be available to use in the form. However, all because you have a field in your base does not mean you need to display it on the form. You can drag and drop fields from the form to the sidebar to hide them from this form.
You can also click the + button at the bottom to add a field to the table without having to go back to the grid view.
Field properties
By clicking into a field in the form editor, you toggle the switch to make the field required which will display a red asterisk next to the form field on the front end. The user submitting the form will be unable to submit the form until they have filled out the required fields.
In the screenshot below, you can see that the name of the field is First Name. You can override the field name with your own custom label (perhaps a question, such as “What is your first name?”) which will not rename the field in the grid view/base.
You can also add help text for the user. This provides additional context to the user about the type of information you expect they input into the form.
You can also choose to only display the field when certain conditions are met. We’ll dive deeper into some example of conditional logic later in this article.
Airtable form design
Airtable form design options are a bit lacking (see our section on limitations below). But if your Airtable workspace is upgraded to Plus, Pro, or Enterprise, you’ll be able to add a cover image across the top of the form, add a logo, and remove the Airtable branding on the form.
Cover image size: This image I would recommend doing something abstract as it will always render with a fixed height of 240px, and the width being dependent on the width of the device screen. This means that it will display differently depending on the screen size you are on.
Logo image size: The logo has a max-width of 200px. If you uploaded a logo that was 400px x 140px, it will display as 200 x 70.
Add a new record
The default behavior of an Airtable form is to create a single new record for each submission event that takes place.
This is why the form view is tied specifically to a single table, once the data passes through the form, the record is created which stores that data in the table.
It is feasible to create an Airtable form for multiple records, but it takes a little bit of automation magic to make it work. We’ll discuss this later in the more advanced topics.
Airtable form redirect
[This is a feature that requires an upgrade to Plus, Pro, or Enterprise] It can be a nice user experience to redirect the user to a custom branded page after they complete a form submission.
Even more important for some businesses is the ability to track form conversions (i.e., what percent of visitors to our site contacted us?) via Google Analytics/Tag Manager.
Having a dedicated redirect page allows you to inject the necessary tag or JavaScript to be able to track the conversion.
You’re certainly not restricted to having to build your own page for a redirect. If you just want the ability to have a thank you message displayed to the user, you can do that through the Airtable UI:
These options as the bottom of the form will also give you the opportunity to encourage or discourage additional form submissions by refreshing the form after 5 seconds, or prompting the user to submit another response.
Sharing forms
You can click the pink “Share form” button to copy the URL of your form and share with anyone via email or social media.
You can also grab the embed code if you want to embed it into a WordPress or other website.
If you want privacy options (such as restricting to a set email domain or assigning a password, you’ll need to upgrade to the Pro or Enterprise plan.
Airtable advanced form concepts
Linked Records
Using linked records with Airtable forms is a very powerful feature that many other simple form softwares do not contain. Instead of being limited to dropdowns, you can maintain the integrity of your base by relating records to one another.
When you have a linked record field type on your form, the form user will be able to select from available records by clicking the + Add button.
Then they’ll be able to select the record by searching by the name of the record and clicking on it.
This works for both N:1 relationships (choose a single value) as well as N:N (choose multiple values).
Lookup Fields
Unfortunately, however, there isn’t an out-of-the-box solution to display lookup fields alongside a selected linked record.
When you select a linked record, only the primary field displays:
This can still be a powerful option since you can control the behavior of your primary field (including concatenating several field values together with the formula field type).
But imagine that you were creating an order form and you wanted to select an item but also have the item’s price and an image of the item display when selecting it. This would be a great use case for displaying lookup fields alongside linked records, but this would require a different solution.
Creating dynamic Airtable forms with conditional logic
It’s best practice to only surface relevant form fields to customers. Doing so creates a more streamlined path since it reduces clutter, personalizes the experience for the user, and can even increase conversion percentage (for contact forms).
To get started, click into the field that you would like to display if some condition is met.
You’ll notice a switch that you can toggle, which will reveal the logic builder to create your condition rules.
One important thing to note is that the conditional logic relies on previous form input from the user. That’s why you are unable to add conditional logic to the first field on the form.
Any fields that you want to use in the conditional logic must come before (above) the field that will display conditionally.
In the screenshot above, I only want to collect Graduation Year if the person graduated from the college (is an alum).
In this case, I am using a multiselect field, since the participant might fall into multiple of these participant types.
The conditional logic I am using will display this field if the Participant Type has any of [these values] which in this case is an Alum.
That means that the user could be both a Parent and Alum, which would trigger the field to display, or a Faculty and Alum, or even just an Alum. In all of these cases, my field will be displayed.
Conditional fields can be daisy-chained together (Field C is dependent on Field B is dependent on Field A) which can allow you to create fairly innovative paths to display to the user based on their selections.
For the more technical folks: This logic is all happening on the front-end of the form, based entirely on the selection of the user. There is no ability out-of-the-box to dip into existing data records on the server (in a base) in order to render fields conditionally. To keep with the above example, we couldn’t tell from existing records in a base if the user is an Alum and adjust the form accordingly. We are relying on the user to share that information with us.
Airtable form automation
You can easily create automations for Airtable forms, most frequently to enrich form submission records, send out an email or notification, or to split or link records across multiple tables.
Automations start with a trigger, and Airtable has a “When a form is submitted” trigger perfectly suited for this:
When you select the trigger, you’ll also choose which table and form this is scoped to (meaning that you can’t run this single automation on all forms across your workspace or base, instead, just a single form).
From there, you can use any number of actions, such as sending an email, updating a record, or using one of the included integrations such as posting a notification to Slack about the recent form submission.
Limiting values in Airtable form dropdown
Since Airtable lets you create multiple form views for a single base, you might find that you want to limit available options in a single or multiselect field.
For a Homecoming registration form, we had options for Students, Parents, Alumni, and Faculty to attend.
But for an upcoming Family Weekend registration form, we want to limit it to students and parents - no faculty or alumni this time.
Rather than duplicating the field and removing options, we can choose to display only the subset we want on this form.
Airtable prefill form fields
One of the most useful features of Airtable forms is the ability to prefill data via URL parameters; this greatly simplifies the experience for the user if several of the fields can be filled out for them in advance!
URL parameters
URL parameters are not unique to Airtable. In fact, many of the most powerful websites in the world pass important information via URL parameters.
Take Google, for example.
When you enter a search query in the search bar, the URL that it takes me to is:
https://www.google.com/search?q=cats (followed by a bunch of other random characters you don’t need to worry about!)
You can identify the URL parameter as what comes after the ? question mark in the URL above.
In this case, the parameter is q (query) and the value is set to (=) cats.
Constructing URL parameters for Airtable form fields
Let’s say we are doing project management for a group of clients, and we want to send them a survey upon project completion about how well we performed.
We can start with two tables, Contacts and Surveys. Contacts will store the information we have on our clients including a First Name, Last Name, and Email (we’ll keep it simple for the example).
And in our Survey, we want the user to identify their First Name and Email, and then answer some questions about the project.
For any field name we want to prefill, we add the prefix ‘prefill_’ to the field name. So if we wanted a Name field, it would be prefill_Name=Dan. But in this case, I wanted to use First Name. Here is what that will look like:
Let's explain what's going on in the above snippet. You'll see a function called ENCODE_URL_COMPONENT and our fields wrapped in curly brackets.
ENCODE_URL_COMPONENT FUNCTION
Browsers don’t understand non-ASCII characters like spaces.
That makes it tough when we want to use prefill_First Name as it wouldn’t work. You can use a tool like https://www.urlencoder.org/ to convert these special characters into a format that is readable by the browser.
However, Airtable has made it so much easier by creating a ENCODE_URL_COMPONENT() method that does all of the heavy lifting for us right inside of Airtable! We can simply wrap our field name to url encode them.
This works for the actual values we are injecting from our Airtable record as well.
It’s even more important that we use ENCODE_URL_COMPONENT for our field values, because while the field names typically stay the same, the values might include all sorts of interesting characters like apostrophes, @ in email addresses, and names that use special characters.
Form Field Values {my Field}
To get the field value from the form type in the field name wrapped in curly brackets. This makes it dynamic.
Prefilled Form Link Click
In the end, we’re left with our complete form URL with parameters.
Now when we click the Survey Link one the Contacts table, the URL will have the correct values needed to autofill the Airtable form.
Since we want to set the First Name field on the form to the value of the First Name field in our Contacts record, it would look like this:
This isn’t restricted to only text fields! Ratings, Time, Numbers, Single and Multi Selects, even Linked Records can all be prefilled with URL parameters.
Using an Airtable form to update or edit existing record
Many form builders are used purely for the creation of new records, but by using a bit of automation magic, Airtable allows us to make changes to existing records.
There are a couple of approaches to make this happen, I’ll show you both ways of handling it.
Use Case: Our company wants to make sure we keep our client information up to date, so we periodically send out a form for clients to update their contact information.
Option A: Relies on Prefills
We’ll use two tables, one for Contacts, and the other for Contact Updates (the latter of which stores our form submissions).
Both tables will have similar fields for First Name, Last Name, Phone and Email, since we want those fields to be able to be updated by the client.
We also want to add a field called Contact ID to the Contact Updates table that links to the Contacts table (single, not multiple records). This will store the record ID of the Contact record from the other table (which will allow us to perform our automation after the fact).
We can construct an Update Info formula field on the Contacts table just like we did for our other prefill example above, mapping any of the relevant fields. The only piece that should look considerably different from our prefill example above is that we are setting the Contact ID field equal to the RECORD_ID() which autofills that field with the corresponding Contact record unique identifier.
Now we have all of the pieces that will allow us to prefill values on our form. If I click on the Update Info URL, we’ll see the prefilled values:
This is a pretty slick user experience for your client! Rather than expecting them to fill in all of the information themselves, they can quickly scan over the form to see if anything needs updating.
The only thing that looks a little funky here is the Contact ID field at the top. If the client were to x off the name, they’d be able to choose a different Contact to associate this with. That’s not ideal for us.
Hiding fields on Airtable forms with URL parameters
Thankfully, Airtable has a way that we can control whether or not a field displays on a form via URL parameters!
Remember how we prefill fields by adding the prefill_ prefix to a field name?
We can add hide_ prefix and set the value to true so that it doesn’t appear to the end user.
Since we want to hide the Contact ID, we would add this to the end of our formula:
We’ve finished all of the work we need to do on our form, but at this point when a user submits the form all it does is create a new record in the Contact Updates table. It’s not actually updating the main Contact record.
Our final step is to create an automation that will update the Contact record for us.
Automation to update record after Airtable form submission
Create an automation and select a form submission trigger. Choose the table that stores the form entries, in this case, Contact Updates. Select the corresponding form.
Select the action to “Update Record.” Configure it to run on the Contacts table, and select the Contact ID as the Record ID. You’ll want to click on the little arrow next to Contact ID to set the “Display as” to ID instead of Name (the default) in order to pass validation.
Now we just need to map values from our form submission to the fields in our Contact record we want to update.
Run the test step, enable the automation, and we should have a fully functioning form to edit existing records!
Try it out! When you submit the form, go back to the original Contact record and within a few seconds, you should see the changes. Open up the Contact record and in the Activity panel, you can see the update activity.
Creating multiple records with an Airtable form
By default, Airtable creates a single record for a form submission. In the previous example, we were able to use a form submission event to update a record from a different table.
But what if we want to create multiple records across multiple tables in a single base?
Use Case: Let’s say we’re a B2B sales organization, utilizing Airtable as a CRM. We have a form on our website for lead generation. As a B2B organization, we have multiple contacts at each enterprise company we work with, so we track a table of Accounts (the companies themselves) in addition to a table of Contacts.
When a new submission event occurs, we want to see if we’re already working with that Account and create and associate that Contact with the existing Account. Or, if it’s a brand new account, we want Airtable to create it for us.
Table structure to create multiple records
We need three tables. Accounts, Contacts, and Contact Submissions (for the form submissions).
Accounts: You can have as many different fields for the Account as you’d like, but the only two we need for the purpose of this exercise are the Name (primary field) and a new single line of text field called “Email Domain.”
Contacts: Again, feel free to have other fields, but we need a Name, Email, and a link to the Accounts table (only allowing for a single Account, not multiple).
Contact Submissions: Name (primary field) and Email are the two essential ones for the client-facing form. We’ll also create a formula field for Email Domain and another formula field for Account Name.
Formula Fields to separate email domain and account name
Email Domain
The email domain is what we’re going to use as a unique identifier to match to the correct Account. This formula will let us separate the domain from the recipient, i.e. dan@automationhelpers.com → automationhelpers.com
Account Name
Now that we have the email domain, we’ll strip everything after and including the “.” so tesla.com → tesla. In the automation we’ll capitalize the first letter as well, so it will be Tesla. Of course a company’s name might not perfectly align with their email domain, but it’s a pretty good placeholder until the sales rep would update the information.
Automation setup
Fair warning, I think you’ll find it easier to watch the video on this portion, but I’ll do my best to explain each step!
Start with a Form Submission trigger on the form for the Contact Submissions table
Create a Find Records action on the Accounts table based on the condition where Email Domain on the Account is equal to the value of Email Domain in the form submission record. This will check to see if an Account already has that email domain.
Create a second Find Records action on the Contacts table based on the condition where Email on the Contact is equal to the value of Email in the form submission record. This will check to see if there is already a Contact with that email address.
Create Record in the Accounts table. Set the Name equal to the Account Name value and the Email equal to the Email value from the form submission.
Create Record (a second action) in the Contacts table. Populate the Name and Email from the form submission, but now we’ll want to set the linked Account equal to the previous Create Record (Account) step that we just completed. From Create Record, select the Airtable record ID. You’ll want to make sure to perform the actions in this order, as the id from the record created in 4a is now used in this step 4b.
We can make a second conditional action if the record length for the returned Accounts = 1 and the returned Contacts = 0. In this case, we’ve identified an existing Account we want to create a new Contact and associate it with.
Create Record in the Contacts table. Populate Name and Email as before from the form submission. Instead of populating the linked Account with a newly created Account ID, we’ll want to grab the list of Airtable record IDs from the Find Records (Account) action.
Now it’s time to enable the automation and test out the form! You should be able to create new contacts for both new and existing accounts.
While your particular use case may differ in which records you need, you should be able to use these principles to use Airtable forms to create multiple records across multiple tables.
Airtable form limitations
You might find that certain limitations of Airtable forms make you a bit hesitant. Airtable integrates with a number of popular third party solutions that you may want to use as an alternative, including Jotforms, Gravity Forms, and specific add-ons designed for the Airtable community.
If you’re like me, you’ll probably find many situations where Airtable forms get the job done, and others where you want to use another tool. There’s no right or wrong answer, it just comes down to the particular use case you’re working on.
Helping clients around limitations of software is one of our favorite parts of being Airtable specialists. Whether it’s a workaround, a bit of custom code, or even a different integration, we’re here to help.
That being said, here are some of the top limitations I perceive in Airtable forms:
Adding images, video, or other embeds
Unlike many other form builders, you cannot add images or other media into form questions. You’d have to utilize a third party solution instead.
Adjusting Airtable form CSS
Most form builders have a Custom CSS section that let you override the base stylings, but Airtable has not provided this ability. You are unable to adjust the CSS on your website to affect the content inside of the Airtable embed iFrame as well.
Airtable form validation
This is a big one, especially if you’re using forms in a way where the data needs to be particularly accurate.
Airtable has some very limited validation for certain field types. For example, if you tried to type text into a date field, it would clear out the text before you are able to submit the form.
But this doesn’t help in the countless other situations that need form validation. Want to book appointment, but only for dates in the future? No way to restrict that.
Want the user to input a purchase order or sales order in a specific format? No way to inform them that they put the wrong format in.
Airtable form sections
When you have a simple form with a few questions, there is less of a need to divide questions into pages or sections. But when you have any sort of complexity, it’s nice to be able to segment content into sections to make information easier to process for the end user.
One trick you can use (not great for database design, but fine for appearance) is to create a single select field with no options, and then choose to show field as a list.
Additional questions
Can I set a default value for a form field?
By standard definition, no. Many field types will allow you to set a default value for a field when configuring the field in the grid view.
However, this only affects records that are created in the UI of the application and not when created via a form.
However, you can prefill form fields with values of your choosing via URL parameter (we discussed this method above in the article).
How do I make an Airtable form timestamp?
Airtable makes this really easy for us, no fancy automations needed. Airtable captures the datetime that the record was created, so you can just add a formula field to your table that captures the submissions with the method: