Supabase paused my project: how to restore it and stop it happening

Short answer

Supabase pauses Free plan projects that get too little database activity over a 7-day period. Fix: Resume the project from the dashboard; Take your own backup while it's running; Act on the warning email; Optional: schedule a small daily query (a workaround, not a guarantee); For a live product, move to Pro.

You'll see:
  • Email from Supabase: your project will be paused, then that it has been paused
  • Dashboard shows the project as paused with a Resume project button
  • Your live app can't sign anyone in or load data, though the frontend still loads

Why does this happen?

Supabase pauses Free plan projects that get too little database activity over a 7-day period. It doesn't publish an exact threshold; its docs say a few user requests to the database each day are typically enough to avoid it. Projects on a paid plan are never paused for inactivity.

How do you fix it?

  1. Resume the project from the dashboard

    Open the Supabase Dashboard, select the organization and the paused project, click Resume project and confirm. Supabase says the project returns to its previous state, including data and configuration. You can restore a paused project for up to 1 year after it was paused.

  2. Take your own backup while it's running

    The pricing page lists daily backups (kept 7 days) on Pro, not on Free. Dump the schema and data with the Supabase CLI and keep the files with your code, so a lost project is a rebuild, not a disaster.

    npx supabase login
    npx supabase link --project-ref <your-project-ref>
    npx supabase db dump -f supabase/schema.sql
    npx supabase db dump --data-only -f supabase/data.sql
    npx supabase db dump --role-only -f supabase/roles.sql
  3. Act on the warning email

    Supabase emails the project owner roughly one week before a pause. Opening the project in the dashboard, or sending API requests through your app, generates activity and prevents that pause.

  4. Optional: schedule a small daily query (a workaround, not a guarantee)

    If the app has few real users, a scheduled request that reads one row through the REST API reaches the database every day. Use a tiny table with a public read policy and the publishable (anon) key, never the service-role key. Note that GitHub disables scheduled workflows in public repositories after 60 days without repository activity, and Supabase doesn't promise any specific request count will keep a project awake.

    # .github/workflows/supabase-heartbeat.yml
    # One-time SQL: create table public.heartbeat (id int primary key);
    #   insert into public.heartbeat values (1);
    #   alter table public.heartbeat enable row level security;
    #   create policy "public read" on public.heartbeat for select to anon using (true);
    on:
      schedule:
        - cron: '0 9 * * *'
      workflow_dispatch:
    jobs:
      ping:
        runs-on: ubuntu-latest
        steps:
          - run: |
              curl -fsS "${{ secrets.SUPABASE_URL }}/rest/v1/heartbeat?select=id&limit=1" \
                -H "apikey: ${{ secrets.SUPABASE_PUBLISHABLE_KEY }}"
  5. For a live product, move to Pro

    Paid projects can't be paused for inactivity. Supabase Pro starts at $25/month (checked on the pricing page), with daily backups and a spend cap on by default. That is the only fix Supabase itself documents.

Common with:

Related fixes