Eight Supabase steps work with your Supabase project, one step for each thing you do:
- Insert a row — Adds a row to a table, a value for each column you fill in.
- Update rows — Changes the columns you fill in, in the rows that match.
- Upsert — Adds a row, or updates the one with the same key.
- Delete rows — Deletes the rows that match.
- Find rows — The rows of a table that match, in the order you choose.
- Call a function — Runs a database function with the arguments you give.
- Upload a file to storage — Puts a file from an earlier step into a storage bucket.
- Get a signed URL — A link to a stored file that works for a time.
In the step picker, Changes data marks Insert a row, Update rows, Upsert and Upload a file to storage; Deletes data marks Delete rows; Can change data marks Call a function, whose effect depends on the function.
Who can do this
Workspace Admins and Editors, on every plan.
Before you start
A Supabase connection in this workspace — see Connect Supabase. With the anon key, your row-level security policies decide what each step can see and change.
Steps
- Select +, then in Apps select Supabase, or search Supabase. Choose the step.
- Choose the Connection.
- Fill in the step:
- Insert a row — choose the Table; under Columns, give a value for each column you want set.
- Update rows — choose the Table; under Filters, add a column and the value it must hold for each condition; under New values, fill in the columns to change.
- Upsert — choose the Table and fill in Columns, including the key. Match on — empty for the primary key, or a column with a unique constraint, such as email.
- Delete rows — choose the Table and fill in Filters. Deleted rows cannot be brought back.
- Find rows — choose the Table, and optionally Filters, Order by and Order. Most rows is 1,000 unless you change it, up to 10,000.
- Call a function — choose the Function; under Arguments, its arguments load from the function.
- Upload a file to storage — choose the Bucket, give the Path with the file's name —
northwind/INV-1042.pdf— and choose the File from an earlier step. Tick Replace a file already there to overwrite. - Get a signed URL — choose the Bucket, give the Path, and Lasts for (seconds) — empty is an hour, up to seven days.
- Select Run this step, then check Output.
Output
| Step | Fields |
|---|---|
| Insert a row, Upsert | The row as Supabase stored it, each column by its name — {{ steps.insert_a_row.id }}. |
| Update rows, Delete rows | count, and rows — the rows changed or deleted. |
| Find rows | count, rows, first, and note when cut: Only the first 1,000 rows are kept. |
| Call a function | result — whatever the function returns. |
| Upload a file to storage | bucket, path, size in bytes. |
| Get a signed URL | url, and expiresAt in UTC. |
Good to know
- Values travel as data. Column values and arguments go in the request's JSON, keeping their type; filter values are escaped, so a value from an earlier step can never change the request.
- Filters match equal values. An empty value matches NULL. For anything else — ranges, text search, OR — write a database function and use Call a function.
- Update rows and Delete rows always need a filter. Changing or deleting every row is not done from a workflow.
- Tables, functions and buckets come from their lists. A value from an earlier step cannot name one.
- Upsert does not say whether it added or updated. Supabase's API does not tell; the output is the row either way.
If something goes wrong
| What the run says | Why | What to do |
|---|---|---|
| Supabase refused: … | Supabase refused the request — a column that does not allow NULL, a duplicate key, a policy that does not allow it. | Read the reason; with the anon key, check your row-level security policies. |
| The project has no table named … the key can see. Refresh the list and choose again. | The table was renamed, or the key cannot see it. | Refresh and choose again. |
| … has no column named “…”. Refresh the columns and choose again. | A filter names a column the table does not have. | Fix the row. |
| Say which rows to change under Filters — every row is not taken here. | Filters is empty. | Add a filter. The same for Delete rows. |
| “…” cannot be a path in a bucket. | The path climbs out of the bucket with ... |
Give a path inside the bucket. |
| File is empty. Choose a file from an earlier step. | File is not set. | Choose a file. |