Shopify store backup automation with n8n saves a nightly JSON snapshot of your products, orders, and customers to Google Drive, then logs each run to a Google Sheet and emails you a summary. It replaces backup apps that charge a monthly fee for the same data your store already exposes through the Admin API. You keep the files, the schedule, and the retention rules. Building it from scratch takes about 40 minutes.
Prefer to skip the setup? Grab the ready-made template and be running in under 10 minutes.
What it does
Shopify keeps your live data, but it does not hand you a full historical backup you control. If a bulk edit goes wrong, an app corrupts your catalog, or you ever need last month’s customer list, the platform will not give you a point-in-time copy. This workflow fills that gap.
Every night, n8n reads three datasets from your store through the Admin API: the full product catalog, all orders, and all customers. It bundles them into one dated JSON file, uploads that file to a Google Drive folder, appends a row to a running log sheet, and sends you a short confirmation email. The next morning you have a fresh, timestamped copy of everything, sitting in storage you own.
This is part of the broader pattern of connecting your store to a workflow engine. If you are new to it, start with our guide to n8n Shopify automation and come back here.
Why it beats the default
Most merchants handle backups in one of two ways, and both leave gaps.
The first is a paid backup app from the Shopify App Store. These work, but they charge a recurring fee that scales with your order volume, and your snapshots live inside a vendor’s account rather than yours. If that vendor changes pricing or shuts down, your safety net goes with it.
The second is manual CSV exports from the admin. This is free but partial. You export products one day, forget orders the next, and end up with a scattered pile of files that nobody dated properly. It relies on a human remembering to do a boring task on time, which is exactly the kind of task automation exists to remove.
The n8n version gives you the full three-dataset snapshot, on a fixed schedule, written to your own Drive, with a log you can audit. There is no per-record pricing, and you decide how long to keep each copy.
| Approach | Coverage | Who holds the files | Ongoing cost |
|---|---|---|---|
| Paid backup app | Full | The vendor | Monthly fee |
| Manual CSV export | Partial, easy to forget | You | Free, but manual |
| n8n workflow | Full, automatic | You | Near zero |
What you need
- An n8n instance, either n8n Cloud or a self-hosted install.
- A Shopify custom app access token with read scopes for products, orders, and customers. Follow our walkthrough on how to connect Shopify to n8n in 2026, which uses the current Dev Dashboard method and a modern Admin API version (2026-04).
- A Google account for Drive, Sheets, and Gmail, connected to n8n with OAuth.
- One Google Drive folder to hold the snapshots and one Google Sheet for the run log.
Estimated build time is 30 to 45 minutes from scratch, or under 10 minutes with the template.
How it works
The workflow fans out to three Shopify reads in parallel, waits for all of them to finish, then assembles and stores the snapshot.
┌──────────────────────────────────────────────────────────────┐ │ SHOPIFY NIGHTLY BACKUP │ │ │ │ [Schedule 02:00] ─┬─→ [Get all products] ─┐ │ │ ├─→ [Get all orders] ─┤ │ │ └─→ [Get all customers]─┘ │ │ ↓ │ │ [Merge (3)] │ │ ↓ │ │ [Build snapshot file] │ │ ↓ │ │ [Upload to Drive] → [Log to Sheet] → [Email] │ └──────────────────────────────────────────────────────────────┘
Node-by-node list
| # | Node | Type | Role |
|---|---|---|---|
| 1 | Schedule Trigger | scheduleTrigger v1.3 |
Fires the backup once a day at 02:00 |
| 2 | Get all products | shopify v1 |
Reads the full product catalog |
| 3 | Get all orders | shopify v1 |
Reads all orders, any status |
| 4 | Get all customers | shopify v1 |
Reads the customer list |
| 5 | Merge | merge v3.2 |
Waits for all three reads to finish |
| 6 | Build snapshot file | code v2 |
Assembles one JSON file and its counts |
| 7 | Upload to Google Drive | googleDrive v3 |
Stores the dated snapshot file |
| 8 | Log to Google Sheets | googleSheets v4.7 |
Appends one row per run |
| 9 | Email confirmation | gmail v2.1 |
Sends a short summary |
Step-by-step build
1 Schedule the run
Add a Schedule Trigger node. Set the rule to a daily interval and pick a quiet hour such as 02:00. Overnight runs keep the backup away from busy checkout traffic and the daily API limits that come with it.
Set your n8n instance timezone under Settings so 02:00 means your store’s local night, not UTC.
2 Read products, orders, and customers
Add three Shopify nodes, each connected directly to the Schedule Trigger so they run in parallel from a single trigger item. Configure them like this:
- Node one: resource Product, operation Get Many, and turn on Return All so it pages through the entire catalog.
- Node two: resource Order, operation Get Many, Return All on, and under options set Status to Any so cancelled and archived orders are included.
- Node three: resource Customer, operation Get Many, Return All on.
Attach your Shopify Access Token credential to all three. Each node runs once and returns its full dataset.
Return All is the single most important setting here. With it off, each node stops at the first page of 50 records and your backup silently misses everything after that.
3 Merge the three branches
Add a Merge node and set the number of inputs to 3. Connect each Shopify node to a separate input. Its only job is to pause the flow until all three reads have finished, so the next node does not run before the data is ready.
4 Build the snapshot file
Add a Code node running once for all items. It pulls each dataset by node name, wraps them in one object with a timestamp and record counts, and returns the result as an attached JSON file.
const products = $('Get all products').all().map(i => i.json);
const orders = $('Get all orders').all().map(i => i.json);
const customers = $('Get all customers').all().map(i => i.json);
const stamp = $now.format('yyyy-LL-dd');
const fileName = `shopify-backup-${stamp}.json`;
const snapshot = {
generated_at: $now.toISO(),
store: 'your-store.myshopify.com',
counts: {
products: products.length,
orders: orders.length,
customers: customers.length
},
products, orders, customers
};
return [{
json: {
file_name: fileName,
date: stamp,
products: products.length,
orders: orders.length,
customers: customers.length
},
binary: {
data: {
data: Buffer.from(JSON.stringify(snapshot, null, 2)).toString('base64'),
mimeType: 'application/json',
fileName
}
}
}];
After this node, one item carries both the plain counts and the ready-to-upload file:
{
"file_name": "shopify-backup-2026-07-11.json",
"date": "2026-07-11",
"products": 214,
"orders": 1863,
"customers": 1592
}
5 Upload to Google Drive
Add a Google Drive node with operation Upload. Set the input binary field to data, and choose the destination folder you created for backups. Use the file name from the previous node so every upload keeps its date.
- Operation: Upload.
- File Name:
={{ $json.file_name }} - Input Binary Field:
data - Parent Folder: select your Shopify Backups folder.
6 Log the run to Google Sheets
Add a Google Sheets node with operation Append. Point it at a log sheet and map the columns to the fields from the Code node. This gives you an audit trail you can scan at a glance.
7 Email the summary
Add a Gmail node with operation Send. Send yourself a short message so you know the backup ran without opening Drive.
Subject: Shopify backup complete — {{ $json.date }}
Products: {{ $json.products }}
Orders: {{ $json.orders }}
Customers:{{ $json.customers }}
File: {{ $json.file_name }}
If you prefer a chat ping over an inbox, swap the Gmail node for a Telegram node and send the same summary to your admin channel.
The data structure
The Google Sheet log is deliberately simple. One row per night is enough to prove the backup ran and to spot a sudden drop in record counts that might signal a problem upstream.
| Column | Type | Example | Description |
|---|---|---|---|
date |
Date | 2026-07-11 | The day the backup ran |
products |
Number | 214 | Product records captured |
orders |
Number | 1863 | Order records captured |
customers |
Number | 1592 | Customer records captured |
file_name |
Text | shopify-backup-2026-07-11.json | The Drive file for that day |
Make the sheet header row match these column names exactly. The Append node maps by header, so a typo means an empty column.
Common mistakes
- Leaving Return All off on the Shopify nodes, which caps each dataset at 50 records and produces a backup that looks fine but is missing most of the store.
- Chaining the three Shopify reads one after another instead of running them in parallel into a Merge. Chaining makes the second read run once per record from the first, which multiplies API calls and can trip rate limits.
- Forgetting to set the Input Binary Field on the Drive node to
data, which uploads an empty or wrong file. - A mismatch between the Sheet header row and the mapped fields, which writes blank cells.
- Running on UTC when you meant local time, so the 02:00 backup lands in the middle of your business day.
- Granting the access token read scope for only one resource. It needs read access to products, orders, and customers, or the missing branch returns an error.
Cost at realistic volume
Take a store with 200 products, 1,800 orders, and 1,600 customers running one backup a night. Every service in the workflow sits inside a free tier at that scale.
| Service | Usage per night | Cost |
|---|---|---|
| Shopify Admin API | A few dozen paged read calls | Free on your own store |
| Google Drive | One JSON file, a few megabytes | Free within 15 GB |
| Google Sheets | One appended row | Free |
| Gmail | One email | Free |
| n8n | One scheduled execution | Free self-hosted, or one run on Cloud |
A daily snapshot of a few megabytes adds up to roughly a gigabyte a year, well within the free Drive quota. Compared with a backup app that bills every month whether or not you ever restore, the running cost here rounds to zero.
🚀 Get the Shopify backup workflow
The guide above is free to follow. If you would rather skip the build, download the ready-to-import workflow, then just add your credentials. Prefer it installed and tuned for you? See our done-for-you services.
Instant download · Works on n8n Cloud and self-hosted
Frequently asked questions
Does this replace a paid Shopify backup app?
For most stores, yes. It captures the same products, orders, and customers a backup app reads through the Admin API, but the files land in your own Google Drive on your own schedule. What it does not do is one-click restore, so keep the snapshots organized and readable.
How much Shopify data can the workflow back up?
As much as the Admin API returns. With the Shopify node set to return all records, it pages through every product, order, and customer regardless of store size. Very large catalogs take longer per run, so schedule the backup overnight when API traffic is quiet.
Where are the backup files stored?
In a Google Drive folder you choose. Each run writes one dated JSON file such as shopify-backup-2026-07-11.json. Google Drive gives 15 GB free, which holds years of daily snapshots for a typical store since each file is only a few megabytes.
Can I restore my store from these backups?
The JSON files hold the raw record data, so you can re-import products or re-create customers through the Admin API or a CSV. This is a data safety net, not a one-click rollback. Test a small restore once so you know the file format before you ever need it.
Is it safe to store customer data in Google Drive?
The files contain personal data, so treat the Drive folder like any customer record. Restrict sharing, keep it inside your business Google account, and delete old snapshots on a retention schedule that matches your privacy policy and local regulations.
Related guides
- Connect Shopify to n8n in 2026, the credential setup this workflow depends on.
- Send new Shopify orders to Google Sheets for a live running order log.
- Bulk update Shopify prices from Google Sheets, a good reason to keep a backup handy.
- Browse every guide in the Shopify automation category.