O que é e por que usar
Conectar o n8n ao Supabase é uma das combinações mais produtivas para quem precisa automatizar fluxos de dados sem abrir mão de um banco de dados relacional moderno e escalável. O n8n é uma ferramenta de automação low-code que permite orquestrar centenas de serviços via nós visuais; o Supabase, por sua vez, oferece um backend completo com PostgreSQL, autenticação, storage e APIs REST/GraphQL em tempo real. Juntos, eles formam um ecossistema onde você pode, por exemplo, disparar webhooks do n8n para inserir ou consultar registros no Supabase, sincronizar dados entre CRMs, gerenciar filas de processamento ou até construir mini ERPs sem escrever código de infraestrutura.
Diferente de soluções como Airtable ou Firebase, o Supabase dá acesso direto ao PostgreSQL, o que significa consultas complexas com JOINs, triggers e funções SQL. O n8n se integra via REST API ou SDK, mas a abordagem mais simples e robusta é utilizar o nó HTTP Request apontando para a API do Supabase. Com isso, você pode ler, criar, atualizar e deletar dados, além de chamar funções RPC. O ganho real aparece quando você precisa reagir a eventos externos (e-mails, formulários, webhooks) e persistir esses dados de forma estruturada, sem depender de planilhas ou soluções temporárias.
Neste artigo, você vai aprender na prática como conectar o n8n ao Supabase, configurar um fluxo que recebe dados de um formulário externo e os insere automaticamente em uma tabela PostgreSQL. Vou mostrar cada nó, cada parâmetro e como evitar os erros mais comuns. Ao final, você terá um workflow funcional que pode ser adaptado para seu próprio projeto.

