Ir para o conteúdo
TrackSale

Documentação

Webhooks de captação.

Cada formulário gera um webhook exclusivo. Escolha o provider certo, cole a URL com token na ferramenta e os leads entram em Captação e no Kanban.

Visão geral

Na TrackSale você cria um canal de formulário em Canais → Criar canal → Formulário ou em Marketing → Configurações → Webhooks. Em ambos os casos é gerado um webhook por integração (não um único webhook para a organização inteira).

  • Endpoint: https://www.tracksale.io/hooks/m/{publicKey}?token={secret}
  • Method: POST com JSON
  • O provider só muda o parser do payload — a URL segue o mesmo padrão
  • Com processamento automático, o lead vai para Captação e, em geral, já cria um deal no Kanban

Autenticação

  1. Query token (mais simples). POST na URL com ?token=whsec_… (a URL completa com token é a que você copia ao criar o canal).
  2. Assinatura HMAC. Header X-TrackSale-Signature: sha256=<hmac_hex>, onde hmac_hex = HMAC-SHA256 do body bruto com o secret (whsec_…). Também aceita X-Webhook-Signature.

Headers opcionais:

  • X-Idempotency-Key — evita processar o mesmo evento duas vezes
  • Content-Type: application/json

Teste rápido (curl)

Substitua a URL pela copiada ao criar o canal (já inclui o token):

curl -X POST 'https://www.tracksale.io/hooks/m/wh_SEU_KEY?token=whsec_SEU_SECRET' \
  -H 'Content-Type: application/json' \
  -d '{
    "name": "Teste TrackSale",
    "email": "teste@empresa.com",
    "phone": "+5511999999999"
  }'

Resposta esperada: { "received": true, "status": "processed" }. O lead aparece em Captação.

Validar um a um no Histórico

Use este roteiro para confirmar cada provider: URL com token + evento + body de teste → conferência no Histórico e na Captação.

  1. Crie um canal de formulário com o provider a testar e copie a URL com token.
  2. Abra Marketing → Configurações → Webhooks → aba Histórico (deixe a tela aberta).
  3. Dispare o body de teste (curl, Make ou o próprio provedor) para essa URL.
  4. No Histórico: status processed, sem erro de token, leadId preenchido.
  5. Em Captação: lead com nome/e-mail/telefone esperados (e Kanban para Hotmart/WON).

Webhook genérico (Make / Zapier / HTTP)

URL
URL copiada do canal (…/hooks/m/wh_…?token=whsec_…). POST direto ou Make HTTP.
Evento
Qualquer POST JSON (ex.: lead.created) — não há evento obrigatório.
Body de teste
{
  "event": "lead.created",
  "name": "Teste Genérico",
  "email": "teste.generico@tracksale.io",
  "phone": "+5511988000001",
  "custom_fields": { "Origem teste": "checklist" }
}
Histórico
Status processed, signatureValid ok, payloadPreview com o JSON, leadId preenchido.
Captação
Lead Teste Genérico com e-mail/telefone; custom_fields visíveis; deal no Kanban.

Typeform

URL
Cole a URL com token no webhook do Typeform (Connect → Webhooks).
Evento
form_response (enviado automaticamente pelo Typeform ao responder).
Body de teste
{
  "event_type": "form_response",
  "form_response": {
    "form_id": "tf_test",
    "definition": {
      "title": "Form Teste Typeform",
      "fields": [
        { "id": "n1", "title": "Nome", "type": "short_text", "ref": "nome" },
        { "id": "e1", "title": "Email", "type": "email", "ref": "email" },
        { "id": "p1", "title": "Telefone", "type": "phone_number", "ref": "phone" }
      ]
    },
    "answers": [
      { "type": "text", "text": "Teste Typeform", "field": { "id": "n1", "type": "short_text" } },
      { "type": "email", "email": "teste.typeform@tracksale.io", "field": { "id": "e1", "type": "email" } },
      { "type": "phone_number", "phone_number": "+5511988000002", "field": { "id": "p1", "type": "phone_number" } }
    ]
  }
}
Histórico
processed + leadId; preview com form_response.
Captação
Lead Teste Typeform; formName = Form Teste Typeform (ou título real do form).

YayForms

