AWS Amplify cost vs self-hosted Supabase

AWS Amplify bills hosting and each backend service separately, while self-hosted Supabase trades metered usage for servers and operating time. This page shows how to compare the two with your own numbers.

On this page

Does AWS Amplify cost more than self-hosted Supabase for your app?

The answer depends on your usage shape, your team's operating skills and how much downtime you can tolerate, not on a single headline price. A renewal, a usage spike or a bill spread across Cognito, AppSync, DynamoDB, Lambda and S3 is usually the trigger, but the comparison only becomes useful once you separate what Amplify meters from what self-hosting costs you. Amplify charges are metered per component: Hosting build minutes, storage, data served and server-side rendering are billed by Amplify, while Cognito, AppSync, DynamoDB, Lambda and S3 are billed separately under their own AWS pricing. Self-hosted Supabase costs are servers plus the people who run them. The Supabase license, Apache-2.0, carries no license fee, so the money you pay is for infrastructure and operating time.

Start by sizing the server side. The self-hosting docs list minimum requirements of 4 GB RAM, 2 CPU cores and a 40 GB SSD, with 8 GB RAM, 4 cores and 80 GB recommended. Those figures are a starting point for a single project, not a capacity plan, because the Docker Compose stack runs Studio, Auth, PostgREST, Realtime, Storage, Edge Runtime and the connection pooler alongside Postgres. Ask your cloud or hosting provider for quotes on the recommended tier, plus backup storage and egress. Then estimate operating time: patching Docker images, applying upgrades that may require a database backup first, monitoring, and on-call coverage. Self-hosted Supabase is community-supported, so that time falls on your team or your implementation partner.

Run a two-column model with your current Amplify bill broken down by service for the last three months, and mark which costs disappear, which move to your servers and which stay (for example, any S3 usage that you keep). Then decide what availability you need. Hosted features such as managed backups and point-in-time recovery are not available when you self-host Supabase, so the cost of building your own backup and restore process belongs in the model. Confirm each figure with the vendor or with your own environment before you compare totals.

Which cost components move when you self-host Supabase

This table sets each metered or separately billed Amplify component against the self-hosted cost line that replaces it, and marks whether each item is one-time or recurring. Read the recurring rows first, since they decide the long-term comparison, then check the one-time migration and setup rows. Your actual figures depend on your AWS bill and your own server and staffing costs, so confirm them against your invoices and a written scope.

Cost componentAmplify side (AWS billed)Self-hosted Supabase side (you pay)One-time or recurring
Hosting builds and SSRMetered: build minutes, data served and SSR compute billed by Amplify Hosting usageFixed: servers or VMs that run the Docker Compose stack, sized to peak load and not to build minutesRecurring
Storage and file deliveryMetered: S3 storage and requests, plus Amplify hosting storage and transferFixed: disk on the Supabase Storage host and bandwidth from your own network, plus any object store you addRecurring
AuthenticationMetered: Cognito monthly active users, with user pools billed separately from the rest of the backendFixed: Supabase Auth runs on the same servers, so cost is the host capacity; user hash migration is a one-time effortRecurring (hosting), one-time (user migration)
Database and API layerMetered: DynamoDB read and write capacity and storage, plus AppSync request and data chargesFixed: one Postgres instance, PostgREST and Realtime on your servers, sized by memory and diskRecurring
FunctionsMetered: Lambda invocations, duration and memoryFixed: Edge Runtime on Deno runs on the same hosts; functions must be rewritten from Lambda and AppSync resolversRecurring (hosting), one-time (rewrite)
Backups and recoveryIncluded in the managed service design; confirm the retention and restore terms for each AWS service in your accountSelf-hosted cost: Supabase's self-hosting docs list managed backups and PITR as unavailable, so you buy and run backup tooling and test restoresRecurring
Monitoring and logsMetered: CloudWatch logs, metrics and alarms, billed per usageSelf-hosted cost: optional Logflare and Vector for analytics and logs, plus storage and any alerting you addRecurring
Upgrades and operating timeLow internal effort: AWS manages the managed servicesStaff time: applying Docker configuration releases, such as 0.8.3, and one-way Storage migrations that need a backup first; support is community-basedRecurring (staff time)
Migration and data exportOne-time cost of exporting DynamoDB to S3, reshaping data into Postgres, and rewriting AppSync and Lambda codeOne-time cost of building the Postgres schema, importing users and files, and cutover testingOne-time

