supabase-storage

List, download, upload and delete files in Supabase Storage from n8n, using the built-in Supabase credential.

Package Information

Released: 2 mo ago
Downloads: 0 weekly / 0 monthly
Latest Version: 0.1.1

Documentation

n8n-nodes-supabase-storage

Supabase Storage in n8n: list, download, upload, delete.
The half the built-in Supabase node leaves out.

npm MIT n8n community node


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, so
pdf, .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.

Discussion