Overview
Trigger on new CRM contact, enrich with a Scavio Google search for company context, score with a short LLM prompt (3 rules), and tag hot/warm/cold in the CRM. Total: 12 lines of expression code across 4 n8n nodes.
Trigger
New contact created in CRM (webhook or polling)
Schedule
On new CRM contact
Workflow Steps
Webhook trigger on new CRM contact
n8n receives company name + email from CRM webhook.
Scavio HTTP Request node
POST to /api/v1/search with platform=google, query=company name. Returns structured SERP.
LLM scoring node
Send top-3 SERP snippets + company name to Claude/GPT with prompt: 'Score 1-10: hiring signals, funding news, tech stack fit. Return JSON {score, reason}.'
IF node: route by score
score >= 7 → hot (assign to AE), 4-6 → warm (nurture sequence), <4 → cold (archive).
Python Implementation
import requests, os
key = os.environ["SCAVIO_API_KEY"]
company = "Acme Corp"
resp = requests.post("https://api.scavio.dev/api/v1/search",
headers={"x-api-key": key},
json={"query": company, "platform": "google", "limit": 3})
snippets = [r["snippet"] for r in resp.json().get("results", [])]
prompt = f"Score this company 1-10 for B2B SaaS fit: {company}. Context: {snippets}. Return JSON: score, reason."
score_result = call_llm(prompt)
print(score_result)JavaScript Implementation
const resp = await fetch("https://api.scavio.dev/api/v1/search", {
method: "POST",
headers: { "x-api-key": process.env.SCAVIO_API_KEY, "Content-Type": "application/json" },
body: JSON.stringify({ query: "Acme Corp", platform: "google", limit: 3 })
});
const snippets = (await resp.json()).results.map(r => r.snippet);
const score = await callLLM(`Score 1-10 for B2B SaaS fit: Acme Corp. Context: ${snippets.join(" ")}. Return JSON: {score, reason}.`);
console.log(score);Platforms Used
Web search with knowledge graph, PAA, and AI overviews