What moves the cost comparison most

Amplify costs scale with usage across several separately billed services, while self-hosted Supabase costs scale mostly with the servers and the people who run them. The drivers below show which side of the ledger each factor pushes, and what to measure before you compare totals.

Monthly active users

Amplify charges for Cognito, AppSync, Lambda and DynamoDB requests, so a growing user base raises several meters at once. On self-hosted Supabase, more users mostly means more load on the Postgres, Auth and Realtime services, which you size on fixed servers. Ask your team for a per-service usage breakdown by user tier so you can see which meter grows fastest. Verify the Supabase Docker minimum and recommended sizing against your expected load before you commit to hardware.

Data volume and growth

Storage and data transfer grow with the data you keep, and on Amplify they are billed per unit across DynamoDB, S3 and hosting. On self-hosted Supabase, growth consumes disk on the Postgres host and object storage you manage, so the 40 GB SSD minimum in the Docker guide is a floor, not a plan. Estimate growth per table and per bucket, then price the disk and backup capacity that growth requires.

Environments and preview builds

Every extra Amplify environment duplicates backend resources and build runs, and each preview build adds hosting build minutes. On self-hosted Supabase, a staging stack is another set of containers on servers you already pay for, though each one needs its own secrets and upgrades. Count the environments you need today and the preview builds per week, then decide whether staging shares hardware with production.

Availability requirements

Self-hosted Supabase runs as a single project, and its hosted features such as managed backups, point-in-time recovery and branching are not available when you self-host. Appwrite's Helm chart also runs its built-in datastores on a single replica without failover. If your service needs failover, you must add replicated Postgres, backups and monitoring, which raises the self-hosted side. Ask whether an outage on Amplify is an acceptable trade for your current service levels.

In-house operations skills

Amplify removes most server patching, upgrades and backup work from your team, and you pay for that inside usage charges. Self-hosted Supabase is community-supported, so questions about failures go to GitHub, Discord or Reddit unless you buy outside help. A team without Docker, Postgres and secrets management experience should budget for training or a support retainer, and the cost of that person's time is recurring. Assess each skill gap before you compare the two totals.

Release cadence

Self-hosted Supabase releases a Docker configuration that bundles specific Auth, PostgREST and Realtime versions, and some releases require a database backup before updating. Amplify ships platform changes on AWS's schedule, with no upgrade work on your side. Frequent self-hosted releases mean recurring engineering time for testing, staging and rollback, so plan a monthly or quarterly upgrade window and cost that effort into the self-hosted total.

How the self-hosted Supabase bill is built

The bill for self-hosted Supabase has two halves: the servers that run the Docker Compose stack and the people who keep it current. The stack includes Studio, an Envoy API gateway (Kong is optional), Auth (GoTrue), PostgREST, Realtime, Storage, imgproxy, postgres-meta, Postgres, the Edge Runtime on Deno, the Supavisor connection pooler, and optional Logflare and Vector for analytics and logs. The Docker guide gives minimum requirements of 4 GB RAM, 2 CPU cores and a 40 GB SSD, and recommends 8 GB RAM, 4 cores and 80 GB. Those figures are a starting point. Confirm them against your expected data volume, concurrent connections and whether you keep Realtime, Storage or Edge Runtime enabled, since the guide says unused services can be removed from docker-compose.yml.

