This workflow corresponds to n8n.io template #8228 — we link there as the canonical source.
This workflow follows the Form Trigger → HTTP Request recipe pattern — see all workflows that pair these two integrations.
The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"id": "EIOmLVu0xM1NA4BP",
"name": "Learn Supabase Storage Fundamental",
"tags": [],
"nodes": [
{
"id": "dcc07b9f-788f-4ea5-9a45-37497ba7319c",
"name": "fetch_file_to_review1",
"type": "n8n-nodes-base.httpRequest",
"position": [
-304,
-416
],
"parameters": {
"url": "=https://uptttiuxuaacxrdofqgm.supabase.co/storage/v1/object/test-n8n/{{ $json['File Name'] }}",
"options": {},
"authentication": "predefinedCredentialType",
"nodeCredentialType": "supabaseApi"
},
"credentials": {
"supabaseApi": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "1b5e12a0-3f2f-421e-ae03-9f31a40d6bd0",
"name": "upload_to_supabase_storage",
"type": "n8n-nodes-base.httpRequest",
"position": [
-320,
-784
],
"parameters": {
"url": "=https://uptttiuxuaacxrdofqgm.supabase.co/storage/v1/object/test-n8n/{{ $binary.File.fileName }}",
"method": "POST",
"options": {},
"sendBody": true,
"contentType": "binaryData",
"authentication": "predefinedCredentialType",
"inputDataFieldName": "File",
"nodeCredentialType": "supabaseApi"
},
"credentials": {
"supabaseApi": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "04a263f5-8de9-466f-bb52-ebf55ff75e37",
"name": "On form submission",
"type": "n8n-nodes-base.formTrigger",
"position": [
-688,
-784
],
"parameters": {
"options": {
"buttonLabel": "Upload to Supabase Storage"
},
"formTitle": "Supabase Storage File Upload",
"formFields": {
"values": [
{
"fieldType": "file",
"fieldLabel": "File",
"multipleFiles": false
}
]
}
},
"typeVersion": 2.2
},
{
"id": "9a06dcd2-d1fc-466b-a3a8-1f30591e375f",
"name": "On form submission1",
"type": "n8n-nodes-base.formTrigger",
"position": [
-720,
-416
],
"parameters": {
"options": {},
"formTitle": "Get File from Storage",
"formFields": {
"values": [
{
"fieldLabel": "File Name"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "72d6ca3b-81ff-43a7-843d-be4d3e542572",
"name": "On form submission2",
"type": "n8n-nodes-base.formTrigger",
"position": [
-672,
-64
],
"parameters": {
"options": {},
"formTitle": "Get File from Storage",
"formFields": {
"values": [
{
"fieldLabel": "File Name"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "160ca4a4-7e79-493a-a0da-5c8d6b78ca07",
"name": "get_sign_file_for_temp_access",
"type": "n8n-nodes-base.httpRequest",
"position": [
-240,
-64
],
"parameters": {
"url": "=https://uptttiuxuaacxrdofqgm.supabase.co/storage/v1/object/sign/test-n8n/{{ $json['File Name'] }}",
"method": "POST",
"options": {},
"jsonBody": "{\n \"expiresIn\" : 3600\n}",
"sendBody": true,
"specifyBody": "json",
"authentication": "predefinedCredentialType",
"nodeCredentialType": "supabaseApi"
},
"credentials": {
"supabaseApi": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "23718644-32eb-4351-b32e-4071bbeb0492",
"name": "list_all_the_object",
"type": "n8n-nodes-base.httpRequest",
"position": [
-240,
336
],
"parameters": {
"url": "=https://uptttiuxuaacxrdofqgm.supabase.co/storage/v1/object/list/test-n8n",
"method": "POST",
"options": {},
"jsonBody": "{\n \"prefix\": \"\",\n \"limit\": 20,\n \"offset\": 0,\n \"sortBy\": {\n \"column\": \"name\",\n \"order\": \"asc\"\n }\n}",
"sendBody": true,
"specifyBody": "json",
"authentication": "predefinedCredentialType",
"nodeCredentialType": "supabaseApi"
},
"credentials": {
"supabaseApi": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "1fa36875-d26f-4bc4-b692-92e8ce0a1bc6",
"name": "When clicking \u2018Execute workflow\u2019",
"type": "n8n-nodes-base.manualTrigger",
"position": [
-672,
336
],
"parameters": {},
"typeVersion": 1
},
{
"id": "2e21cf08-8100-4059-88ac-d87a2d1ff0e3",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1536,
-400
],
"parameters": {
"width": 608,
"height": 512,
"content": "## Update/create policy to access that. (note based on key we have create policy)\n"
},
"typeVersion": 1
},
{
"id": "269b106b-b758-4dd4-b75f-3374b7b3bf39",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-2080,
-896
],
"parameters": {
"width": 528,
"height": 464,
"content": "## Get project URL\n"
},
"typeVersion": 1
},
{
"id": "c4051c9c-3145-4a2f-8645-e9ac21007b44",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
-2080,
144
],
"parameters": {
"width": 528,
"height": 464,
"content": "## Create a Credential of Suparbase Api Credential Type.\n"
},
"typeVersion": 1
},
{
"id": "7f774520-ee3c-4a83-b79e-330860cb39e6",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1536,
-896
],
"parameters": {
"width": 592,
"height": 480,
"content": "## Get Api key (Anon) key. \n"
},
"typeVersion": 1
},
{
"id": "d40c816f-e736-4213-8a82-c2b495e3dbc8",
"name": "Sticky Note5",
"type": "n8n-nodes-base.stickyNote",
"position": [
-2080,
-416
],
"parameters": {
"width": 528,
"height": 544,
"content": "## Create a bucket in supabase\n"
},
"typeVersion": 1
},
{
"id": "d67a1e56-5cd1-4054-8670-0a63a95abe03",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-912,
-880
],
"parameters": {
"color": 4,
"width": 928,
"height": 304,
"content": "## Lesson 1 - Upload file to storage"
},
"typeVersion": 1
},
{
"id": "986ba910-9a34-4256-a968-b65edccbdd7d",
"name": "Sticky Note6",
"type": "n8n-nodes-base.stickyNote",
"position": [
-912,
-512
],
"parameters": {
"color": 4,
"width": 928,
"height": 288,
"content": "## Lesson 2 - Fetch file from storage"
},
"typeVersion": 1
},
{
"id": "066aaed6-6390-4ddb-ba8f-94f9ef84ee1c",
"name": "Sticky Note7",
"type": "n8n-nodes-base.stickyNote",
"position": [
-912,
-160
],
"parameters": {
"color": 4,
"width": 944,
"height": 288,
"content": "## Lesson 3 - Create Temp document with expire time"
},
"typeVersion": 1
},
{
"id": "a1fdb67e-1ea3-4e82-8b98-9ab05b2a1a57",
"name": "Sticky Note8",
"type": "n8n-nodes-base.stickyNote",
"position": [
-912,
224
],
"parameters": {
"color": 4,
"width": 960,
"height": 288,
"content": "## Lesson 4 - Fetch list all the items in storage"
},
"typeVersion": 1
},
{
"id": "ddf906e8-0e37-477e-9b5a-2ed1e9265058",
"name": "Sticky Note9",
"type": "n8n-nodes-base.stickyNote",
"position": [
-2992,
-896
],
"parameters": {
"color": 3,
"width": 896,
"height": 1632,
"content": "## Learn Supabase Storage Fundamentals with n8n\n\nThis template demonstrates how to integrate **Supabase Storage** with **n8n** for uploading, fetching, generating temporary signed URLs, and listing files. It\u2019s a beginner-friendly workflow that helps you understand how to connect Supabase\u2019s storage API with n8n automation.\n\n---\n\n## Who it\u2019s for\n- Developers and teams new to **Supabase** who want a hands-on learning workflow. \n- Anyone looking to automate file uploads and retrieval from **Supabase Storage**. \n- Educators or technical teams teaching Supabase fundamentals with **practical demos**. \n\n---\n\n## How it works\n1. **Upload File** \u2013 A user uploads a file through an n8n form, which gets stored in a Supabase storage bucket. \n2. **Fetch File** \u2013 Retrieve files by providing their filename. \n3. **Temporary Access** \u2013 Generate **signed URLs** with custom expiry for secure file sharing. \n4. **List Objects** \u2013 View all stored files in the chosen Supabase bucket. \n\n---\n\n## How to set up\n- Create a **Supabase account** and set up a project. \n- Create a **bucket** in Supabase (e.g., `test-n8n`). \n- Get your **Project URL** and **Anon Key** from Supabase. \n- In n8n, create a **Supabase API Credential** using your keys. \n- Import this workflow and connect it with your credentials. \n- Run the forms to test file upload, retrieval, and listing. \n\n---\n\n## Requirements\n- A Supabase project with **storage enabled**. \n- A configured **Supabase API Credential** in n8n. \n\n---\n\n## Customization\n- Change the bucket name (`test-n8n`) to your own. \n- Adjust signed URL **expiry times** for temporary file access. \n- Replace Supabase with another S3-compatible storage if needed. \n- Extend the workflow with notifications (Slack, Email) after file upload. \n\n---\n\n## \ud83d\udcdd Lessons Included\n- **Lesson 1** \u2013 Upload file to Supabase storage. \n- **Lesson 2** \u2013 Fetch file from storage. \n- **Lesson 3** \u2013 Create a temporary signed document with expiry. \n- **Lesson 4** \u2013 List all items in Supabase storage. \n\n---\n\n## \ud83d\udd11 Prerequisites\n- Supabase account + project. \n- Project URL and API Key (Anon). \n- Bucket created in Supabase. \n- Policy created to allow read/write access. \n- n8n with Supabase API credentials configured. \n\n---"
},
"typeVersion": 1
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "95dabc42-1c4b-4b25-86a6-09b72a439252",
"connections": {
"On form submission": {
"main": [
[
{
"node": "upload_to_supabase_storage",
"type": "main",
"index": 0
}
]
]
},
"On form submission1": {
"main": [
[
{
"node": "fetch_file_to_review1",
"type": "main",
"index": 0
}
]
]
},
"On form submission2": {
"main": [
[
{
"node": "get_sign_file_for_temp_access",
"type": "main",
"index": 0
}
]
]
},
"fetch_file_to_review1": {
"main": [
[]
]
},
"When clicking \u2018Execute workflow\u2019": {
"main": [
[
{
"node": "list_all_the_object",
"type": "main",
"index": 0
}
]
]
}
}
}
Credentials you'll need
Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.
supabaseApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This template demonstrates how to integrate Supabase Storage with n8n for uploading, fetching, generating temporary signed URLs, and listing files. It’s a beginner-friendly workflow that helps you understand how to connect Supabase’s storage API with n8n automation. Developers…
Source: https://n8n.io/workflows/8228/ — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
This workflow is ideal for content creators, video marketers, and research professionals who need to extract actionable insights, detailed transcripts, or metadata from YouTube videos efficiently. It
Legal, Procurement, and Compliance teams at mid-size companies. ESN and agencies selling AI-powered contract review as a service.
This workflow takes a Loom link, extracts the video ID, uses the Loom API to download the video, then sends it to Gemini along with your question. Finally, it sends the output to Slack.
This template is designed for filmmakers, content creators, social media managers, and AI developers who want to harness OpenAI's Sora 2 for creating physically accurate, cinematic videos with synchro
Transform text prompts into stunning images or edit existing visuals using OpenAI's latest GPT-4 Vision model through an intuitive web form interface.