Tell Me When Down
How it worksWhat we checkPricing
Security reportsBlogFree toolsCompareDocs
Log inGet started
All postsWhen your free tier falls asleep

Upstash Redis database archived: why it happened and how to restore it

September 21, 2026·5 min read
A padlock hanging on a dark iron gate: a database locked away after a month of no use.

Your side project's Redis calls started failing. You open the Upstash console and the database is gone, or marked as archived.

Upstash didn't lose it. It archived the database because nothing had used it for a month.

30+ days
of inactivity before a free database is archived
several
warning emails Upstash sends first
backed up
your data is kept, the instance is removed
paid plan
Upstash's own fix to keep the endpoint alive

Why Upstash archived your Redis database

Upstash's FAQ says free databases are archived after a minimum of 30 days of inactivity.

Archival means two things: Upstash backs up your data, then removes the database instance.

That second part is why your app breaks. The endpoint it was talking to no longer exists.

The warning emails you probably missed

Upstash sends several warning emails before it archives a database.

If your Upstash account uses an old inbox, or the mails land in a filtered folder, the first sign is a broken app.

No data is lost. Upstash says it takes a backup before archiving, so you can restore it into a new database.

How to restore an archived Upstash Redis database

You can't switch the old instance back on. Upstash's route is to create a new database and restore the backup into it.

  1. In the Upstash console, create a new Redis database.
  2. Open the new database and go to its Backups tab.
  3. Click Restore..., select the source database (the one that was archived) and the backup you want.
  4. Click Start Restore.
A restore deletes everything already in the target database first. Use a fresh, empty database for this.

How to point your app at the restored database

The restored data lives in a new database, so expect a new endpoint and token.

Copy the new values into your environment variables, usually UPSTASH_REDIS_REST_URL and UPSTASH_REDIS_REST_TOKEN, then redeploy.

Forget this step and the app keeps calling the old endpoint, which still fails.

How to stop Upstash archiving your database

How to stop it for good: switch to a paid plan

Upstash's own advice: if you want to keep the endpoint alive through longer quiet periods, switch to a paid plan.

If real users depend on the app, that's the real fix. Archiving idle databases is part of how the free plan stays free.

How to keep a free Upstash database active

The other option is to make sure the database never goes a month without use. A small daily job that sends one real command does that.

One honest caveat: Upstash doesn't publish exactly what counts as activity. A real command is the safest bet, but it's not a documented guarantee.

Paste this into Claude or ChatGPT and it'll write the job for your stack:

paste into Claude or ChatGPT
My Upstash Redis database is on the free plan. Upstash archives free databases after at least 30 days of inactivity, and I want to stop that from catching me out.

Write me a small scheduled job that:
- Runs once a day (pick the simplest option for my stack: a GitHub Actions schedule, a Vercel/Netlify/Cloudflare cron, or a cron in my existing backend).
- Uses the @upstash/redis client with UPSTASH_REDIS_REST_URL and UPSTASH_REDIS_REST_TOKEN from secrets, never hardcoded.
- Sends one real command (PING, or a SET of a timestamp key) and exits non-zero if it fails, so a dead database shows up as a failed run.

Also tell me honestly: Upstash doesn't publish what counts as "activity", so what else should I do (warning emails, backups, upgrading) in case the ping isn't enough?

My stack: [describe it here]
A keep-alive can stop without telling you. GitHub, for one, disables scheduled workflows in public repos after 60 days with no repo activity.

How to know your Upstash Redis is reachable before users do

An archived database doesn't announce itself. Your app just starts throwing errors, and users notice first.

A health check fixes that. It sends Redis a PING and reports the answer somewhere that will email you when it fails.

node · @upstash/redis
import { Redis } from "@upstash/redis";
import { tmwd } from "@tellmewhendown/node";

// Reads UPSTASH_REDIS_REST_URL and UPSTASH_REDIS_REST_TOKEN
const redis = Redis.fromEnv();

export async function checkRedis() {
  const started = Date.now();
  try {
    await redis.ping();
    await tmwd.check("redis", { status: "ok", latencyMs: Date.now() - started });
  } catch (err) {
    await tmwd.check("redis", { status: "fail", detail: { error: String(err) } });
  }
}

Run it on a schedule. Each run is also a real command, so it doubles as your keep-alive.

If the check reports fail or stops arriving, you get an email. That covers an archived database and a keep-alive that quietly stopped.

Other free databases have their own version of this. See how to stop Neon autosuspend, or the cross-host playbook in how to keep a free backend awake.

The archive policy and restore steps come from Upstash's FAQ and Backup/Restore docs.

Find out your Redis is gone before your users do.

Join Tell Me When Down free and we'll watch your app and its Redis around the clock. An archived database, a failing health check, or a keep-alive that quietly stopped: you get an email in minutes, not a bug report next month.

Watch my appfree · no card required
more on when your free tier falls asleep
Fly.io machine keeps stopping: auto_stop_machines explainedNew Fly.io apps auto-stop idle machines by default. Here's why it happens, the fly.toml settings for always-on, suspend and background workers, and how to know your scheduled jobs still run.MongoDB Atlas cluster paused: why it happens and how to stop itAtlas pauses a Free cluster after 30 days with no connections, and your app just starts failing. Here's how to resume it, the version catch that can block a resume, and how to keep it from happening again.How to keep a free backend awakeFree tiers sleep when idle: Supabase pauses, Render spins down, Neon scales to zero. Here's the map — how each host sleeps, why keep-alive pings have a catch, and what actually keeps a free app responsive.How to stop Render spinning down your free serviceFifteen idle minutes and your free service is asleep; the next visitor waits through the cold start. Here's why keep-warm pings have a catch, and what actually keeps a free app responsive.How to keep a Railway app awakeRailway retired its free tier and added opt-in App Sleeping. Here's what actually happens to an idle service now, how to keep one awake without cancelling out the savings, and why a keep-alive ping can't warn you when it dies.How to stop Neon autosuspending your databaseNeon scales your compute to zero after a few idle minutes, and the next query wakes it. Here's what Scale to Zero does, why the fix depends on whether latency or a surprise bill is your real problem, and how to keep it warm safely.Why is my website slow the first time I open it?Slow the first time, instant after? Your site probably isn't slow — it was asleep. Free hosting pauses an idle app and takes seconds to wake it. Here's why it happens, which hosts do it, and your three options.Why Supabase pauses your project — and how to stop it happening againThe pause always lands when you've stopped watching. Here's the real mechanic behind it, the 90-day deadline nobody mentions, and why most keep-alive scripts quietly stop working.

spot something wrong or out of date? [email protected] — we'll fix it

Tell Me When Down

Uptime and security monitoring for people who'd rather ship than babysit servers. We watch so you can sleep.

product
How it worksWhat we checkSecurity reportsPricingDocsBlogFAQ
free toolsWebsite security scanSupabase pause checkRender sleep checkMixed content checkerSecurity headers checkCookie security checkSSL expiry check
comparevs UptimeRobotvs Better Stackvs PingdomFor indie hackers
company
StatusAbout our botContactPrivacyTerms
© 2026 TellMeWhenDown · tellmewhendown.com