Infrastructure is the recurring cost you can see on a cloud invoice. Upgrades are the cost you cannot. Envoy replaced Kong as the default gateway in 0.8.0 on August 11, 2026, and Postgres 17 has been the default since 0.6.0 on June 17, 2026. Each Docker configuration release also pins specific upstream services, for example Auth v2.197.0, PostgREST v14.18 and Realtime v2.143.3 in 0.8.3, so your team pulls and recreates those containers itself. Assign an owner for reading each changelog and rehearsing upgrades in a non-production copy. Budget that effort as recurring staff time, and ask any implementation partner to quote it separately from the one-time setup.

Version 0.8.3, released October 16, 2026, is the one to plan around first. Its changelog flags security fixes for Storage and Realtime and one-way Storage database migrations that require a database backup before you update. Treat the backup as a gate, not an optional step: take it, verify that you can restore it, and only then apply the change. Note also that self-hosted Supabase is community-supported and runs as a single project, so managed backups, point-in-time recovery and branching are not included. Your backup schedule, storage location and restore testing are therefore line items you must fund and staff yourself.

How to build the comparison with your own numbers

This sequence turns the cost components into a side-by-side model of your current Amplify spend and a self-hosted Supabase estimate, using your own usage and your own labor assumptions so the totals can be defended in a budget review.

  1. Export twelve months of Amplify billing by service

    The cloud account owner pulls the last 12 months of AWS billing for the Amplify app and its backend resources, grouped by service and usage type, from Cost Explorer or the detailed cost and usage report. Separate Amplify Hosting charges (build minutes, storage, data served and server-side rendering) from the separately billed Cognito, AppSync, DynamoDB, Lambda and S3 lines. The step is done when every line item in the bills maps to one of those categories and the total matches the invoices.

  2. Tag usage to each cost component

    Using the same export, the platform or FinOps owner attaches each cost line to a component: build minutes, hosted storage, data served, SSR, authentication, API requests, database capacity, functions and object storage. Where AWS does not separate usage by app, the team uses resource tags or an allocation rule and records it. The output is a table where each monthly figure has a component label and a note on how it was allocated, which lets a reviewer see what would disappear after a migration.

  3. Measure the workload the backend must carry

    The engineering lead records monthly active users, request volume, database size, file storage volume, peak concurrency and the number of functions that run per period, taken from Amplify metrics and application logs. These figures define the load the self-hosted stack must absorb. The check is a one-page workload sheet that a second engineer has reviewed for accuracy.

  4. Size the Supabase footprint against documented minimums

    The platform engineer compares the workload sheet with the minimum requirements in Supabase's Docker self-hosting guide, which lists 4 GB RAM, 2 CPU cores and a 40 GB SSD as the minimum and 8 GB RAM, 4 cores and 80 GB as the recommended configuration. Add headroom for growth, backups, a separate database host and any services you keep, such as Storage or Realtime. Confirm the instance prices for your provider and region in its own pricing pages. The output is a server list with monthly infrastructure cost per host.

  5. Add the labor to install, upgrade and operate

    The platform team estimates the hours for initial installation, hardening and secret management, routine Docker configuration updates, pulling upstream service versions, backup testing, monitoring and on-call coverage. Self-hosted Supabase is community-supported, so the team also prices any paid support, retainer or in-house expertise it needs. Record each labor line as one-time or recurring and state the hourly rate used. The output is a labor table that makes the staffing assumption visible.

  6. Estimate one-time migration effort

    Using the component mapping from earlier steps, the migration lead estimates the work to move data, users, files and functions, including the Firebase or Amplify export, user hash compatibility, rewriting resolvers or functions and cutover testing. Keep this as a separate one-time line so it does not distort the recurring comparison. The check is a written scope list with an hours estimate per item, reviewed by the team that will run the system.

  7. Compare monthly and first-year totals on equal terms

    The finance and engineering leads place Amplify's current monthly run cost next to the self-hosted monthly estimate, then add the one-time migration effort to build a first-year total for each option. Use the same growth, traffic and salary assumptions in both columns and show a sensitivity range for usage growth. The step is complete when the model lists every assumption, every source and the rates you confirmed on the AWS pricing pages, so a reviewer can change one input and see the effect.

