MerusBackup pulls every case — every document, every party, every activity — out of MerusCase and onto your own computer. Cryptographically verified, resumable, and honest about exactly what it did and didn't capture.
A vendor outage, a billing lapse, a switch to another platform, or a simple "can you produce the complete file?" — and suddenly the documents that are the case are out of your hands. MerusBackup gives you an independent, verifiable copy that doesn't depend on anyone staying online.
Cases, parties, injuries, activities, deadlines, message history, and every uploaded document — mirrored into a clean folder tree you can open in Finder.
Every file is re-hashed against its source checksum. "Backed up" means byte-for-byte verified, never just "a file with that name exists."
If a document was never captured or a case is incomplete, it says so — loudly, in plain English. No green checkmark over a partial backup.
MerusCase isn't a folder of files; it's a structured record. MerusBackup captures every part of that record for each case — the data and the documents — and saves it as clean, open JSON plus the original files, organized so a human (or a tool) can actually read it.
MerusBackup/ ├─ _reference/ # firm-wide lookup tables │ users.json · caseStatuses.json │ activityTypes.json · courts.json … ├─ CASE-749-Samson v. …/ │ ├─ case.json # parties, injuries, events, │ │ # tasks, ledgers, messages… │ ├─ activities.json # the case timeline │ ├─ documents.json # the document index │ ├─ manifest.json # hashes + sync state │ ├─ README.md # human case summary │ ├─ index.json # chronological doc list │ └─ documents/ # the original files │ 934598906__CURRENT CASE.pdf │ 934599183__RETAINER.pdf … └─ CASE-202-Jimenez v. …/ …
Self-decoding. Raw MerusCase records store codes
(case_status_id, people_type_id…). MerusBackup also
saves the firm's reference tables — users, case statuses, party types, event
types, courts, forms, statutes and more — so years from now the backup still
reads in plain English, with no live system to look anything up.
MerusBackup reads your case metadata first — so it knows exactly how many documents and how many gigabytes a full backup is — then downloads them to disk, verifying each one as it lands.
estimate reads the case index + activity metadata and reports the
document count and total size — no downloads.
plan builds the sized, ordered download list — referenced files
minus what you already have — and checks it fits your disk.
sync downloads the queue, verifying every file's checksum and
writing it atomically. Stops cleanly; resumes where it left off.
verify re-hashes the whole backup offline and writes a
missing.txt of anything not fully captured.
# 1. How big is the whole job? (metadata only — nothing downloaded) $ merusbackup estimate cases in index: 222 documents referenced: 126,131 estimated size: 111.90 GB # 2. Build the sized queue and fit it to the disk I have $ merusbackup plan --max-size fit queued to download: 123,906 files queued size: 49.42 GB deferred by cap: 1,235 files (61.46 GB) — run again later free space: 58.16 GB available, ~56.84 GB needed ✓ fits — about 1.32 GB would remain free. # 3. Download it, with a live progress bar + ETA $ merusbackup sync --max-size fit ↓ 41,204/123,906 files · 18.7 GB / 49 GB · 38.1% · 4.2 MB/s · ETA 1h12m # 4. Prove every byte landed correctly (offline, no network) $ merusbackup verify ok: 1810 corrupt: 0 missing: 0 size mismatch: 0
Estimate and plan the entire backup from metadata. No surprise mid-run — you see the document count and gigabytes up front.
--max-size fit backs up what your drive can hold, defers the rest,
and refuses to start a run that would fill the disk.
Stop any time. The next run re-downloads nothing it already has and picks up exactly where it left off — even after a crash or power loss.
watch mode re-syncs on a schedule, pulling only what's new —
a "Dropbox for MerusCase" that stays current on its own.
repair finds any damaged or missing file, clears it, and
re-downloads just those — making a backup whole again.
Each case gets a README summary and a chronological index of its documents — so the backup is browsable, not just an archive.
A clean CLI for power users, plus a double-click desktop app and a local web view that shows the backup running live.
Paced and rate-limit-aware: when the server pushes back, the whole run backs off together instead of hammering it.
For a legal file, "probably fine" isn't good enough. MerusBackup is engineered so that what's on your disk is provably what was on the server — and so it can never quietly tell you a partial backup is complete.
Each document's bytes are matched against the source's content checksum as it's written. A truncated transfer or a substituted error page is rejected, not saved.
If a section failed to fetch or a document was never captured, the case is
marked incomplete and listed in missing.txt. The UI won't show a
clean checkmark over a backup that isn't whole.
Files are written atomically (no half-files), one writer at a time via an exclusive lock, and your originals in MerusCase are only ever read.
estimateSize the whole backup from metadata — document count and gigabytes — without downloading anything. Add --reconcile to see how complete your current backup is.
planBuild the sized, ordered download queue (what's left to fetch) and check it against your free disk space. Cap it with --max-size.
syncDownload the queue to disk, verifying each file. Resumable; --max-size fit backs up what your drive can hold.
watchRun continuously, re-syncing on a schedule and pulling only what's new — a self-updating local mirror.
verifyRe-hash the entire backup offline and report anything corrupt, missing, or never captured. Writes missing.txt.
repairDetect-and-fix: clear damaged files and re-download exactly those, making the backup whole again.
statusShow what's backed up locally, per case, with completeness — no network needed.
index / serveGenerate human-readable case summaries; or open a live web view of a backup in progress.
Point MerusBackup at a drive, run one command, and own a verified copy of your entire practice.
$ merusbackup sync --max-size fit ✓ Backup complete — every file verified.