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
- Query token (mais simples). POST na URL com ?token=whsec_… (a URL completa com token é a que você copia ao criar o canal).
- 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 vezesContent-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.
- Crie um canal de formulário com o provider a testar e copie a URL com token.
- Abra Marketing → Configurações → Webhooks → aba Histórico (deixe a tela aberta).
- Dispare o body de teste (curl, Make ou o próprio provedor) para essa URL.
- No Histórico: status processed, sem erro de token, leadId preenchido.
- 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.
- 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).
- 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.
- 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.
- 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.
- 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).
- 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
- Em Canais → Criar canal → Formulário (ou Marketing → Webhooks), escolha Webhook genérico.
- Copie a URL com token.
- No Make/Zapier: módulo HTTP → Make a request → Method POST → cole a URL.
- Body raw JSON com pelo menos name (ou nome), email e/ou phone.
- 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
- Crie o canal com provider Typeform e copie a URL com token.
- No Typeform: Connect → Webhooks → Add webhook → cole a URL.
- Ative o webhook e envie uma resposta de teste no formulário.
- 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
- Crie o canal com provider YayForms e copie a URL com token.
- No YayForms, configure o webhook de resposta concluída apontando para a URL.
- Envie um preenchimento de teste.
- 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"
}
}Google Ads (lead form)
Parser do JSON de Lead Form Extension (`user_column_data`). O Google raramente posta sozinho — use Make/Zapier ou a integração de webhook do Google.
Checklist
- Crie o canal com provider Google Ads e copie a URL com token.
- No Make/Zapier: trigger Google Ads / Lead Form → HTTP POST para a URL TrackSale.
- Mapeie o body bruto do lead (ou monte user_column_data como no exemplo).
- Teste um lead do formulário da campanha.
Observações
- Colunas FULL_NAME, EMAIL, PHONE_NUMBER (e equivalentes) são mapeadas automaticamente.
Validação (URL · evento · body)
- URL: Make/Zapier: HTTP POST na URL com token (Google → TrackSale).
- Evento: Novo lead do Lead Form Extension (trigger Google Ads / webhook).
- Histórico: processed + leadId; preview com user_column_data.
- Captação: Lead Teste Google Ads com e-mail e telefone.
{
"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" }
]
}Payload Google Lead Form
{
"lead_id": "abc-123",
"campaign_id": "456789",
"form_id": "lead_form_01",
"user_column_data": [
{ "column_name": "FULL_NAME", "string_value": "João" },
{ "column_name": "EMAIL", "string_value": "joao@empresa.com" },
{ "column_name": "PHONE_NUMBER", "string_value": "+5511999999999" }
]
}RD Station
Webhooks da RD com array `leads[]` ou payload `document` / conversion.
Checklist
- Crie o canal com provider RD Station e copie a URL com token.
- Na RD Station: configurações de integração / webhook de conversão → URL TrackSale.
- Dispare uma conversão de teste.
- 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
- Crie o canal com provider Hotmart e copie a URL com token.
- Na Hotmart: Ferramentas → Webhook → cadastre a URL para eventos de compra.
- Marque PURCHASE_COMPLETE (e/ou PURCHASE_APPROVED).
- 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
- Crie o canal/webhook com provider WordPress e copie a URL com token.
- No WordPress: Configurações → TrackSale → cole a URL (campo do plugin).
- Associe o formulário (Elementor Forms, etc.) suportado pelo plugin.
- 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
- Preferência: Marketing → Meta Ads → Conceder permissões de Leads → Ativar leads nas páginas (webhook nativo da plataforma).
- Alternativa: canal Formulário provider Meta Leads + Make/Zapier encaminhando o payload, ou field_data já no body.
- Garanta Meta conectada na org se o payload trouxer só leadgen_id.
- 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.
