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
- Login, sign-up, and every data load in your app fail at once, usually as a generic network error such as
TypeError: Failed to fetch, even though you changed no code. - The Supabase Dashboard shows the project as paused, with a Resume project button instead of the usual overview.
- You got an email from Supabase about a week ago warning the project would be paused, and a second one saying it was.
- It is a side project, demo, or MVP that nobody used for a week or so, for example over a holiday or between investor demos.
Why it happens
- 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.
- Opening your deployed frontend does not count if the page never queries the database, so a landing page with real visitors can still pause.
- Projects on a paid plan are never paused for inactivity, so this only hits Free plan projects.
- 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.