How to save Pipedream data stores and File Store files
Updated October 13, 2026
Pipedream's export saves the structure of your workflows: triggers, steps, code and props. It does not include data store records or File Store files. Pipedream deletes all Workflows data by April 30, 2027, so this data has to be saved separately.
Workflows also stop running on March 31, 2027, so any export that runs as a workflow step has to happen before then. See the shutdown timeline.
Step 1: Find what uses stored data
Start with the free migration report. It flags every workflow whose code uses a data store or the File Store.
The Pipedream Data Stores dashboard at pipedream.com/data-stores shows the same thing from the other side. Click the arrow next to a data store's name to list the workflows linked to it.
If you exported your project, the export archive itself, project_export-<project_id>.zip, also sits in the File Store. Download it along with your other files. See how to export Pipedream workflows.
Step 2: Export data store records
A Pipedream data store is a key-value store. Values can be any JSON-serializable data: strings, numbers, objects, arrays and dates. One data store can be shared by several workflows.
Small stores: copy from the dashboard
The Data Stores dashboard shows every record. For a handful of keys, copying the values by hand is quickest.
Larger stores: export with a code step
Pipedream's documentation shows how to read every record in a Node.js step with an async iterator. Its own example sends records in chunks with an HTTP POST, and deletes each key after sending it by default. The version below sends the records and deletes nothing:
import { axios } from "@pipedream/platform";
export default defineComponent({
props: {
dataStore: { type: "data_store" },
url: { type: "string", label: "Destination URL" },
},
async run({ $ }) {
let chunk = [];
let sent = 0;
const flush = async () => {
await axios($, { method: "POST", url: this.url, data: chunk });
sent += chunk.length;
chunk = [];
};
for await (const [key, value] of this.dataStore) {
chunk.push({ key, value });
if (chunk.length === 100) await flush();
}
if (chunk.length) await flush();
return { sent };
},
});
Add it to a new workflow, select the data store, enter the destination URL, and test the step. Repeat for each data store. Pipedream suggests 512 MB of memory and a 60-second timeout as a starting point for exports, and raising them for larger stores. If each value is large, lower the chunk size.
The destination can be any HTTPS endpoint you control. The simplest choice is a temporary n8n workflow that receives the records and writes them to a Data Table (see below).
Two things to check:
- Dates become strings. JSON has no date type, so dates arrive as ISO strings.
- Expiry times are not exported. A record with a TTL can also expire before you get to it. Export early.
Step 3: Download File Store files
File Stores are available only on Pipedream's Advanced plan and above. If your workspace never had them, you have no files to save.
To download by hand, open the project, select File Store in the left navigation, and download each file.
For many files, use a Node.js step. $.files.dir() lists the files in the project's File Store (the root folder by default). $.files.open(path) opens a file, and toUrl() returns a URL you can download it from. You can send those URLs to an n8n workflow that downloads each file with an HTTP Request node and uploads it to storage. Do the download right away rather than storing the URLs for later.
Step 4: Choose where the data lives in n8n
| Option | Good for | Watch out for |
|---|---|---|
| Workflow static data | Small state used by one workflow: cursors, last-seen IDs, counters | Per workflow only; not saved in manual test runs |
| n8n Data Tables | Records shared by workflows in a project; key-value data you want to see and edit | 200 MiB default total per instance; no direct Code node access |
| External database or S3 | Large data, frequent writes, data other systems use, and files | You run or pay for the service |
Workflow static data
This is what converted workflows use by default. When Workflow Exit converts a code step, the compatibility layer replaces each data store with workflow static data. It is stored under a key named after the step and prop, so get, set, delete, has and keys keep working without code changes.
The n8n documentation sets some limits:
- Static data "should be small".
- It is not saved when you test a workflow. The workflow must be published and called by a trigger or webhook.
- It is available only in the JavaScript Code node, not the Python one.
- It "may behave unreliably under high-frequency workflow executions".
Global static data belongs to one workflow. If several Pipedream workflows shared one data store, they will not share static data in n8n. Use a Data Table for that.
Many workflows can start from an empty state, for example when a cursor or a "last seen" ID rebuilds itself on the first run. If yours needs existing values, add a temporary Code node that writes the exported records into static data when they are missing. Let it run once in production, then remove it.
n8n Data Tables
According to the n8n documentation, Data Tables store structured data inside n8n, so you do not need an external database.
- Creating a table. Use the Data tables tab in your project (from scratch, or by importing a CSV), the Data Table node, or the n8n API.
- Column types. Boolean, Date, Number and String.
- Row operations. The Data Table node can Insert, Get, Update, Upsert and Delete rows, and check "If Row Exists" or "If Row Does Not Exist".
- Sharing. Tables created in a project are available to all members of that project.
- Size. By default, all data tables in an instance share a 200 MiB limit. n8n warns at 80%. Going over the limit blocks manual additions and causes workflow execution errors. On self-hosted n8n, change the limit with
N8N_DATA_TABLES_MAX_SIZE_BYTES. - Code node access. A Code node cannot read or write a Data Table directly.
To mirror a key-value store, create a table with a key column and a value column, both String, and store objects as JSON text. If every value is a flat object, you can give each field its own column instead.
To load the records, either convert your export to CSV and import it, or build a small import workflow:
- A Webhook node (POST). Publish the workflow and use its production URL as the destination in Step 2.
- A Split Out node on
body, so each record becomes its own item. - A Data Table node with Upsert, matching on
key.
The Webhook node accepts payloads up to 16 MB, so chunks of 100 records are usually fine. Delete the import workflow when you are done.
In converted workflows, replace the static data calls with Data Table nodes: a Get before the Code node, and an Upsert after it.
External database or S3
Move the data out of n8n when it is large, written many times a second, or used by other systems. n8n has nodes for common databases, such as Postgres, MySQL and Redis, and an AWS S3 node for object storage.
n8n handles files as binary data while a workflow runs. For long-term storage, keep your File Store files in S3, Google Drive or similar, and fetch them with the matching node or an HTTP Request node when a workflow needs them. On self-hosted n8n, the Read/Write Files from Disk node can also read and write files on the n8n machine.
Checklist
- Run the free report and note the workflows that use data stores or the File Store.
- Download the project export ZIP from the File Store.
- Export every data store before March 31, 2027.
- Download every File Store file.
- Choose static data, a Data Table or external storage for each data set.
- Load the data, test the converted workflow, then switch over.
The full migration, from export to cutover, is covered in the Pipedream to n8n guide.
Frequently asked questions
Does the Pipedream workflow export include data stores?+
No. Pipedream's export contains the structure and configuration of your workflows. Event history, data stores and File Store files are not included, so you have to save them separately.
When will Pipedream delete my data stores and files?+
All Workflows data is permanently deleted by April 30, 2027. Workflows stop running on March 31, 2027, so any export that runs as a workflow step must happen before then.
Does Workflow Exit copy my data store records to n8n?+
No. It converts the workflow logic. Converted code keeps data store reads and writes working by using n8n workflow static data, but you export the records and load them into n8n yourself.
Can an n8n Code node read a Data Table?+
Not directly. The n8n documentation says direct programmatic access to data tables from a Code node isn't supported. Put a Data Table node before or after the Code node instead.
How much data can n8n Data Tables hold?+
By default, all data tables in an n8n instance share a total limit of 200 MiB. On self-hosted n8n you can change it with the N8N_DATA_TABLES_MAX_SIZE_BYTES environment variable.
What happens to records that had an expiry time (TTL)?+
The expiry is not part of the stored value, so it does not carry over. If your logic depends on it, save an expires_at value with each record in n8n and check or clean it up in the workflow.