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/pricingas 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.
- A plan per organization. Free, Pro, Team, Enterprise. The Billing page says it directly: each organization has its own subscription plan.
- 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.
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 | 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
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:
Free has no project backups. If the data matters, you need your own dumps.
On a separate Pro project, read-only:
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".
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
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
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.
It is a static page. No server, no project, no keys. Prices live in a dated plans.json that you update by hand.
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");
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
I tried a customer-facing app with 2 projects, 120,000 users, 3 GB of data, 350 GB of traffic and PITR:
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.
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.
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)