DEV Community

Tomo
Tomo

Posted on AI-assisted

Free, Pro, Team, Enterprise: What Each Supabase Plan Gives You, Mapped to Real Use Cases, Plus a Small Plan-Check App

Which plan do you need, and what does it actually cost? I read the pricing page, clicked through the dashboard, then built a small app that answers the question from a few inputs. Everything below is from my run on 2026-10-27. Prices change, so treat every number as dated.

How this was made: I wrote this with Claude's help: it drafted, and I ran every step, edited the text, and checked the results. The mistakes are mine. This is a personal learning project, not an official guide, and I don't work for Supabase.

If you want the non-technical version of the idea (the staircase and the four things you pay for), it is here: https://medium.com/p/1613866c4c24
The code is here: https://github.com/tomozilla/plan-check-en-demo

What I did and did not do

  • I did not upgrade anything, enable any add-on, or send an invite. I looked at a Free project and a separate Pro project, read-only.
  • Everything about Team and Enterprise comes from the pricing page. I did not run those features.
  • Prices come from supabase.com/pricing as I read it on 2026-10-27 (USD). I did not compare them with an invoice.
  • This walkthrough costs $0: it is only looking at screens.

Two layers of money

Supabase pricing has two layers, and mixing them was my first mistake.

  1. A plan per organization. Free, Pro, Team, Enterprise. The Billing page says it directly: each organization has its own subscription plan.
  2. Compute per project. The size of the Postgres machine for each project, billed hourly, on top of the plan.

So a month is roughly: plan + compute per project + usage over the included amounts.

The Billing page of a Free organization: Free Plan, with the spend cap enabled.

On a Free organization, the spend cap is on. Going over the included quota does not bill you. The projects can become unresponsive or go read-only.

The four plans in one table

From the pricing page, only the rows that changed my decisions:

Free Pro Team
Price $0 from $25/mo from $599/mo
Active projects 2; paused after 1 week idle no pausing; extra projects from $10/mo compute same
Database size 500 MB 8 GB, then $0.125/GB same
Egress 5 GB 250 GB, then $0.09/GB same
File storage 1 GB (50 MB per file) 100 GB, then $0.0213/GB same
Monthly active users 50,000 100,000, then $0.00325 each same
Automatic backups none 7 days 14 days
Log retention 1 day 7 days 28 days
Support community email priority email + SLA
Dashboard SSO no no yes
Roles Owner, Admin, Developer same adds Read-only, project-scoped roles

Enterprise is "Custom": a technical account manager, uptime SLAs, 24/7 support, security questionnaire help. I could not see more than that.

What the dashboard showed

Usage: what is counted, and what is locked

The Usage page on the Free organization: usage against quota for database, egress, storage, MAU, and so on. SSO and image transformations show "Unavailable in plan".

Each line is "used / included". Two things I noticed. There are more than ten metered items, and the one that hits first depends on your app. And the page shows what your plan cannot do at all: SSO and image transformations say "Unavailable in plan" with an Upgrade button.

Backups: the thing I had wrong

On a Free project:

The Backups page on a Free project: "Free Plan does not include project backups."

Free has no project backups. If the data matters, you need your own dumps.

On a separate Pro project, read-only:

The Backups page on a Pro project: one backup per day for the last 7 days, with a note that Storage objects are not included.

One backup per day, 7 days back. And a note I would have missed: Storage objects are not included. Restoring the database does not bring back uploaded files.

Then the point I had mixed up. I had heard "backups cost $100 a month".

The Point in Time tab: "Point in Time Recovery is available as an add-on", with an Enable add-on button.

Daily backups come with the paid plans. The $100 is for point-in-time recovery (PITR), a separate add-on: $100/month per 7 days of retention on the pricing page. It lets you go back to a specific second. Daily backups only restore to the nightly snapshot. I did not enable the add-on, and I did not try a restore.

Update (2026-10-27): after reading the docs again: a project that uses PITR needs at least the Small compute add-on (Micro is $10, Small is $15, so about $5 more a month), and turning PITR on stops the daily backups. I cover this in the backup article of this series. The $100 above does not include these.

Compute: the machine size

The Compute settings on a Free project: Nano at $0/hour, Micro at $0.01344/hour, and so on, with "Only available on Pro Plan and above".