URL
Webhook de resposta concluída do YayForms → URL TrackSale com token.
Evento
response.completed
Body de teste
{
  "event": "response.completed",
  "formName": "Form Teste YayForms",
  "response": {
    "name": "Teste YayForms",
    "email": "teste.yayforms@tracksale.io",
    "phone": "11988000003"
  }
}
Histórico
processed + leadId; event response.completed no preview.
Captação
Lead Teste YayForms com e-mail e telefone.

Google Ads (lead form)

URL
Make/Zapier: HTTP POST na URL com token (Google → TrackSale).
Evento
Novo lead do Lead Form Extension (trigger Google Ads / webhook).
Body de teste
{
  "lead_id": "test-gads-001",
  "campaign_id": "000",
  "form_id": "form_teste",
  "user_column_data": [
    { "column_name": "FULL_NAME", "string_value": "Teste Google Ads" },
    { "column_name": "EMAIL", "string_value": "teste.gads@tracksale.io" },
    { "column_name": "PHONE_NUMBER", "string_value": "+5511988000004" }
  ]
}
Histórico
processed + leadId; preview com user_column_data.
Captação
Lead Teste Google Ads com e-mail e telefone.

RD Station

URL
Webhook de conversão da RD Station → URL TrackSale com token.
Evento
Conversão / lead criado (formato leads[] ou document).
Body de teste
{
  "leads": [{
    "name": "Teste RD Station",
    "email": "teste.rd@tracksale.io",
    "personal_phone": "11988000005"
  }]
}
Histórico
processed + leadId; preview com leads[].
Captação
Lead Teste RD Station com e-mail e telefone.

Hotmart

URL
Hotmart → Ferramentas → Webhook → URL TrackSale com token.
Evento
PURCHASE_COMPLETE ou PURCHASE_APPROVED
Body de teste
{
  "event": "PURCHASE_COMPLETE",
  "data": {
    "buyer": {
      "name": "Teste Hotmart",
      "email": "teste.hotmart@tracksale.io",
      "checkout_phone": "11988000006"
    },
    "product": { "name": "Produto Teste" },
    "purchase": {
      "price": { "value": 97, "currency_value": "BRL" }
    }
  }
}
Histórico
processed + leadId; event PURCHASE_COMPLETE no preview.
Captação
Lead Teste Hotmart; deal com valor R$ 97 e stage PAGO (WON).

WordPress (plugin TrackSale)

URL
Cole a URL com token em Configurações → TrackSale no WordPress (plugin).
Evento
form.submitted (enviado pelo plugin ao enviar o formulário).
Body de teste
{
  "provider": "wordpress",
  "event": "form.submitted",
  "form": {
    "id": "elementor:form_test",
    "name": "Form Teste WP",
    "plugin": "elementor"
  },
  "contact": {
    "name": "Teste WordPress",
    "email": "teste.wp@tracksale.io",
    "phone": "+5511988000007"
  },
  "attribution": {
    "utm_source": "teste",
    "utm_campaign": "checklist-webhooks"
  }
}
Histórico
processed + leadId; provider wordpress no preview.
Captação
Lead Teste WordPress; formName Form Teste WP; UTMs quando enviadas.

Meta Leads (via webhook de formulário)

URL
Teste de formulário: POST na URL do canal com token. Produção Lead Ads: preferir Ativar leads nas páginas (/hooks/meta/leads).
Evento
leadgen (Page webhook) ou POST com field_data no body.
Body de teste
{
  "object": "page",
  "entry": [{
    "changes": [{
      "field": "leadgen",
      "value": {
        "leadgen_id": "000000000",
        "form_id": "form_teste_meta",
        "page_id": "111222333"
      }
    }]
  }],
  "field_data": [
    { "name": "full_name", "values": ["Teste Meta Leads"] },
    { "name": "email", "values": ["teste.meta@tracksale.io"] },
    { "name": "phone_number", "values": ["11988000008"] }
  ]
}
Histórico
No canal formulário: processed + leadId. (Nativo Meta pode não listar neste Histórico — veja Captação.)
Captação
Lead Teste Meta Leads com e-mail/telefone. Com só leadgen_id real, exige Meta conectada para enriquecer.

Webhook genérico (Make / Zapier / HTTP)

Use quando a ferramenta envia JSON livre (Make, Zapier, n8n, landing própria). É o caminho mais flexível.

