Account Fit Scoring Agent
🟡 GrowthScores accounts on fit, commercial value, readiness, and engagement to produce a final account priority score
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.
Required tools
Optional tools
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 GitHubHow 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
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
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
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.
- TriggerCONFIGURE: set cadence per agent-spec.md's What It Does section. Leave disabled until Step 6 of deployment-guide.md.
- Load versioned configCONFIGURE: replace with your versioned config built from real data (see deployment-guide.md Step 1).
- Fetch source dataCONFIGURE: {{HUBSPOT_CREDENTIAL}}. Pull the fields listed in agent-spec.md's Inputs table.
- Validate + gate recordsDrops records missing required inputs or failing suppression/gate checks defined in agent-spec.md. Logs every drop.
- Apply workflow logicImplements the Workflow Logic table from agent-spec.md. Writes model/config version alongside every derived value for auditability.
- Write agent-owned CRM fieldsCONFIGURE: {{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.
- Route to human review / alertCONFIGURE: {{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 driver | Your volume | Unit cost | Monthly 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
| Metric | Before | After | Basis |
|---|---|---|---|
| Time spent debating account priority | Recurring meeting debate | One queryable field | Weighted scoring replaces subjective debate |
| Account tier freshness | Updated ad hoc, often stale | Nightly re-score | Automated recompute vs. manual spreadsheet |
| Outbound list quality | Rep judgment, uneven | Config-driven, consistent | Same 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
| Input | Value |
|---|---|
| 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
- Weights and tier thresholds change only through a reviewed, versioned config commit — never at runtime, and never for a single pet account.
- The agent never writes to sales-owned fields: deal stage, deal owner, and forecast category are read-only inputs, not outputs.
- Every score stores the config version it was computed under, so a score change is always traceable to a specific, dated config edit.
- Score distribution is checked on every run: if more than roughly 60% of accounts land in a single tier, that’s treated as a miscalibration signal, not a result to trust.
Failure modes
- Flat scoring: if every account lands in the same mid-band tier, the weights are too flat or the thresholds are miscalibrated — caught by the score-distribution check on every run.
- New accounts scored to zero: without the insufficient_data path, brand-new accounts would look like poor fits simply because they haven’t accumulated engagement yet.
- Silent score drift: a score that changes without an explanation is a red flag — every write carries its model/config version so changes are diffable.
- Signal double-counting: readiness and fit sub-scores are configured to draw from mutually exclusive signal sets so a single event doesn’t get counted twice.
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)