Shopify Backups
Back up your Shopify store before anyone changes it
Products, customers, orders, content and every theme, saved on a schedule to storage you own. When a theme edit, bulk import or app install goes wrong, see what changed and put back only that.
acme-goods store
Backup from 02:00 today · 190 products · 3 themes
Restore into acme-goods.myshopify.com
Theme (restored as a new, unpublished copy, where Shopify lets the app write themes)
Products, variants, images and metafields
Collections
Preview — nothing was changed
Products, variants, images and metafields: 1 to add back, 2 to change, 184 already match, 3 added since (kept as they are)
+ Linen Apron (linen-apron)
~ Canvas Tote (canvas-tote): description, 2 variant(s) to change
~ Wool Throw (wool-throw): 1 image(s) or video(s) to add back
Shopify keeps your store running, not a copy you can go back to
So take one before you, your agency, a freelancer or a new app changes anything. Connect the store, choose your storage, and each run keeps the whole store as one archive.
The whole store, through Shopify's Admin API. Products with their variants, images and metafields, collections, customers, orders, draft orders, pages, blogs and posts, navigation menus, URL redirects, metaobjects, files, inventory levels, locations, discounts, markets, store settings and policies.
Every theme's files. The live theme and every unpublished one, file by file, so last week's theme is there after this week's edits.
Images and files, not just links. With “Include images and files” on, as it is for each new job, the bytes are copied too, so an image deleted from Shopify can be put back.
In storage you own. Any S3-compatible bucket, Google Drive, Dropbox, Box or OneDrive, hashed as it lands, with the same schedules and retention as every other job. Starter plan and up.
acme-backups/9f2c41d7/
acme-goods-2026-10-29T02-00-03-117Z.shopify.tar.gzcontents.json the store, its themes, what the backup holds
data/shop.json settings, policies, languages
data/products.jsonl and variants, collections, customers,
data/orders.jsonl draft-orders, pages, blogs, menus,
data/redirects.jsonl metaobjects, files, inventory, locations,
… discounts, markets
themes/<id>/theme.json each theme's name and role
themes/<id>/files/… every file of the theme
media/<id>/<file> images and files, when the job includes them
manifest.json what each part holds, and anything left out$ tar xzf acme-goods-*.shopify.tar.gz
$ cd themes/<id>/files
# with Shopify CLI, as a new unpublished theme:
$ shopify theme push --unpublished --store acme-goodsA restore that shows its work first
Re-importing a whole store would overwrite everything changed since, the good with the bad. A restore here is a comparison, and it only writes what the comparison finds.
- Step 1
Choose what goes back
A theme, products (all of them or only the handles you list), collections, pages, blogs, menus, redirects, metaobjects, and customers missing from the store. Anything you leave off is not touched.
- Step 2
Preview
The backup is read from your storage, checked against the checksum recorded when it was taken, and compared with the store as it is now. Every difference is listed, and nothing is written. Anyone in the workspace can run one.
- Step 3
A safety copy first
Restoring is for owners and admins, who type the store's address to confirm. Before anything is written, the store as it is now is stored as a backup of its own, in your storage.
- Step 4
Only the differences
Records that already match are left alone. A theme comes back as a .zip you upload in Shopify as an unpublished theme, to preview and publish; where Shopify has given the app theme access, the restore writes it in as an unpublished copy itself. If Shopify refuses a record, the rest carry on, and the restore names it.
Nothing in the store is deleted, except inside a product you restore, which comes back exactly as it was backed up. Products, pages and the rest added since the backup are kept as they are.
The days it is for
Each of these shows up in the preview as a line you can read before anything is written.
A theme edit that broke the storefront
Download the theme from before the edit as a .zip and upload it as an unpublished theme. The live theme stays as it is until you publish the copy.
In the preview
Download theme as .zip: Dawn-2026-10-28.zip (214 files)
A bulk import that overwrote product data
Each product the import changed is listed with what differs, and only those are put back.
In the preview
~ Canvas Tote (canvas-tote): description, tags, 2 variant(s) to change
A product deleted by mistake
It is created again with its variants, images and metafields, under the same handle.
In the preview
+ Linen Apron (linen-apron)
Menus and redirects lost in a redesign
Put back the navigation menus and URL redirects that were removed, and keep the ones added since.
In the preview
+ /pages/summer-sale → /collections/sale
Four things to know before you rely on it
Where it stops, written down now rather than found out after a bad change.
Orders are kept as records, not restored
Orders, draft orders, inventory levels, discounts and markets are in every backup, but Shopify lets no app write an order back into a store, so none of them can be restored. Gift cards are not restored either. Customer passwords are never in a backup: a customer put back by a restore signs in again, and existing customers are never changed.
No one-click connect yet
Until Shopify approves our own app, a store connects through an app its organization makes in Shopify's Dev Dashboard: you paste its Client ID and secret, and each backup gets a fresh 24-hour token. An agency can install its own app on a client's store by link, which the store approves once. An Admin API token from a custom app made before 2026 works too.
Images make backups bigger
"Include images and files" is on by default, so the image, video and file bytes are copied, not just their links. Box and OneDrive hold an archive in memory before uploading it, so there a backup must stay under 64 MB; turn the switch off, or use a bucket, Google Drive or Dropbox.
Read by our worker, kept by you
A store has no server of yours to run anything on, so our worker reads it through Shopify's Admin API and streams it straight on to your storage, in memory only, never kept. That includes your customers' names and addresses. The job page and the DPA both say so.
Connecting a store step by step, restoring, and what each part of a backup holds are in the Shopify store backups guide. Doing it all by hand is in How to back up a Shopify store.
The rest of the way back
A store is more than its admin. These cover the parts around it.
DNS backups
With your domain's DNS on Cloudflare, the records that send shoppers to your store are kept in your storage too, and restored record by record.
Read moreUptime monitoring
Know when the storefront or checkout stops answering, with alerts by email and chat and a status page of your own.
Read morePricing
Shopify store backups are on the Starter plan and up, with the same schedules, retention and storage as every other job.
Read moreEverything else it does
Storage, schedules, alerts, recovery and team access, in one place. Which plan each one starts on is on the pricing page.
- Bring your own storage
- Backups land in your own S3-compatible bucket — Backblaze B2, Wasabi, Cloudflare R2, or plain S3 — or in your own Google Drive, Box, Dropbox or OneDrive. You hold the keys and the data.
- Snapshots stay with your provider
- Provider snapshots are created through the provider's own API and never leave your account. We store the snapshot ID, not the image.
- Eight providers, one dashboard
- DigitalOcean, Hetzner, Vultr, Linode, AWS EC2, AWS Lightsail, Google Compute Engine and Microsoft Azure — scheduled and reviewed from the same place.
- A replacement server on demand
- Recover now builds a new server on your own DigitalOcean, Hetzner, Vultr, Linode, AWS EC2, AWS Lightsail, Azure or Google Compute Engine account, from its snapshot or from its backups, software included.
- Failover on any cloud
- When a server stops answering, its traffic moves to the recovery server: by reserved or floating IP where your cloud has one, or by your DNS on Cloudflare, which works on every cloud.
- Know it's down, with the way back
- Uptime monitors for sites, ports and scheduled jobs confirm an outage before alerting, name the server's newest backup, and publish a status page. On paid plans.
- Your DNS zones, backed up
- Every record in a Cloudflare zone, kept in your own storage as a BIND file too. A restore previews what differs and writes back only that.
- Schedules that fit your traffic
- Hourly, daily, weekly, monthly, or a fixed interval in minutes — anchored to your timezone, so a 02:00 job stays at 02:00 across a DST change.
- Retention that prunes itself
- Set how many days to keep. Older snapshots and archives are cleaned up after each successful run, so storage bills stay flat.
- Every run on record
- Status, duration, size and trigger, with each step it took in order and its warnings and errors kept in place — so a failure tells you which step broke.
- Checksummed on upload
- Every archive is hashed as it streams to your bucket and the checksum is stored with the run, so you can verify what landed.
- Run on demand
- Trigger any job by hand before a migration or a risky deploy, without touching its schedule or its retention window.
- Alerts on five channels
- Email plus Slack, Microsoft Teams, Google Chat, and Discord — on success, on failure, and on a job that missed its schedule entirely.
- Encrypted credentials
- SSH keys, database passwords, and storage secrets are sealed with AES-256-GCM before they touch the database.
- Team access with roles
- Invite your team into a shared workspace as owner, admin, or member, so backups outlive whoever set them up.
Keep a copy of your store tonight.
Connect the store, choose your storage, and the first backup runs on the schedule you pick — or right away, by hand. Starter plan and up.
No credit card required. Cancel anytime.