Créez un workflow n8n qui enrichit les fiches entreprises avec des données de recherche en direct en se déclenchant sur les nouvelles entrées CRM, en interrogeant l'API Scavio pour chaque nom d'entreprise, en extrayant des données structurées des résultats de recherche et en réécrivant les champs enrichis dans votre CRM. La recherche manuelle sur les entreprises est un goulot d'étranglement dans les processus de vente. Un flux d'enrichissement automatisé s'exécute en quelques secondes par entreprise et fait apparaître des indicateurs de revenus, des actualités récentes, des signaux de stack technique et des activités de recrutement sans aucun effort humain.
Prérequis
- Instance n8n en cours d'exécution (auto-hébergée ou n8n Cloud)
- Une clé API Scavio depuis scavio.dev
- Un CRM ou un tableur avec des noms d'entreprises
- Connaissances de base des workflows n8n
Parcours
Étape 1: Créez le node de requête HTTP n8n
Configurez l'appel API Scavio en tant que node HTTP Request dans n8n.
import os, requests
API_KEY = os.environ['SCAVIO_API_KEY']
# This mirrors the n8n HTTP Request node config:
# Method: POST
# URL: https://api.scavio.dev/api/v1/search
# Headers: x-api-key = {{$env.SCAVIO_API_KEY}}
# Body (JSON): {"platform": "google", "query": "{{$json.company_name}} company overview"}
def search_company(company_name: str) -> dict:
resp = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY},
json={'platform': 'google', 'query': f'{company_name} company overview'}, timeout=15)
return resp.json()
data = search_company('Stripe')
print(f"Results: {len(data.get('organic_results', []))}")Étape 2: Extrayez les signaux de l'entreprise
Analysez les résultats de recherche pour les indicateurs de revenus, effectif, financement et stack technique.
import re
def extract_signals(company: str, data: dict) -> dict:
results = data.get('organic_results', [])
signals = {
'company': company,
'snippets': [],
'news': [],
'has_careers_page': False,
'linkedin_found': False,
}
for r in results[:8]:
title = r.get('title', '')
snippet = r.get('snippet', '')
link = r.get('link', '')
signals['snippets'].append(snippet[:150])
if 'careers' in link.lower() or 'jobs' in link.lower():
signals['has_careers_page'] = True
if 'linkedin.com/company' in link.lower():
signals['linkedin_found'] = True
if any(word in title.lower() for word in ['raises', 'funding', 'series', 'valuation']):
signals['news'].append(title)
return signals
signals = extract_signals('Stripe', data)
print(f"Careers page: {signals['has_careers_page']}")
print(f"LinkedIn: {signals['linkedin_found']}")
print(f"News: {signals['news'][:2]}")Étape 3: Enrichissez avec la recherche d'actualités
Effectuez une deuxième recherche axée sur les actualités récentes pour capturer les levées de fonds et les annonces.
def get_recent_news(company: str) -> list:
resp = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY},
json={'platform': 'google', 'query': f'{company} news 2026'}, timeout=15)
results = resp.json().get('organic_results', [])
news = []
for r in results[:5]:
news.append({
'title': r.get('title', ''),
'source': r.get('source', ''),
'snippet': r.get('snippet', '')[:120],
'url': r.get('link', ''),
})
return news
news = get_recent_news('Stripe')
for n in news:
print(f"{n['title'][:60]}")Étape 4: Construisez l'enregistrement d'enrichissement
Combinez tous les signaux en un seul enregistrement d'enrichissement prêt pour la mise à jour CRM.
def enrich_company(company: str) -> dict:
search_data = search_company(company)
signals = extract_signals(company, search_data)
news = get_recent_news(company)
return {
'company': company,
'has_careers_page': signals['has_careers_page'],
'linkedin_found': signals['linkedin_found'],
'recent_news': news[:3],
'top_snippets': signals['snippets'][:3],
'funding_signals': signals['news'],
'enriched': True,
}
record = enrich_company('Stripe')
print(json.dumps(record, indent=2)[:500]) if 'json' in dir() else print(record)Étape 5: Traitez par lots la liste d'entreprises
Exécutez l'enrichissement sur toutes les entreprises et produisez un résumé.
import json, time
def batch_enrich(companies: list) -> list:
enriched = []
for company in companies:
record = enrich_company(company)
enriched.append(record)
print(f"Enriched: {company} (careers={record['has_careers_page']}, news={len(record['recent_news'])})")
time.sleep(0.5) # Rate limiting
return enriched
companies = ['Stripe', 'Notion', 'Linear']
results = batch_enrich(companies)
with open('enriched_companies.json', 'w') as f:
json.dump(results, f, indent=2)
print(f'\nEnriched {len(results)} companies')Exemple Python
import requests, os
H = {'x-api-key': os.environ['SCAVIO_API_KEY']}
def enrich(company):
data = requests.post('https://api.scavio.dev/api/v1/search', headers=H,
json={'platform': 'google', 'query': f'{company} company overview'}).json()
results = data.get('organic_results', [])[:5]
return {'company': company, 'snippets': [r.get('snippet', '')[:80] for r in results]}
print(enrich('Stripe'))Exemple JavaScript
const H = {'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json'};
async function enrich(company) {
const r = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST', headers: H,
body: JSON.stringify({platform: 'google', query: `${company} company overview`})
});
const results = (await r.json()).organic_results || [];
return {company, snippets: results.slice(0, 5).map(r => (r.snippet || '').slice(0, 80))};
}
enrich('Stripe').then(console.log);Sortie attendue
An n8n-ready company enrichment pipeline that pulls company signals, news, and metadata from live search data and outputs structured records for CRM updates.