Skip to content

Supabase or AWS? An Honest Cost Breakdown

What it really takes to rebuild Supabase on AWS, what each one costs, and how to pick without regretting it in a year.

A patch panel densely packed with network cables running to switch ports.
Nine services, and the wiring is yours. Photo by Taylor Vick on Unsplash, free to use under the Unsplash License.

The short answer#

There is no AWS button that says "Supabase."

Supabase is one box with everything inside. AWS is a shelf full of separate boxes. You can build the same thing on AWS, but you pick the boxes yourself and wire them together.

Which is better? It depends on one thing more than any other: how many people log into your app.

That sounds like a cop-out. It isn't. There's a specific number where the answer flips, and most comparison articles never mention it. We'll get there.


Part 1: What is actually inside Supabase?#

Think of Supabase as a lunchbox. One price, everything inside.

What is inside Supabase A single container holding seven services — Postgres, an auto-generated REST API, auth, file storage, realtime, edge functions and a dashboard — billed as one line. SUPABASE Postgres databaseAuto-generated REST APIAuth (login / signup)File storageRealtime updatesEdge FunctionsDashboard for all of it ONE BILL
Supabase: one container, one bill.

The same thing on AWS:

The same thing assembled from AWS services Nine separate AWS services — RDS, Cognito, S3, Lambda, API Gateway, AppSync, NAT Gateway, CloudFront and CloudWatch — each billed separately and wired together by you. RDSPostgresCognitoAuthS3FilesLambdaFunctionsAPI GatewayRESTAppSyncRealtimeNAT GatewayEgressCloudFrontCDNCloudWatchLogs NINE BILLS · YOU DO THE WIRING
AWS: nine services, nine line items, and the wiring is yours.

More power, more places to get charged. That's the trade in one picture.


Part 2: The piece-by-piece map#

What Supabase gives you The AWS version How hard is the swap?
Postgres databaseRDS for Postgres, Aurora Serverless v2, or Aurora DSQLEasy
Auth (login, signup, social)Cognito — or something else, see Part 5Medium
File storageAmazon S3Easy
Edge FunctionsAWS LambdaEasy
Realtime (listen to table changes)AppSync subscriptions or API Gateway WebSocketsHard
Auto REST API from your tablesNothing built in. You build it.Hardest
Row Level SecurityPostgres RLS works fine on RDSEasy
pgvector for AIWorks on RDS and AuroraEasy
DashboardThe AWS Console. Several of themIt is what it is

The one that hurts: Supabase runs PostgREST. You create a table, and a secured API appears. AWS has no equivalent. You write Lambda handlers or AppSync resolvers by hand, for every table, forever.

That's the real cost of moving. Not dollars. Hours.


Part 3: There are three ways to build this on AWS#

Most articles compare Supabase against option A only, which is why they usually conclude AWS is expensive. There are two more.

A. AWS-native B. AWS + app auth C. Supabase components on AWS
DatabaseRDS / AuroraRDS / AuroraRDS
AuthCognitoBetter Auth or Auth.js in your appGoTrue (Supabase Auth), self-hosted
API layerLambda you writeLambda you writePostgREST
Auth cost per user$0.015/MAU after 10k free$0$0
Auto REST APInonoyes
Runs in your VPCyesyesyes
You patch what?nothingone npm dependency2–4 containers

Option C is the one people miss. PostgREST, GoTrue, storage-api, and realtime are separate open-source projects (PostgREST and GoTrue are MIT; Realtime and Storage are Apache 2.0). They're plain Docker containers. They don't need Supabase's control plane. Point them at your own RDS instance and you get Supabase's developer experience inside your own VPC.

Which also means Supabase isn't lock-in. It's the same software either way. Moving is a connection string and a container deploy, not a rewrite.


Part 4: What it costs#

All figures are us-east-1 list prices, mid-2026. Singapore (ap-southeast-1) runs roughly 10–20% higher. Verify on the official pricing pages before committing anything.

Scenario A — Small project#

