Backups
Snapshot a company's data and files, see at a glance whether each backup can still be restored, and restore in place with one-click revert.
A backup is a single snapshot of one company, with its records and, optionally, the files it has uploaded. You make one from Settings → Backups, and you do two things with it. You restore it over the same company to undo a bad change, or you use it as the starting data for a brand-new company at sign-up. Same file, two jobs.
A backup is not disaster recovery
This is a per-company snapshot for cloning environments and undoing a bad change, not a full database dump, and there is no scheduling or point-in-time recovery. A backup exists because a person took one, and it stays until a person deletes it. Treat it as a working tool, not your only copy.
What a backup contains
A backup captures the company's business data across the whole app: sales, purchasing, items, production, accounting, quality and people. The i button next to "Create a backup" opens a "What's in a backup" summary with a live count per area and a "Total records" line at the bottom.
Secrets never travel
Credentials, integration tokens and webhooks are deliberately left out of every backup, so a restored or cloned company never carries another company's secrets. Re-connect your integrations after a restore.
When you export, Include offers two options:
Create a backup
On Settings → Backups, the "Create a backup" card snapshots the company's data. Give it an optional label, choose "Data only" or "Data + files", and select "Create backup". A "Creating backup…" row appears in the Backups list right away; the export runs in the background, and clicking the row shows its progress. When it finishes, the row becomes the backup itself, with its date, size and a status badge, and you can "Download" or "Delete" it.
If the backup fails
A failed export shows a "Backup failed" banner above the list, with the reason and a "Dismiss" button. The most common cause is corrupted data, meaning rows that link to data outside this company. A backup carrying those rows could never be restored, so the export refuses rather than write one. The banner says how many rows are affected and offers "Skip corrupted rows and retry", which re-runs the same backup without them. A backup made that way is honest about it: its row shows "N rows excluded", with an i popover listing exactly what was left out.
Is it still restorable?
Every backup row carries a status badge, computed against today's schema each time you open the page. There is no stored verdict and no expiry date, because neither could be trusted: the app keeps evolving after a backup is taken, so the only honest answer is the one checked right now.
Carbon protects old backups at the source
The badge is the last line, not the first. Every schema change to Carbon is checked, before it ships, against what existing backups contain, so a change that would strand a backup a customer already holds is caught at commit time. A backup going "Not restorable" is rare by design.
Restore in place
Restoring replaces the current company's data with a backup. In the "Restore from a backup" card, pick a Source with "Choose a backup", which lists your backups and also offers "Upload new backup…" for a downloaded .carbon.tar.gz file from another company or environment. Then choose what to Include, "Data + files" or "Data only", and select "Restore…".
That opens the "Restore this company from a backup" screen, which tells you what this restore will actually change before it runs:
- If the backup loads cleanly, you just confirm.
- If some fields will be "Filled with a default", the screen lists the affected areas, and you confirm.
- If some records are "Discarded", meaning they won't come back, the screen lists them and asks you to type
restoreto continue. - If the backup "Can't be restored", the screen says why, and there is no confirm button at all.
- An uploaded backup hasn't been checked yet; any differences are found when the restore runs.
Each group names product areas, like Production or Sales, with a "Details" expander for the exact fields.
It is safe to try. Before anything is replaced, Carbon saves today's data first, so a restore is always reversible. If the restore can't complete, your data is not changed; it stops before touching anything. When it finishes, the "Restored — review" card asks you to decide:
- "Keep" accepts the restored data.
- "Revert" rolls the company back to the snapshot taken just before the restore.
One restore at a time
A restore stays open for review until you keep or revert it. Starting another beforehand is blocked, so the revert always returns you to the state from just before the last restore.
If the restore is blocked by corrupted data
A restore takes the same safety copy an export does, so the same corrupted rows that fail a backup also fail a restore. The failed restore row explains which rows link to data outside this company and offers "Remove corrupted data and restore". That opens a confirm naming the exact count, "Permanently delete N rows?", and only "Delete and restore" proceeds. Deleting them fixes the data instead of hiding it, then the restore runs again. If the rows turn out to be shared with other companies in your group, nothing is deleted and the restore doesn't start.
Start a company from a backup
The same file powers onboarding. When Carbon staff create a new company, the data step asks how to seed it, and "Restore from a backup" sets the new company up from an uploaded Carbon backup of another one. The other option, "Use a demo template", doesn't use a backup at all; it seeds a realistic industry story from scratch. See Demo data.
Who can see this page
Backups require permission to manage Settings. On production deployments the page is currently limited to Carbon staff while the feature is hardened for general availability; on a local development stack it is open to everyone.