Agent #004 · Outbound

Outbound Account Prioritizer

🟡 Growth

Ranks outbound accounts daily using fit, tier, intent, engagement, contact coverage, and freshness

Build time
0.5-1 day
Primary user
SDR Leader
Primary outcome
Daily SDR focus
Deployable pack
Yes: full pack

Adam's take

SDRs lose their mornings to deciding who to call. Hand them a ranked list and watch activity quality change within a week.
Adam Woozeer, founder

Required tools

HubSpotn8n

Optional tools

ClayOutreachSalesloft

Expected value

SDRs start each day with a ranked list; less time deciding, more time executing

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

SDRs lose the first 20 minutes of every shift deciding who to call. The inputs to make that decision well already exist — fit tier, buying-committee coverage, intent recency — scattered across other agents’ output fields. This agent does the arithmetic every morning so a rep opens one ranked list instead of assembling one from four dashboards.

Core signals

Tier (base rank): Account priority tier from the Account Fit Scoring Agent sets the starting rank — Tier 1 accounts rank above Tier 2, and so on.
Intent recency boost: An intent or engagement signal inside the last 3 days moves an account up in rank, since a fresh signal is worth acting on quickly.
Committee coverage boost: Accounts with low buying-committee coverage (a real gap, not a filled-in map) get a small rank boost — a gap is also an opportunity to multi-thread.
Freshness penalty: Accounts an SDR already touched in the last 3 days are deliberately deprioritized so the same accounts don’t get piled on by every rep on the team.

Input schema

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://deploytheagent.com/schemas/agent-004-input.schema.json",
  "title": "Agent #004 Outbound Account Prioritizer 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-004-output.schema.json",
  "title": "Agent #004 Outbound Account Prioritizer Output",
  "type": "object",
  "required": [
    "record_id",
    "outbound_priority_rank",
    "outbound_priority_reason",
    "outbound_list_date"
  ],
  "properties": {
    "record_id": {
      "type": "string"
    },
    "outbound_priority_rank": {
      "type": "string",
      "description": "Agent #004 output field."
    },
    "outbound_priority_reason": {
      "type": "string",
      "description": "Agent #004 output field."
    },
    "outbound_list_date": {
      "type": "string",
      "description": "Agent #004 output field."
    }
  },
  "additionalProperties": false
}

Scoring / classification logic

Ties within a tier break by freshness — the least-recently-touched account first. Every ranked account carries a short, generated reason string (e.g. "Tier 1, intent signal 2 days ago, not touched in 6 days") so a rep sees why an account is ranked where it is, not just a bare number.

HubSpot CRM properties

outbound_priority_rank company
Written by Agent #004 (Outbound Account Prioritizer).
outbound_priority_reason company
Written by Agent #004 (Outbound Account Prioritizer).
outbound_list_date company
Written by Agent #004 (Outbound Account Prioritizer).

n8n workflow skeleton

The Outbound Account Prioritizer turns the account priority score, tier, intent signals, and contact/committee coverage into a single ranked daily outbound list. SDRs open one list instead of assembling their own from four dashboards. 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: outbound_priority_rank, outbound_priority_reason, outbound_list_date. 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 #004: Outbound Account Prioritizer

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: 1–2 hours. 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 #004: Outbound Account Prioritizer

MetricBeforeAfterBasis
SDR time deciding who to call~20 min/day~0 min, list is readyRanking automated
Tier 1 account coverageUneven, rep-dependentTracked daily via rank + reasonConsistent formula applied daily
New SDR rampWeeks to learn account judgmentRanked list from day oneFormula encodes the judgment

Time savings are direct; pipeline-quality lift should be measured against your own historical outbound conversion by tier.

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 #004: Outbound Account Prioritizer

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

Deployment checklist

  • Ranking weights config written and versioned
  • Three HubSpot company properties created
  • n8n workflow imported, marked nodes configured
  • Demo-data run matches `demo-data/sample-output.json`
  • Suppression filter verified against a test suppressed account
  • Daily Slack digest lands in each pod's channel
  • QA checklist completed by a non-builder
  • Rollback tested

Failure-mode verification

  • Verified: Same accounts rank #1 every day does not occur (mitigation: QA test asserts touched accounts drop in rank)
  • Verified: Suppressed accounts appear on list does not occur (mitigation: Suppression filter runs before ranking, not after)
  • Verified: Rank reason is empty or generic does not occur (mitigation: QA checks reason string is non-empty and account-specific)

Governance verification

  • Agent writes only to its agent-owned fields: `outbound_priority_rank`, `outbound_priority_reason`, `outbound_list_date` (company)
  • 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 decide who a rep has to call first?
No — it’s a ranked recommendation. Reps can work the list in a different order; the point is giving them a strong default, not removing judgment.
Why do recently-touched accounts drop in rank?
Without a freshness penalty, the same well-covered Tier 1 accounts would get worked by every rep on the team every day, while other accounts never get a look.
What’s the fastest of the ten launch agents to deploy, and why?
This one. It’s pure ranking logic on top of scores two other agents already compute — most of the build time is just formatting the Slack digest, not building new scoring logic.
What happens if the Account Fit Scoring Agent isn’t deployed yet?
This agent has nothing to rank on — deploy the Account Fit Scoring Agent first; the priority score and tier are required inputs, not optional ones.

Related agents