1,000 users, 2 GB data, light traffic

Supabase AWS
DatabaseFree tier, or Pro w/ Micro computeRDS db.t4g.micro ~$12
AuthincludedCognito $0 (free tier)
Storage + functionsincluded~$3
Base plan$0 or $25
Monthly$0 – $25~$15 – $20
Supabase Pro$25
AWS$18

Effectively a tie. AWS is a few dollars less, and you built the login screens and the API yourself.

Scenario B — Growing product#

10,000 users, 20 GB data, 300 GB traffic out

Line item Supabase AWS (naive) AWS (optimized)
Database compute$5 (after credit)$25$17 (Reserved)
Base plan$25
Storage$1.50$5$4.50
Authincluded$0$0
API layerincluded$8$3
Data out~$5$18$0 (CloudFront)
NAT Gatewayn/a$32$0
RDS Proxyn/a$22$0 or $22
Monthly~$36~$110~$25 – $47
AWS naive$110
Supabase Pro$36
AWS optimized$25

Notice that $54 of the naive column is NAT Gateway plus RDS Proxy — plumbing that does no user-facing work. Part 6 removes it.

Scenario C — 100,000 users#

Supabase AWS + Cognito AWS + app auth
Auth$0 (included)~$1,350$0
Database$110 – $210$200 – $850$200 – $850
Everything else~$50~$150~$150
Monthly~$325~$1,600~$220
AWS + app auth$220
Supabase Pro$325
AWS + Cognito$1,600

Same AWS. Same VPC. Same isolation. One component swapped, and the bill moves by $1,380.


Part 5: The number that decides everything#

Cognito Essentials gives you 10,000 monthly active users free, then charges $0.015 per user per month. Supabase Pro includes 100,000.

So the crossover is around 12,000 monthly active users.

Users Supabase auth Cognito auth
5,000$0$0
10,000$0$0
25,000$0$225
50,000$0$600
100,000$0$1,350
Supabase  ─────────────────────────────  flat $0
Cognito   ╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱╱  +$150 per 10,000 users

Every optimization in this article combined saves maybe $70/month. Cognito at 50,000 users eats all of it and $530 more.

This is not AWS being expensive. It's one pricing model inside AWS aimed at a different customer. Cognito charges per user because it is built for large firms buying identity systems. There, $0.015 per employee is a rounding error. For consumer or SMB SaaS with many low-revenue users, it's the wrong meter.

Do you actually need Cognito?#

Cognito earns its place when:

  • You need Identity Pools to hand browser clients temporary IAM credentials — direct-to-S3 uploads with no signing endpoint. Nothing else on AWS does this.
  • You need managed SAML/OIDC federation for enterprise customers and don't want to run it.
  • You're under 10,000 MAU, where it's free and there's nothing to patch.

Otherwise:

Option Cost Works with RLS? You maintain
Better Auth / Auth.js$0Yes — sign a JWT with the claims Postgres expectsone npm dependency
GoTrue self-hosted~$9–12/moYes, nativelyone container
Keycloak~$38+/moYes, with configJVM, realms, upgrades
Cognito$0 → $0.015/MAUAwkward — see Part 7nothing
Clerk / Auth0 / WorkOSper-MAUYes, custom JWT templatenothing

Say the honest part: auth is the one component where a bug is a breach, not an outage. Self-hosting means you own CVE monitoring and patch cadence. That's a real cost and it isn't zero. Two things make it manageable. GoTrue is well tested, because Supabase runs it for everyone. And Better Auth is a library you upgrade with npm update, not infrastructure you run. Rolling your own session handling from scratch is a different and much worse idea.


Part 6: How to make the AWS version cheap#

