Reference · Tools

Supabase

Add, get, delete, and update rows in Supabase database tables via the PostgREST API.

Action Data & Storage v1

The Supabase node creates, reads, updates and deletes rows in Supabase tables via the PostgREST API, with filtering, pagination and support for custom schemas. A typical build is syncing records into a Supabase table that powers an application front end.

Node type
Action
Parameters
20
Outputs
Output, Error
Credentials
Supabase API

Supabase

Add, get, delete, and update rows in Supabase tables.

Overview

Supabase is an open-source Backend-as-a-Service (BaaS) built on top of PostgreSQL. This tool interacts with Supabase tables through the PostgREST REST API to create, read, update, and delete rows. It supports PostgREST filtering operators (eq, neq, gt, lt, gte, lte, like, ilike, is, fullText), custom database schemas, auto-mapping of input data to table columns, and pagination for large result sets. The Service Role key is used for authentication, which bypasses Row Level Security (RLS).

Category: Data & Storage
Tool Name: supabase
Version: 1

Appearance: Icon: si-supabase | Color: #3ECF8E

Node Type

Action — processes input items and produces output

Input / Output

DirectionPort(s)
InputInput
OutputOutput, Error

Credentials

This tool requires Supabase API credentials. See the Credentials Guide for setup instructions.

Resources

ResourceValue
Rowrow

Operations

OperationValueDescription
CreatecreateCreate a new row
DeletedeleteDelete a row
GetgetGet a row
Get ManygetAllGet many rows
UpdateupdateUpdate a row

Parameters

Row: Create

ParameterTypeRequiredDefaultDescription
Table NamestringYesName of the Supabase table. Find available tables in your Supabase project dashboard under Table Editor. Supports expressions like {{ $json.table }}.
Data to SendoptionsNodefineBelowHow to map data to table columns.
Options: autoMapInputData (use when node input properties match destination column names), defineBelow (set the value for each destination column)
Inputs to IgnorestringNoList of input properties to avoid sending, separated by commas. Leave empty to send all properties. (shown when Data to Send is autoMapInputData)
Fields to SendfixedCollectionNo{}Field-value pairs to send to the table. (shown when Data to Send is defineBelow)
— Field Name (fieldId)stringNoColumn name in the table. Find column names in your Supabase Table Editor.
— Field Value (fieldValue)stringNoValue to set for this column.

Row: Delete

ParameterTypeRequiredDefaultDescription
Table NamestringYesName of the Supabase table. Find available tables in your Supabase project dashboard under Table Editor. Supports expressions like {{ $json.table }}.
Select TypeoptionsNomanualHow to specify which rows to select.
Options: manual (build the conditions field by field), string (paste a raw PostgREST filter)
Must Match (matchType)optionsNoanyFilterWhether rows must match any or all of the filter conditions. (shown when Select Type is manual)
Options: anyFilter (any select condition), allFilters (all select conditions)
Select Conditions (filters)fixedCollectionNo{}Filter conditions to select which rows get affected. At least one condition is required. (shown when Select Type is manual)
— Field Name (keyName)stringNoColumn name to filter on. Find column names in your Supabase Table Editor.
— ConditionoptionsNoeqThe comparison operator to use.
Options: eq (equals), fullText, gt (greater than), gte (greater than or equal), ilike (use * in place of %), is (checking for exact equality — null, true, false, unknown), lt (less than), lte (less than or equal), like (use * in place of %), neq (not equals)
— Search FunctionoptionsNoftsFull-text search function to use. (shown when Condition is fullText)
Options: fts (to_tsquery), plfts (plainto_tsquery), phfts (phraseto_tsquery), wfts (websearch_to_tsquery)
— Field Value (keyValue)stringNoThe value to compare against.
Filters (String) (filterString)stringNoRaw PostgREST filter string, e.g. name=eq.john. See PostgREST docs for syntax: https://postgrest.org/en/stable/references/api/tables_views.html#horizontal-filtering (shown when Select Type is string)

Row: Get

