+1 (415) 612-6492

Airtable Client Portals: Secure External Interfaces, Forms, and Shared Views

Sooner or later every serious Airtable base gets the same request: "Can the client see their own records?" Or the vendor, the contractor, the franchisee, the applicant. The instinct is to invite them into the workspace as a collaborator, which is almost always the wrong answer: they see the whole base, they consume a paid seat, and one accidental sort or delete becomes your incident.

This tutorial covers the three real ways to expose Airtable data to people outside your workspace, how to pick between them, and the filtering patterns that make sure each external person sees only their own rows.

The three options, honestly compared

OptionExternal user canCosts a seatRow-level filtering
Form (or form page in an Interface)Submit new records onlyNoN/A — write only
Shared view linkRead a view; optionally commentNoOnly via a static view filter
Interface portal (shared with a user list)Read, and edit permitted fieldsDepends on plan/seat typeYes — dynamic, per viewer

A rough decision rule:

  • Intake only (requests, applications, order forms): use a form.
  • Broadcast the same filtered slice to everyone (a public status board, a price list): use a shared view link.
  • Each person must see their own records, and maybe update them: build an Interface portal.

Do not try to fake the third case with the second. A shared view link is a bearer URL — anyone who has it sees everything the view contains. "Send each client a link to their own filtered view" scales to about four clients and then becomes an unmaintainable pile of near-identical views, each one a leak waiting to happen.

Pattern 1: intake forms that produce clean records

Forms are the easy win, but most teams leave value on the table.

  1. Build the form as an Interface page, not just the legacy form view, if you need conditional logic, multiple pages, or a themed layout. Both write to the same table.
  2. Never expose your internal status fields. The form collects facts from the submitter; Stage, Owner, and Priority are yours.
  3. Use conditional fields so a submitter picking Existing project gets the project reference question and a new prospect does not.
  4. Add a hidden or prefilled source field. Prefill the URL with the campaign or partner name so you can attribute submissions later: ?prefill_Source=partner-acme&hide_Source=true.
  5. Set a redirect to a thank-you page on your site so you can fire analytics and show next steps.
  6. Validate on the way in. Required fields, number ranges, and a single-select instead of free text will save you an hour of cleanup a week.

Then add an automation on record creation: notify the owner, stamp a Received at date, and set the default stage. Do that in the automation, not the form, so records created by API or import get the same treatment.

Attachments from strangers

File upload fields on public forms are a small security surface. Cap the count, tell submitters what formats you accept, and route submissions with attachments through a review step before anything gets opened. If you are in a regulated environment, prefer a link-to-storage field over accepting arbitrary uploads.

Pattern 2: shared view links, used carefully

A shared view link publishes exactly what the view shows: the filtered rows, the visible fields, the current field configuration. Guidelines:

  • Hide fields explicitly. Anything left visible is public, including internal notes people paste into a long text field.
  • Filter on a checkbox, not on a formula you might edit. A Publish externally checkbox is auditable and obvious to whoever inherits the base.
  • Set a password and, where available, restrict the link. Then record who received it — a shared link with no owner is technical debt.
  • Rotate. When a project or engagement ends, delete the link. Regenerating changes the URL; deleting removes access.

One genuinely good use: a read-only, filtered "live status" view for a client during a project, alongside your normal reporting. It costs nothing and cuts status-update emails dramatically.

Pattern 3: a real portal with Interfaces

This is what people usually mean by "client portal". The mechanism: you share an Interface with named external people, and you filter its content by the logged-in viewer.

Step 1: model the viewer

Create a Contacts (or Portal Users) table with, at minimum:

  • Email — must match the email the person signs in with, exactly.
  • Account — link to the Accounts / Clients table.
  • Portal access — checkbox, so you can revoke without deleting.

Every record that a portal user should see needs a path back to their account. On Projects, add a link to Accounts; on Tasks, a rollup or lookup that carries the account down. Portal filtering only works when every table exposed in the portal has a field you can compare against the current viewer.

Step 2: filter by the current user

In the Interface element's filter, choose the account or contact field and compare it to the current logged-in user rather than a fixed value. That single filter is what turns one Interface into N private portals. Apply it to:

  • every list, grid, and record picker on the page,
  • the record detail page the list navigates to,
  • every chart or number element (an unfiltered count leaks aggregate information),
  • any linked-record field the user can edit, which otherwise offers the full record list in its picker.

Missing one element is the classic portal bug. Test it explicitly.

Step 3: lock down what they can change

Decide field by field. A typical client portal is read-only except for a comment field, a status confirmation, and an attachment upload. Put editable fields in a distinct section so the boundary is visible, and keep internal fields — margin, internal notes, owner workload — off the page entirely rather than merely read-only. Anything on the page can be read.

Step 4: share, then verify as the user

Share the Interface with the specific email addresses (or a group) and choose the lowest permission that works. Then verify: open the portal in a private window signed in as a test external account you control. Confirm you see one account's records, that navigation cannot reach another account's record, and that empty states look intentional rather than broken.

Re-run that test after every structural change. Portals fail quietly.

Pattern 4: when Airtable is not the front end

Some requirements are outside what native sharing does: your own branding on your own domain, anonymous self-service signup, thousands of external users, or complex per-field permission rules. At that point the pattern is Airtable as backend, a separate front end on top:

  • A portal tool (Softr, Noloco, Pory and similar) reading Airtable through the API, with its own user list and row-level rules.
  • A custom app calling the Airtable REST API with a server-side token, so the token never reaches the browser.

Two rules if you go this way. First, never ship an Airtable token to client-side code — proxy every call through your own server. Second, treat the external user list as the source of truth in one place only: either the portal tool or Airtable, never both, or you will spend your life reconciling who still has access.

Also mind the read pattern. External portals hitting your base on every page load can run into API rate limits during traffic spikes; cache aggressively and keep list queries filtered server-side.

A short pre-launch checklist

  • Every element on the portal page is filtered by the current viewer — lists, details, charts, and linked-record pickers.
  • No internal-only field is present on any external page.
  • Editable fields are deliberate and enumerated.
  • A revocation path exists (Portal access checkbox, group membership, or link deletion) and someone owns it.
  • Shared links are inventoried, passworded where sensitive, and dated for review.
  • You have logged in as a real external test user and tried to reach someone else's data.
  • Offboarding is part of the client close-out checklist, not an afterthought.

Get those seven right and an Airtable portal is a fast, cheap way to give clients visibility without giving away your base. Get the filtering wrong and you have shipped a data breach with a nice layout.

If you want a second pair of eyes on a portal before it goes live — or you need one built properly the first time — get in touch and describe the setup.