Component Obvious way Better way Saves/month
Multiple projectsOne database eachShared database, schema per app~$75
Idle databaseAurora Serverless v2 (0.5 ACU floor)Aurora DSQL (scales to zero)~$40
Private DB accessNAT GatewayData API, or VPC endpoints only~$32
Data out (300 GB)Straight from S3Through CloudFront~$18
Connection poolingRDS ProxyCap Lambda concurrency, or pgbouncer~$22
API layerAPI Gateway REST ($3.50/M)Lambda Function URLs, or HTTP API ($1/M)~$5
Steady databaseOn-demand1-year Reserved Instance~$8
Auth above 12k MAUCognitoApp-level auth or GoTrue$150+ per 10k users
Block storagegp2gp3~20%
Watching the billnothingBudgets + anomaly alerts + tags$0

The four that matter most:

1. Delete the NAT Gateway. It costs ~$32/month plus $0.045/GB and exists only so private resources can reach the internet. Use Aurora's Data API and your Lambda doesn't need a VPC at all. If it must sit in a VPC, it still needs no NAT unless it calls the public internet. Gateway endpoints for S3 and DynamoDB are free.

2. Put CloudFront in front of everything. The always-free tier includes 1 TB out and 10 million requests a month, permanently. Origin fetches from S3 or an ALB are free. That's $18/month to $0 on the Scenario B traffic.

Two traps. CloudFront prices by edge location, not origin. Asia-Pacific edges — Singapore, Hong Kong, Japan — run $0.120/GB against $0.085 in North America. So past the free tier, an Asian audience costs about 40% more. And the flat-rate plan confusingly named "Free" gives only 100 GB and 1 million requests. The always-free tier is the better deal; don't subscribe to the plan.

3. Kill the idle database floor. Aurora Serverless v2 has a 0.5 ACU minimum, about $43.80/month even when idle. There are no Reserved Instances and no free tier. Aurora DSQL bills $8.00 per million DPUs plus $0.33/GB-month, and scales to zero. It includes 100,000 DPUs and 1 GB free each month.

DSQL does not support the full PostgreSQL feature set. No traditional statistics or vacuum, so the planner behaves differently and some queries need rewriting. Benchmarks show lower raw throughput than Serverless v2. Test your schema first.

4. Watch the RDS Proxy floor. It's $0.015 per vCPU-hour with a 2 vCPU minimum, so $21.90/month on a provisioned instance. On Aurora Serverless v2 it is per ACU-hour, with an 8 ACU minimum. That is $87.60/month even when the database sits at its floor. Skip it if you can cap Lambda concurrency below max_connections. Don't skip it if you can't — see the next part.


Part 7: Worked example — multi-tenant SaaS#

This is where the shape of your app changes the answer.

Several separate apps One multi-tenant SaaS
Dominant cost driverproject countmonthly active users
Supabase's weaknessper-project billingnone — it's one project
AWS's weaknessnoneCognito, priced per user

Supabase bills per project, so several small apps get expensive. Multi-tenant SaaS is one project, so that weakness disappears entirely and Cognito's per-user pricing becomes the whole story.

The three isolation models#

Model What it means Cost When
PoolAll tenants in one schema, tenant_id column, RLS separates themCheapest. One DB for 1,000 tenantsB2C, SMB SaaS, most startups
BridgeOne schema per tenant, same databaseMiddle. Connection pressure grows~100s of tenants
SiloOne database per tenantMost expensive by farEnterprise, regulated

Pool is where the money is, and it's what Supabase is built for. RLS policies read auth.uid() and JWT claims; PostgREST honors them automatically. Tenant isolation is enforced by the database, not by your code.

That's a security property, not a convenience. In pool model, one forgotten WHERE tenant_id = ? is a cross-tenant data leak. RLS makes that mistake structurally impossible.

Where each option lands#

Supabase managed AWS + Cognito AWS + GoTrue/PostgREST
Tenant claim in JWTbuilt inpre-token-generation Lambdabuilt in
RLS enforcementautomaticmanual SET LOCAL per transactionautomatic
Leak risk if you forgetnone — DB enforcesrealnone — DB enforces
Auth at 100k MAU$0~$1,350$0
Inside your VPCnoyesyes

