Skip to content

Supabase

Persist workflow data to a real database. Where the Data Store node covers browser-local state, this covers state you want to keep, query, and share outside the browser — a scrape that accumulates into a table you can actually use.

Full row access to your Supabase project through PostgREST: select (with filters), insert, update, upsert, delete, and RPC function calls.

OperationNotes
Select rowsColumns, PostgREST filters, and a limit.
Insert rowColumn → value pairs.
Update rowsFields to change + filters (a filter is required).
Upsert rowInsert or merge on a conflict column.
Delete rowsFilters (a filter is required).
Call function (RPC)A Postgres function with named arguments.

Filters are column → operator.value pairs, matching PostgREST syntax:

FilterMeaning
ideq.42id = 42
agegt.18age > 18
namelike.*acme*name matches *acme*
statusin.(new,open)status in a set

Update and Delete require at least one filter — without one they would affect every row, so the node refuses to run.

⚠️ Use the anon key — never service_role

Section titled “⚠️ Use the anon key — never service_role”

Supabase gives you two keys, and only one is safe to use here:

KeyUse it?Why
anon (public)✅ YesDesigned to be public and shipped in browser clients. Row Level Security (RLS) enforces what it can actually read and write.
service_role❌ NeverBypasses RLS entirely — full read/write to every table — and would be recoverable from extension storage.

The two keys sit next to each other in the dashboard, and service_role “just works” when RLS blocks you — which is exactly the trap. This node reads the key’s JWT role and rejects a service_role key outright, before making any request. Use the anon key and control access with RLS policies.

  • Credential: your project’s anon (public) key (Project Settings → API), stored as a Bearer Token credential. Sent as both the apikey header and Authorization: Bearer.
  • Project URL: set per operation (Project Settings → API), e.g. https://abcd.supabase.co.
  • The key is stored in your credential vault and never passes through awflow’s backend.

This node is extension-only.

  • “service_role key … rejected” — you pasted the wrong key. Use the anon key.
  • Blocked with an RLS message — the anon key is working, but a Row Level Security policy denies the operation. Add or adjust a policy on the table for select/insert/update/delete as needed.
  • Nothing selected / everything returned — check your filters use the operator.value form (e.g. eq.42, not just 42).