Pré-requisitos
- Uma conta no Supabase (plano gratuita já funciona) e um projeto criado.
- Uma instalação do n8n (versão cloud ou self-hosted).
- Conhecimento básico de navegação no n8n (criar workflow, adicionar nós).
- Um formulário de teste ou uma ferramenta que envie webhooks (ex: Typeform, Google Forms com webhook via app script, ou um simples POST com curl).
- Chave de API do Supabase (a chave anon ou service_role – vamos usar a anon com RLS desabilitado para testes).
Exemplo Prático: Inserir leads de um formulário externo no Supabase
Cenário concreto
Imagine que você tem um site que envia dados de contato (nome, email, mensagem) para um webhook sempre que um visitante preenche um formulário. Sem automação, você teria que copiar manualmente esses leads para um banco de dados. Com n8n + Supabase, o lead é inserido automaticamente na tabela leads em menos de 1 segundo.
O que será automatizado
- Webhook do n8n recebe um JSON com os campos:
name,email,message. - Nó HTTP Request faz uma requisição POST para a API REST do Supabase, inserindo o registro na tabela leads.
- Um nó de resposta confirma o sucesso ou retorna erro.
Resultado esperado
Ao final, cada submissão do formulário gera um novo registro na tabela leads do Supabase, com um id automático (UUID) e timestamp de criação. O workflow retorna um status 201 para o emissor.
Configuração Passo a Passo
1. Preparar a tabela no Supabase
No painel do Supabase, vá em SQL Editor e execute:
CREATE TABLE leads (
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
name TEXT NOT NULL,
email TEXT NOT NULL,
message TEXT,
created_at TIMESTAMPTZ DEFAULT now()
);
-- Habilita Row Level Security (opcional para teste, mas desabilite para simplificar)
ALTER TABLE leads ENABLE ROW LEVEL SECURITY;
CREATE POLICY "insert_anon" ON leads FOR INSERT TO anon USING (true);
Copie a URL do projeto (ex: https://xxxxxxxxxxxx.supabase.co) e a chave anon (em Settings > API). Guarde esses valores.
2. Criar o workflow no n8n
- Adicione um nó Webhook (tipo “Webhook”). Configure:
- HTTP Method:
POST - Path:
/lead - Response Mode:
On Received(ou “Last Node” se quiser customizar)
- HTTP Method:
- Adicione um nó HTTP Request (tipo “HTTP Request”). Conecte a saída do Webhook nele.
- Configure o nó HTTP Request:
- Method:
POST - URL:
https://SEU_PROJETO.supabase.co/rest/v1/leads - Headers:
apikey: SUA_CHAVE_ANON Authorization: Bearer SUA_CHAVE_ANON Content-Type: application/json Prefer: return=minimal - Body: clique em “Add Parameter” e escolha “JSON”. Cole o conteúdo dinâmico:
{ "name": "{{ $json.body.name }}", "email": "{{ $json.body.email }}", "message": "{{ $json.body.message }}" }
- Method:
- Adicione um nó Respond to Webhook (opcional). Conecte a saída do HTTP Request. Configure:
- Respond Mode:
JSON - Content:
{ "success": true, "lead_id": "{{ $json.id }}" }
- Respond Mode:
- Ative o Webhook e copie a URL de teste (ex:
https://SEU_N8N.com/webhook/lead).
3. Testar o fluxo
Use curl ou Postman para enviar um POST:
curl -X POST https://SEU_N8N.com/webhook/lead \
-H "Content-Type: application/json" \
-d '{"name": "João Silva", "email": "joao@exemplo.com", "message": "Quero saber mais sobre seus serviços."}'
No Supabase, vá em Table Editor > leads e veja o novo registro. O workflow deve retornar {"success":true, "lead_id":"..."}.
Observação sobre segurança
Em produção, nunca exponha a chave service_role. Use a chave anon com RLS configurada para permitir apenas INSERT na tabela (como fizemos). Para maior segurança, você pode usar um nó de autenticação customizada ou validar o token do webhook antes de prosseguir.
Dicas e Variações
- Use variáveis de ambiente no n8n: Armazene a URL e a chave do Supabase como variáveis de ambiente (Settings > Environment Variables) para não expor dados sensíveis no workflow.
- Estrutura de dados mais complexa: Se o formulário enviar arrays ou objetos aninhados, você pode usar o nó Set para transformar os dados antes de enviar ao HTTP Request, ou usar
JSON.parsenas expressões. - Consultar dados (GET): Para ler registros, use
GETna URL da tabela com query params?select=*&email=eq.{{ email }}. Exemplo:https://.../rest/v1/leads?email=eq.{{ $json.email }}. - Integrar com webhooks de terceiros: Em vez de um formulário, você pode conectar o webhook do n8n ao Stripe (novo cliente), ao Typeform, ao Shopify (novo pedido) e salvar direto no Supabase.
- Usar funções RPC: Se precisar de lógica SQL mais complexa, crie uma função no Supabase e chame via
/rest/v1/rpc/nome_da_funcaocom POST.

Erros Comuns e Como Evitá-los
- Erro 401 (Unauthorized): Geralmente a chave anon está incorreta ou o RLS não permite a ação. Verifique se a política de INSERT está ativa para o papel
anon. No SQL Editor, execute:SELECT * FROM pg_policies WHERE tablename = 'leads'; - Erro 406 (Not Acceptable) ao fazer GET: Isso ocorre quando você tenta buscar um registro que não existe. Use o nó IF para verificar se a resposta contém dados ou use o parâmetro
Prefer: count=exactpara obter contagem. - Timeout no n8n: A API do Supabase costuma responder rápido, mas se você estiver fazendo muitas requisições em loop, considere adicionar um nó Wait ou usar o nó Split In Batches com limite de 10 itens por vez.
- Campos nulos não esperados: Se um campo do formulário estiver vazio, o Supabase rejeitará se a coluna for NOT NULL. Use expressões com fallback:
"message": "{{ $json.body.message || '' }}". - Problemas com CORS em webhooks: O n8n não tem restrições de CORS, mas se você estiver testando localmente com ngrok, certifique-se de que a URL está correta e o webhook está ativo.
Próximos Passos
Agora que você tem um workflow funcional conectando n8n ao Supabase, experimente expandir:
- Adicione um nó de validação: Use o nó IF para verificar se o email já existe na tabela antes de inserir, evitando duplicatas.
- Crie um disparo por agendamento: Use o nó Schedule Trigger para executar consultas periódicas (ex: relatório diário de leads).
- Implemente webhooks reversos: No Supabase, use Database Webhooks para chamar um endpoint do n8n sempre que um registro for inserido, criando um pipeline bidirecional.
- Integre com e-mail: Depois de salvar o lead, use o nó Send Email (SMTP ou SendGrid) para notificar o time de vendas.
- Publique no GitHub: Exporte seu workflow como JSON e compartilhe com a comunidade. Você pode salvar templates em n8n.io/workflows.
Dominar essa conexão vai te permitir construir automações robustas sem depender de soluções fechadas. O limite agora é sua imaginação – e as capacidades do PostgreSQL.
Gostou do conteúdo? Inscreva-se para receber as novidades:


Comments are closed