Agent #005 · Outbound

Prospect List Builder

🟡 Growth

Sources persona-mapped contacts for target accounts with validation, dedupe, suppression, and relevance scoring

Build time
0.5-1 day
Primary user
SDR Leader / GTM Engineer
Primary outcome
Review-ready prospect lists
Deployable pack
Yes: full pack

Adam's take

Nobody demos list building at a conference, but bounced emails and missing personas tax every sequence you run.
Adam Woozeer, founder

Required tools

ClayHubSpotn8n

Optional tools

ApolloZoomInfoNeverBounce

Expected value

Review-ready prospect lists in minutes instead of hours; fewer bounces

Deployable workflow pack

The full pack includes the agent spec, deployment guide, architecture diagrams, n8n workflow skeleton, Clay template, HubSpot properties, JSON schemas, OpenAPI spec, cost and ROI calculators, demo data, QA checklist, and governance notes.

View pack on GitHub
Full deployment guide →Governance & failure modes →QA checklist →

How to deploy this agent

"Find me a VP of RevOps at these 40 accounts" is an hour of manual sourcing, then another hour catching duplicates and bounced emails afterward. This agent wires the actual gap — the specific persona a target account is missing — to a sourced, validated, review-ready contact list, instead of a generic name export.

Core signals

Persona match: Candidate title checked against the persona-to-title mapping config — an exact match scores higher confidence than a pattern match.
Deliverability: Email validated before a candidate ever reaches the review list. Invalid emails are excluded outright; risky ones are surfaced at reduced weight, not hidden.
Duplicate check: Every candidate is checked against existing CRM contacts before it’s surfaced — flagged, not silently excluded, since a human should see and confirm the match.
Suppression check: Suppressed or unsubscribed individuals are filtered before sourcing results are written anywhere at all, not just before CRM creation.

Input schema

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://deploytheagent.com/schemas/agent-005-input.schema.json",
  "title": "Agent #005 Prospect List Builder Input",
  "type": "object",
  "required": [
    "record_id"
  ],
  "properties": {
    "record_id": {
      "type": "string",
      "description": "CRM record ID (company/contact/deal depending on agent)."
    },
    "domain": {
      "type": "string"
    },
    "config_version": {
      "type": "string",
      "description": "Versioned config used for this run."
    }
  },
  "additionalProperties": true
}

Output schema

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://deploytheagent.com/schemas/agent-005-output.schema.json",
  "title": "Agent #005 Prospect List Builder Output",
  "type": "object",
  "required": [
    "record_id",
    "prospect_relevance_score",
    "prospect_source",
    "prospect_duplicate_flag",
    "prospect_approval_status"
  ],
  "properties": {
    "record_id": {
      "type": "string"
    },
    "prospect_relevance_score": {
      "type": "string",
      "description": "Agent #005 output field."
    },
    "prospect_source": {
      "type": "string",
      "description": "Agent #005 output field."
    },
    "prospect_duplicate_flag": {
      "type": "string",
      "description": "Agent #005 output field."
    },
    "prospect_approval_status": {
      "type": "string",
      "description": "Agent #005 output field."
    }
  },
  "additionalProperties": false
}

Scoring / classification logic

Relevance score is the product of persona-match weight and deliverability weight, capped 0–100. Candidates below a configured relevance floor (default 40) aren’t surfaced at all — the review list stays high-signal instead of exhaustive, so SDRs aren’t wading through weak matches.

HubSpot CRM properties

prospect_relevance_score company
Written by Agent #005 (Prospect List Builder).
prospect_source company
Written by Agent #005 (Prospect List Builder).
prospect_duplicate_flag company
Written by Agent #005 (Prospect List Builder).
prospect_approval_status company
Written by Agent #005 (Prospect List Builder).

n8n workflow skeleton

The Prospect List Builder sources persona-specific contacts for the buying-committee gaps Agent #002 finds, validates and dedupes them, and hands SDRs a review-ready list instead of a raw export from a sourcing tool. Configure every node marked CONFIGURE before enabling the trigger.

  1. Trigger
    CONFIGURE: set cadence per agent-spec.md's What It Does section. Leave disabled until Step 6 of deployment-guide.md.
  2. Load versioned config
    CONFIGURE: replace with your versioned config built from real data (see deployment-guide.md Step 1).
  3. Fetch source data
    CONFIGURE: {{HUBSPOT_CREDENTIAL}}. Pull the fields listed in agent-spec.md's Inputs table.
  4. Validate + gate records
    Drops records missing required inputs or failing suppression/gate checks defined in agent-spec.md. Logs every drop.
  5. Apply workflow logic
    Implements the Workflow Logic table from agent-spec.md. Writes model/config version alongside every derived value for auditability.
  6. Write agent-owned CRM fields
    CONFIGURE: {{HUBSPOT_CREDENTIAL}}. Writes only: prospect_relevance_score, prospect_source, prospect_duplicate_flag, prospect_approval_status. Never writes sales-owned fields.
  7. Route to human review / alert
    CONFIGURE: {{SLACK_CHANNEL}}. Fires for records requiring human review per agent-spec.md's Governance section.