ParameterTypeRequiredDefaultDescription
Table NamestringYesName of the Supabase table. Find available tables in your Supabase project dashboard under Table Editor. Supports expressions like {{ $json.table }}.
Select Conditions (getFilters)fixedCollectionNo{}Equality conditions to select which row to get. At least one condition is required.
— Field Name (keyName)stringNoColumn name to match on (equality only). Find column names in your Supabase Table Editor.
— ValuestringNoThe value the field must equal.

Row: Get Many

ParameterTypeRequiredDefaultDescription
Table NamestringYesName of the Supabase table. Find available tables in your Supabase project dashboard under Table Editor. Supports expressions like {{ $json.table }}.
Return AllbooleanNofalseWhether to return all results or only up to a given limit.
LimitnumberNo50Max number of results to return. Minimum 1. (shown when Return All is false)
Filter (getAllFilterType)optionsNononeHow to filter which rows to retrieve.
Options: none, manual, string
Must Match (getAllMatchType)optionsNoanyFilterWhether rows must match any or all of the filter conditions. (shown when Filter is manual)
Options: anyFilter (any filter), allFilters (all filters)
Filters (getAllFilters)fixedCollectionNo{}Filter conditions for retrieving rows. (shown when Filter is manual)
— Field Name (keyName)stringNoColumn name to filter on.
— ConditionoptionsNoeqThe comparison operator to use.
Options: eq (equals), fullText, gt (greater than), gte (greater than or equal), ilike (use * in place of %), is (checking for exact equality — null, true, false, unknown), lt (less than), lte (less than or equal), like (use * in place of %), neq (not equals)
— Search FunctionoptionsNoftsFull-text search function to use. (shown when Condition is fullText)
Options: fts (to_tsquery), plfts (plainto_tsquery), phfts (phraseto_tsquery), wfts (websearch_to_tsquery)
— Field Value (keyValue)stringNoThe value to compare against.
Filters (String) (getAllFilterString)stringNoRaw PostgREST filter string, e.g. name=eq.john. See PostgREST docs for syntax. (shown when Filter is string)

Row: Update

ParameterTypeRequiredDefaultDescription
Table NamestringYesName of the Supabase table. Find available tables in your Supabase project dashboard under Table Editor. Supports expressions like {{ $json.table }}.
Data to SendoptionsNodefineBelowHow to map data to table columns.
Options: autoMapInputData (use when node input properties match destination column names), defineBelow (set the value for each destination column)
Inputs to IgnorestringNoList of input properties to avoid sending, separated by commas. Leave empty to send all properties. (shown when Data to Send is autoMapInputData)
Fields to SendfixedCollectionNo{}Field-value pairs to send to the table. (shown when Data to Send is defineBelow)
— Field Name (fieldId)stringNoColumn name in the table. Find column names in your Supabase Table Editor.
— Field Value (fieldValue)stringNoValue to set for this column.
Select TypeoptionsNomanualHow to specify which rows to select.
Options: manual (build the conditions field by field), string (paste a raw PostgREST filter)
Must Match (matchType)optionsNoanyFilterWhether rows must match any or all of the filter conditions. (shown when Select Type is manual)
Options: anyFilter (any select condition), allFilters (all select conditions)
Select Conditions (filters)fixedCollectionNo{}Filter conditions to select which rows get affected. At least one condition is required. (shown when Select Type is manual)
— Field Name (keyName)stringNoColumn name to filter on. Find column names in your Supabase Table Editor.
— ConditionoptionsNoeqThe comparison operator to use.
Options: eq (equals), fullText, gt (greater than), gte (greater than or equal), ilike (use * in place of %), is (checking for exact equality — null, true, false, unknown), lt (less than), lte (less than or equal), like (use * in place of %), neq (not equals)
— Search FunctionoptionsNoftsFull-text search function to use. (shown when Condition is fullText)
Options: fts (to_tsquery), plfts (plainto_tsquery), phfts (phraseto_tsquery), wfts (websearch_to_tsquery)
— Field Value (keyValue)stringNoThe value to compare against.
Filters (String) (filterString)stringNoRaw PostgREST filter string, e.g. name=eq.john. See PostgREST docs for syntax: https://postgrest.org/en/stable/references/api/tables_views.html#horizontal-filtering (shown when Select Type is string)

