Une recherche efficace de prospects nécessite des données fraîches : actualités de l'entreprise, stack technologique, tendances de recrutement et financements récents. La recherche manuelle par prospect prend 15 à 30 minutes. Ce tutoriel construit un pipeline automatisé qui utilise l'API Scavio pour rechercher des signaux de prospects, extraire les faits clés des extraits SERP et compiler un profil structuré de prospect. Chaque profil coûte environ 0,015 $ (3 recherches) et prend moins de 5 secondes à générer.
Prérequis
- Python 3.9+ installé
- Bibliothèque requests installée
- Une clé API Scavio depuis scavio.dev
- Une liste de noms d'entreprises prospects
Parcours
Étape 1: Rechercher le contexte et les actualités de l'entreprise
Effectuez des recherches ciblées pour obtenir les actualités récentes, la description de l'entreprise et les signaux clés sur chaque prospect.
import os, requests, time, re
SCAVIO_KEY = os.environ['SCAVIO_API_KEY']
H = {'x-api-key': SCAVIO_KEY, 'Content-Type': 'application/json'}
URL = 'https://api.scavio.dev/api/v1/search'
def search_company(company: str, query_suffix: str, num: int = 5) -> list:
resp = requests.post(URL, headers=H,
json={'query': f'{company} {query_suffix}', 'country_code': 'us', 'num_results': num})
return resp.json().get('organic_results', [])
def get_company_news(company: str) -> list:
results = search_company(company, 'news 2026')
return [{'title': r['title'], 'snippet': r.get('snippet', ''), 'url': r['link']} for r in results]
def get_tech_stack(company: str) -> list:
results = search_company(company, 'technology stack engineering blog')
all_text = ' '.join(r.get('snippet', '') for r in results).lower()
techs = ['python', 'react', 'kubernetes', 'aws', 'gcp', 'azure', 'terraform',
'postgresql', 'mongodb', 'redis', 'docker', 'typescript', 'go', 'rust']
return [t for t in techs if t in all_text]
news = get_company_news('Stripe')
print(f'Stripe news: {len(news)} articles')
for n in news[:3]:
print(f' {n["title"][:60]}')Étape 2: Extraire les signaux de recrutement et de croissance
Recherchez les activités de recrutement et les nouvelles de financement comme indicateurs du stade de croissance de l'entreprise et de la disponibilité budgétaire.
def get_hiring_signals(company: str) -> dict:
results = search_company(company, 'hiring jobs careers 2026')
all_text = ' '.join(r.get('snippet', '') for r in results).lower()
roles = re.findall(r'(engineer|developer|manager|director|vp|head of)', all_text)
return {
'active_hiring': len(results) > 0,
'job_signals': len(roles),
'role_types': list(set(roles)),
'sources': [r['link'] for r in results[:3]],
}
def get_funding_signals(company: str) -> dict:
results = search_company(company, 'funding raised valuation 2026')
all_text = ' '.join(r.get('snippet', '') for r in results)
amounts = re.findall(r'\$(\d+(?:\.\d+)?\s*(?:million|billion|M|B))', all_text)
return {
'recent_funding': len(amounts) > 0,
'amounts_mentioned': amounts[:3],
'snippets': [r.get('snippet', '')[:100] for r in results[:2]],
}
hiring = get_hiring_signals('Stripe')
print(f'Hiring: {hiring["job_signals"]} role mentions, types: {hiring["role_types"]}')Étape 3: Compiler le profil du prospect
Combinez tous les signaux en un profil structuré de prospect qu'un représentant commercial peut consulter en moins de 30 secondes.
def research_prospect(company: str) -> dict:
news = get_company_news(company)
time.sleep(0.3)
tech = get_tech_stack(company)
time.sleep(0.3)
hiring = get_hiring_signals(company)
time.sleep(0.3)
funding = get_funding_signals(company)
profile = {
'company': company,
'top_news': [n['title'] for n in news[:3]],
'tech_stack': tech,
'hiring_active': hiring['active_hiring'],
'role_types': hiring['role_types'],
'recent_funding': funding['recent_funding'],
'funding_amounts': funding['amounts_mentioned'],
'credits_used': 4,
'cost': 0.020,
}
print(f'Prospect Profile: {company}')
print(f' News: {len(news)} articles')
for n in profile['top_news']:
print(f' - {n[:55]}')
print(f' Tech: {", ".join(tech) if tech else "Unknown"}')
print(f' Hiring: {"Active" if hiring["active_hiring"] else "No signals"} ({hiring["job_signals"]} mentions)')
print(f' Funding: {", ".join(funding["amounts_mentioned"]) if funding["amounts_mentioned"] else "None found"}')
print(f' Cost: ${profile["cost"]}')
return profile
research_prospect('Stripe')Exemple Python
import os, requests, time
SCAVIO_KEY = os.environ['SCAVIO_API_KEY']
H = {'x-api-key': SCAVIO_KEY, 'Content-Type': 'application/json'}
def research_prospect(company):
queries = [f'{company} news 2026', f'{company} technology stack', f'{company} hiring careers']
for q in queries:
resp = requests.post('https://api.scavio.dev/api/v1/search', headers=H,
json={'query': q, 'country_code': 'us', 'num_results': 3})
results = resp.json().get('organic_results', [])
print(f' [{q.split(company)[1].strip()}]')
for r in results[:2]:
print(f' {r["title"][:55]}')
time.sleep(0.3)
print(f' Cost: $0.015 (3 searches)')
for co in ['Stripe', 'Datadog']:
print(f'\n{co}:')
research_prospect(co)Exemple JavaScript
const SCAVIO_KEY = process.env.SCAVIO_API_KEY;
async function researchProspect(company) {
const queries = [`${company} news 2026`, `${company} technology stack`, `${company} hiring`];
for (const q of queries) {
const resp = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST',
headers: { 'x-api-key': SCAVIO_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({ query: q, country_code: 'us', num_results: 3 })
});
const results = (await resp.json()).organic_results || [];
console.log(` [${q.replace(company, '').trim()}]`);
results.slice(0, 2).forEach(r => console.log(` ${r.title.slice(0, 55)}`));
}
console.log(' Cost: $0.015');
}
researchProspect('Stripe');Sortie attendue
Prospect Profile: Stripe
News: 5 articles
- Stripe Launches AI-Powered Fraud Detection in 2026
- Stripe Revenue Surpasses $20B Annual Run Rate
- Stripe Expands to 15 New Markets in Asia Pacific
Tech: python, react, aws, kubernetes, postgresql, redis
Hiring: Active (8 mentions)
Funding: $6.5 billion
Cost: $0.020