Agent #003 · ABM

Account Fit Scoring Agent

🟡 Growth

Scores accounts on fit, commercial value, readiness, and engagement to produce a final account priority score

Build time
0.5-1 day
Primary user
RevOps
Primary outcome
Objective account prioritization
Deployable pack
Yes: full pack

Adam's take

Scoring is where teams get religious. Keep the weights in a config file so the argument happens in version control instead of a meeting.
Adam Woozeer, founder

Required tools

HubSpotClayn8n

Optional tools

Snowflake6sense

Expected value

Objective prioritization; removes opinion-based account selection

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

Every team already has an opinion about which accounts matter — marketing chases traffic, sales chases deal size, CS chases renewal risk. This agent replaces four competing opinions with one weighted, versioned score: fit, commercial value, readiness, and engagement, rolled into a single defensible priority number.

Core signals

Fit (35%): ICP match band from the Target Account Scanner, plus industry and employee-count band match. Target band scores full credit; Adjacent scores partial; Poor scores minimal.
Commercial value (25%): Open or historical deal value scaled linearly against a configured target deal-size ceiling — not a flat "big company = high value" assumption.
Readiness (20%): Funding events, hiring surges, tech-stack changes, and intent-topic matches — each active signal adds a fixed increment, capped so no single signal dominates the score.
Engagement (20%): Visits, email opens, and meetings in the trailing 90 days, normalized against a configured ceiling so one outlier account doesn’t break the scale for everyone else.

Input schema

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://deploytheagent.com/schemas/agent-003-input.schema.json",
  "title": "Agent #003 Account Fit Scoring Agent 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-003-output.schema.json",
  "title": "Agent #003 Account Fit Scoring Agent Output",
  "type": "object",
  "required": [
    "record_id",
    "account_fit_score",
    "account_commercial_value_score",
    "account_readiness_score",
    "account_engagement_score",
    "account_priority_score",
    "account_score_model_version",
    "account_score_date"
  ],
  "properties": {
    "record_id": {
      "type": "string"
    },
    "account_fit_score": {
      "type": "string",
      "description": "Agent #003 output field."
    },
    "account_commercial_value_score": {
      "type": "string",
      "description": "Agent #003 output field."
    },
    "account_readiness_score": {
      "type": "string",
      "description": "Agent #003 output field."
    },
    "account_engagement_score": {
      "type": "string",
      "description": "Agent #003 output field."
    },
    "account_priority_score": {
      "type": "string",
      "description": "Agent #003 output field."
    },
    "account_score_model_version": {
      "type": "string",
      "description": "Agent #003 output field."
    },
    "account_score_date": {
      "type": "string",
      "description": "Agent #003 output field."
    }
  },
  "additionalProperties": false
}

Scoring / classification logic

Fit: 35% weight
Commercial value: 25% weight
Readiness: 20% weight
Engagement: 20% weight

The final priority score is a weighted sum of the four sub-scores, rounded to a whole number, mapped to a tier (default: 80+ Tier 1, 60–79 Tier 2, 40–59 Tier 3, below 40 Tier 4). Accounts younger than 30 days with no engagement history yet are flagged insufficient_data rather than scored to zero — a new account isn’t penalized for being new.

HubSpot CRM properties

account_fit_score company
Written by Agent #003 (Account Fit Scoring Agent).
account_commercial_value_score company
Written by Agent #003 (Account Fit Scoring Agent).
account_readiness_score company
Written by Agent #003 (Account Fit Scoring Agent).
account_engagement_score company
Written by Agent #003 (Account Fit Scoring Agent).
account_priority_score company
Written by Agent #003 (Account Fit Scoring Agent).
account_score_model_version company
Written by Agent #003 (Account Fit Scoring Agent).
account_score_date company
Written by Agent #003 (Account Fit Scoring Agent).

n8n workflow skeleton

The Account Fit Scoring Agent scores every account in the CRM against ICP, commercial value, readiness, and engagement, then rolls the four into one account priority score. RevOps and sales leaders get a single, explainable number instead of four teams arguing about which accounts matter. 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: account_fit_score, account_commercial_value_score, account_readiness_score, account_engagement_score, account_priority_score, account_score_model_version, account_score_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 #003: Account Fit Scoring Agent

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 #003: Account Fit Scoring Agent

MetricBeforeAfterBasis
Time spent debating account priorityRecurring meeting debateOne queryable fieldWeighted scoring replaces subjective debate
Account tier freshnessUpdated ad hoc, often staleNightly re-scoreAutomated recompute vs. manual spreadsheet
Outbound list qualityRep judgment, unevenConfig-driven, consistentSame formula applied to every account

Revenue effect comes from reps and campaigns spending time on higher-probability accounts; measure win-rate by tier in your own data before claiming a lift number.

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 #003: Account Fit Scoring Agent

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

Deployment checklist

  • Scoring weights config written from real closed-won deal data and versioned
  • Seven HubSpot company properties created
  • n8n workflow imported, marked nodes configured
  • Demo-data run matches `demo-data/sample-output.json`
  • Score-distribution QA test passes (no single tier >60%)
  • insufficient_data handling verified for new accounts
  • Weekly Slack digest lands in agreed channel
  • QA checklist completed by a non-builder
  • Rollback tested

Failure-mode verification

  • Verified: Every account scores mid-band does not occur (mitigation: QA checks score distribution; flags if >60% of accounts land in one tier)
  • Verified: New accounts scored zero and buried does not occur (mitigation: Schema requires `insufficient_data` flag path; QA test asserts it fires for accounts <30 days old)
  • Verified: Score changes with no explanation does not occur (mitigation: Every score write includes `account_score_model_version`; changes are diffable)
  • Verified: Readiness score double-counts fit signals does not occur (mitigation: Config documents which signals feed which sub-score exclusively)

Governance verification

  • Agent writes only to its agent-owned fields: `account_fit_score`, `account_commercial_value_score`, `account_readiness_score`, `account_engagement_score`, `account_priority_score`, `account_score_model_version`, `account_score_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

Why does this agent need four sub-scores instead of one number?
A single blended score hides which lever actually moved. Splitting fit, value, readiness, and engagement lets RevOps see whether an account is high-priority because it’s a great fit or because it just had a funding event — those call for different plays.
What happens to a brand-new account with no engagement data?
It’s flagged insufficient_data instead of being scored low. Scoring a new account to zero would confuse "hasn’t had time to engage yet" with "poor fit," which isn’t the same thing.
Can a sales leader override the score for a specific account?
Not through this agent — weights and thresholds are config-level, applied to every account identically. A rep who disagrees with a score is valuable input for the next config review, not a reason to special-case one account.
How often does the score recompute?
Nightly by default, plus an on-demand re-score whenever the Target Account Scanner promotes a new account to Target.

Related agents