All Operations

ParameterTypeRequiredDefaultDescription
Use Custom SchemabooleanNofalseWhether to use a database schema different from the default “public” schema. Requires schema exposure in the Supabase API settings.
SchemastringNopublicName of the database schema to use for the table. (shown when Use Custom Schema is true)
Max ConcurrencynumberNo10Maximum number of items to process concurrently. Accepts 1–100.

Output Data

Every operation returns the affected rows, and each returned row becomes its own output item — the row IS the item JSON, with no wrapper property. That means one input item can produce many output items: a Get Many that matches 200 rows produces 200 items, and a Delete whose conditions match 40 rows produces 40 items. The input item’s JSON does not pass through; binary data on the input item is forwarded to every item it produces.

OperationOutput items per input itemItem JSON
createOneThe created row exactly as the table stores it, including database defaults and generated keys
deleteOne per deleted rowEach row as it looked before deletion
getOne per matching rowThe matched row. Despite the name, the equality conditions can match more than one row — add enough conditions to identify a single row
getAllOne per rowThe row. With Return All on, the node pages through the table and emits every row it finds
updateOne per updated rowEach row after the update was applied

When the request succeeds but matches nothing, a single item with an empty JSON object is emitted so the branch still carries an item. If the service replies with something that is not an object, the value is wrapped as { "data": … }.

Reference the result downstream by expression, e.g. {{ $json.id }} or {{ $json.email }}.

Usage Examples

  • Insert a new user row into a Supabase users table
  • Fetch all orders from Supabase with status=active filter
  • Update a customer record in Supabase by email
  • Delete rows from Supabase where age is greater than 100
  • Get all products from a custom schema in Supabase

Example Configuration

Create a row by auto-mapping the incoming item, skipping two internal properties:

{
  "type": "supabase",
  "parameters": {
    "resource": "row",
    "operation": "create",
    "tableId": "users",
    "dataToSend": "autoMapInputData",
    "inputsToIgnore": "internal_id,created_at"
  }
}

Create a row from explicitly defined column values:

{
  "type": "supabase",
  "parameters": {
    "resource": "row",
    "operation": "create",
    "tableId": "products",
    "dataToSend": "defineBelow",
    "fieldsUi": {
      "fieldValues": [
        { "fieldId": "name", "fieldValue": "New Product" },
        { "fieldId": "price", "fieldValue": "29.99" },
        { "fieldId": "category", "fieldValue": "electronics" }
      ]
    }
  }
}

Update the rows that match two conditions at once:

{
  "type": "supabase",
  "parameters": {
    "resource": "row",
    "operation": "update",
    "tableId": "users",
    "dataToSend": "autoMapInputData",
    "filterType": "manual",
    "matchType": "allFilters",
    "filters": {
      "conditions": [
        { "keyName": "id", "condition": "eq", "keyValue": "123" },
        { "keyName": "status", "condition": "eq", "keyValue": "active" }
      ]
    }
  }
}

Delete old debug logs with a raw PostgREST filter string:

{
  "type": "supabase",
  "parameters": {
    "resource": "row",
    "operation": "delete",
    "tableId": "logs",
    "filterType": "string",
    "filterString": "created_at=lt.2024-01-01&level=eq.debug"
  }
}

Get a single row by an exact column match:

{
  "type": "supabase",
  "parameters": {
    "resource": "row",
    "operation": "get",
    "tableId": "users",
    "getFilters": {
      "conditions": [
        { "keyName": "email", "keyValue": "user@example.com" }
      ]
    }
  }
}

Read up to 50 orders that are either pending or high priority:

{
  "type": "supabase",
  "parameters": {
    "resource": "row",
    "operation": "getAll",
    "tableId": "orders",
    "returnAll": false,
    "limit": 50,
    "getAllFilterType": "manual",
    "getAllMatchType": "anyFilter",
    "getAllFilters": {
      "conditions": [
        { "keyName": "status", "condition": "eq", "keyValue": "pending" },
        { "keyName": "priority", "condition": "eq", "keyValue": "high" }
      ]
    }
  }
}

