Vous pouvez enrichir des leads dans n8n en ajoutant un nœud HTTP Request qui appelle l'API de recherche Scavio avec le nom de l'entreprise, puis en analysant les résultats pour extraire le site web, la description et le nombre d'employés dans votre fiche lead.
Prérequis
- n8n installé (auto-hébergé ou cloud)
- Clé API Scavio
- Liste d'entrée des noms d'entreprise
Parcours
Étape 1: Créez le nœud HTTP Request pour la recherche
Ajoutez un nœud HTTP Request dans n8n avec la méthode POST et le point de terminaison de recherche 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
}Étape 2: Analysez les résultats de recherche avec un nœud Code
Ajoutez un nœud Code après le HTTP Request pour extraire les champs structurés des résultats 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()
};Étape 3: Extrayez l'entreprise des résultats organiques
Obtenez le financement, le nombre d'employés ou le secteur d'activité en analysant le panneau de connaissances s'il est présent.
// 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()
};Étape 4: Vérifiez avec l'équivalent Python
Utilisez ce script Python pour tester votre logique d'enrichissement avant de configurer 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"))Exemple 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))Exemple 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));
}Sortie attendue
{
"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"
}