Neon has point-in-time recovery (called instant restore) built in. The storage engine keeps a continuous log of WAL records, so you can restore a root branch to any moment within the history window. No pgBackRest, WAL-G, or Barman setup. No base-backup-plus-WAL-replay wait.

How to restore

From the Neon CLI:

# Restore main to a specific timestamp, keeping the pre-restore state as a backup
neon branches restore main ^self@2026-05-15T14:30:00Z \
  --preserve-under-name main_pre_restore

From the API:

curl -X POST https://console.neon.tech/api/v2/projects/$PROJECT_ID/branches/$BRANCH_ID/restore \
  -H "Authorization: Bearer $NEON_API_KEY" \
  -d '{
    "source_branch_id": "'$BRANCH_ID'",
    "source_timestamp": "2026-05-15T14:30:00Z",
    "preserve_under_name": "main_pre_restore"
  }'

The restore overwrites the branch with its state at that timestamp. Connection strings stay the same. Existing connections drop momentarily and reconnect. Operation typically takes a few seconds.

How far back you can go

The history window depends on your plan:

PlanMax history windowCost
Free6 hours, capped at 1 GB of changes$0
LaunchUp to 7 days$0.20/GB-month
ScaleUp to 30 days$0.20/GB-month

PITR storage is only billed on root branches, since you can only restore from those. Child branches don't add to the bill.

Time Travel Assist: pick the right timestamp

Before you overwrite a production branch, you usually want to confirm the data at the target timestamp looks right. Time Travel Assist lets you run read-only queries against a historical state without performing a restore. Useful for narrowing down exactly when a bad migration ran or a row got deleted.

Restore is an overwrite, not a merge

A restore replaces the entire branch with its historical state. Everything written after the target timestamp is excluded. Neon does create an automatic backup branch (named {branch}_old_{timestamp}) so you can roll back the restore if needed.

Snapshots for known-good points

If you want a captured copy of a branch you can hold onto (separately from the rolling history window), use snapshots. The Free plan includes 1 manual snapshot, Launch and Scale include 100. Snapshot storage is billed at $0.09/GB-month. Restore a snapshot to a new branch any time.

How this compares to other Postgres services

PITR is broadly available on managed Postgres, but the mechanics and cost models differ:

ProviderMax history windowRestore destinationNotes
Neon30 days (Scale)Overwrites the branch in place; auto-creates a backup branchBuilt in, billed per GB-month of change history on root branches
Amazon RDS for PostgreSQLUp to 35 daysRestores to a new DB instanceSetting retention to 0 days disables automated backups
Aurora PostgreSQLUp to 35 daysRestores to a new DB clusterContinuous WAL backups included
SupabaseUp to 28 daysRestores in place; requires downtimePaid PITR add-on starting at $100/month for 7 days; daily logical backups otherwise

Neon's restore is in-place and typically completes in seconds because the storage engine references existing pages instead of replaying WAL.

Set up instant restore

Configure your history window and try a point-in-time restore in the Neon Console.