Read every row from a table in a non-public schema:

{
  "type": "supabase",
  "parameters": {
    "useCustomSchema": true,
    "schema": "analytics",
    "resource": "row",
    "operation": "getAll",
    "tableId": "events",
    "returnAll": true,
    "getAllFilterType": "none"
  }
}

Create a row from every property on the incoming item:

{
  "type": "supabase",
  "parameters": {
    "resource": "row",
    "operation": "create",
    "tableId": "customers",
    "dataToSend": "autoMapInputData"
  }
}

Read an entire table with no filtering:

{
  "type": "supabase",
  "parameters": {
    "resource": "row",
    "operation": "getAll",
    "tableId": "customers",
    "returnAll": true,
    "getAllFilterType": "none"
  }
}

Update exactly one customer by primary key:

{
  "type": "supabase",
  "parameters": {
    "resource": "row",
    "operation": "update",
    "tableId": "customers",
    "dataToSend": "autoMapInputData",
    "filterType": "manual",
    "matchType": "allFilters",
    "filters": {
      "conditions": [
        { "keyName": "id", "condition": "eq", "keyValue": "customer-123" }
      ]
    }
  }
}

Read products matching either of two conditions (OR logic):

{
  "type": "supabase",
  "parameters": {
    "resource": "row",
    "operation": "getAll",
    "tableId": "products",
    "returnAll": false,
    "limit": 100,
    "getAllFilterType": "manual",
    "getAllMatchType": "anyFilter",
    "getAllFilters": {
      "conditions": [
        { "keyName": "category", "condition": "eq", "keyValue": "electronics" },
        { "keyName": "featured", "condition": "eq", "keyValue": "true" }
      ]
    }
  }
}

Use a raw PostgREST string for a range query the manual builder cannot express:

{
  "type": "supabase",
  "parameters": {
    "resource": "row",
    "operation": "getAll",
    "tableId": "sales",
    "returnAll": true,
    "getAllFilterType": "string",
    "getAllFilterString": "amount=gte.1000&date=gte.2024-01-01&date=lt.2024-12-31"
  }
}

Create a row with a fixed set of columns, ignoring whatever else the item carries:

{
  "type": "supabase",
  "parameters": {
    "resource": "row",
    "operation": "create",
    "tableId": "users",
    "dataToSend": "defineBelow",
    "fieldsUi": {
      "fieldValues": [
        { "fieldId": "email", "fieldValue": "new@example.com" },
        { "fieldId": "role", "fieldValue": "user" },
        { "fieldId": "active", "fieldValue": "true" }
      ]
    }
  }
}

Update a profile while keeping timestamp and key columns out of the payload:

{
  "type": "supabase",
  "parameters": {
    "resource": "row",
    "operation": "update",
    "tableId": "profiles",
    "dataToSend": "autoMapInputData",
    "inputsToIgnore": "created_at,updated_at,id",
    "filterType": "manual",
    "matchType": "allFilters",
    "filters": {
      "conditions": [
        { "keyName": "user_id", "condition": "eq", "keyValue": "user-456" }
      ]
    }
  }
}

Error Handling

ModeBehavior
stopHalts workflow on first error
continueSkips failed items, passes successful ones through
errorPortRoutes failed items to Error output port

Tips

Use Supabase to create, read, update, or delete rows in Supabase (PostgreSQL) tables via the PostgREST API with filtering, pagination, and custom schema support.

Frequently asked questions

Does it talk to Postgres directly?

No — it goes through PostgREST, Supabase's REST layer. For direct SQL against the same database, the PostgreSQL node is the alternative.

Can it work with a non-public schema?

Yes, custom schema support is available, which matters when your tables are not in the default public schema.

How do I narrow a read?

Through the filtering and pagination options, which map onto PostgREST's query capabilities rather than requiring raw SQL.

Which credential does it need?

A Supabase API credential with the project URL and key.

Build with the Supabase node

Drop it into a workflow, wire it to an agent, or call it on a schedule. You'll need Supabase API credentials first.

Open BusyBot

Last updated . Spotted something wrong? Tell us.