Costs teams forget on each side

Amplify costs arrive as separate meters across several AWS services, and leaving Amplify adds one-time export and rewrite work. Self-hosted Supabase moves the spending to your own operations: backups, secrets and admin access must be handled by your team. Check each item below against your own environment before you compare totals.

Cross-service charges on Amplify

An Amplify backend bills in separate lines: Cognito users, AppSync requests, DynamoDB reads and writes, Lambda invocations, S3 storage and data transfer out to users. Each line has its own meter, so one traffic spike shows up on several invoices at once. Pull a cost report grouped by service and tag for the last full billing period, and confirm the data transfer rates for your region before comparing totals.

Point-in-time recovery before export

Exporting DynamoDB tables to S3 depends on point-in-time recovery being enabled on each table. Teams that never turned it on may need to enable it before exit work can begin, and recovery storage adds a recurring charge. Enable point-in-time recovery on every table before the export is scheduled, and confirm with AWS how much it adds to your monthly bill.

Rewriting CDK and resolver code

Amplify Gen 2 backends are defined in TypeScript on the AWS CDK, so the backend definition, AppSync schema, resolvers and Lambda handlers have to be rewritten. In Supabase these become Postgres tables, row-level security policies, Edge Functions and client calls. The rewrite is a one-time cost, and it is often the largest line item in an exit. Ask for effort per resource, not one lump sum.

Backups and restore testing

Self-hosted Supabase does not include managed backups or point-in-time recovery, so your team owns the backup schedule, off-site copies of the database and Storage files, and regular restore drills. Supabase's changelog for version 0.8.3 notes that one-way Storage database migrations require a backup before updating. A backup that has never been restored is not yet a recovery plan, so schedule restore tests and record their results.

Secrets from the example file

Supabase's Docker guide warns never to start the stack with the placeholder secrets in .env.example. It provides scripts that generate new secrets and the JWT key pair, and each release may ask you to review them again. Store generated values in a secrets manager, rotate them on a schedule, and keep a record of who can read them. Replacing placeholder secrets is a day-one task, and the work recurs whenever keys rotate.

Studio access protection

Supabase Studio is the admin console for the stack, and the Docker guide protects it with HTTP basic auth set through DASHBOARD_PASSWORD. Basic auth alone is a thin control for a console that can change schemas and read data. Plan to place Studio behind a VPN, an identity-aware proxy or network allowlist, and confirm with your security team whether that layer enforces multi-factor authentication.

Who supports the stack once it is yours

Self-hosted Supabase is community-supported. The self-hosting documentation names GitHub Discussions, GitHub Issues, Discord and Reddit as the support channels, and directs enterprises to contact Supabase's Growth Team for commercial arrangements. Once the stack runs in your own account, there is no bundled support contract that replaces the monthly Amplify bill, so the cost moves into your budget. Price it as one of three things: internal platform staff time, an external retainer, or a commercial agreement with Supabase. Ask Supabase's Growth Team in writing what it would cover and at what scope before you compare totals with Amplify.

Support also means keeping the Docker configuration current. The self-hosted Supabase Docker configuration is versioned separately from the upstream services it bundles. Version 0.8.3, released on October 16, 2026, pins Auth v2.197.0, PostgREST v14.18 and Realtime v2.143.3, and operators pull and recreate those containers themselves. The changelog flags security fixes for Storage and Realtime and one-way Storage database migrations that require a database backup before updating. Your team owns those patches, the backup beforehand and the test window, so budget recurring time for each release and a rehearsal in a non-production copy.

