Pular para o conteúdo

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

  1. Gere uma API Key

    Configurações → Integrações → API Keys → Nova.

    • Nome: n8n — <workflow>
    • Scopes: mínimos necessários
  2. 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.

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 incrementando page)

Comparação rápida

CaracterísticaZapierMaken8n
Custo$$$ (per task)$$ (per op)Free (self-host)
Curva de aprendizadoFácilMédioMédio-difícil
Error handlingLimitadoRobustoExcelente
Schedule mínimo15min (free) / 1min (pago)1minCron arbitrário
Code blocks (JS)Sim (paywall alto)SimSim, nativo

Pra volume alto (>10k execuções/mês) ou lógica custom (JS, transforms complexos), n8n é a melhor escolha.