The Problem
n8n workflows that match company records across CRMs, spreadsheets, and databases struggle with inconsistent naming. 'IBM' vs 'International Business Machines' vs 'IBM Corp' all refer to the same entity. Fuzzy string matching produces false positives. Dedicated entity resolution tools like ZoomInfo charge $10,000+/year. n8n's built-in HTTP node can call APIs but teams lack a reliable, affordable source of canonical company data.
The Scavio Solution
Add a search verification step to n8n company matching workflows. For each company name variant, query Google via Scavio and extract the canonical name from Knowledge Graph or top organic results. Match records by canonical name rather than raw string. This turns a fuzzy matching problem into a deterministic lookup at $0.005 per query.
Before
Before search-based matching, a RevOps team running n8n tried fuzzy string matching on company names across HubSpot and their billing system. False positive rate was 12%. 'Mercury' matched Mercury Insurance, Mercury Financial, and Mercury (the banking startup) interchangeably. Manual cleanup took 4 hours per week.
After
After adding Scavio search to the n8n workflow, each company name resolves to a canonical entity via Knowledge Graph. False positive rate dropped to under 1%. The n8n workflow processes 500 records per batch at $2.50 per run. Weekly manual cleanup time went from 4 hours to 15 minutes.
Who It Is For
RevOps teams, data engineers, and n8n workflow builders who need reliable company name matching across systems without paying for enterprise entity resolution tools.
Key Benefits
- Canonical company name resolution via Knowledge Graph
- False positive rate drops from 12% to under 1%
- 500 records matched for $2.50 per batch
- Works as an n8n HTTP Request node with zero custom code
- Replaces $10,000+/year entity resolution vendors
Python Example
import requests, os
H = {'x-api-key': os.environ['SCAVIO_API_KEY']}
def resolve_company(name: str) -> dict:
r = requests.post('https://api.scavio.dev/api/v1/search', headers=H,
json={'platform': 'google', 'query': name}, timeout=10).json()
kg = r.get('knowledge_graph', {})
canonical = kg.get('title', '')
domain = kg.get('website', '')
return {
'input': name,
'canonical': canonical or r.get('organic', [{}])[0].get('title', name),
'domain': domain,
'type': kg.get('type', 'unknown'),
'resolved': bool(canonical),
}
variants = ['IBM', 'International Business Machines', 'IBM Corp']
for v in variants:
result = resolve_company(v)
print(f'{v} -> {result["canonical"]} ({result["domain"]})')JavaScript Example
const H = { 'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json' };
async function resolveCompany(name) {
const r = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST', headers: H,
body: JSON.stringify({ platform: 'google', query: name })
}).then(r => r.json());
const kg = r.knowledge_graph || {};
return {
input: name,
canonical: kg.title || (r.organic || [{}])[0]?.title || name,
domain: kg.website || '',
type: kg.type || 'unknown',
resolved: Boolean(kg.title),
};
}
const variants = ['IBM', 'International Business Machines', 'IBM Corp'];
for (const v of variants) {
const r = await resolveCompany(v);
console.log(`${v} -> ${r.canonical} (${r.domain})`);
}Platforms Used
Web search with knowledge graph, PAA, and AI overviews