A sales team has 200 inbound leads per week sitting in a CRM. Before anyone picks up the phone, each lead needs firmographic data from an external API, web research on the company, an ICP fit score, and a one-page brief. The enrichment workflow mixes database queries, API calls, live agent research, and deterministic scoring — and it has to run every Monday morning, not just once.
Lead qualification is a coordination problem disguised as a research problem. Your CRM, a firmographic API, a web research agent, a scoring model, and a report formatter all need to touch the same records in the right order. Writing that glue code by hand — and maintaining it when one data source changes — is the real cost.
The workflow mixes deterministic lookups, external API calls, and agent-powered research in a single dag run. Epsilon handles the sequencing; each step just does its job.
Query the CRM for inbound leads that arrived since the last run. Filter by region, source channel, and minimum company size. This is a plain API call wrapped in a function — no LLM involved. Returns a list of lead IDs with company name, domain, and contact info.
Function callFor each lead, call a firmographic API to pull company details: employee count, estimated revenue, industry classification, funding stage, tech stack. Deterministic, cacheable, runs in parallel across all leads.
Function call — parallelAn agent searches for each company to surface context you can't get from a data vendor: recent news, hiring patterns, product launches, competitive positioning. This is where an LLM earns its place — interpreting ambiguous results, resolving company name collisions, and deciding what's relevant to your sale.
Agent — parallelCombine the firmographic data with your ideal customer profile to compute a fit score. How closely does this company match your best customers on size, industry, tech stack, and growth signals? The score is a weighted formula across your ICP dimensions — deterministic, not LLM-based.
Function callMap the fit score to an outreach tier: hot, warm, or nurture. Hot leads get same-day calls, warm leads go into a sequence, nurture leads get added to a drip. This is a lookup table — deterministic given the fit score and available rep capacity.
Function callAn agent assembles all enriched fields into a structured one-page brief per lead: firmographics, fit score, priority tier, research summary, and suggested talking points. A second QA pass checks for missing fields, stale data, and flags any lead whose tier assignment looks off.
Agent + QA loopMost orchestration frameworks assume every step is an LLM call. This workflow has CRM queries, REST API calls, scoring functions, and LLM agents — all in the same run. Epsilon treats them identically: each step reads a task, writes an output, and the dag handles the rest.
Steps 2 and 3 need to run across every lead simultaneously. With Epsilon's dag topology, you declare the parallelism once in your workflow definition. You don't write thread pools, async handlers, or result collectors — those are infrastructure Epsilon already has.
Every week is a new run with different leads. When the firmographic API changes its schema, or the ICP weights are updated, you re-run the affected steps without touching the others. All outputs are recorded as artifacts — the team can audit any batch months later.
Point Epsilon at your workflow definition. It handles decomposition, parallelism, the QA loop, and artifact collection.
# kick off the weekly lead enrichment run $ epsilon runs create --topology dag \ --task "Enrich and score inbound leads for week of 2026-04-13" \ --implementation python:lead_enrichment.py:run run_id: r-7c3b1a topology: dag status: running step 1/6 crm_pull running step 2/6 firmographic queued (187 parallel tasks) step 3/6 web_research queued (187 parallel tasks) step 4/6 icp_score queued step 5/6 tier_assign queued step 6/6 brief_compile queued # watch it go $ epsilon runs get r-7c3b1a run_id: r-7c3b1a status: complete steps: 6/6 qa_result: passed artifacts: 187 lead briefs # pull the outputs $ epsilon artifacts list r-7c3b1a lead_001_brief.json lead_002_brief.json ... tier_summary.csv qa_log.txt