How to Build a Client Portal with Softr and Airtable
A client portal in Softr plus Airtable works by matching the logged-in user’s email to a record field, then filtering every list to that match. Clients log in, see only their projects, and never touch another account’s data.
Why Build a Portal Instead of Emailing Files?
Email threads lose versions and leak data across recipients. A portal centralises deliverables, invoices and status behind per-user login. For an agency running 10-30 clients, that is the difference between a searchable archive and a mess of attachments.
Softr keeps this cheap because there is no back end to code. The whole thing is one Airtable base with sane columns.
How Should You Structure the Airtable Base?
| Table | Key fields |
|---|---|
| Clients | Email (primary match), Name, Company |
| Projects | Project name, Client (linked), Status, Due date |
| Deliverables | File link, Project (linked), Uploaded date |
| Invoices | Amount, Status, Project (linked) |
The Clients table is your identity anchor. Every other table links back to it, and every Softr filter resolves through that link.
How Do You Scope Data Per Client?
- In Softr, enable email login and sync users from the Clients table.
- Add a list block bound to Projects.
- Set the filter: Client email = logged-in user’s email.
- Repeat the filter on Deliverables and Invoices blocks.
That single filter type is the whole security model of the portal. Get it right once and every block inherits the scoping.
How Do You Add File Downloads and Invoices?
Use Airtable attachment fields for deliverables — Softr renders them as download buttons. For invoices, store a PDF link and show it in a detail block. If you need payment collection, link out to Stripe from the detail page rather than trying to build checkout inside Softr.
Careful with permissions on attachments: an Airtable attachment URL is shareable. If the file is sensitive, serve it through a signed link instead.
What Are the Practical Gotchas?
User records must exist in the Clients table before someone can log in — Softr does not create them magically. Second, Softr caps rows loaded per block, so a client with 500 deliverables will need pagination or a view-based split. Third, group visibility hides fields in the UI but the data still loads; never rely on it for confidentiality.
Quick Summary
- Anchor identity in an Airtable Clients table and filter everything by client email.
- Sync users from that table before enabling email login.
- Use attachment fields for files and a detail block for invoices.
- Group visibility is UX gating, not security — filter at the data layer.
- Page long lists and link to Stripe rather than building checkout in Softr.
