Workflow

Prospect Domain Enrichment for Cold Email Pipeline

Enrich prospect domains with search signals before cold outreach. Score fit, extract tech stack, and personalize at scale.

Overview

Cold email campaigns fail when you blast generic messages to unresearched domains. This workflow takes a CSV of prospect domains, searches Google for each domain to extract company description, tech stack signals, recent news, and hiring patterns, parses the search results into structured enrichment fields, and exports an enriched CSV ready for your email sequencer. Every prospect gets a relevance score so you can prioritize high-fit leads. Scavio at $0.005 per search makes enriching 1,000 domains cost just $5.

Trigger

New prospect CSV uploaded

Schedule

On CSV upload (event-driven)

Workflow Steps

1

Load prospect domains

Parse the uploaded CSV to extract domain names and any existing firmographic data.

2

Search each domain

For each domain, query Google for the company name and domain. Extract organic results and AI Overview if available.

3

Parse enrichment signals

From search results, extract: company description, employee count signals, tech stack mentions, recent funding or news.

4

Score and rank prospects

Compute a relevance score based on tech stack match, company size, and recency of activity. Rank the list.

5

Export enriched CSV

Write the enriched data back to CSV with all new columns. Ready for import into your email sequencer.

Python Implementation

Python
import requests, os, json, csv
from io import StringIO

H = {"x-api-key": os.environ["SCAVIO_API_KEY"]}

# Sample prospects (in production, load from CSV)
PROSPECTS = [
    {"domain": "example-saas.com", "name": "Example SaaS"},
    {"domain": "acme-ai.io", "name": "Acme AI"},
    {"domain": "dataflow-labs.com", "name": "Dataflow Labs"},
]

def enrich_domain(prospect):
    """Search for a prospect domain and extract enrichment signals."""
    r = requests.post("https://api.scavio.dev/api/v1/search", headers=H,
        json={"platform": "google",
              "query": f"{prospect['name']} {prospect['domain']}",
              "ai_overview": True}, timeout=10).json()
    snippets = [o.get("snippet", "") for o in r.get("organic", [])[:5]]
    titles = [o.get("title", "") for o in r.get("organic", [])[:5]]
    aio = r.get("ai_overview", {})
    all_text = " ".join(snippets + titles).lower()
    # Simple signal extraction
    signals = {
        "has_funding_mention": any(w in all_text for w in ["raised", "funding", "series", "seed"]),
        "has_hiring_signal": any(w in all_text for w in ["hiring", "careers", "open roles", "job"]),
        "has_api_mention": "api" in all_text,
        "result_count": len(r.get("organic", [])),
    }
    score = sum([
        signals["has_funding_mention"] * 30,
        signals["has_hiring_signal"] * 20,
        signals["has_api_mention"] * 25,
        min(signals["result_count"], 10) * 2.5,
    ])
    return {
        **prospect,
        "description": snippets[0][:200] if snippets else "",
        "ai_summary": aio.get("text", "")[:200] if aio else "",
        "signals": signals,
        "score": round(score)
    }

enriched = []
for p in PROSPECTS:
    result = enrich_domain(p)
    enriched.append(result)
    print(f"[{result['score']}] {result['name']} | {result['description'][:80]}")

enriched.sort(key=lambda x: x["score"], reverse=True)
print(f"\nEnriched {len(enriched)} prospects. Top: {enriched[0]['name']} (score: {enriched[0]['score']})")

JavaScript Implementation

JavaScript
const H = {"x-api-key": process.env.SCAVIO_API_KEY, "Content-Type": "application/json"};

const PROSPECTS = [
  {domain: "example-saas.com", name: "Example SaaS"},
  {domain: "acme-ai.io", name: "Acme AI"},
  {domain: "dataflow-labs.com", name: "Dataflow Labs"},
];

async function enrichDomain(prospect) {
  const r = await fetch("https://api.scavio.dev/api/v1/search", {
    method: "POST", headers: H,
    body: JSON.stringify({
      platform: "google",
      query: `${prospect.name} ${prospect.domain}`,
      ai_overview: true
    })
  }).then(r => r.json());
  const snippets = (r.organic || []).slice(0, 5).map(o => o.snippet || "");
  const titles = (r.organic || []).slice(0, 5).map(o => o.title || "");
  const allText = [...snippets, ...titles].join(" ").toLowerCase();
  const aio = r.ai_overview || {};
  const signals = {
    hasFunding: ["raised", "funding", "series", "seed"].some(w => allText.includes(w)),
    hasHiring: ["hiring", "careers", "open roles", "job"].some(w => allText.includes(w)),
    hasApi: allText.includes("api"),
    resultCount: (r.organic || []).length,
  };
  const score = Math.round(
    (signals.hasFunding ? 30 : 0) + (signals.hasHiring ? 20 : 0) +
    (signals.hasApi ? 25 : 0) + Math.min(signals.resultCount, 10) * 2.5
  );
  return {
    ...prospect, description: (snippets[0] || "").slice(0, 200),
    aiSummary: (aio.text || "").slice(0, 200), signals, score
  };
}

(async () => {
  const enriched = [];
  for (const p of PROSPECTS) {
    const result = await enrichDomain(p);
    enriched.push(result);
    console.log(`[${result.score}] ${result.name} | ${result.description.slice(0, 80)}`);
  }
  enriched.sort((a, b) => b.score - a.score);
  console.log(`\nEnriched ${enriched.length} prospects. Top: ${enriched[0].name} (score: ${enriched[0].score})`);
})();

Platforms Used

Google

Web search with knowledge graph, PAA, and AI overviews

Frequently Asked Questions

Cold email campaigns fail when you blast generic messages to unresearched domains. This workflow takes a CSV of prospect domains, searches Google for each domain to extract company description, tech stack signals, recent news, and hiring patterns, parses the search results into structured enrichment fields, and exports an enriched CSV ready for your email sequencer. Every prospect gets a relevance score so you can prioritize high-fit leads. Scavio at $0.005 per search makes enriching 1,000 domains cost just $5.

This workflow uses a new prospect csv uploaded. On CSV upload (event-driven).

This workflow uses the following Scavio platforms: google. Each platform is called via the same unified API endpoint.

Yes. Scavio's free tier includes 250 credits per month with no credit card required. That is enough to test and validate this workflow before scaling it.

Prospect Domain Enrichment for Cold Email Pipeline

Enrich prospect domains with search signals before cold outreach. Score fit, extract tech stack, and personalize at scale.