Fix guides

Supabase paused my free project: restore it and keep it from pausing again

Your Lovable, Bolt, or Cursor app stopped loading data because Supabase paused the free project after a week of low activity. How to restore it, what to check after it wakes up, and how to stop it happening again.

What you are seeing

Why it happens

  1. Supabase pauses Free plan projects that do not get enough user database activity over a 7-day window, to save server resources. Supabase's docs say a few user requests to the database each day over the previous week is usually enough to avoid it.
  2. Opening your deployed frontend does not count if the page never queries the database, so a landing page with real visitors can still pause.
  3. Projects on a paid plan are never paused for inactivity, so this only hits Free plan projects.
  4. The Free plan allows 2 active projects, so if you already have two others running you may need to pause one before this one can be resumed.

How to fix it

1. Resume the project

Open the Supabase Dashboard, choose the organization, open the paused project, and click Resume project, then confirm. Supabase says the project comes back with its data and configuration. Paused projects can be restored this way for up to 1 year after the pause.

2. Confirm the app talks to it again

curl 'https://YOUR_PROJECT.supabase.co/rest/v1/your_table?select=id&limit=1' \
  -H 'apikey: YOUR_ANON_KEY'

# a JSON array (even []) means the API is back;
# a timeout or connection error means it is still waking up

3. Recheck what a resume can change

Free projects move to the latest Postgres minor version when a paused project is restored, per Supabase's upgrade docs. Click through login, sign-up, one write, and one file upload, and check the Security Advisor and the logs for new errors. If the restored project is newer, also check that tables you create from now on are granted to the API roles (see the 42501 guide linked below).

4. If it has been paused for more than a year

Studio no longer offers one-click restore. Download the database backup and Storage objects from the paused project's overview page, create a new project, and restore the backup into it with psql using the new project's Session pooler connection string, as described in Supabase's guide linked below.

5. Stop it pausing again: the reliable way

If real users or customers depend on the app, upgrade the organization to Pro in Billing settings. Paid projects are not paused for inactivity. This is the option Supabase itself recommends.

6. Stop it pausing again: the free way, for demos

# .github/workflows/supabase-keepalive.yml
name: supabase-keepalive
on:
  schedule:
    - cron: '0 9 * * *'   # once a day
  workflow_dispatch:
jobs:
  ping:
    runs-on: ubuntu-latest
    steps:
      - run: |
          curl -fsS "$SUPABASE_URL/rest/v1/your_table?select=id&limit=1" \
            -H "apikey: $SUPABASE_ANON_KEY"
        env:
          SUPABASE_URL: ${{ secrets.SUPABASE_URL }}
          SUPABASE_ANON_KEY: ${{ secrets.SUPABASE_ANON_KEY }}

# query a real table so it counts as database activity.
# Use the anon key only, never the service_role key.
# GitHub disables scheduled workflows in public repos after
# 60 days without repo activity, so check it still runs.

How to know it is fixed

The project shows as active in the Dashboard, the curl check returns JSON, and a real login and data load work in the deployed app. If you set up the keep-alive, its Actions tab shows a green run every day. Sources: Supabase: Project pausing, Supabase pricing, Supabase: Upgrading, and Supabase: Restore a project paused for more than 1 year. Related: Supabase 42501 permission denied on new tables.