HUBSPOT_CONTACT_SEARCH - Buscar Contatos por Filtros
O que é este Node?
O HUBSPOT_CONTACT_SEARCH é o node responsável por buscar contatos usando filtros avançados no HubSpot CRM, permitindo encontrar contatos por email, nome, empresa, propriedades customizadas e mais.
Por que este Node existe?
Encontrar contatos específicos sem saber o ID é essencial. O HUBSPOT_CONTACT_SEARCH existe para:
- Busca por Email: Encontrar contato pelo email antes de criar/atualizar (evita duplicatas)
- Filtros Complexos: Buscar contatos que atendem múltiplos critérios
- Segmentação: Encontrar grupos de contatos com características específicas
- Verificação de Existência: Checar se contato já existe antes de criar novo
Como funciona internamente?
Quando o HUBSPOT_CONTACT_SEARCH é executado, o sistema:
- Recebe os filtros: Critérios de busca (email, nome, properties, etc.)
- Processa variáveis: Substitui variáveis do contexto
- Monta query: Cria filterGroups compatível com API HubSpot
- Autentica na API: Usa Bearer Token
- Faz requisição POST: Busca em
/crm/v3/objects/contacts/search - Retorna resultados: Lista de contatos que atendem os filtros
- Aplica limite: Retorna até limite configurado (padrão: 100)
Código interno (hubspot.executor.ts:90-98):
case 'search': {
const filters = JSON.parse(this.replaceVariables(JSON.stringify(data.filters), context.variables));
const response = await axios.post(
`${baseUrl}/search`,
{ filterGroups: filters, limit: data.limit || 100 },
{ headers: { 'Authorization': `Bearer ${apiKey}`, 'Content-Type': 'application/json' } }
);
return response.data;
}
Quando você DEVE usar este Node?
Use HUBSPOT_CONTACT_SEARCH quando precisar encontrar contatos por critérios:
Casos de uso
- Buscar por email: Verificar se email já existe antes de criar contato
- Encontrar por empresa: Listar todos contatos de uma empresa
- Filtrar por status: Buscar leads em estágio específico
- Segmentação: Encontrar contatos que atendem múltiplos critérios
- Deduplicação: Identificar duplicatas antes de criar
Quando NÃO usar HUBSPOT_CONTACT_SEARCH
- Já tem o ID: Use HUBSPOT_CONTACT_GET diretamente
- Quer todos os contatos: Use HUBSPOT_CONTACT_LIST (mais simples)
- Busca muito ampla: Liste primeiro e filtre depois
Parâmetros
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| resource | string | Sim | Deve ser "contacts" |
| operation | string | Sim | Deve ser "search" |
| config.apiKey | string | Sim | API Key do HubSpot |
| filters | array | Sim | Array de filterGroups (ver formato abaixo) |
| limit | number | Não | Máximo de resultados (padrão: 100) |
| responseVariable | string | Não | Variável para resultado |
Formato de Filters
{
"filters": [
{
"filters": [
{
"propertyName": "email",
"operator": "EQ",
"value": "joao@empresa.com"
}
]
}
]
}
Operadores disponíveis:
- EQ (equals): Igual a
- NEQ (not equal): Diferente de
- LT (less than): Menor que
- GT (greater than): Maior que
- CONTAINS: Contém
- NOT_CONTAINS: Não contém
Exemplo 1: Buscar Contato por Email
Objetivo: Verificar se email já existe antes de criar contato
JSON para Importar
{
"name": "HubSpot - Buscar por Email",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "email_1",
"type": "email",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Coletar Email",
"parameters": {
"message": "Digite seu email:",
"variableName": "user_email"
}
}
},
{
"id": "hubspot_1",
"type": "hubspot",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Buscar Email",
"parameters": {
"resource": "contacts",
"operation": "search",
"config": {
"apiKey": "{{hubspot_api_key}}"
},
"filters": [
{
"filters": [
{
"propertyName": "email",
"operator": "EQ",
"value": "{{user_email}}"
}
]
}
],
"limit": 1,
"responseVariable": "search_result"
}
}
},
{
"id": "condition_1",
"type": "condition",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Verificar se Existe",
"parameters": {
"variable": "{{search_result.total}}",
"operator": "greater_than",
"value": "0"
}
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 900, "y": 50 },
"data": {
"label": "Já Existe",
"parameters": {
"message": "Encontramos seu cadastro! Bem-vindo de volta, {{search_result.results.0.properties.firstname}}!"
}
}
},
{
"id": "message_2",
"type": "message",
"position": { "x": 900, "y": 150 },
"data": {
"label": "Novo",
"parameters": {
"message": "Email não encontrado. Vamos criar seu cadastro!"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 1100, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "email_1" },
{ "source": "email_1", "target": "hubspot_1" },
{ "source": "hubspot_1", "target": "condition_1" },
{ "source": "condition_1", "target": "message_1", "label": "true" },
{ "source": "condition_1", "target": "message_2", "label": "false" },
{ "source": "message_1", "target": "end_1" },
{ "source": "message_2", "target": "end_1" }
]
}
Exemplo 2: Buscar Contatos de Uma Empresa
Objetivo: Listar todos os contatos de uma empresa específica
JSON para Importar
{
"name": "HubSpot - Buscar por Empresa",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "input_1",
"type": "input",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Nome Empresa",
"parameters": {
"message": "Digite o nome da empresa:",
"variableName": "company_name"
}
}
},
{
"id": "hubspot_1",
"type": "hubspot",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Buscar Contatos",
"parameters": {
"resource": "contacts",
"operation": "search",
"config": {
"apiKey": "{{hubspot_api_key}}"
},
"filters": [
{
"filters": [
{
"propertyName": "company",
"operator": "EQ",
"value": "{{company_name}}"
}
]
}
],
"limit": 50,
"responseVariable": "company_contacts"
}
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Resultado",
"parameters": {
"message": "Encontrados {{company_contacts.total}} contatos da empresa {{company_name}}."
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 900, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "input_1" },
{ "source": "input_1", "target": "hubspot_1" },
{ "source": "hubspot_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Resposta do Node
{
"total": 2,
"results": [
{
"id": "12345678901",
"properties": {
"email": "joao@empresa.com",
"firstname": "João",
"lastname": "Silva",
"company": "TechCorp"
}
},
{
"id": "12345678902",
"properties": {
"email": "maria@empresa.com",
"firstname": "Maria",
"lastname": "Santos",
"company": "TechCorp"
}
}
]
}
Boas Práticas
✅ SIM:
- Use search para verificar existência antes de criar
- Limite resultados apropriadamente (evite carregar 1000+ contatos)
- Verifique total antes de acessar results[0]
- Use filtros específicos para melhor performance
- Combine múltiplos filtros para busca precisa
❌ NÃO: - Buscar sem filtros (use LIST ao invés) - Assumir que results sempre existe - Fazer searches repetitivas em loop - Usar como listagem geral
Dicas
💡 Dica 1: Use search_result.total > 0 em CONDITION para verificar se encontrou resultados antes de acessar.
💡 Dica 2: Acesse primeiro resultado com {{search_result.results.0.properties.fieldname}}.
💡 Dica 3: Combine filtros usando múltiplos objetos no array filters para busca AND.
Próximos Nodes
→ HUBSPOT_CONTACT_GET - Buscar contato por ID depois de encontrar → HUBSPOT_CONTACT_CREATE - Criar se não encontrar → HUBSPOT_CONTACT_LIST - Listar todos os contatos