Checklist

  1. Em Canais → Criar canal → Formulário (ou Marketing → Webhooks), escolha Webhook genérico.
  2. Copie a URL com token.
  3. No Make/Zapier: módulo HTTP → Make a request → Method POST → cole a URL.
  4. Body raw JSON com pelo menos name (ou nome), email e/ou phone.
  5. Envie um lead de teste e confira Captação + Histórico de webhooks.

Observações

  • custom_fields vira perguntas extras no lead.
  • fbclid / fbc / fbp / meta_leadgen_id melhoram match com Meta CAPI.
  • UTMs (utm_source, utm_campaign, …) e ts_code entram na atribuição.

Validação (URL · evento · body)

  • URL: URL copiada do canal (…/hooks/m/wh_…?token=whsec_…). POST direto ou Make HTTP.
  • Evento: Qualquer POST JSON (ex.: lead.created) — não há evento obrigatório.
  • Histórico: Status processed, signatureValid ok, payloadPreview com o JSON, leadId preenchido.
  • Captação: Lead Teste Genérico com e-mail/telefone; custom_fields visíveis; deal no Kanban.
{
  "event": "lead.created",
  "name": "Teste Genérico",
  "email": "teste.generico@tracksale.io",
  "phone": "+5511988000001",
  "custom_fields": { "Origem teste": "checklist" }
}

Payload mínimo + completo

{
  "event": "lead.created",
  "name": "Maria Silva",
  "email": "maria@empresa.com",
  "phone": "+5511999999999",
  "fbclid": "IwAR...",
  "fbc": "fb.1.1700000000.IwAR...",
  "fbp": "fb.1.1700000000.123456",
  "meta_leadgen_id": "123456789",
  "custom_fields": {
    "Qual o faturamento?": "Até 50k",
    "Tem equipe de vendas?": "Sim"
  },
  "utm_source": "facebook",
  "utm_campaign": "lead-ads-q1"
}

Typeform

Webhook nativo do Typeform (`form_response`). Nome, e-mail e telefone são detectados pelos tipos/títulos dos campos.

Checklist

  1. Crie o canal com provider Typeform e copie a URL com token.
  2. No Typeform: Connect → Webhooks → Add webhook → cole a URL.
  3. Ative o webhook e envie uma resposta de teste no formulário.
  4. Confira o lead em Captação (formName = título do form).

Observações

  • Campos hidden e variables também são lidos quando nomeados como name/email/phone.
  • Perguntas extras entram em custom_fields quando não mapeiam contato.

Validação (URL · evento · body)

  • URL: Cole a URL com token no webhook do Typeform (Connect → Webhooks).
  • Evento: form_response (enviado automaticamente pelo Typeform ao responder).
  • Histórico: processed + leadId; preview com form_response.
  • Captação: Lead Teste Typeform; formName = Form Teste Typeform (ou título real do form).
{
  "event_type": "form_response",
  "form_response": {
    "form_id": "tf_test",
    "definition": {
      "title": "Form Teste Typeform",
      "fields": [
        { "id": "n1", "title": "Nome", "type": "short_text", "ref": "nome" },
        { "id": "e1", "title": "Email", "type": "email", "ref": "email" },
        { "id": "p1", "title": "Telefone", "type": "phone_number", "ref": "phone" }
      ]
    },
    "answers": [
      { "type": "text", "text": "Teste Typeform", "field": { "id": "n1", "type": "short_text" } },
      { "type": "email", "email": "teste.typeform@tracksale.io", "field": { "id": "e1", "type": "email" } },
      { "type": "phone_number", "phone_number": "+5511988000002", "field": { "id": "p1", "type": "phone_number" } }
    ]
  }
}

Formato esperado (resumo)

{
  "event_id": "01HXYZ",
  "event_type": "form_response",
  "form_response": {
    "form_id": "abc123",
    "definition": {
      "title": "Cadastro Lead",
      "fields": [
        { "id": "field_name", "title": "Nome", "type": "short_text" },
        { "id": "field_email", "title": "Email", "type": "email" }
      ]
    },
    "answers": [
      {
        "type": "text",
        "text": "João Silva",
        "field": { "id": "field_name", "type": "short_text" }
      },
      {
        "type": "email",
        "email": "joao@example.com",
        "field": { "id": "field_email", "type": "email" }
      }
    ]
  }
}

YayForms

Aceita `response` direto ou lista `answers` / `questionList` do evento response.completed.

