Integrar com n8n
O n8n é a melhor opção pra quem quer automação self-hosted (sem fees por execução). Roda em Docker, fácil instalar numa VPS. A integração com o Indutiva CRM usa o node HTTP Request.
Setup
-
Gere uma API Key
Configurações → Integrações → API Keys → Nova.
- Nome:
n8n — <workflow> - Scopes: mínimos necessários
- Nome:
-
Salve como Credential no n8n
No n8n: Credentials → New → Header Auth.
- Name:
Indutiva CRM - Header Auth → Name:
X-API-Key - Header Auth → Value:
crm_live_...
Agora qualquer node HTTP Request pode usar essa credential, sem precisar repetir o header.
- Name:
Workflow básico: criar contato
[Webhook] → [HTTP Request] → [IF resposta = 409] → [HTTP Request PATCH] ↓ [Set] (sucesso)Node 1 — Webhook
- Method: POST
- Path:
/lead-form - Response Mode: “When last node finishes”
Node 2 — HTTP Request (criar contato)
- Authentication: Header Auth → escolha
Indutiva CRM - Method: POST
- URL:
https://app.indutivacrm.com.br/api/v1/contacts - Headers Parameters: ADD →
Content-Type=application/json - Body Content Type: JSON
- JSON Body:
{"firstName": "{{ $json.firstName }}","email": "{{ $json.email }}","phone": "{{ $json.phone }}"}
- Options → Response → Full Response: ON (pra capturar status code e headers)
- Options → Continue On Fail: ON (pra não parar o workflow no 409)
Node 3 — IF
- Condition:
{{ $node["HTTP Request"].json.statusCode }} === 409
Node 4 — HTTP Request (PATCH se duplicate)
- URL:
https://app.indutivacrm.com.br/api/v1/contacts/{{ $node["HTTP Request"].json.body.existingContactId }} - Method: PATCH
- Body: mesmos campos do POST
Workflow: bulk sync de um ERP
Cenário comum: pull de clientes do ERP a cada hora e push pro CRM.
[Cron] → [HTTP Request ERP] → [Loop Over Items] → [HTTP Request POST/PATCH CRM] ↓ [Wait 100ms] (throttle)- Cron: todo dia 0min de cada hora
- HTTP Request ERP: pega array de clientes
- Loop Over Items: processa um por vez (em vez de tudo em paralelo)
- Wait: 100ms entre items pra não bater 1000+ req/min no CRM
- HTTP Request CRM: POST contact, com error handler tratando 409 → PATCH
Workflow: pull de deals fechados pra dashboard
[Cron 06:00] → [HTTP Request GET /deals?isWon=true] → [Split In Batches] ↓ [Postgres / Sheets]HTTP Request GET:
- URL com query params dinâmicos:
https://app.indutivacrm.com.br/api/v1/deals?isWon=true&closedAtFrom={{ $now.minus({ days: 1 }).toISO() }}&pageSize=100
- Paginar se
pagination.hasNext: use loop com node “HTTP Request” iterativo (não tem node nativo de paginação pra API custom; basta criar loop manual incrementandopage)
Comparação rápida
| Característica | Zapier | Make | n8n |
|---|---|---|---|
| Custo | $$$ (per task) | $$ (per op) | Free (self-host) |
| Curva de aprendizado | Fácil | Médio | Médio-difícil |
| Error handling | Limitado | Robusto | Excelente |
| Schedule mínimo | 15min (free) / 1min (pago) | 1min | Cron arbitrário |
| Code blocks (JS) | Sim (paywall alto) | Sim | Sim, nativo |
Pra volume alto (>10k execuções/mês) ou lógica custom (JS, transforms complexos), n8n é a melhor escolha.