NOTION_SEARCH - Buscar no Notion
O que é este Node?
O NOTION_SEARCH é o node responsável por buscar páginas e databases no Notion usando texto livre, fazendo busca global no workspace inteiro da integração.
Por que este Node existe?
Buscar por texto livre é essencial quando você não sabe exatamente onde está a informação. O NOTION_SEARCH existe para:
- Busca global: Encontrar páginas em qualquer database ou local do workspace
- Busca por título: Localizar páginas pelo nome sem saber o ID
- Discovery: Descobrir onde determinada informação está armazenada
- Fuzzy search: Buscar por palavras-chave sem filtros estruturados
Como funciona internamente?
Quando o NOTION_SEARCH é executado, o sistema:
- Autentica na Notion API: Usa o apiKey fornecido com header Notion-Version 2022-06-28
- Monta query de busca: Prepara texto de busca e filtros (opcional)
- Envia POST: Faz requisição para
https://api.notion.com/v1/search - Processa resultados: Recebe array de páginas/databases que contêm o texto
- Se erro: Retorna exceção (permissão negada, etc.)
- Se sucesso: Retorna results com páginas e databases encontrados
Código interno (baseado na Notion API v1):
case 'search':
const searchResponse = await firstValueFrom(
this.httpService.post(`${notionApiUrl}/search`,
{
query: data.query || '',
filter: data.filter || undefined,
sort: data.sort || undefined,
page_size: data.pageSize || 100,
},
{ headers }
)
);
return {
success: true,
results: searchResponse.data.results,
hasMore: searchResponse.data.has_more,
};
Quando você DEVE usar este Node?
Use NOTION_SEARCH sempre que precisar de buscar por texto livre no Notion:
Casos de uso
- Buscar por título: "Encontrar página 'Documentação API'"
- Buscar em todo workspace: "Onde está a informação sobre X?"
- Localizar database: "Qual database contém 'Clientes'?"
- Fuzzy search: "Buscar páginas sobre 'integração'"
- Discovery: "Listar todas as páginas editadas recentemente"
- Find by keyword: "Páginas que mencionam 'pagamento'"
Quando NÃO usar NOTION_SEARCH
- Buscar com filtros estruturados: Use NOTION_QUERY_DATABASE ao invés
- Você já tem o ID: Use NOTION_GET_PAGE ao invés
- Buscar em database específico: Use NOTION_QUERY_DATABASE com filtros ao invés
Parâmetros Detalhados
apiKey (string, obrigatório)
O que é: Token de integração do Notion (obtido em notion.so/my-integrations).
Como obter: 1. Acesse https://www.notion.so/my-integrations 2. Clique em "New integration" 3. Dê um nome e selecione workspace 4. Copie o "Internal Integration Token" 5. IMPORTANTE: Compartilhe páginas/databases com a integração!
Flow completo para testar:
{
"name": "Teste Notion Search - API Key",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "variable_1",
"type": "variable",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Config",
"parameters": {
"assignments": [
{
"variable": "notion_api_key",
"value": "secret_SEU_TOKEN_AQUI"
}
]
}
}
},
{
"id": "notion_1",
"type": "notion",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Buscar Tudo",
"parameters": {
"operation": "search",
"apiKey": "{{notion_api_key}}",
"query": ""
}
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Resultado",
"parameters": {
"message": "Encontradas {{notion_1.results.length}} páginas!"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 900, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "variable_1" },
{ "source": "variable_1", "target": "notion_1" },
{ "source": "notion_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Teste: Lista todas as páginas/databases compartilhados com a integração.
query (string, opcional)
O que é: Texto a buscar nos títulos das páginas e databases.
Padrão: "" (retorna todas as páginas/databases)
Comportamento: - Busca no título de páginas e databases - Case-insensitive (não diferencia maiúsculas/minúsculas) - Busca parcial (não precisa ser palavra completa)
Flow completo para testar:
{
"name": "Teste Notion - Search Query",
"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": "Termo de Busca",
"parameters": {
"message": "O que deseja buscar no Notion?",
"variable": "search_term"
}
}
},
{
"id": "notion_1",
"type": "notion",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Buscar",
"parameters": {
"operation": "search",
"apiKey": "secret_SEU_TOKEN",
"query": "{{search_term}}"
}
}
},
{
"id": "condition_1",
"type": "condition",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Encontrou?",
"parameters": {
"condition": "{{notion_1.results.length}} > 0"
}
}
},
{
"id": "message_2",
"type": "message",
"position": { "x": 900, "y": 50 },
"data": {
"label": "Resultado",
"parameters": {
"message": "✅ Encontradas {{notion_1.results.length}} páginas com '{{search_term}}'!"
}
}
},
{
"id": "message_3",
"type": "message",
"position": { "x": 900, "y": 150 },
"data": {
"label": "Nada Encontrado",
"parameters": {
"message": "❌ Nenhuma página encontrada com '{{search_term}}'"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 1100, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "input_1" },
{ "source": "input_1", "target": "notion_1" },
{ "source": "notion_1", "target": "condition_1" },
{ "source": "condition_1", "target": "message_2", "label": "true" },
{ "source": "condition_1", "target": "message_3", "label": "false" },
{ "source": "message_2", "target": "end_1" },
{ "source": "message_3", "target": "end_1" }
]
}
Teste: Digite "API" e veja todas as páginas com "API" no título.
filter (object, opcional)
O que é: Filtro para restringir tipo de resultado (page ou database).
Padrão: undefined (retorna ambos)
Filtro por tipo:
{
"value": "page",
"property": "object"
}
Ou:
{
"value": "database",
"property": "object"
}
Flow completo para testar:
{
"name": "Teste Notion - Search Filter",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "notion_1",
"type": "notion",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Buscar Apenas Databases",
"parameters": {
"operation": "search",
"apiKey": "secret_SEU_TOKEN",
"query": "Clientes",
"filter": {
"value": "database",
"property": "object"
}
}
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Resultado",
"parameters": {
"message": "📊 Encontrados {{notion_1.results.length}} databases com 'Clientes'"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 700, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "notion_1" },
{ "source": "notion_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Teste: Retorna apenas databases, ignora páginas.
sort (object, opcional)
O que é: Ordenação dos resultados por última edição.
Padrão: undefined (ordem de relevância do Notion)
Ordenar por última edição:
{
"direction": "ascending",
"timestamp": "last_edited_time"
}
Ou descendente:
{
"direction": "descending",
"timestamp": "last_edited_time"
}
Flow completo para testar:
{
"name": "Teste Notion - Search Sort",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "notion_1",
"type": "notion",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Páginas Recentes",
"parameters": {
"operation": "search",
"apiKey": "secret_SEU_TOKEN",
"query": "",
"sort": {
"direction": "descending",
"timestamp": "last_edited_time"
},
"pageSize": 5
}
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Top 5",
"parameters": {
"message": "📝 5 páginas editadas mais recentemente encontradas!"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 700, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "notion_1" },
{ "source": "notion_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Teste: Retorna as 5 páginas editadas mais recentemente.
pageSize (number, opcional)
O que é: Número máximo de resultados a retornar.
Padrão: 100 (máximo permitido pela Notion API)
Mínimo: 1 Máximo: 100
Flow completo para testar:
{
"name": "Teste Notion - Search Page Size",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "notion_1",
"type": "notion",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Buscar Top 3",
"parameters": {
"operation": "search",
"apiKey": "secret_SEU_TOKEN",
"query": "Tarefa",
"pageSize": 3
}
}
},
{
"id": "message_1",
"type": "message",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Resultado",
"parameters": {
"message": "Top 3 páginas sobre 'Tarefa':\n1. {{notion_1.results[0].properties.title.title[0].text.content}}\n2. {{notion_1.results[1].properties.title.title[0].text.content}}\n3. {{notion_1.results[2].properties.title.title[0].text.content}}"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 700, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "notion_1" },
{ "source": "notion_1", "target": "message_1" },
{ "source": "message_1", "target": "end_1" }
]
}
Teste: Retorna apenas as 3 primeiras páginas encontradas.
Parâmetros
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| operation | string | Sim | Deve ser "search" |
| apiKey | string | Sim | Token de integração do Notion |
| query | string | Não | Texto a buscar (padrão: "", retorna tudo) |
| filter | object | Não | Filtrar por tipo: page ou database (padrão: ambos) |
| sort | object | Não | Ordenar por last_edited_time (padrão: relevância) |
| pageSize | number | Não | Máximo de resultados (padrão: 100, máx: 100) |
Exemplo 1: Buscar Documentação
Objetivo: Encontrar página de documentação por título
JSON para Importar
{
"name": "Buscar Documentação no Notion",
"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": "Assunto",
"parameters": {
"message": "Sobre o que você precisa de ajuda?",
"variable": "assunto"
}
}
},
{
"id": "notion_1",
"type": "notion",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Buscar Docs",
"parameters": {
"operation": "search",
"apiKey": "secret_SEU_TOKEN",
"query": "{{assunto}}",
"filter": {
"value": "page",
"property": "object"
},
"pageSize": 5
}
}
},
{
"id": "condition_1",
"type": "condition",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Encontrou?",
"parameters": {
"condition": "{{notion_1.results.length}} > 0"
}
}
},
{
"id": "message_2",
"type": "message",
"position": { "x": 900, "y": 50 },
"data": {
"label": "Resultado",
"parameters": {
"message": "📚 Encontrei {{notion_1.results.length}} páginas sobre '{{assunto}}'.\n\nMais relevante: {{notion_1.results[0].url}}"
}
}
},
{
"id": "message_3",
"type": "message",
"position": { "x": 900, "y": 150 },
"data": {
"label": "Nada Encontrado",
"parameters": {
"message": "❌ Não encontrei documentação sobre '{{assunto}}'. Tente outro termo."
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 1100, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "input_1" },
{ "source": "input_1", "target": "notion_1" },
{ "source": "notion_1", "target": "condition_1" },
{ "source": "condition_1", "target": "message_2", "label": "true" },
{ "source": "condition_1", "target": "message_3", "label": "false" },
{ "source": "message_2", "target": "end_1" },
{ "source": "message_3", "target": "end_1" }
]
}
Saída esperada:
Sistema: Sobre o que você precisa de ajuda?
Usuário: API integração
Sistema: 📚 Encontrei 3 páginas sobre 'API integração'.
Mais relevante: https://www.notion.so/...
Exemplo 2: Listar Páginas Recentes
Objetivo: Mostrar as 5 páginas editadas mais recentemente
JSON para Importar
{
"name": "Páginas Recentes no Notion",
"nodes": [
{
"id": "start_1",
"type": "start",
"position": { "x": 100, "y": 100 },
"data": { "label": "Início" }
},
{
"id": "message_1",
"type": "message",
"position": { "x": 300, "y": 100 },
"data": {
"label": "Intro",
"parameters": {
"message": "Buscando páginas editadas recentemente..."
}
}
},
{
"id": "notion_1",
"type": "notion",
"position": { "x": 500, "y": 100 },
"data": {
"label": "Buscar Recentes",
"parameters": {
"operation": "search",
"apiKey": "secret_SEU_TOKEN",
"query": "",
"filter": {
"value": "page",
"property": "object"
},
"sort": {
"direction": "descending",
"timestamp": "last_edited_time"
},
"pageSize": 5
}
}
},
{
"id": "message_2",
"type": "message",
"position": { "x": 700, "y": 100 },
"data": {
"label": "Listar",
"parameters": {
"message": "📝 PÁGINAS RECENTES:\n\n1. {{notion_1.results[0].properties.title.title[0].text.content}}\n2. {{notion_1.results[1].properties.title.title[0].text.content}}\n3. {{notion_1.results[2].properties.title.title[0].text.content}}\n4. {{notion_1.results[3].properties.title.title[0].text.content}}\n5. {{notion_1.results[4].properties.title.title[0].text.content}}"
}
}
},
{
"id": "end_1",
"type": "end",
"position": { "x": 900, "y": 100 },
"data": { "label": "Fim" }
}
],
"edges": [
{ "source": "start_1", "target": "message_1" },
{ "source": "message_1", "target": "notion_1" },
{ "source": "notion_1", "target": "message_2" },
{ "source": "message_2", "target": "end_1" }
]
}
Saída esperada:
Sistema: Buscando páginas editadas recentemente...
Sistema: 📝 PÁGINAS RECENTES:
1. Reunião 15/01/2025
2. Projeto API
3. Documentação
4. Tasks Semana 03
5. Notas Cliente X
Resposta do Node
{
"success": true,
"results": [
{
"object": "page",
"id": "a8aec43c-6f00-4f57-89c9-e2e4aa3e8d9f",
"created_time": "2025-01-15T10:00:00.000Z",
"last_edited_time": "2025-01-15T10:30:00.000Z",
"properties": {
"title": {
"title": [
{
"text": {
"content": "Documentação API"
}
}
]
}
},
"url": "https://www.notion.so/..."
}
],
"hasMore": false
}
Boas Práticas
SIM:
- Use query vazio para listar todas as páginas compartilhadas
- Combine com sort para listar páginas recentes
- Use filter para buscar apenas pages ou apenas databases
- Valide se results.length > 0 antes de acessar resultados
- Limite pageSize para melhor performance
NÃO:
- Não use search para buscar em database específico (use QUERY ao invés)
- Não acesse índices de array sem validar se existem
- Não espere busca em conteúdo (só busca em títulos)
- Não use quando você já tem pageId (use GET ao invés)
Dicas
Busca global: query vazio retorna tudo compartilhado com a integração Títulos apenas: Search busca nos títulos, não no conteúdo das páginas Case insensitive: "API" encontra "api", "Api", "API" Páginas recentes: Use sort com last_edited_time descending Combine com GET: Search para encontrar → GET para detalhes completos Permissões: Só encontra páginas/databases compartilhados com a integração
Próximo Node
→ NOTION_QUERY_DATABASE - Buscar com filtros estruturados → NOTION_GET_PAGE - Obter página específica por ID → NOTION_CREATE_DATABASE - Criar novo database