Package Information
Available Nodes
Documentation generating…
Documentation
n8n-nodes-supabase-storage
Supabase Storage in n8n: list, download, upload, delete.
The half the built-in Supabase node leaves out.
The problem
n8n's Supabase node covers the database and nothing else. Moving a file in or
out of Storage means hand rolling HTTP Request nodes, with the service role key
copied into headers in every one of them.
The fix
One node, four operations, using the Supabase credential you already have.
| Operation | What it does |
|---|---|
| List | Files in a folder, filtered by extension |
| Download | A file by folder and name, as binary or a signed URL |
| Upload | A binary field into a folder, optionally overwriting |
| Delete | One or several files under a folder |
Folders and project ids
Storage has no real directories, only key prefixes. The Folder field is that
prefix, so an app that scopes files per project stores them as<project id>/<file> and this node addresses them the same way:
Bucket: figures
Folder: 8068cd94-13d4-4503-a6c3-ed347e44657a <- the project id
File Name: architecture.png
Nest deeper by putting the whole prefix in the field, for example<org id>/<project id>. Leading and trailing slashes are tidied up, so/proj/ and proj behave the same.
Listing
File Types takes a comma separated list and matches case insensitively, sopdf, .DOCX, png keeps all three. Leave it empty for everything.
A listing is one level deep, which is how Storage works. Turn on Include
Subfolders to walk nested prefixes, which is what you want when files live at<org>/<project>/ but you only know the org.
Each row comes back as:
{
"name": "architecture.png",
"path": "8068cd94-.../architecture.png",
"bucket": "figures",
"folder": "8068cd94-...",
"size": 20481,
"mimeType": "image/png",
"createdAt": "2026-07-30T03:25:28.187Z",
"updatedAt": "2026-07-30T03:25:28.187Z"
}
Feed path straight into a Download in the next node.
Downloading
By default the file arrives in a binary field, ready for the next node.
Turn on Return Signed URL Instead for a temporary link rather than the
bytes. That is the better choice for large files, and the only sensible one when
handing a private file to a browser. The link is returned absolute and expires
after the seconds you set.
Credentials
Uses n8n's built-in Supabase credential, so there is nothing new to set up:
- Host: your project URL, for example
https://abcd.supabase.co - Service Role Secret: from Project Settings, API Keys
The service role key bypasses row level security, which is what lets this node
reach private buckets. Keep the credential to workflows you trust.
Install
Community Nodes UI: Settings → Community nodes → Install:
n8n-nodes-supabase-storage
Notes
- Talks to the Storage REST API directly rather than bundling supabase-js, so
the package stays small and there is no second copy of the client inside n8n. - The bucket dropdown is loaded from your project. If the list cannot be
fetched, type the bucket name instead. - Upload refuses to clobber an existing file unless Overwrite Existing is
on, so a repeated run cannot quietly replace something. - Every operation respects n8n's "Continue On Fail", reporting the error as data
rather than stopping the workflow.
License
MIT © 2026 Dr. Enes Karaaslan, Connected Wise LLC
The Supabase brand mark is used to identify the service this node talks to.
Not affiliated with or endorsed by Supabase or n8n GmbH.