A Free project is fixed on Nano. You can pick a size only on Pro or above. Micro is $0.01344/hour, which is about $10 over a month (my calculation, and it matches the pricing page's "Micro $10"). The pricing page also says paid plans include $10/month of compute, so the first project on Pro on Micro is effectively the plan fee, $25. A second project adds about $10.

Sizes from the pricing page: Micro $10, Small $15, Medium $60, Large $110 (dedicated 2 vCPU), XL $210, 2XL $410.

People: roles and SSO

The invite dialog: Owner, Administrator and Developer roles, with a banner saying SSO is available on the Team plan and above.

I opened the invite dialog and closed it without sending anything. Free offers Owner, Administrator and Developer. The banner says SSO is "Available on Team plan and above". The pricing page lists Read-only and project-scoped roles under Team too; I did not see those in the product.

Mapping plans to use cases

This is my own reading, not an official recommendation.

You are building Likely plan Why, from the screens above
A prototype or a learning project Free $0. But it pauses after a week idle, has no backups, and allows 2 projects
An internal tool for a team Pro No pausing, 7 daily backups, 7 days of logs
A customer-facing service Pro, plus PITR or more compute if needed Decide how far back you must restore. Check MAU and egress against overage rates
A product that must pass a company review Team SSO, 14-day backups, 28-day logs, SOC2 and ISO 27001 per the pricing page. It starts at $599/month, so confirm you need it
Large scale or special terms Enterprise Talk to sales

Three signs that it is time to move up: someone depends on it, there is data you cannot redo, or you have to explain your setup to someone.

The plan-check app

I turned this into a small page: answer a few questions, get a suggested plan, a rough monthly cost, and the reasons.

The first screen: questions on the left, the result on the right.

It is a static page. No server, no project, no keys. Prices live in a dated plans.json that you update by hand.

Architecture: question form, calc.js, result view, and a dated plans.json.

The logic is "find reasons to move up". If none is found it says Free; otherwise it picks the highest plan any reason requires, and shows the reasons:

if (a.sso) need("team", "SSO for the dashboard is listed from Team");
if (a.restore === "daily" || a.restore === "pitr") need("pro", "Free has no automatic backups");
if (a.alwaysOn) need("pro", "Free projects pause after 1 week of inactivity");
if (a.mau > P.free.mau) need("pro", "users are over the Free 50,000 MAU");
Enter fullscreen mode Exit fullscreen mode

I show the reasons because "it's Pro" gets a "why?" in the first meeting.

Run it:

cd app
python3 -m http.server 8000   # then open http://localhost:8000/
node test.js                  # 18 checks
Enter fullscreen mode Exit fullscreen mode

I tried a customer-facing app with 2 projects, 120,000 users, 3 GB of data, 350 GB of traffic and PITR:

The result: Pro, about $209 per month, with the line items and the reasons.

I checked the total by hand: 25 (plan) + 20 (two Micro) − 10 (included compute) + 9 (100 GB over the egress quota at $0.09) + 65 (20,000 users over at $0.00325) + 100 (PITR) = $209. The biggest items were PITR and the user overage, not the $25 plan fee. If you budget from "Pro is $25", you will be off.

Stumbles

The page silently "fixed" bad input

My first version treated blank, negative or non-numeric input as 0 without saying so. With "database size −5" in the field, the result said "everything fits in the Free quota". The form and the calculation disagreed, and nothing told you. I reproduced it (I checked the result text, I did not take a screenshot of the old behavior). The fix: show what was corrected above the result.

A yellow warning above the result listing the corrected fields: projects to 1, users to 0, database size to 0.

Prices go stale

If someone trusts an old price, the tool does harm. So when asOf in plans.json is more than 45 days old, the page shows a warning. I tested this by editing the date in a copy.

A warning at the top: the price data is from 2026-08-01 and may be out of date.

What I did not test

Opening index.html directly as a file (there is an error message in the code, untested), phone-width layout, and anything on Team or Enterprise beyond the pricing page.

What it costs

  • This walkthrough and the app: $0.
  • A real month is plan + compute per project + usage over quota (+ add-ons like PITR). All numbers here are from the pricing page on 2026-10-27, not from my invoice.
  • Unverified: whether the spend cap exists on Team, the full Team and Enterprise details, and how organization-level transfers are billed.

If I took this further

Ideas I have not tried: a monthly reminder to re-read the pricing page and update plans.json, a link from each reason to the matching docs page, and a separate guide on choosing a compute size from real load.

Takeaways

  • Money has two layers: a plan per organization, compute per project.
  • "Backups cost $100" mixes up daily backups (included in paid plans) and the PITR add-on.
  • Database backups do not include Storage files.
  • Show reasons, not just a plan. Show dates on prices. Never fix input silently.

Next up in this series: how to split organizations and projects.

Top comments (0)