Recovering Lost Apple Reminders from the Local SQLite Database
Sometimes after syncing devices or migrating to a new computer, Apple Reminders may show lists with a ⚠️ warning icon and apparently no reminders inside them.
In many cases, the reminders are not actually lost. The data still exists inside the local Reminders database, but the application has lost the correct references between lists and reminders.
This guide explains how to:
- inspect the Apple Reminders SQLite database
- locate the real reminders
- export them safely
- reconstruct them using Apple's official EventKit API
This avoids modifying the database directly and keeps iCloud synchronization safe.
Understanding the Problem
A common symptom is:
- several reminder lists display a ⚠️ symbol
- the lists appear empty
- a strange reminder like "Where are my reminders?" may appear
These are placeholder reminders created by the Reminders application when synchronization fails to resolve the real content.
The real reminders usually still exist elsewhere in the database.
Where Apple Reminders Stores Data
Reminders uses a local SQLite database.
On macOS it typically lives inside a container similar to:
group.com.apple.reminders/Container_v1/Stores/
Inside this directory you will find a file similar to:
Data-XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX.sqlite
⚠️ Important:
Always work on a copy of the database, never the live file.
Exploring the Database
Open the database with:
sqlite3 Data-XXXX.sqlite
List tables:
.tables
Important tables include:
ZREMCDREMINDER ZREMCDBASELIST ZREMCDOBJECT
Key Tables
ZREMCDREMINDER
Stores the reminders themselves.
Important fields:
Field Description
ZTITLE reminder title ZNOTES notes ZLIST reference to list ZDUEDATE due date ZCREATIONDATE creation timestamp
ZREMCDBASELIST
Stores reminder lists.
Field Description
Z_PK primary key ZNAME list name
Listing Reminder Lists
SELECT Z_PK, ZNAME
FROM ZREMCDBASELIST;
This typically shows:
- normal user lists
- system lists
- placeholder lists with ⚠️
Viewing Reminders
SELECT ZTITLE, ZLIST
FROM ZREMCDREMINDER
LIMIT 20;
Join reminders with their list:
SELECT
r.ZTITLE,
l.ZNAME
FROM ZREMCDREMINDER r
JOIN ZREMCDBASELIST l
ON r.ZLIST = l.Z_PK;
Apple Date Format
Reminders stores timestamps relative to January 1st 2001.
To convert them:
datetime(ZCREATIONDATE + 978307200, 'unixepoch')
978307200 seconds converts Apple's reference epoch to Unix time.
Exporting Reminders to JSON
SQLite can export directly to JSON:
.mode json
SELECT
ZTITLE AS title,
ZNOTES AS notes,
ZDUEDATE
FROM ZREMCDREMINDER;
This produces a JSON file suitable for reconstruction.
Why You Should Not Modify the Database
Directly editing the SQLite database is risky.
Reminders relies on internal metadata including:
- CloudKit synchronization data
- replication state
- transaction history
- serialized objects
Changing references manually can break synchronization or corrupt the store.
Instead, export the data and recreate reminders using the official API.
Rebuilding Reminders Using EventKit
Apple provides EventKit, a framework for interacting with reminders and calendars.
Example:
import EventKit
let store = EKEventStore()
store.requestFullAccessToReminders { granted, error in
guard granted else { return }
let reminder = EKReminder(eventStore: store)
reminder.title = "Recovered reminder"
try? store.save(reminder, commit: true)
}
Using this approach ensures compatibility with iCloud synchronization.
Preserving Original Metadata
Apple does not allow restoring some internal fields such as the original creation date.
However, the original timestamps can be preserved inside the note field:
[Recovered from SQLite] Original created: 2021-08-16 Original modified: 2021-08-16
This keeps historical context while remaining compatible with the API.
Recommended Recovery Workflow
- Copy the Reminders database
- Explore lists and reminders with SQLite
- Export reminders to JSON
- Use an EventKit script to recreate them
- Import into new lists
- Verify the recovered reminders
Final Notes
Even when the Reminders UI appears empty, the data often still exists in the database.
By carefully inspecting the SQLite store and rebuilding reminders through EventKit, it is possible to recover nearly all reminder content safely.
Always test the recovery with a small sample before importing everything.
Tools Used
- SQLite CLI
- Apple EventKit framework
- JSON export
You can find a link to the repository here: