Puede enriquecer los clientes potenciales en n8n agregando un nodo de solicitud HTTP que llame a la API de búsqueda de Scavio con el nombre de la empresa y luego analice los resultados para extraer el sitio web, la descripción y el recuento de empleados en su registro de clientes potenciales.
Requisitos previos
- n8n instalado (autohospedado o en la nube)
- Clave API de Scavio
- Lista de entrada de nombres de empresas
Guia paso a paso
Paso 1: Cree el nodo de solicitud HTTP para búsqueda
Agregue un nodo de solicitud HTTP en n8n con el método POST y el punto final de búsqueda Scavio.
// n8n HTTP Request Node Configuration
// Method: POST
// URL: https://api.scavio.dev/api/v1/search
// Authentication: Header Auth
// Name: x-api-key
// Value: {{ $env.SCAVIO_API_KEY }}
// Body (JSON):
{
"query": "{{ $json.company_name }} company website about",
"num_results": 5
}Paso 2: Analizar los resultados de la búsqueda con un nodo Código
Agregue un nodo Código después de la solicitud HTTP para extraer campos estructurados de los resultados SERP.
// n8n Code Node (JavaScript)
const results = $input.item.json.organic_results || [];
const companyName = $('Input').item.json.company_name;
// Find the most relevant result (usually the first)
const main = results[0] || {};
// Try to find official website (avoid Wikipedia, LinkedIn)
const officialSite = results.find(r =>
!r.link.includes('wikipedia') &&
!r.link.includes('linkedin') &&
!r.link.includes('crunchbase')
);
return {
company_name: companyName,
website: officialSite?.link || null,
description: main.snippet || null,
search_title: main.title || null,
enriched_at: new Date().toISOString()
};Paso 3: Extraer la empresa de los resultados orgánicos
Obtenga financiación, recuento de empleados o industria analizando el panel de conocimientos, si está presente.
// Extended Code node to include knowledge panel data
const data = $input.item.json;
const kp = data.knowledge_panel || {};
const results = data.organic_results || [];
const officialSite = results.find(r =>
!r.link.includes('wikipedia') &&
!r.link.includes('linkedin') &&
!r.link.includes('crunchbase')
);
return {
company_name: $('Input').item.json.company_name,
website: officialSite?.link || kp.website || null,
description: kp.description || results[0]?.snippet || null,
industry: kp.industry || null,
founded: kp.founded || null,
headquarters: kp.headquarters || null,
enriched_at: new Date().toISOString()
};Paso 4: Verificar con el equivalente de Python
Utilice este script de Python para probar su lógica de enriquecimiento antes de conectar n8n.
import requests
API_KEY = "your-scavio-api-key"
def enrich_company(company_name: str) -> dict:
r = requests.post(
"https://api.scavio.dev/api/v1/search",
json={"query": f"{company_name} company website about", "num_results": 5},
headers={"x-api-key": API_KEY},
timeout=15
)
r.raise_for_status()
data = r.json()
results = data.get("organic_results", [])
kp = data.get("knowledge_panel", {})
official = next(
(res for res in results
if not any(x in res["link"] for x in ["wikipedia", "linkedin", "crunchbase"])),
results[0] if results else {}
)
return {
"company": company_name,
"website": official.get("link") or kp.get("website"),
"description": kp.get("description") or official.get("snippet"),
"industry": kp.get("industry"),
"founded": kp.get("founded")
}
print(enrich_company("Notion"))Ejemplo en Python
import requests
from typing import Optional
API_KEY = "your-scavio-api-key"
EXCLUDE_DOMAINS = ["wikipedia.org", "linkedin.com", "crunchbase.com", "facebook.com", "twitter.com"]
def enrich_company(company_name: str) -> dict:
r = requests.post(
"https://api.scavio.dev/api/v1/search",
json={"query": f"{company_name} company official website", "num_results": 10},
headers={"x-api-key": API_KEY},
timeout=15
)
r.raise_for_status()
data = r.json()
results = data.get("organic_results", [])
kp = data.get("knowledge_panel", {})
official = next(
(res for res in results if not any(exc in res.get("link", "") for exc in EXCLUDE_DOMAINS)),
results[0] if results else {}
)
return {
"company": company_name,
"website": official.get("link") or kp.get("website"),
"description": kp.get("description") or official.get("snippet"),
"industry": kp.get("industry"),
"founded": kp.get("founded"),
"headquarters": kp.get("headquarters"),
"source": official.get("link")
}
def enrich_batch(companies: list[str]) -> list[dict]:
results = []
for company in companies:
try:
record = enrich_company(company)
results.append(record)
print(f"Enriched: {company} -> {record.get('website')}")
except Exception as e:
print(f"Failed: {company} -> {e}")
results.append({"company": company, "error": str(e)})
return results
if __name__ == "__main__":
companies = ["Notion", "Linear", "Retool", "Vercel", "PlanetScale"]
enriched = enrich_batch(companies)
import json
print(json.dumps(enriched, indent=2))Ejemplo en JavaScript
const API_KEY = 'your-scavio-api-key';
const EXCLUDE = ['wikipedia.org', 'linkedin.com', 'crunchbase.com'];
async function enrichCompany(companyName) {
const res = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST',
headers: { 'Content-Type': 'application/json', 'x-api-key': API_KEY },
body: JSON.stringify({ query: `${companyName} company official website`, num_results: 10 })
});
const data = await res.json();
const results = data.organic_results ?? [];
const kp = data.knowledge_panel ?? {};
const official = results.find(r => !EXCLUDE.some(e => r.link?.includes(e))) ?? results[0] ?? {};
return {
company: companyName,
website: official.link ?? kp.website ?? null,
description: kp.description ?? official.snippet ?? null,
industry: kp.industry ?? null,
founded: kp.founded ?? null
};
}
const companies = ['Notion', 'Linear', 'Retool'];
for (const c of companies) {
const record = await enrichCompany(c);
console.log(JSON.stringify(record, null, 2));
}Salida esperada
{
"company": "Notion",
"website": "https://www.notion.so",
"description": "Notion is a productivity and note-taking web application. It offers organizational tools including task management, project tracking, to-do lists, bookmarking, and more.",
"industry": "Software",
"founded": "2013",
"headquarters": "San Francisco, CA"
}