Engineering

Everyone on the team is an admin

Ask an operations lead who changed the shipping cost field last Thursday and you often get a shrug. Not because nobody looked. Because the record says it was edited by ops@company.com, and six people know that password. The sharing did not start as carelessness. It started as arithmetic: Airtable Business costs $45 per seat per month billed annually, and the warehouse temp who needs to flip one checkbox twice a week does not feel like $540 a year.

The seat price sets the permission model

On a per-seat platform, every access decision is also a budget decision, and finance usually wins. Airtable's own pricing page lists Team at $20 per seat per month on annual billing and Business at $45, with $24 and $54 as the monthly rates. Multiply either by a team that includes part-timers, contractors, the accountant who reconciles invoices, and a client who wants to check status, and the honest answer costs more than anyone wants to sign off on.

So the team improvises. One shared login for the contractors. The founder's account left open on the office machine. An ops@ address that half the company has in their password manager. Each of those is a reasonable local decision by someone trying to stay inside a budget they did not set. Together they mean your edit history records an inbox, not a person.

The part that stings later is that none of this looks like a security incident while it is happening. The data stays correct. Nothing leaks. You find out the day a number is wrong and the question of who changed it has no answer anywhere in the system.

The audit trail sits above the tier you are on

Airtable's plan comparison puts the admin panel and SAML single sign-on on Business, at $45 per seat. Audit logs and data loss prevention appear one tier higher, on Enterprise Scale, which has no published price and routes you to a sales conversation. Revision history does exist lower down, at two weeks on Free and one year on Team, but revision history answers what a cell used to say. It does not answer who had the ability to touch it, or when that ability was granted.

That ordering is deliberate and it is not unique to Airtable. Governance features are what convert a departmental tool into an enterprise contract, so they live where the contracts are. It makes sense from the vendor's side. It is simply a poor fit for a fifteen person company that has one genuinely sensitive table and no appetite for an annual negotiation to protect it.

You end up choosing between paying enterprise rates for every seat in order to log the three that matter, or accepting that you cannot reconstruct who did what. Most teams quietly pick the second option and hope the question never comes up.

What roles look like when the database is yours

Postgres row level security moves the rule into the database itself. A policy is a WHERE clause that Postgres attaches to every query against a table, so a rule like using ( (select auth.uid()) = user_id ) means a signed-in user reads their own rows and nothing else, whether the request arrives through your app, a script, or a third party client. Supabase's documentation is blunt that grants and policies are separate checks and that a table in an exposed schema is readable by any role holding a grant on it, which is a real footgun if you skip the setup. It is also a rule you can read, review in a pull request, and run against a test suite with supabase test db.

The cost shape changes too. Roles are rows in your own tables, so adding the warehouse temp as a read-only user with write access to one column costs nothing per month and takes a line of SQL. Fifty of them cost the same nothing. The price is paid once, in the hour somebody spends modelling the roles properly, instead of every month forever in seats.

When we moved Stay World Class off Webflow and Xano onto Next.js, NestJS and Supabase, the migration ran as a four stage ETL that mapped every legacy ID to a PostgreSQL UUID so no historical record lost its identity. Lighthouse went from 55.91 to 91 out of 100 and LCP came down 77%. The performance numbers are the ones people quote, but the change the team noticed in week one was being able to give somebody exactly the access they needed without a procurement conversation.

When staying put is the right answer

If your whole team is five or six people who all legitimately need full access, per-seat pricing is honest pricing and the shared-login problem never appears. Airtable's Free plan allows up to five editors with 1,000 records per base, and plenty of real businesses never outgrow that. Paying $20 a seat on Team for a group that genuinely is a group costs less than the cheapest possible custom build, and it will keep costing less for years.

The signal to watch is not the monthly invoice. It is the first time someone says just use the shared account. That sentence means the price of a correct permission has risen above what the work is worth, and the system has started teaching your team to defeat it. If you hear it once about a contractor and never again, ignore it. If it has become how the company operates, the audit trail you think you have is already gone, and no upgrade restores the history you did not record.

Sources

Is your platform outgrowing its stack?

Book a call and we'll walk through how we'd approach your platform, with an estimate grounded in a working prototype.