- Home
- Resources
- Integrations
- Supabase
Supabase n8n integrationAutomate Supabase with n8n.
A Supabase table makes a solid memory for a workflow. The Supabase n8n integration exposes one resource, Row, and 5 operations to create, read, update and delete records. There is no Supabase trigger, the node type that starts a run by itself, so the workflow opens elsewhere and writes here.
Verified Trustpilot reviews · AI, automation & growth agency
What does the Supabase n8n integration cover?
The Supabase node ships with n8n and deals with one thing: the rows of your tables. It adds, reads, updates and deletes records through the Supabase Data API, using a credential, that is an access you save once in n8n and reuse everywhere. One resource, Row, 5 operations, and a table picker that loads the list straight from the project.
A contact list that fills itself. A form arrives through the Webhook node, an n8n URL that an outside service calls, Get many rows checks whether the address is already stored, and Create a row writes the record. The shared spreadsheet that three people edit at the same time drops out of the process.
A Monday export ready before the coffee. A Schedule Trigger fires at a fixed hour, Get many rows pulls the table with Return All switched on, and the records land in Google Sheets for the people who live in spreadsheets.
A status that follows the customer. Payment settled, ticket closed, plan cancelled: Update a row rewrites the matching record and Slack carries the notice. Delete a row handles the other end of the cycle, the staging rows and the accounts that asked to disappear.
The node stops at rows. For the rest of the Supabase API, the interface a program uses to talk to the service, the HTTP Request node takes over: it calls any endpoint while reusing the same credential through predefined authentication, so there is no second key to look after.
Two traps come back often. A table created in the public schema with the Table Editor has Row Level Security on by default, and until a policy exists the API returns nothing to the public anon key, so records that answer fine through the Postgres node stay invisible here. Filtering on metadata needs Select Type set to String and the condition written in Filters (String), like metadata->>age=gte.21.
Still weighing the platform itself? The n8n review goes through the tool, and the n8n training is the other door for building these workflows hands on.
How do you connect Supabase to n8n?
- 01
Enable the Data API and copy the project URL
Open the Supabase dashboard, select the project to automate, then go to Integrations, Data API. The credential talks to the project through that Data API, so it has to be enabled first. Copy the Project URL and paste it into the n8n Host field without the
/rest/v1path at the end:https://your_project.supabase.coworks, the version ending in the path does not. - 02
Create a secret key
Still in the dashboard, head to Project Settings, API Keys. Create a key or reveal an existing one, then paste it into Secret Key in n8n. The Supabase credential authenticates with an API key, so those two fields are all it asks for. A credential still carrying a legacy
service_rolesecret keeps working, but Supabase is retiring legacy keys and switches them off at the end of 2026. - 03
Save the credential and pick a table
Save the credential once in the n8n Credentials menu and every Supabase node in every workflow finds it in its dropdown. Drop the node on the canvas, select the credential, choose the operation, and Table Name or ID loads the list of tables from the project. When the table name comes from an earlier step instead, switch the field to an expression, a value from another node, such as
{{ $json.table }}.
What can the Supabase node do?
The Supabase node exposes 5 operations across 1 resources. For each one: the node as you configure it in n8n, the required fields, and our field notes.
Operations index
Row
5 operationsCreate a row
row.createWhat you see in n8n
Notes & use cases
Create a row adds a record to the chosen table, filled with the incoming item's values. It closes a branch that produced something worth keeping.
Key parameters
- Table Name or ID: the destination table, picked from the list n8n loads from the project, or an expression when the name travels in the data.
- Data to Send: Auto-Map Input Data to Columns reuses properties whose names match the columns; Define Below for Each Column sets each value in Fields to Send.
- Inputs to Ignore: properties to keep out, comma separated, empty sends the lot.
Delete a row
row.deleteWhat you see in n8n
Notes & use cases
Delete a row removes the records that match the conditions you set. Nothing is selected by position or by name, only by the filter you build.
Key parameters
- Select Type: Build Manually opens Select Conditions, where each condition names a column and a value; String expects a raw condition in Filters (String), written like
name=eq.jhon. - Must Match: All Select Conditions deletes only the records that satisfy every condition, Any Select Condition is enough with a single match.
Get a row
row.getWhat you see in n8n
Notes & use cases
Get a row reads one record and hands it to the rest of the workflow. It is the lookup before a decision: fetch first, branch after.
Key parameters
- Select Conditions: the conditions that single out the record, added one by one in the interface, since this operation offers no String mode.
- Use Custom Schema and Schema: untouched for a table in the default public schema; switched on to reach another schema, which Supabase has to expose in its API beforehand.
Get many rows
row.getAllWhat you see in n8n
Notes & use cases
Get many rows returns a set of records rather than one. Exports, recaps and loops over a table all start here.
Key parameters
- Return All: on, n8n walks the pages of the API and brings back every matching record; off, Limit caps how many come back.
- Order By: the column that sorts the result,
created_at.descfor instance. Recommended with Return All or a Limit of 1000 and above, where records otherwise arrive twice or go missing. - Filter: None reads the whole table, Build Manually opens Filters, String expects Filters (String), and Must Match picks between All Filters and Any Filter.
Update a row
row.updateWhat you see in n8n
Notes & use cases
Update a row rewrites the columns you list on the records that match. The record keeps its identity, only the values move.
Key parameters
- Data to Send: Define Below for Each Column sets the new values in Fields to Send, Auto-Map Input Data to Columns takes the incoming properties whose names match the columns.
- Select Conditions: which records get rewritten, built condition by condition, or expressed as a string in Filters (String) once Select Type is set to String.
Need help automating Supabase with n8n?
A person reads every message.