Most Airtable bases are fed by a form. Job requests, client intake, timesheets, purchase approvals, event signups — the form is the front door, and everything downstream inherits whatever it lets through. Yet forms are usually the last thing anyone designs: someone clicks Create form, drags in every field, and ships it. Three weeks later the base is full of half-filled records, three spellings of the same company, and a Notes field doing the job of six.
This tutorial covers how to build Airtable forms properly: which form surface to use, how to branch, how to prefill, how to keep linked-record pickers from exposing your data, and how to stop duplicates and spam at the door.
Step 1: pick the right form surface
Airtable now gives you more than one way to collect a submission, and they are not interchangeable.
Classic form view. A form attached to a single table, shareable by link, no login required. Simple, fast, still the right answer for a public intake form.
Form page in Interface Designer. A form inside an interface, which means it can sit next to other pages, respect interface permissions, and be shown to logged-in collaborators or external users of that interface. Use this when the submitter needs to see anything else — their own past submissions, a dashboard, instructions — or when you need the submission tied to a known user.
A third-party form builder (Fillout, Jotform, Typeform, and similar) writing into Airtable via integration or API. Reach for one only when you need something Airtable genuinely does not do: multi-page forms with saved progress, file-size limits beyond Airtable's, payment collection, e-signature, or per-question logic more complex than Airtable's branching.
A rule of thumb: start with a native form, and treat moving to a third-party builder as a decision with a cost — another vendor, another integration to monitor, another place your data lives.
Step 2: design the fields before you design the form
A form is a view of a table. Bad forms almost always trace back to bad field design, and no amount of form styling fixes that.
- One fact per field. If you ask "What do you need and by when?" in one long-text box, you cannot filter, sort, or automate on either half. Split it:
Request type(single select),Needed by(date). - Prefer select over text for anything you will group or report on. Free text creates "Acme", "ACME Ltd", and "acme " in the same column. See our data quality tutorial for the cleanup you avoid by doing this.
- Do not ask for what you can derive. Region from country, quarter from date, priority from a formula. Every derived field you ask a human for is a field a human can get wrong.
- Mark fields required in the form, not in your head. Required is a form-level setting in Airtable; the underlying field has no required constraint. Anything created by API, automation, or paste bypasses it entirely, so put a validation formula behind anything critical.
Step 3: branching with conditional logic
Airtable forms support show-if conditions: a field appears only when an earlier answer matches a condition. This is the single highest-value form feature and the most under-used.
A worked example for a consulting intake form:
Request type— single select:New base build,Fix an existing base,Integration,Training,Other.What is broken?— long text, shown only ifRequest typeisFix an existing base.Which systems?— multiple select, shown only ifRequest typeisIntegration.Team size to train— number, shown only ifRequest typeisTraining.Budget range— single select, always shown.
Three practical rules for branching:
- Condition on selects, not on text. Conditions on free text are brittle and unreadable six months later.
- Keep the tree one level deep where you can. Conditions that depend on conditions are hard to test and hard for the next person to change.
- Test every branch. Open the live form URL and walk each path end to end. Hidden-but-required fields are the classic failure: a field marked required inside a branch that never shows can silently block or confuse submitters depending on configuration. Submit a real record on each path and look at what lands in the table.
If your branching starts to look like a decision tree with eight leaves, that is usually two or three separate forms pointed at the same table, each with its own link and its own prefilled Request type.
Step 4: prefilled and hidden fields
Airtable form URLs accept prefill parameters. Append ?prefill_<Field name>=value to the share link and the form opens with that value filled in. Combine it with ?hide_<Field name>=true to prefill a value the submitter never sees.
https://airtable.com/app.../pag...form
?prefill_Source=Newsletter%20March
&hide_Source=true
&prefill_Request+type=Training
Field names with spaces are URL-encoded (%20 or +), and the parameter must match the field name exactly, including case. This unlocks a lot:
- Attribution without tracking code. One form, a different
Sourceprefill per campaign, newsletter, or partner. Now your reporting can group by channel. - Per-client links. Prefill and hide the
Clientlinked record so a vendor's submissions arrive already linked to the right account. - Automation-generated links. In an automation, build the URL with the record's own values and email it. A "confirm your details" form that arrives pre-populated gets answered far more often than a blank one.
Two cautions. Prefilled values are visible in the URL and editable by anyone who reads it — treat hidden fields as convenience, not security. And if you rename the field, every link in the wild silently stops prefilling; keep a small table of the prefill links you have published so the rename checklist has something to check.
Step 5: linked records without leaking your data
Putting a linked-record field on a public form is the most common way bases leak. By default the picker can let a submitter search your entire Clients or Projects table, which means an anonymous form can become a customer-list browser.
Safer patterns, in order of preference:
- Do not ask. Prefill and hide the link (Step 4), one link per client or project.
- Limit the picker to a filtered view. Airtable lets a linked-record field restrict record selection to a specific view; point it at a view containing only records that are safe to show, and check what the record titles reveal.
- Collect a key instead. Ask for an order number or email, then have an automation find the matching record and set the link server-side. The submitter never sees the table.
- Move the form behind a login. An Interface Designer form page shown only to named collaborators, with
Current userfilters doing the scoping — see Interface Designer in 2026 and our client portals guide.
Also check the field's allow adding new records setting. Left on, a public form lets strangers create rows in your Clients table, complete with whatever name they typed.
Step 6: de-duplicate on submit
Forms create records; they never update them. Ask the same customer to submit twice and you get two records. Since Airtable has no unique constraint, handle it in an automation:
- Trigger: When a form is submitted (or When record created on the table).
- Step: Find records in the same table where a normalised match key equals the new record's key. Build the key as a formula field, for example
LOWER(TRIM({Email})), so casing and stray spaces do not defeat the match. - Step: Conditional logic. If the find returned more than one record, set
Possible duplicateto true and link the new record to the original; otherwise continue as normal. - Optional: Update record on the original with the newer values, then mark the new submission as merged, so humans work from one row.
Do not delete duplicates automatically. Flag them into a review view and let a person merge, because linked records hanging off the row you delete disappear with it.
Step 7: spam, abuse, and volume
Any public Airtable form URL will eventually find a bot. Practical defences:
- Ask one question a bot answers badly. A required single select with a business-specific option list filters out generic form-spam scripts better than any honeypot.
- Route, do not block. Send every submission into a
Triageview. An AI field agent or a formula on the email domain can tag obvious junk so it never notifies anyone. - Keep notifications conditional. Trigger Slack or email alerts on "record matches conditions" (not spam, score above a threshold) rather than on every creation, or the team learns to ignore the channel.
- Watch attachments. Attachment uploads on a public form consume workspace storage that you pay for. Cap what you ask for, and see our attachments at scale tutorial if files are central to the workflow.
- Rotate the link if it gets abused. Regenerating the form share link kills the old URL — which is also why the prefill-link inventory from Step 4 matters.
Step 8: what happens after submit
The form is half the experience. Decide deliberately:
- Confirmation message. Say what happens next and in what timeframe. Include a contact route for people who realise they made a mistake.
- Redirect URL. Native forms can redirect to a URL after submit; send people to a thank-you page you control so analytics and any follow-up sequence can pick them up.
- Receipt email. An automation that emails the submitter a summary of what they sent prevents half your support volume. Include a prefilled edit link if they need to correct something.
- Internal notification with context. Notify with the fields that decide who picks it up, not the whole record.
When Airtable's own form is not enough
Switch to a dedicated builder when you need:
- Payment at submit. Collecting card details means Stripe and a form platform that integrates with it; do not attempt to capture payment data into an Airtable field.
- Long, saveable forms. Multi-page applications where people need to come back tomorrow.
- Complex validation. Regex patterns, cross-field arithmetic, address lookup, or calculated quotes shown live to the submitter.
- Compliance requirements around consent capture, e-signature, or data residency.
When you do go external, keep the base as the system of record: write submissions in via API or a documented integration, log every inbound payload, and alert on failures the same way you would any other automation you cannot afford to have fail silently.
A form review checklist
Run this before you publish any Airtable form, and once a quarter on the ones already live:
- Every field is one fact, and selects are used wherever you will report.
- Required fields are set, and anything critical also has a validation formula behind it.
- Every conditional branch has been submitted once on the live URL.
- No linked-record field exposes a table you would not publish; allow adding records is off unless you meant it.
- Prefill and hide parameters are documented in a table, with the field names they depend on.
- A dedupe automation exists, flagging rather than deleting.
- Submissions land in a triage view, and notifications are conditional.
- Confirmation text, redirect, and receipt email are all set.
BaseBrainers builds and audits Airtable intake systems — forms, portals, triage automations, and the schema underneath them — as part of our Airtable database design and development work. If your front door is letting messy data through, tell us about it.