Build an n8n workflow that enriches company records with live search data by triggering on new CRM entries, querying the Scavio API for each company name, extracting structured data from search results, and writing enriched fields back to your CRM. Manual company research is a bottleneck in sales workflows. An automated enrichment flow runs in seconds per company and surfaces revenue indicators, recent news, tech stack signals, and hiring activity without any human effort.
Prerequisites
- n8n instance running (self-hosted or n8n Cloud)
- A Scavio API key from scavio.dev
- A CRM or spreadsheet with company names
- Basic n8n workflow knowledge
Walkthrough
Step 1: Create the n8n HTTP request node
Set up the Scavio API call as an HTTP Request node in 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', []))}")Step 2: Extract company signals
Parse search results for revenue, headcount, funding, and tech stack indicators.
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]}")Step 3: Enrich with news search
Run a second search focused on recent news to capture funding rounds and announcements.
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]}")Step 4: Build the enrichment record
Combine all signals into a single enrichment record ready for CRM update.
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)Step 5: Batch process company list
Run enrichment across all companies and output a summary.
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')Python Example
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'))JavaScript Example
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);Expected Output
An n8n-ready company enrichment pipeline that pulls company signals, news, and metadata from live search data and outputs structured records for CRM updates.