Backup & Recovery
Coincert provides multiple layers of data protection to ensure your financial data is never lost. From automatic safety snapshots to full data exports, you have complete control over your data’s safety.
Overview
| Feature | What It Does | Where to Find It |
|---|---|---|
| Backups | Point-in-time snapshots of your entire database | Settings > Data > Backups |
| Full Backup Export | Portable JSON export of all data types | Export > Full Backup |
| Auto-Backup | Automatic snapshots before destructive operations | Automatic (no user action needed) |
| Fresh Start | Reset to new-device state for testing | Settings > Backstage (TestFlight only) |
Backups (Database Snapshots)
Backups create a point-in-time copy of your entire SwiftData database. Unlike exports, backups capture the raw database file and can be restored instantly without re-importing.
How Backups Work
Coincert uses SQLite’s VACUUM INTO command to create a clean, self-contained copy of the database while the app is running. This means:
- No data loss during backup — the app continues working normally while the snapshot is created.
- Complete capture — every account, transaction, budget, tag, category, debt plan, BNPL loan, rename rule, and learned pattern is included.
- Standalone files — each backup is a single database file with no dependencies on WAL or SHM journal files.
Creating a Backup
- Navigate to Settings > Data > Backups.
- Tap Create Backup Now.
- Enter a label to identify this backup (e.g., “Before cleanup”, “Pre-import”, “Weekly backup”).
- Tap Create.
The backup appears in the Snapshots list with its label, date, time, and file size.
Viewing Backups
The Backups screen lists all snapshots sorted newest first. Each entry shows:
- Label — the name you gave the backup
- Date and time — when the backup was created
- Size — the file size of the database snapshot
Restoring from a Backup
Restoring replaces your entire current database with the backup’s contents.
- On the Backups screen, swipe left on the snapshot you want to restore (or long-press for the context menu).
- Tap Restore.
- Read the confirmation dialog carefully — restoring will replace ALL current data.
- Tap Restore “[label]” to confirm.
What happens during restore:
- A safety backup of your current data is automatically created (labeled “Auto-backup before restore”).
- The current database files are removed.
- The snapshot is copied into place as the new live database.
- Harmony Sync state is reset so iCloud data will be re-fetched on next sync.
- You are prompted to restart the app.
Important: You must restart the app after restoring. The SwiftData ModelContainer holds an open connection to the database file and cannot be swapped at runtime.
Deleting a Backup
Swipe left on a snapshot and tap Delete, or use the context menu. Deleted backups cannot be recovered.
Where Backups Are Stored
Backups are stored locally on your device in the App Group container:
Group Containers/group.com.coincert.app/
Library/Application Support/
Backups/
2026-02-16_14-30-00/
default.store — database snapshot
metadata.json — label, date, size
Backups are NOT synced to iCloud. They exist only on the device where they were created. If you need a portable backup that can be transferred between devices, use the Full Backup export instead.
Auto-Backup
Coincert automatically creates a backup snapshot before any operation that could cause data loss. You do not need to do anything — this happens transparently.
When Auto-Backups Are Created
| Trigger | Backup Label | Location |
|---|---|---|
| Restoring from a backup | ”Auto-backup before restore” | Settings > Data > Backups > Restore |
| Resetting Harmony Sync | ”Auto: before sync reset” | Harmony Sync > Reset Sync & Refetch All |
| Deleting all data | ”Auto: before nuclear delete” | Backstage > Delete ALL Data |
| Fresh Start reset | ”Auto: before fresh start” | On app launch (TestFlight only) |
Auto-backups appear in the Backups list alongside your manual backups. You can restore from them the same way.
Auto-Backup Limits
Auto-backups are not automatically pruned. If you frequently reset sync or delete data, you may accumulate backups over time. Review and delete old backups periodically from the Backups screen.
Full Backup Export (JSON Dump)
The Full Backup export creates a portable file containing all your data in structured JSON format. Unlike database snapshots, this file can be read by other tools and transferred between devices.
What Is Exported
The Full Backup exports all 26 data types:
| Category | Types Included |
|---|---|
| Core Financial | Accounts, Transactions, Split Items |
| Organization | Categories, Tags, Saved Filters |
| Budgeting | Budgets, Budget Alerts, Budget Rollovers |
| Recurring | Recurring Rules |
| Debt | Debt Payoff Plans, Debt Items, Payoff Scenarios |
| BNPL | BNPL Loans, BNPL Installments |
| AI & Rules | Learned Rules, Payee Rename Rules, Merchant Disambiguation Rules |
| Duplicates | Duplicate Pairs |
| Family | Family Groups, Group Memberships, Category Sharing, Shared Budgets, Shared Expenses, Coaching Messages |
| Sync | Conflict Logs |
How to Export
- Navigate to the Export screen (Dashboard toolbar or Settings > Data > Export).
- Select Full Backup from the format picker.
- Tap Export.
- Choose where to save the file via the system share sheet.
File Format
The export produces a .coincert file (which is a renamed .zip archive). Inside it:
Coincert-Backup-2026-02-16.coincert
├── metadata.json — app version, export date, format version
├── accounts.json — all accounts
├── transactions.json — all transactions
├── categories.json — all categories
├── budgets.json — all budgets
├── tags.json — all tags
├── split_items.json — all split items
├── recurring_rules.json — all recurring rules
├── debt_plans.json — all debt payoff plans
├── debt_items.json — all debt items
├── bnpl_loans.json — all BNPL loans
├── learned_rules.json — all Auto-Tune rules
├── ... (one file per type)
└── conflict_logs.json — sync conflict history
Each JSON file contains an array of records. Encrypted fields (amounts, payees, names) are exported in plaintext since the file lives on your local device. Fields are prefixed with _enc_ to indicate they are normally encrypted in iCloud.
Metadata
The metadata.json file contains:
{
"appVersion": "0.8.1",
"buildNumber": "95",
"exportDate": "2026-02-16T14:30:00Z",
"format": "coincert-json-v1"
}
Full Backup vs Database Snapshot
| Feature | Database Snapshot | Full Backup (JSON) |
|---|---|---|
| Speed | Instant (SQLite copy) | Slower (serialize all records) |
| Portability | This device only | Transferable via AirDrop, email, etc. |
| Readability | Binary database file | Human-readable JSON |
| Restore | One-tap restore + restart | Not yet supported (future feature) |
| Use case | Quick safety net | Archival, cross-device transfer |
Fresh Start (TestFlight Only)
Fresh Start is a TestFlight-only feature that simulates a brand-new device experience. It is useful for testing the onboarding flow, initial sync behavior, and new-user experience without uninstalling the app.
How to Use Fresh Start
- Navigate to Settings > Backstage (only visible in TestFlight and debug builds).
- Toggle on Fresh Start on Next Launch.
- Close and reopen the app.
What Happens on Launch
When the Fresh Start flag is set, the following sequence runs on the next app launch:
- Auto-backup — a snapshot is created (labeled “Auto: before fresh start”) so you can recover your data.
- Wipe local data — all SwiftData records are deleted from the local database.
- Reset sync state — the Harmony Sync change token is cleared, pending changes are discarded, and sync status resets to idle.
- Clear the flag — the Fresh Start toggle is turned off so it only runs once.
- Normal initialization — the app starts as if on a new device. CKSyncEngine detects the existing CloudKit zone and begins downloading your data from iCloud.
Recovery
Since an auto-backup is created before the wipe, you can always restore your previous state:
- Wait for iCloud sync to complete (your data should reappear from the cloud).
- If anything is missing, go to Settings > Data > Backups and restore the “Auto: before fresh start” backup.
Availability
Fresh Start only appears in Backstage, which is visible in:
- TestFlight builds — for beta testers
- Debug builds — for development
It does not appear in App Store release builds.
Recovery Scenarios
”I accidentally deleted data”
- Go to Settings > Data > Backups.
- Find the most recent backup (or the auto-backup labeled “Auto: before nuclear delete”).
- Restore from it and restart the app.
”Sync brought in bad data from another device”
- Go to Settings > Data > Backups.
- Restore from a backup created before the sync issue.
- After restarting, go to Harmony Sync and use Push All Data to iCloud to overwrite iCloud with your restored data.
”I want to move my data to a new device”
- On the old device, ensure Harmony Sync shows “Up to date”.
- Optionally, create a Full Backup export as an extra safety net.
- Install Coincert on the new device and sign in with the same iCloud account.
- Harmony Sync will automatically download all your data.
”I want an offline archive of all my data”
- Go to the Export screen.
- Select Full Backup format.
- Export and save the
.coincertfile to Files, iCloud Drive, or an external drive.
”Sync keeps failing after a reset”
- Check if an auto-backup was created before the reset.
- If Harmony Sync shows errors, check the Troubleshooting section in Harmony Sync.
- If the sync zone was deleted, Coincert will automatically recreate it (up to 3 times per 24 hours to prevent loops).
Platform Differences
| Feature | iOS / iPadOS | macOS |
|---|---|---|
| Backups | Settings > Data > Backups | Settings > Data > Backups |
| Full Backup Export | Export screen > Full Backup | Export screen > Full Backup |
| Fresh Start | Settings > Backstage | Settings > Backstage |
| Backup storage | App Group container on device | App Group container on Mac |
| Share exported file | System share sheet | Save dialog |