The middle column has a hidden cascade. With Cognito you must open a transaction and run SET LOCAL app.tenant_id = '...' before every query, with RLS written against current_setting('app.tenant_id'). That breaks the Data API optimization from Part 6, because Data API is request-scoped. So you're back to VPC-attached Lambdas, back to connection pressure, and back to paying for RDS Proxy. Optimizations are not independent — that one cascades.

Cost at three stages#

B2B SaaS, ~100 seats per tenant

Stage Supabase Pro AWS + Cognito AWS + components
20 tenants / 2k MAU~$30~$60~$50
200 tenants / 20k MAU~$75~$230~$90
1,000 tenants / 100k MAU~$325~$1,600~$220
AT 100,000 MAU
AWS + components$220
Supabase Pro$325
AWS + Cognito$1,600

Two things AWS gives a SaaS operator that Supabase can't#

Per-tenant cost attribution. You eventually need to know what each tenant costs to serve. It is how you price tiers and find accounts that lose money. Supabase gives you one number for the whole project. On AWS you can emit tenant-tagged CloudWatch metrics and build a real cost-per-tenant dashboard.

Compliance without a subscription. Supabase's Team plan is $599/month. It mostly buys SOC 2, SSO and longer backup retention, not more capacity. Your first enterprise customer will ask for SOC 2. On AWS that is your own audit, against systems you control. Real work, but not a recurring $599 line. At 200 tenants that's $7,188/year.


Part 8: When to use Supabase#

Be honest about what you're buying, because it's a lot.

You're pre-product-market-fit. Speed to a working product beats every number in this article. A month saved is worth more than $100/month forever.

You're under ~12,000 monthly active users and expect to stay there for a while. Below the crossover, Supabase is cheaper and less work. There is no argument for AWS here on cost.

You want auto-generated APIs. PostgREST is the single feature AWS has no answer to. Create a table, get a secured endpoint. On AWS you write that by hand for every table.

You have no ops capacity. Nobody patches GoTrue for you on AWS. Nobody upgrades PostgREST when the Postgres major version moves. Supabase does both silently.

You want a spend cap. Supabase ships cost control on by default. AWS does not. A runaway Lambda loop or a badly set up NAT Gateway has ruined months for people.

You need a dashboard today. Table editor, SQL editor, log viewer, auth user list. Building the equivalent on AWS is a project.

Auth being someone else's responsibility matters to you. This is a legitimate reason on its own. A breach is worse than a bill.


Part 9: When to use the AWS equivalent#

You're above ~12,000 MAU and growing. Past the crossover, the gap widens every month. At 100k users a well-built AWS stack runs roughly $100/month cheaper than Supabase. It is $1,380 cheaper than the naive AWS one.

You run several separate small apps. Supabase's $25 base is per organization, not per project. The 100,000 MAU, 250 GB egress and 100 GB file storage quotas all pool across every project in that org. Only compute and disk are per project, at $10/month for a Micro instance each. So four small projects is $25 + $40 − $10 credit = about $55.

AWS bills per account, so apps two, three, and four are nearly free on a shared database. AWS still wins here, but by less than the per-project framing suggests.

FOUR SMALL PROJECTS
Supabase~$55
AWS~$31

You need VPC isolation, IAM, or private networking. Supabase offers AWS PrivateLink, but only on the Team plan at $599/month. Say your database must sit in a private subnet, and you are not paying for Team. The decision is already made.

You need other AWS services. SQS, Step Functions, Bedrock, Rekognition, IoT Core. Staying in one account, one IAM boundary, one bill has real value.

You need per-tenant cost data. For a SaaS business this becomes a pricing requirement, not a nice-to-have.

Enterprise customers are asking for SOC 2 or HIPAA. At that point $599/month for the Team plan is worse than owning your own audit.

You already have AWS expertise on the team. Most of this article's difficulty evaporates if someone already knows what a VPC endpoint is.


Part 10: Pick in thirty seconds#

Choosing between Supabase and AWS in thirty seconds Six questions in order. Pre-product-market-fit or under 12,000 monthly active users points to Supabase. VPC isolation, several small apps, or growth past 12,000 users points to AWS — and past that threshold, not with Cognito. START HERE Still finding product-market fit?Supabase. Stop reading, go build.Under 12,000 monthly active users?Supabase. Cheaper AND less work.Need VPC isolation, IAM, or other AWS services?AWS. Supabase has PrivateLink, but only on the $599 Team plan.Several separate small apps?AWS. One account, shared database.Above 12k MAU and growing fast?AWS — but NOT with Cognito. Use Better Auth or self-hostedGoTrue.Want AWS isolation AND Supabase’s DX?Self-host the Supabase containers on ECS with your own RDS.You now own the patching.
The decision, in the order the questions actually matter.

Part 11: The costs that aren't on any bill#

Supabase costs you AWS costs you
Setup timehoursdays to weeks
Auto-generated APIfreeyou write every endpoint
Auth flowsfreefree (Cognito) or you host it
PatchingnoneGoTrue, PostgREST, engine versions
Bill surprisescapped by defaultuncapped by default
Cost per extra project+$10/month (compute)~+$2/month
Cost per extra 10k users$0$150 (Cognito) or $0 (app auth)
Exit difficultylow — it's standard Postgreslow — it's standard Postgres

That last row is worth sitting with. Neither one locks you in. Supabase is permissively licensed open-source software (MIT and Apache 2.0) on standard Postgres. AWS is standard Postgres on RDS. The migration between them is a connection string and some deployment work — not a rewrite. This decision is reversible, so don't agonize over it.


The honest summary#

Supabase AWS
Time to first working APIminutesdays
Cost at 1,000 users$0 – $25$15 – $20
Cost at 10,000 users~$36$25 – $110
Cost at 100,000 users~$325$220 (app auth) / $1,600 (Cognito)
Cost for 4 small apps~$55~$31
Auto REST API unless you self-host PostgREST
VPC isolation, IAMTeam plan only ($599)
Spend cap by default
Ops burdennear zeroreal
Escape hatch to more serviceslimited200+ services

Neither platform is the right answer. Supabase wins on time and simplicity. AWS wins on control and on cost above the crossover. Most teams should start on Supabase. Move only when a specific number or requirement forces it. And because it is the same underlying software, that move stays cheap.

Every AWS saving in this article comes from removing a managed convenience. Supabase sells you not having to think about any of this. You are trading that away for a smaller number on a bill.

Sometimes that's the right trade. Just make it on purpose.


Need a hand with this?#

Two situations where it helps to have someone who has already made these mistakes:

You're on Supabase and thinking about AWS. The migration is not hard. Getting it cheap is. Part 4's $220 stack and $1,600 stack differ by a handful of early decisions. Which auth layer. Whether a NAT Gateway sits in the path. How tenants are kept apart. Made in the wrong order, they're painful to unwind later.

You're already on AWS and the bill keeps climbing. Most over-spend I see isn't waste in the obvious sense. It is NAT Gateways nobody needed. RDS Proxy floors on tiny instances. Traffic leaving straight out of S3 instead of through CloudFront. And Cognito quietly metering users. None of it shows up as an idle resource, so cost tools don't flag it.

I'm a Software Engineer and AWS Network Engineer, and I do this work. If either sounds like your situation, message me on LinkedIn:

👉 linkedin.com/in/allanninal

Happy to look at your architecture and tell you honestly whether moving is worth it. Sometimes the answer is "stay on Supabase" — Part 8 exists for a reason.