Checklist

  1. Crie o canal com provider YayForms e copie a URL com token.
  2. No YayForms, configure o webhook de resposta concluída apontando para a URL.
  3. Envie um preenchimento de teste.
  4. Valide nome, e-mail e telefone em Captação.

Validação (URL · evento · body)

  • URL: Webhook de resposta concluída do YayForms → URL TrackSale com token.
  • Evento: response.completed
  • Histórico: processed + leadId; event response.completed no preview.
  • Captação: Lead Teste YayForms com e-mail e telefone.
{
  "event": "response.completed",
  "formName": "Form Teste YayForms",
  "response": {
    "name": "Teste YayForms",
    "email": "teste.yayforms@tracksale.io",
    "phone": "11988000003"
  }
}

Exemplo (response direto)

{
  "event": "response.completed",
  "formName": "Landing Produto",
  "response": {
    "name": "Ana Costa",
    "email": "ana@empresa.com",
    "phone": "11988887777"
  }
}

RD Station

Webhooks da RD com array `leads[]` ou payload `document` / conversion.

Checklist

  1. Crie o canal com provider RD Station e copie a URL com token.
  2. Na RD Station: configurações de integração / webhook de conversão → URL TrackSale.
  3. Dispare uma conversão de teste.
  4. Confira Captação (phone pode vir como personal_phone / mobile_phone).

Validação (URL · evento · body)

  • URL: Webhook de conversão da RD Station → URL TrackSale com token.
  • Evento: Conversão / lead criado (formato leads[] ou document).
  • Histórico: processed + leadId; preview com leads[].
  • Captação: Lead Teste RD Station com e-mail e telefone.
{
  "leads": [{
    "name": "Teste RD Station",
    "email": "teste.rd@tracksale.io",
    "personal_phone": "11988000005"
  }]
}

Exemplo leads[]

{
  "leads": [{
    "name": "Carlos",
    "email": "carlos@empresa.com",
    "personal_phone": "11977776666"
  }]
}

Hotmart

Webhooks de compra. Em PURCHASE_COMPLETE / PURCHASE_APPROVED a TrackSale cria o lead, preenche valor e move o deal para PAGO (WON).

Checklist

  1. Crie o canal com provider Hotmart e copie a URL com token.
  2. Na Hotmart: Ferramentas → Webhook → cadastre a URL para eventos de compra.
  3. Marque PURCHASE_COMPLETE (e/ou PURCHASE_APPROVED).
  4. Faça uma compra de teste (ou reenvie um evento) e confira Captação + Kanban (stage PAGO).

Observações

  • Se o Pixel + CAPI lifecycle estiver ativo, a compra pode gerar evento Purchase na Meta.
  • Outros eventos Hotmart podem só registrar lead sem mover para WON.

Validação (URL · evento · body)

  • URL: Hotmart → Ferramentas → Webhook → URL TrackSale com token.
  • Evento: PURCHASE_COMPLETE ou PURCHASE_APPROVED
  • Histórico: processed + leadId; event PURCHASE_COMPLETE no preview.
  • Captação: Lead Teste Hotmart; deal com valor R$ 97 e stage PAGO (WON).
{
  "event": "PURCHASE_COMPLETE",
  "data": {
    "buyer": {
      "name": "Teste Hotmart",
      "email": "teste.hotmart@tracksale.io",
      "checkout_phone": "11988000006"
    },
    "product": { "name": "Produto Teste" },
    "purchase": {
      "price": { "value": 97, "currency_value": "BRL" }
    }
  }
}

PURCHASE_COMPLETE

{
  "event": "PURCHASE_COMPLETE",
  "data": {
    "buyer": {
      "name": "Paula",
      "email": "paula@email.com",
      "checkout_phone": "11966665555"
    },
    "product": { "name": "Curso XYZ" },
    "purchase": {
      "price": { "value": 297.5, "currency_value": "BRL" }
    }
  }
}

WordPress (plugin TrackSale)

Integração via plugin oficial. O payload precisa seguir o formato TrackSale (`provider: wordpress` + `contact`).

Checklist

  1. Crie o canal/webhook com provider WordPress e copie a URL com token.
  2. No WordPress: Configurações → TrackSale → cole a URL (campo do plugin).
  3. Associe o formulário (Elementor Forms, etc.) suportado pelo plugin.
  4. Envie um teste pelo site e confira Captação + atribuição (ts_code / UTMs).

Observações

  • Formulário WP genérico sem o plugin não envia o formato esperado — use Genérico + Make nesse caso.