Confirm two things before you sign off on the estimate. First, who is on call for a Realtime or Storage incident at 2 a.m., and whether that rota exists today. Second, how long your team would need to apply a security release to the production stack, measured against your own change process rather than any vendor figure. Treat the answers as a risk register entry with an owner, not as an assumption buried in the operating cost. The Supabase self-hosting guide at Supabase self-hosting documentation is the place to check which services you need to keep patched.

Questions buyers ask before comparing Amplify and self-hosted Supabase

How much effort does moving from Amplify to self-hosted Supabase take?

The effort depends mainly on how much of your Amplify backend you actually use. Moving data and users is one part, while rewriting AppSync resolvers, Lambda functions and Cognito triggers into Supabase Auth, Postgres functions and Edge Functions is usually the larger part. Self-hosted Supabase is a set of Docker Compose services that includes Studio, an Envoy API gateway, Auth, PostgREST, Realtime, Storage, Postgres and Supavisor, so you also take on installing, upgrading and monitoring that stack. Ask any implementation partner to size the work from an inventory of your DynamoDB tables, Cognito pools, resolvers, functions and S3 buckets, and ask them to state the assumptions behind that estimate in writing.

How long does an Amplify to Supabase migration take?

Duration is set by data volume, the number of user accounts, how many backend features need rewriting and how much testing your app needs before cutover. No supplied figure gives a typical timeline, so treat any number you hear as a claim to verify against your own inventory. The factors that most often extend a schedule are password migration, since Cognito does not export passwords, the number of custom resolvers and triggers, and any compliance evidence you must produce along the way. Agree on a fixed scope and written deliverables before work starts, so the timeline follows from what is actually included.

What skills does the team need to run self-hosted Supabase?

Your team needs working knowledge of Docker Compose, Linux server administration, PostgreSQL and the Supabase services listed in the self-hosting guide. Someone must also own secrets, TLS, backups and upgrades. The self-hosting docs warn never to start with the placeholder values in .env.example and provide scripts to generate secrets and the JWT key pair, which is a good starting point but still needs an accountable owner. Upgrades matter because each Docker configuration release pins specific Auth, PostgREST and Realtime versions, and some releases require a database backup before updating. Check these skills against your staff before you commit to the move.

Can an in-house team run self-hosted Supabase without outside help?

Many in-house teams can run it, provided they have the skills above and accept that support is community-based. Supabase's self-hosting docs state that self-hosted Supabase is community-supported through GitHub Discussions, GitHub Issues, Discord and Reddit, and that enterprises should contact its Growth Team. Several features available on Supabase Cloud, including branching, managed backups, point-in-time recovery and the Management API, are not available when you self-host. Decide what you will do in-house, such as daily operations, and what you want to buy as retainer support, such as upgrades, testing and restore drills. DeployOpen plans, implements, hardens, backs up, upgrades and supports self-hosted platforms in your own environment, with ongoing support available as a retainer.

How do I compare my Amplify usage with the cost of self-hosted servers?

Build the comparison from components rather than from a single total. On the Amplify side, list Hosting build minutes, storage, data served and SSR charges, then add the separately billed Cognito, AppSync, DynamoDB, Lambda and S3 usage from your AWS invoices for the last few months. On the self-hosted side, list the servers, storage, backups, monitoring, staff time for operations and upgrades, and any partner retainer. Supabase's minimum self-hosting requirements are 4 GB RAM, 2 CPU cores and a 40 GB SSD, with 8 GB RAM, 4 cores and 80 GB recommended, which gives you a sizing starting point. Ask any provider for a quote that separates one-time work from recurring costs and states what drives each line up or down.

Is cost the only reason to move from Amplify to self-hosted Supabase?

No, and a cost comparison alone rarely settles the decision. Common reasons include data residency, since you control where the database and files live, exit options if you want to avoid lock-in to AWS-specific services, and the ability to run the stack in a private network. These reasons come with trade-offs: you take on upgrades, backups and availability design that AWS currently handles for you. Consider whether you need Supabase's Postgres model at all, because the data model and auth flows change with the move. Ask whether the gains in control justify the operating work your team will carry.