References#

  1. Amazon Cognito Pricing — AWS — https://aws.amazon.com/cognito/pricing/
  2. Supabase Pricing & Fees — Supabase — https://supabase.com/pricing
  3. Supabase Architecture (component licenses) — Supabase Docs — https://supabase.com/docs/guides/getting-started/architecture
  4. AWS Free Tier Data Transfer Expansion (CloudFront 1 TB, regional 100 GB) — AWS News Blog — https://aws.amazon.com/blogs/aws/aws-free-tier-data-transfer-expansion-100-gb-from-regions-and-1-tb-from-amazon-cloudfront-per-month
  5. Amazon CloudFront Pricing — AWS — https://aws.amazon.com/cloudfront/pricing/
  6. Amazon Aurora Pricing (Serverless v2 ACU rates) — AWS — https://aws.amazon.com/rds/aurora/pricing
  7. Amazon Aurora DSQL Pricing (DPU rates) — AWS — https://aws.amazon.com/rds/aurora/dsql/pricing/
  8. Amazon RDS Pricing (instance and Reserved Instance rates) — AWS — https://aws.amazon.com/rds/pricing/
  9. Amazon RDS Proxy Pricing — AWS — https://aws.amazon.com/rds/proxy/pricing/
  10. Amazon API Gateway Pricing (HTTP vs REST API) — AWS — https://aws.amazon.com/api-gateway/pricing/
  11. Supabase Compute Add-ons — Supabase Docs — https://supabase.com/docs/guides/platform/compute-add-ons
  12. Supabase Cost Control & Spend Cap — Supabase Docs — https://supabase.com/docs/guides/platform/cost-control
  13. Supabase Self-Hosting Guide — Supabase Docs — https://supabase.com/docs/guides/self-hosting
  14. PostgREST Documentationhttps://postgrest.org
  15. AWS Pricing Calculatorhttps://calculator.aws/

Sources 1–5 were read directly and every figure in this article traced to them. Sources 6–10 are the official pages for the AWS database and API rates quoted here. Check them for your own region first.

One caveat worth stating. Third parties report the RDS Proxy minimum on Aurora Serverless v2 as an 8 ACU floor. That is about $87.60 a month. I could not confirm that on the AWS page. The provisioned-instance figure ($0.015/vCPU-hour, 2 vCPU minimum, $21.90/month) is well corroborated.


All prices are us-east-1 list rates verified in mid-2026. Singapore (ap-southeast-1) runs roughly 10–20% higher. Rates change frequently — Cognito's tiers have already shifted twice since November 2024. Verify before committing.

Frequently asked questions#

At how many users does Supabase stop being cheaper than AWS?

Around 12,000 monthly active users. Amazon Cognito includes 10,000 monthly active users free. After that it charges $0.015 per user per month. Supabase Pro includes 100,000 in its $25 base. Below roughly 12,000 MAU Supabase is both cheaper and less work; above it the gap widens every month.

How much does Cognito cost at 100,000 monthly active users?

About $1,350 per month. That single line turns a roughly $220/month AWS stack into a roughly $1,600/month one. The rest of the design is identical.

Is there an AWS equivalent of Supabase?

No single service. Supabase maps to AWS piece by piece. Postgres becomes RDS or Aurora. Auth becomes Cognito, or a library in your own app. Files go to S3, functions to Lambda. Realtime becomes AppSync or API Gateway WebSockets. The one piece with no AWS match is PostgREST. It turns a table into a secured REST API on its own. On AWS you write that by hand, for every table.

Does using Supabase lock you in?

No. Supabase is open-source software on a permissive licence, running on standard Postgres. PostgREST and GoTrue are MIT. Realtime and Storage are Apache 2.0. You can run the same containers against your own RDS instance. So moving is a connection string and a container deploy, not a rewrite.

What is the most expensive mistake on a small AWS stack?

Paying for plumbing that does no user-facing work. A NAT Gateway costs about $32 a month and an RDS Proxy about $21.90. Together that is roughly half the bill of a 10,000-user deployment. Both are avoidable — Aurora's Data API removes the need for a VPC-attached Lambda, and capping Lambda concurrency below max_connections removes the proxy.

Can you run Supabase inside your own AWS VPC?

Yes. PostgREST, GoTrue, storage-api and realtime are plain Docker containers that do not need Supabase's control plane. Run them on ECS against your own RDS instance and you get Supabase's developer experience with AWS network isolation — at the cost of patching them yourself.