Overview
This workflow takes a list of LinkedIn targets (name + company) and enriches each contact with recent Google search data before outreach. For each contact, it searches for recent company news, product launches, or blog posts, then generates a personalized opening line referencing something specific. The enriched list is exported with custom fields ready for your outreach tool.
Trigger
Manual (run before each outreach campaign)
Schedule
On-demand (before each outreach campaign)
Workflow Steps
Load LinkedIn target list
Import a CSV or JSON file with contact names and company names. Each row becomes an enrichment target.
Search Google for each contact
For each contact, call Scavio Google search with 'name company recent 2026'. Extract the top 3 organic results with titles and snippets.
Extract personalization context
From the search results, identify the most relevant piece of context: a recent blog post, product launch, funding round, or conference talk.
Generate opening line
Create a personalized opening line referencing the extracted context. Keep it under 100 characters and specific to the contact.
Export enriched list
Write the enriched contact list with the personalization field added. Compatible with Instantly, Smartlead, or Lemlist import formats.
Python Implementation
import requests, os, csv
SCAVIO_KEY = os.environ["SCAVIO_API_KEY"]
H = {"x-api-key": SCAVIO_KEY}
def enrich(name: str, company: str) -> dict:
resp = requests.post("https://api.scavio.dev/api/v1/search", headers=H,
json={"platform": "google", "query": f"{name} {company} recent 2026"},
timeout=10)
results = resp.json().get("organic", [])[:3]
if results:
best = results[0]
return {
"context_title": best["title"],
"context_snippet": best.get("snippet", ""),
"opening": f"Saw your work on {best['title'][:60]}. Relevant to what I do."
}
return {"context_title": "", "context_snippet": "", "opening": ""}
# Read targets
with open("targets.csv") as f:
targets = list(csv.DictReader(f))
# Enrich each target
for t in targets:
enrichment = enrich(t["name"], t["company"])
t.update(enrichment)
# Write enriched list
with open("enriched_targets.csv", "w", newline="") as f:
w = csv.DictWriter(f, fieldnames=targets[0].keys())
w.writeheader()
w.writerows(targets)
print(f"Enriched {len(targets)} contacts")JavaScript Implementation
import { readFileSync, writeFileSync } from "fs";
async function enrich(name, company) {
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({ platform: "google", query: `${name} ${company} recent 2026` })
});
const results = ((await resp.json()).organic || []).slice(0, 3);
if (results.length > 0) {
const best = results[0];
return {
context_title: best.title,
context_snippet: best.snippet || "",
opening: `Saw your work on ${best.title.slice(0, 60)}. Relevant to what I do.`
};
}
return { context_title: "", context_snippet: "", opening: "" };
}
// Load targets and enrich
const targets = JSON.parse(readFileSync("targets.json", "utf8"));
for (const t of targets) {
const enrichment = await enrich(t.name, t.company);
Object.assign(t, enrichment);
}
writeFileSync("enriched_targets.json", JSON.stringify(targets, null, 2));
console.log(`Enriched ${targets.length} contacts`);Platforms Used
Web search with knowledge graph, PAA, and AI overviews