Tutorial

How to Build n8n Company Data Enrichment

Enrich company records in n8n with live search data. Automated workflow pulls revenue, headcount, tech stack, and news for each company in your CRM.

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.

Python
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.

Python
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.

Python
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.

Python
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.

Python
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

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'))

JavaScript Example

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);

Expected Output

JSON
An n8n-ready company enrichment pipeline that pulls company signals, news, and metadata from live search data and outputs structured records for CRM updates.

Related Tutorials

Frequently Asked Questions

Most developers complete this tutorial in 15 to 30 minutes. You will need a Scavio API key (free tier works) and a working Python or JavaScript environment.

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. A Scavio API key gives you 250 free credits per month.

Yes. The free tier includes 250 credits per month, which is more than enough to complete this tutorial and prototype a working solution.

Scavio has a native LangChain package (langchain-scavio), an MCP server, and a plain REST API that works with any HTTP client. This tutorial uses the raw REST API, but you can adapt to your framework of choice.

Start Building

Enrich company records in n8n with live search data. Automated workflow pulls revenue, headcount, tech stack, and news for each company in your CRM.