Supabase Status: How to Check If Supabase Is Down (2026 Guide)
Updated June 13, 2026 · 18 min read · API Status Check
Quick Answer
Check Supabase status at status.supabase.com (official) or apistatuscheck.com/is-supabase-down for independent real-time monitoring. Most Supabase "outages" are connection pool exhaustion or RLS policy gaps — not infrastructure failures.
📡 Monitor your APIs — know when they go down before your users do
Better Stack checks uptime every 30 seconds with instant Slack, email & SMS alerts. Free tier available.
Affiliate link — we may earn a commission at no extra cost to you
The Official Supabase Status Page
Supabase maintains an official status page at status.supabase.com. Unlike many BaaS providers, Supabase breaks down status by individual service component, so you can identify exactly what's broken:
What Each Supabase Status Means
Get alerted the instant Supabase goes down
Better Stack monitors your Supabase project endpoints every 30 seconds and alerts your team before users notice database errors. Free tier included.
Try Better Stack Free →Supabase Services: What Can Fail Independently
Supabase is a suite of services built on top of Postgres and AWS. Each layer can fail independently — understanding which one is broken determines your response:
Supabase Database (Postgres)
What it is: Your dedicated Postgres instance running on AWS RDS or compute. The most critical component — if this is down, your app cannot read or write data.
Signs of issues: Connection refused, query timeouts, ECONNREFUSED errors, "could not connect to server", "remaining connection slots are reserved".
Workaround: Switch to Transaction Pooler (port 6543) immediately. Implement read replicas for read-heavy apps. Display cached data to users during the outage.
Supabase Auth (GoTrue)
What it is: The GoTrue authentication service. Handles JWTs, OAuth, magic links, phone OTP, and SAML.
Signs of issues: "Invalid JWT" errors, signIn() returning 500s, OAuth redirects failing, magic link emails not sending, OTP codes rejected.
Workaround: Cache JWTs client-side — supabase-js automatically refreshes them. Existing sessions with valid JWTs continue working. New logins will fail until Auth recovers.
Supabase Realtime
What it is: WebSocket server for Postgres change data capture (CDC), presence, and broadcast messaging.
Signs of issues: supabase.channel() subscriptions not receiving events, WebSocket close events (1006/1011), presence data going stale.
Workaround: Fall back to polling with supabase.from().select() on an interval. Implement reconnection logic with exponential backoff in your channel setup.
Supabase Storage
What it is: S3-compatible object storage backed by AWS S3 with Supabase CDN delivery via Cloudflare.
Signs of issues: File uploads returning 500s or timing out, signed URLs returning 403 or 404, bucket operations failing, image transforms not working.
Workaround: Queue uploads and retry. Cached CDN assets may still be accessible even if new uploads fail. Serve fallback images for transformed images.
Supabase Edge Functions
What it is: Globally deployed Deno serverless functions running on Supabase infrastructure.
Signs of issues: Function invocations returning 5xx errors, cold start timeouts (>10s), deployment failures via CLI or dashboard.
Workaround: Route function traffic to an alternative (Cloudflare Workers, Vercel Functions, AWS Lambda). Implement a feature flag to disable function-dependent features.
PostgREST (REST API)
What it is: Auto-generated REST API layer on top of your Postgres database. Used by supabase-js for all .from() table operations.
Signs of issues: All supabase-js table queries returning errors, REST API calls returning 503, GraphQL queries failing.
Workaround: Fall back to direct Postgres connection if using a server environment. For client-side apps, show a maintenance page.
Why Supabase May Be Down for You But Not Others
Supabase projects are hosted in specific AWS regions. A regional AWS incident affects only projects in that region — a developer in Singapore with a project in ap-southeast-1 may be completely down while a US developer's project in us-east-1 is fine:
us-east-1N. VirginiaMost common default region — highest traffic, slightly higher incident exposure due to volumeus-west-1N. CaliforniaWest Coast US projectsus-west-2OregonAlternative US West optioneu-west-1IrelandEuropean default — GDPR-friendlyeu-central-1FrankfurtGermany-hosted for strict EU data residencyap-southeast-1SingaporeAsia-Pacific projectsap-northeast-1TokyoJapan-based projectsap-southeast-2SydneyAustralia projectssa-east-1São PauloSouth America projectsTo find your project's region: open your Supabase project → Settings → General → Project Configuration. Match this region to incident reports on status.supabase.com. Region-level incidents are shown inline when you expand an incident.
6 Ways to Check Supabase Status Right Now
Official Supabase Status Page
Visit status.supabase.com for component-level real-time status. Click "Subscribe to Updates" for email or Slack webhook notifications. Expand active incidents to see region-level detail.
status.supabase.com →API Status Check (Independent Monitor)
APIStatusCheck independently monitors Supabase endpoints from multiple locations and shows real uptime data. Independent monitoring often catches incidents before the official status page updates.
Check live Supabase status →Direct Project Health Check (curl)
Hit your project's REST API directly. A 200 response means Supabase is up and your project is reachable. A non-200 confirms a project-level or platform problem.
curl https://<your-project-ref>.supabase.co/rest/v1/ \
-H "apikey: <your-anon-key>" -o /dev/null -w "%{http_code}"Supabase GitHub Issues
Supabase is open source. Check github.com/supabase/supabase/issues — during incidents, users open issues within minutes. Especially useful for Realtime and Edge Function issues that take time to appear on the status page.
supabase/supabase issues →Supabase Discord
The Supabase Discord (#help and #announcements channels) sees immediate reports during outages. The community is active and Supabase team members monitor it closely.
discord.supabase.com →X / Twitter Search
Search "supabase down" or "supabase outage" on X for real-time user reports. When Supabase has a broad incident, dozens of developers post within minutes. More reliable signal than waiting for status page updates.
Search "supabase down" on X →Supabase Error Codes During Outages
When Supabase is having issues, your app will see specific HTTP error codes and Postgres error messages. Here's what each one means and the fastest remediation:
503Service UnavailableSupabase service is down or overloaded. Check status.supabase.com immediately. Retry with exponential backoff (5s, 10s, 30s).500Internal ErrorServer-side error in Supabase's backend. Retry 2-3 times. If persistent after 5 minutes, check the status page and GitHub issues.ECONNREFUSEDConnection RefusedYour Postgres instance is not accepting connections. Most common: connection pool exhausted (switch to Transaction Pooler, port 6543). Less common: actual database outage.08P01Protocol ViolationUsually caused by using Prisma with Session Pooler (port 5432). Fix: add ?pgbouncer=true&connection_limit=1 to your Prisma connection string and use Transaction Pooler.53300Too Many Connections"remaining connection slots are reserved for non-replication superuser" — you have hit the Postgres max_connections limit. Switch to Transaction Pooler immediately.401UnauthorizedJWT expired or Auth service is having issues verifying tokens. Check Supabase Auth status. Also check if your JWT secret was rotated.PGRST301JWT ExpiredPostgREST cannot verify JWT — either JWT is expired (handled by supabase-js auto-refresh) or Auth service is degraded.PGRST116JSON object not foundNot an outage — usually an RLS policy blocking data access. Check your Row Level Security policies for the affected table.Connection timeoutTimeoutDatabase query taking too long — degraded performance or connection pool exhausted. Add pg_statement_timeout and implement retry logic.413Payload Too LargeFile upload exceeds Supabase Storage limit (50MB on free plan, higher on paid). Not an outage — a plan limit.RLS False Outages: The Most Misdiagnosed Supabase Problem
Row Level Security (RLS) is responsible for a huge proportion of reported Supabase "outages" that are not outages at all. When RLS is enabled on a table with no policies defined, all queries return empty arrays — not errors. This silently looks like data loss or a broken connection.
How to Diagnose an RLS False Outage
- Your query returns
[](empty array) with no error — not a 500 or 503. - Direct SQL in the Supabase SQL Editor shows data:
SELECT * FROM your_table;returns rows. - Using the
service_rolekey (server-side only) returns data, but theanonkey returns empty. - The Supabase status page shows all green.
// Test RLS bypass with service_role (server-side ONLY — never expose this key client-side)
import { createClient } from '@supabase/supabase-js'
const supabase = createClient(
process.env.SUPABASE_URL!,
process.env.SUPABASE_SERVICE_ROLE_KEY! // bypasses RLS
)
const { data, error } = await supabase.from('your_table').select('*')
// If data appears here but not with anon key → RLS policy missingTo fix: go to your Supabase project → Table Editor → select your table → click "RLS Policies" → add a SELECT policy. A common permissive policy for authenticated users:
-- Allow authenticated users to read their own rows
CREATE POLICY "Users can read own data" ON your_table FOR SELECT USING (auth.uid() = user_id); -- Or for public read access: CREATE POLICY "Anyone can read" ON your_table FOR SELECT USING (true);
Monitor your Supabase project automatically
Better Stack creates synthetic monitors for your Supabase REST API, Auth endpoint, and Storage — alerts your team the instant any component goes down. Free for small teams.
Try Better Stack Free →What to Do When Supabase Is Down
Immediate Triage
- Check status.supabase.com for component and region status
- Identify which service is affected (Database? Auth? Realtime?)
- Check if it's region-specific vs global outage
- Verify your project's error logs in the Supabase Dashboard
- Test direct curl health check to isolate your project
- Check Supabase Discord #help channel for corroboration
- Rule out RLS policies and connection string misconfiguration first
Engineering Response
- Implement graceful degradation — show cached data
- Switch to Transaction Pooler (port 6543) for immediate connection relief
- Add exponential backoff retries for transient errors
- Enable Realtime reconnection logic with backoff
- Implement a maintenance page for critical outages
- Consider a Postgres read replica (Pro plan) for read-heavy apps
- File a support ticket for Pro/Team plans at supabase.com/dashboard
Supabase Connection Pooling: Preventing the Most Common Outage
The single most common Supabase "outage" is connection pool exhaustion — not a Supabase infrastructure problem, but a misconfiguration that causes ECONNREFUSED errors indistinguishable from a real outage. Supabase provides two pooler modes via Supavisor (their Postgres connection pooler):
Transaction Pooler
port 6543recommendedServerless (Vercel, Lambda, Netlify, Cloudflare Workers)
Holds a database connection only during an active transaction. Each serverless invocation gets a connection only when it needs one and releases it immediately. Critical for serverless — prevents connection exhaustion under concurrent invocations. Default recommendation for all new projects.
Session Pooler
port 5432Long-running servers with persistent connections
Holds a connection for the full session lifetime. Fine for traditional servers (Node.js servers, Docker containers, long-running processes) where you manage connections explicitly. Never use this in serverless environments — each function invocation holds a connection open, exhausting the pool under concurrent load.
To switch pooler modes: Supabase project → Settings → Database → Connection pooling. Copy the Transaction Pooler URL (port 6543) and update your DATABASE_URL. For Prisma, add ?pgbouncer=true&connection_limit=1.
# Transaction Pooler (Supavisor) — use this for serverless
postgresql://postgres.[project-ref]:[password]@aws-0-[region].pooler.supabase.com:6543/postgres# Prisma: pgbouncer=true prevents prepared statement conflicts with PgBouncer
postgresql://...@...pooler.supabase.com:6543/postgres?pgbouncer=true&connection_limit=1# Direct connection (use ONLY for migrations, not runtime queries in serverless)
postgresql://postgres.[project-ref]:[password]@db.[project-ref].supabase.co:5432/postgresReading Supabase Logs During an Outage
Supabase provides real-time log access for all services. During an incident, logs are your fastest path to root cause:
API Logs (PostgREST)
Project → Logs → API
HTTP requests, response codes, query execution time. Look for 500s, 503s, and slow queries.
Filter query: status_code >= 500
Postgres Logs
Project → Logs → Postgres
Database-level events: connection errors, slow queries, lock waits, autovacuum.
Filter query: event_message ILIKE '%error%' OR event_message ILIKE '%connection%'
Auth Logs
Project → Logs → Auth
Authentication events: failed logins, JWT errors, OAuth failures, rate limit hits.
Filter query: level = 'error'
Storage Logs
Project → Logs → Storage
Upload/download operations, bucket access errors, CDN delivery issues.
Filter query: status_code >= 400
Edge Function Logs
Project → Logs → Edge Functions
Function invocation logs, errors, cold start timing.
Filter query: level = 'error'
For Pro plan and above, you can also ship logs to external services (Datadog, Logflare, Grafana) using Supabase Log Drains. This gives you historical log analysis beyond the 7-day retention in the Supabase Dashboard.
Check Supabase Status Programmatically
Integrate Supabase status checking into your monitoring pipeline using the Atlassian Statuspage API:
# Check overall Supabase status (returns: none | minor | major | critical)
curl https://status.supabase.com/api/v2/status.json# Check all component statuses (Database, Auth, Realtime, etc.)
curl https://status.supabase.com/api/v2/components.json# Get active unresolved incidents
curl https://status.supabase.com/api/v2/incidents/unresolved.json# Direct project health check — replace with your project ref and anon key
curl https://<project-ref>.supabase.co/rest/v1/ \
-H "apikey: <your-anon-key>" -o /dev/null -w "%{http_code}"// TypeScript: check Supabase status and alert if degraded
async function checkSupabaseStatus() {
const res = await fetch(
'https://status.supabase.com/api/v2/status.json'
)
const data = await res.json()
const indicator = data.status.indicator // 'none' | 'minor' | 'major' | 'critical'
if (indicator !== 'none') {
console.error(`Supabase status: ${indicator} - ${data.status.description}`)
// Send alert to your team...
}
return indicator
}
// Also check your specific project endpoint
async function checkProjectHealth(projectRef: string, anonKey: string) {
const res = await fetch(
`https://${projectRef}.supabase.co/rest/v1/`,
{ headers: { apikey: anonKey } }
)
return res.status === 200
}Setting Up Supabase Monitoring for Your Project
The official Supabase status page monitors Supabase infrastructure — but it won't catch project-specific issues (wrong RLS policies, exhausted connection pools, Edge Function errors). You need both:
Infrastructure monitoring
Is Supabase itself down? Monitors status.supabase.com API. Alerts when indicator is not "none".
Tools: status.supabase.com email/Slack subscription, Better Stack, API Status Check
Synthetic project monitoring
Is YOUR project responding? Periodically hits your project's REST API endpoint with your anon key and checks for 200 response.
Tools: Better Stack (30s intervals), UptimeRobot (5min free), Checkly (API + browser), custom cron on Vercel
Application error monitoring
Are Supabase errors appearing in your app? Captures client-side and server-side errors from supabase-js calls.
Tools: Sentry, LogRocket, Datadog RUM, custom error boundaries
Database performance monitoring
Are queries slow? Monitors query execution time and connection count.
Tools: Supabase built-in Logs + Observability (Pro plan), pg_stat_statements, Prometheus + Grafana
// Next.js API route: synthetic health check endpoint for external monitors
// app/api/health/route.ts
import { createClient } from '@supabase/supabase-js'
export async function GET() {
const supabase = createClient(
process.env.NEXT_PUBLIC_SUPABASE_URL!,
process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!
)
try {
// Lightweight check: count rows on a small public table
const { error } = await supabase
.from('health_check')
.select('id', { count: 'exact', head: true })
if (error) throw error
return Response.json({ status: 'ok' }, { status: 200 })
} catch (error) {
return Response.json(
{ status: 'error', message: String(error) },
{ status: 503 }
)
}
}Supabase Status History: Notable Outage Patterns
Understanding Supabase's historical incident patterns helps teams build more resilient applications. Here are the most common incident types reported on their status page and in the community:
Database Connection Pool Exhaustion
Most common — weekly in community reportsNot a Supabase infrastructure failure — a misconfiguration. Postgres connection limits hit during traffic spikes, new connections fail while existing queries run. ECONNREFUSED or 'remaining connection slots are reserved' errors. Fix: always use Transaction Pooler (port 6543) in serverless environments.
Realtime WebSocket Disconnections
Periodic — especially during Supabase deploymentsSupabase Realtime subscriptions drop during platform deployments or when Supabase rolls out Realtime updates. Clients see WebSocket close event 1006 (abnormal closure). Fix: implement onDisconnect handler that re-subscribes with exponential backoff.
Auth Service Degradation
Low frequency, high impactJWT verification latency spikes during Auth infrastructure maintenance. New logins fail with 5xx. Existing sessions using cached JWTs remain functional. Fix: increase JWT expiry buffer (default 1 hour — consider 24 hours for tolerant apps), implement graceful retry on Auth 503 responses.
Storage CDN Propagation Delays
Occasionally — usually after Storage deploysObject uploads succeed but signed URLs return 404 briefly due to CDN propagation. The status page shows green because uploads work — the CDN layer lags. Fix: implement a 2-3 retry loop with 2-second delays when generating signed download URLs after upload.
Regional AWS Infrastructure Issues
Infrequent but broad impactAWS zone-level issues in us-east-1 cause Postgres instance failures affecting many Supabase projects in that region simultaneously. Projects in other regions unaffected. Fix: architect critical apps with multi-region read replicas (Supabase Pro) for read-heavy workloads.
Edge Function Cold Start Failures
Occasional during high trafficEdge Functions experience cold start timeouts during sudden traffic spikes. First invocations after idle periods fail with 504. Fix: implement function-level retries and set appropriate timeouts in your client code.
Supabase Uptime SLA by Plan
Supabase Status vs Firebase Status: Reliability Comparison
Teams migrating between Supabase and Firebase often ask about relative reliability. Both run on major cloud infrastructure but take different approaches to transparency:
Supabase Status Transparency
- ✓ Component-level breakdown (Database, Auth, Realtime, etc.)
- ✓ Region-level incident granularity
- ✓ Email, Slack, and webhook subscription
- ✓ Open-source — incidents corroborated on GitHub issues
- ✓ Active Discord community for real-time confirmation
- ✗ No per-project health dashboard on free tier
- ✗ Status page updates can lag actual incident start by 5-15 min
Firebase Status Transparency
- ✓ status.firebase.google.com with product-level breakdown
- ✓ Backed by Google Cloud global infrastructure
- ✓ Realtime Database has a long reliability track record
- ✗ Status page updates sometimes lag actual incidents
- ✗ Less community corroboration (proprietary stack)
- ✗ Harder to diagnose cross-service issues
- ✗ Less granular regional status reporting
Both platforms target ~99.9% uptime on paid plans. For current Firebase status, check apistatuscheck.com/is-firebase-down. See also: Firebase status guide.
Frequently Asked Questions
Where is the official Supabase status page?
Supabase's official status page is at status.supabase.com. It shows component-level status for Database, Auth, Storage, Realtime, Edge Functions, and the Dashboard. Subscribe to email or Slack notifications for incident updates.
Why is Supabase down for my project but not others?
Supabase projects are hosted in specific AWS regions. A regional outage only affects projects in that region. Check status.supabase.com for region-specific incidents and compare to your project's region (Settings → General). If the status page shows green but your project is down, check your error logs and rule out connection pool exhaustion and RLS policy gaps first.
Is Supabase Realtime status different from Database status?
Yes. Supabase has multiple independent components. Realtime (WebSocket subscriptions) can be down while your Database remains fully operational. Auth, Storage, and Edge Functions each have their own infrastructure. status.supabase.com shows per-component status.
What does Supabase status "degraded" mean for my app?
Degraded Supabase status means the service is operational but slower than normal. Expect higher database query latency, Auth delays, or Realtime subscription lag. Implement retries with exponential backoff and cache data aggressively. Most degraded events resolve within 30-90 minutes.
How do I get alerts when Supabase goes down?
Subscribe to email or Slack notifications at status.supabase.com, follow @supabase on X, or join the Supabase Discord. For production apps, use Better Stack or API Status Check to create custom monitors for your specific Supabase project endpoints — you'll get faster alerts than waiting for the official status page to update.
How do I fix Supabase connection pool exhaustion?
Connection pool exhaustion is Supabase's most common outage-like problem. Fix: (1) Switch from Session Pooler (port 5432) to Transaction Pooler (port 6543) — critical for serverless. (2) Use the Supabase-provided Supavisor URL from Settings → Database → Connection pooling. (3) For Vercel, Netlify, AWS Lambda, always use Transaction Pooler. (4) Set pool size 5-10 for serverless, 20-50 for long-running servers. For Prisma, add ?pgbouncer=true&connection_limit=1.
What is the Supabase status API endpoint?
Query https://status.supabase.com/api/v2/status.json for overall status. The indicator field returns none (operational), minor, major, or critical. For per-component breakdown use /api/v2/components.json. Active incidents at /api/v2/incidents/unresolved.json. Integrate into your monitoring pipeline or PagerDuty.
Is Supabase down or is it my code?
To distinguish a Supabase outage from a local problem: (1) Check status.supabase.com for active incidents. (2) Test your REST endpoint: curl https://[project-ref].supabase.co/rest/v1/ -H 'apikey: [anon-key]' — 200 means Supabase is up. (3) Check your connection string port: 5432 = Session Pooler (bad for serverless), 6543 = Transaction Pooler (correct). (4) Rule out RLS policies by testing with service_role key server-side. Most 'outages' are connection pooling or RLS configuration issues.
Can RLS policies cause Supabase to appear down?
Yes — extremely common. When RLS is enabled with no policies, all queries silently return empty arrays (not errors). This looks like data loss. Test: use service_role key server-side (bypasses RLS) — if data appears with service_role but not with anon, you have an RLS policy gap. Fix: add SELECT policies in Table Editor → RLS Policies, or use the SQL Editor to create policies directly.
How do I check my Supabase project logs during an outage?
Go to app.supabase.com → your project → Logs. Select the service: API (HTTP errors), Postgres (connection/query errors), Auth (JWT failures), Storage (upload errors), Edge Functions (invocation errors). Filter by level='error' or status_code >= 500. Logs are retained for 7 days on free plan; Pro plan enables log drains to Datadog or Logflare.
What is Supabase uptime SLA?
Free plan: no SLA (best effort). Pro plan ($25/mo): 99.9% uptime SLA on Database and API — ~43 minutes downtime per month allowed. Team and Enterprise plans offer enhanced SLAs and priority support. Check supabase.com/pricing for current plan terms.
Why does Supabase Auth show "Invalid JWT" suddenly?
Sudden 'Invalid JWT' errors usually mean: (1) Your JWT secret was rotated — check Settings → API → JWT Settings. (2) JWT expired and client isn't auto-refreshing — supabase-js handles this automatically, but server-side code may not. (3) Clock skew between your server and Supabase Auth. (4) Anon key changed — verify NEXT_PUBLIC_SUPABASE_ANON_KEY matches your current project key. These are almost always configuration issues, not Supabase outages.
Alert Pro
14-day free trialStop checking — get alerted instantly
Next time Supabase goes down, you'll know in under 60 seconds — not when your users start complaining.
- Email alerts for Supabase + 9 more APIs
- $0 due today for trial
- Cancel anytime — $9/mo after trial