Can you use a custom domain with self-hosted Supabase?
Yes: on a self-hosted stack the API URL is whatever hostname your reverse proxy answers to, so a custom domain is a DNS record and a certificate rather than a paid feature. Supabase Cloud sells the same thing as a per-project add-on, and its feature page lists it as not applicable to self-hosted deployments, because there is nothing to sell. A dedicated Supabase instance on Hostwares comes with its own stable hostname and HTTPS; if you need the API itself on your brand, run the stack on a full-root Cloud Instance where you own the proxy and attach the domain there.
Step by step
- 1
Ask whether the API hostname needs to be branded
Users see your app's domain, not the Supabase URL; the API hostname only appears in network requests and in sign-in email links. For most apps, a branded app domain plus a stable instance URL is enough, and the email links are fixed by the Site URL setting in Auth.
- 2
Option A: dedicated instance, branded app
Dashboard → Supabase → New: the instance is provisioned with Postgres, Auth, Storage, Realtime and Studio, keys generated, and a hostname with HTTPS. Put your custom domain on the frontend site (Domains tab or add_domain) and set the Auth Site URL to that domain so every email link carries your brand.
- 3
Option B: your own proxy on a Cloud Instance
Dashboard → Instances → New: a full-root instance. Install the official docker-compose stack, put Caddy or nginx in front of Kong on port 8000, and attach api.example.com on the instance's domain panel. The certificate is issued once DNS resolves. Agents can run the setup commands through site_terminal, one command per call.
Caddyfile
api.example.com { reverse_proxy localhost:8000 } - 4
Set the URL in every client and in Auth
Point SUPABASE_URL (or VITE_SUPABASE_URL / NEXT_PUBLIC_SUPABASE_URL) at the hostname you chose, keep the keys the same, and set Site URL and Redirect URLs in Auth to the app's domain. Over MCP, set_env writes the variables and the site rebuilds.
- 5
Verify
curl https://<host>/rest/v1/ with the anon key should answer; a sign-in email should link to your app domain; verify_ssl over MCP checks the certificate on the site.
Check the API
curl -s https://api.example.com/rest/v1/ -H "apikey: <anon key>"
What breaks, and the fix
- Sign-in emails link to the wrong host
- Set Site URL and add the app's domain to Redirect URLs in Auth; the API hostname does not control email links.
- Storage URLs embedded in old rows still point at the old host
- They are plain strings; update them with one SQL statement after the move.
What it costs
- Option A: a dedicated Supabase pack from $5/mo; the app's domain on a Frontend pack from $1/mo.
- Option B: a Cloud Instance from $2/mo, running the stack yourself.
- No custom-domain add-on on either option.
App
$1/mo
Starter Frontend pack, 1 vCPU / 1 GB RAM / 10 GB
Database, users and files
$5/mo
Smallest dedicated Supabase pack; several projects fit on one
For comparison
- Supabase Cloud custom domain add-on, per project per month: $10/mo (checked 2026-11-06, supabase.com)
- Supabase Cloud Pro, required before add-ons: $25/mo (checked 2026-11-06, supabase.com)
Questions
Does Supabase Cloud charge for a custom domain?+
Yes, as a per-project add-on on paid plans. Supabase's feature page lists the add-on as not applicable to self-hosted deployments.
Does a dedicated instance on Hostwares take a custom domain on the API URL?+
The instance ships with its own stable hostname and HTTPS; a custom domain is attached to your frontend site. If the API hostname itself must be branded, run the stack on a Cloud Instance and attach the domain there.
Do my users ever see the Supabase URL?+
Only in network requests. Email links come from the Auth Site URL, which you point at your app's domain either way.
Can I change the API hostname later?+
Yes. The keys stay the same; update the URL variable in each client and redeploy. Storage URLs stored in your own tables are strings you update with SQL.
Is a wildcard or multiple domains possible?+
On your own proxy, as many hostnames as you configure. On a dedicated instance, the hostname is one per instance.
What does it cost?+
A dedicated Supabase pack from $5/mo, or a Cloud Instance from $2/mo if you run the stack yourself. No add-on for the domain.
Related
Next guides
Sources: Supabase: custom domains feature page (2026-11-06) · Supabase pricing (plans and add-ons) (2026-11-06) · Supabase docs: self-hosting (2026-11-06)