When staying on Amplify is the lower-cost option

Amplify's metered model is often the cheaper choice when traffic is low or highly uneven, when no one on the team can run servers, and when the app has only one or two environments. In those cases the cost of a self-hosted Supabase stack is mostly fixed: a server or cluster that stays on whether or not anyone signs in, plus the hours needed to patch, back up and monitor it. Amplify charges for what is used, so a small internal tool with a few hundred users may cost less per month than a server that is always running. Before deciding, pull the last three to six months of usage from the AWS Cost Explorer for each Amplify component, separated by the Cognito, AppSync, DynamoDB, Lambda and S3 line items, and look at the peak month, not only the average.

The second condition is operational capacity. Self-hosted Supabase is community-supported according to its self-hosting documentation, so the team carries upgrades, security fixes and incident response itself. Supabase's Docker configuration releases pin specific Auth, PostgREST and Realtime versions, and a release such as 0.8.3 can include Storage migrations that are one-way and require a database backup first. If nobody on the team is willing to own that routine, the saving on the monthly bill may be offset by the time a developer spends on it. Ask who would perform each upgrade and how long the team has to do it before a security fix is due.

The third condition is the number of environments. Amplify creates a separate backend per branch or environment, and each one carries its own charges, so a team with development, staging, production and preview branches pays for each. A self-hosted stack also needs more than one instance to match that layout, but the cost of extra environments is mostly the infrastructure you already run. Count the environments you actually keep running and the number of preview deployments created each week. If the answer is one production backend and a single shared development environment, Amplify's model may stay competitive. Treat this as a check to run, not a conclusion, and confirm the figures against your own AWS invoices and the Supabase or Appwrite pricing pages before comparing totals.

How DeployOpen scopes a fixed-price Supabase implementation

DeployOpen plans, implements, hardens, backs up, documents and supports self-hosted open-source platforms inside your own infrastructure. For a move from AWS Amplify to self-hosted Supabase, the work starts with a written scope that separates what Amplify bills today from what your own servers and staff will carry.

How we scope

  • Inventory the Amplify components in use: Hosting builds, SSR, Cognito, AppSync, DynamoDB, Lambda and S3
  • Agree which data, users, files and functions move, and which stay on AWS during a transition
  • Define the target servers, region and Supabase Docker release before any build work begins
  • Document scope, deliverables and timelines in writing, since most engagements are fixed-scope

How we build

  • Deploy self-hosted Supabase with Docker Compose, with secrets generated rather than left at placeholder values
  • Reshape exported DynamoDB data into Postgres tables and map Cognito users into Supabase Auth
  • Rebuild AppSync resolvers and Lambda logic as Postgres functions, Edge Functions or client code, as agreed in scope
  • Copy S3 objects and test access rules, backups and restores against the agreed acceptance criteria

How we hand over

  • Deliver runbooks for upgrades, including the backup step required before one-way Storage database migrations
  • Document the cost components your team now pays for: servers, storage, backups, monitoring and staff time
  • Record which hosted features, such as managed backups, point-in-time recovery and branching, are absent and what replaces them
  • Walk your operators through restore testing so recovery steps are known before cutover

How we support

  • Offer ongoing support, upgrades and continuous testing as a retainer after handover
  • Track Supabase Docker releases and service version pins so your team can plan each upgrade window
  • Agree in the scope who answers incidents, since self-hosted Supabase relies on community channels by default
  • Ask any provider, including DeployOpen, to confirm response expectations in the written agreement

Sources and further reading

Talk to our team.

Tell us what you're working on, whether it's a deployment, an audit, a security test or a cyber range. You'll speak with an engineer who can help you scope it.

  • 30-minute call: free, with no obligation.
  • NDA on request: we can sign before you share details.
  • Clear next steps: a scope and plan after the call.