Cost calculator

Cost Calculator — Agent #005: Prospect List Builder

Fill in your own volumes and rates — do not use these as benchmark numbers.

Cost driverYour volumeUnit costMonthly cost
n8n execution (workflow runs)___ runs/month$___ / run$___
Enrichment/sourcing credits (if applicable)___ records/month$___ / record$___
LLM API calls (if applicable)___ calls/month$___ / call$___
Human review time___ hrs/month$___ / hr (loaded)$___
Total$___

Build cost (one-time)

Estimated build time: 0.5–1 day. Multiply by your builder's loaded hourly rate for a one-time build-cost estimate.

Notes

Costs scale with the volume of records this agent processes, not with the size of your whole CRM — scope your volume estimate to the specific object/list this agent actually touches (see `agent-spec.md`'s Inputs table).

ROI calculator

ROI Calculator — Agent #005: Prospect List Builder

MetricBeforeAfterBasis
Manual sourcing time per account~30–45 min~2 min review per candidateSourcing + validation automated, review only
Duplicate contacts createdCommon without a dedup checkFlagged before creationDedup check runs pre-CRM
Persona-fit accuracyRep judgment on a name listConfig-driven relevance scoreSame mapping applied consistently

Time savings are direct; contact-to-opportunity conversion by persona should be tracked in your own CRM to validate the persona mapping over time.

Your numbers

InputValue
Records processed per month___
Manual time saved per record (before)___ min
Loaded hourly rate$___
Monthly time-savings value$___ (records × minutes saved ÷ 60 × rate)

Compare this to the cost calculator's monthly total for a net ROI. Do not add a revenue-impact number unless you've measured it against your own baseline — see `agent-spec.md`'s ROI note.

Governance notes

Failure modes

QA checklist

QA Checklist — Agent #005: Prospect List Builder

To be completed by a non-builder reviewer before go-live.

Deployment checklist

  • Persona-to-title mapping config written from real closed-won data
  • Suppression check verified against a test suppressed contact
  • n8n workflow imported, marked nodes configured
  • Demo-data run matches `demo-data/sample-output.json`
  • Dedup check tested against an existing CRM contact
  • Review list approval flow tested end to end
  • QA checklist completed by a non-builder
  • Rollback tested

Failure-mode verification

  • Verified: Contacts auto-created without review does not occur (mitigation: n8n workflow has no contact-create node; creation lives in a separate, manually-triggered approved-list flow)
  • Verified: Suppressed contact sourced does not occur (mitigation: Suppression filter is the first node in the pipeline, not the last)
  • Verified: Low-relevance candidates flood the list does not occur (mitigation: QA test asserts no candidate below config threshold appears in output)
  • Verified: Duplicate created despite flag does not occur (mitigation: QA checklist includes a manual duplicate-flag spot check before approval)

Governance verification

  • Agent writes only to its agent-owned fields: `prospect_relevance_score`, `prospect_source`, `prospect_duplicate_flag`, `prospect_approval_status` (review-list contact records, pre-CRM)
  • No auto-send, auto-close, auto-route, or auto-create action occurs without the human step described in `agent-spec.md`
  • Confidence/model-version is present on every written record where applicable
  • Demo-data run output matches `demo-data/sample-output.json` in structure

Sign-off

Reviewer name: _______________ Date: _______________ Result: Pass / Fail (attach notes)

FAQ

Does this agent replace a sourcing tool like Clay or Apollo?
No — it sits on top of one. Sourcing tools are good at finding names; this agent is the wiring between "we have a specific gap" and "here’s who fills it," matched to the exact persona missing from a real committee map.
Can a contact get created in the CRM automatically?
Never without a human approving it first in the review list. That boundary is the single most important governance rule in this agent.
What happens to a candidate below the relevance threshold?
It’s never surfaced at all — the review list only shows high-signal candidates, not every name a sourcing tool returns.
Why deploy this after the Buying Committee Mapper instead of on its own?
Sourcing without a defined gap just recreates the single-threading problem with more contacts. The Committee Mapper is what defines which persona is actually missing.

Related agents