Validação (URL · evento · body)

  • URL: Cole a URL com token em Configurações → TrackSale no WordPress (plugin).
  • Evento: form.submitted (enviado pelo plugin ao enviar o formulário).
  • Histórico: processed + leadId; provider wordpress no preview.
  • Captação: Lead Teste WordPress; formName Form Teste WP; UTMs quando enviadas.
{
  "provider": "wordpress",
  "event": "form.submitted",
  "form": {
    "id": "elementor:form_test",
    "name": "Form Teste WP",
    "plugin": "elementor"
  },
  "contact": {
    "name": "Teste WordPress",
    "email": "teste.wp@tracksale.io",
    "phone": "+5511988000007"
  },
  "attribution": {
    "utm_source": "teste",
    "utm_campaign": "checklist-webhooks"
  }
}

Payload do plugin

{
  "provider": "wordpress",
  "event": "form.submitted",
  "form": {
    "id": "elementor:form_42",
    "name": "Contato — Landing",
    "plugin": "elementor"
  },
  "contact": {
    "name": "Maria Silva",
    "email": "maria@empresa.com",
    "phone": "+5511999999999"
  },
  "attribution": {
    "ts_code": "TS-ABC123",
    "utm_source": "meta",
    "utm_campaign": "maio-2026"
  }
}

Meta Leads (via webhook de formulário)

Recebe notificação leadgen ou field_data. Se vier só leadgen_id, a TrackSale busca os dados na Graph API (Meta conectada com leads_retrieval).

Checklist

  1. Preferência: Marketing → Meta Ads → Conceder permissões de Leads → Ativar leads nas páginas (webhook nativo da plataforma).
  2. Alternativa: canal Formulário provider Meta Leads + Make/Zapier encaminhando o payload, ou field_data já no body.
  3. Garanta Meta conectada na org se o payload trouxer só leadgen_id.
  4. Teste um Lead Ad e confira Captação (custom fields do formulário).

Observações

  • Webhook nativo da plataforma: POST https://www.tracksale.io/hooks/meta/leads (configurado no app TrackSale — o cliente não muda verify token).
  • Sem Meta OAuth + leads_retrieval, notificação só com leadgen_id gera lead incompleto.

Validação (URL · evento · body)

  • URL: Teste de formulário: POST na URL do canal com token. Produção Lead Ads: preferir Ativar leads nas páginas (/hooks/meta/leads).
  • Evento: leadgen (Page webhook) ou POST com field_data no body.
  • Histórico: No canal formulário: processed + leadId. (Nativo Meta pode não listar neste Histórico — veja Captação.)
  • Captação: Lead Teste Meta Leads com e-mail/telefone. Com só leadgen_id real, exige Meta conectada para enriquecer.
{
  "object": "page",
  "entry": [{
    "changes": [{
      "field": "leadgen",
      "value": {
        "leadgen_id": "000000000",
        "form_id": "form_teste_meta",
        "page_id": "111222333"
      }
    }]
  }],
  "field_data": [
    { "name": "full_name", "values": ["Teste Meta Leads"] },
    { "name": "email", "values": ["teste.meta@tracksale.io"] },
    { "name": "phone_number", "values": ["11988000008"] }
  ]
}

Notificação leadgen (enriquecida via Graph)

{
  "object": "page",
  "entry": [{
    "id": "111222333",
    "changes": [{
      "field": "leadgen",
      "value": {
        "leadgen_id": "123456789",
        "form_id": "987654321",
        "page_id": "111222333"
      }
    }]
  }]
}

Problemas comuns

  • 401 / Assinatura ou token inválido

    Use a URL com ?token= copiada ao criar o canal, ou regenere o secret e atualize no provedor.

  • Evento no Histórico sem lead / dados vazios

    Provider errado ou payload diferente do esperado. Confira o exemplo do provider e o payloadPreview no histórico.

  • Meta Leads sem nome/e-mail

    Conecte Meta Ads com permissão de Leads, ou envie field_data no body (Make).

  • Google Ads não chega

    Configure um intermediário (Make/Zapier) — o Google não posta no formato TrackSale sozinho na maioria dos setups.

  • Hotmart não vai para PAGO

    Confirme o evento PURCHASE_COMPLETE ou PURCHASE_APPROVED e o bloco data.buyer / purchase.price.

Dúvidas: suporte@tracksale.io.