Agent skill
list-quality-scorecard
Pre-send quality scorecard for any lead list.
Filed under Team and enablement.
From growthenginenowoslawski/coldoutboundskills · 50 skills · 668 · pushed 2026-08-18
What it does when it runs
Pre-send quality scorecard for any lead list. Grades duplicate rate, title diversity, bad-title patterns, catch-all domain density, ICP fit, email verification coverage. Outputs a letter grade + action items BEFORE you send. Catches bad lists before they burn inboxes. Run after email enrichment, before Smartlead upload.
Read from the skill and the 1 file bundled beside it. A skill’s own description is written to be selected by an agent, so it describes the job and not the dependencies.
- Keys and connectors you must supply
- None found.
- Hosts it reaches
- No third-party host appears in the skill or its bundled files.
- Tool permissions it declares
- No
allowed-toolsin the frontmatter. It does act, so it runs under whatever permissions your session already grants. - Actions present in the files
- shellwrites files
Install it
View source on GitHub ↗git clone --depth 1 --filter=blob:none --sparse https://github.com/growthenginenowoslawski/coldoutboundskills.git /tmp/coldoutboundskills git -C /tmp/coldoutboundskills sparse-checkout set "skills/list-quality-scorecard" mkdir -p ~/.claude/skills/list-quality-scorecard cp -R "/tmp/coldoutboundskills/skills/list-quality-scorecard/." ~/.claude/skills/list-quality-scorecard/
Picked up without a restart. A project skill of the same name is shadowed by your personal one. For one repository only, swap ~/.claude/skills for .claude/skills. Claude Code docs ↗
The folder is the same in every client that implements the format — 46 of them — so if yours is not above, only the destination changes.
The skill
Source on GitHub ↗Reproduced in full from growthenginenowoslawski/coldoutboundskills/blob/f24320d4ab3ddb717402a065a3679aca5a7a8665/skills/list-quality-scorecard/SKILL.md, which is licensed MIT (repository). 988 words, 22 headings.
List Quality Scorecard
A CSV of 5,000 leads is not the same as a good list of 5,000 leads. This skill grades your list across 8 dimensions BEFORE you send, catching preventable waste.
Why this exists
The three campaign failure modes cold email runners hit most:
- Bad list — the copy doesn't matter when you're emailing the wrong people
- Unverified emails — bounces burn domain reputation
- ICP drift — you think you're targeting VPs, but the list is mostly Managers
Each of these is catchable before you send, in 5 minutes, for free.
Inputs
A CSV with at minimum these columns:
email— the primary emailfirst_name,last_namejob_titleORtitlecompany_nameORcompanycompany_domain(optional, derived from email if missing)company_industry(optional, used for ICP fit scoring)company_headcount(optional, used for ICP fit scoring)
Output
A markdown scorecard with:
- Letter grade (A+ to F)
- 8 dimension scores (each 0-100)
- Top 5 issues to fix
- Pre-send checklist
Usage
npx tsx scripts/score-list.ts --list=leads.csv --icp-file=client-profile.yaml --out=scorecard.md
Optional --icp-file lets the scorecard compare your list against your declared ICP filters (from /icp-onboarding).
The 8 dimensions
1. Email verification coverage (critical)
- What: % of emails validated via MillionVerifier or equivalent
- Rule: 100% of a cold list must be verified before sending. Unverified emails = bounces = dead domains.
- Score: 100 if all verified, 0 if <50% verified
2. Duplicate email rate
- What: % of duplicate emails in the list
- Rule: <1% acceptable, >5% is a problem
- Score: 100 at 0%, drops linearly
3. Duplicate domain rate
- What: max # of leads from any single domain
- Rule: 1-2 leads per domain ideal. 5+ suggests you're over-indexing on one company.
- Score: 100 if avg <2 per domain, 60 if avg 2-5, 30 if >5
4. Title relevance
- What: % of titles matching your ICP's job title list
- Rule: Exact-match + synonym list. If 40% of your "VP Sales" list is actually "Sales Manager", you have drift.
- Score: 100 if ≥80% match, 50 if 40-80%, 0 if <40%
5. Bad-title detection
- What: % of titles matching known-bad patterns
- Bad patterns:
intern,assistant,coordinator,student,part-time,retired, non-English titles when targeting US - Rule: <2% is normal, >10% means your Prospeo filter is too loose
- Score: 100 if <2%, drops sharply after
6. Catch-all domain density
- What: % of emails on catch-all domains (e.g.,
info@,contact@,hello@) - Rule: <5% acceptable for B2B outbound
- Score: 100 if <5%, 50 at 5-15%, 0 if >15%
7. ICP fit
- What: % of leads matching your
client-profile.yamlfilters on industry + headcount - Requires:
--icp-filepassed - Rule: 80%+ match, 100 if exact
8. Name quality
- What: % with both first_name AND last_name populated AND looking human
- Checks: Not all-caps, not fake names ("Admin", "Info"), not email-as-name
- Rule: 95%+ acceptable
- Score: 100 if 95%+, drops linearly
Letter grade mapping
Weighted average across 8 dimensions (verification and ICP fit weighted 2x):
| Average | Grade | Action |
|---|---|---|
| 90-100 | A+ / A | Ship it |
| 80-89 | B | Minor fixes, then ship |
| 70-79 | C | Fix top 3 issues first |
| 60-69 | D | Serious cleanup required |
| <60 | F | Don't send. Rebuild the list. |
Example output
=== List Quality Scorecard ===
File: leads.csv (2,147 rows)
Grade: B (84/100)
Dimensions:
1. Email verification: 100/100 (100% verified, good)
2. Duplicate emails: 95/100 (1.1% duplicates — trim before send)
3. Duplicate domains: 78/100 (avg 2.4 per domain — some over-concentration)
4. Title relevance: 82/100 (85% titles match "VP Sales" / "Head of Sales")
5. Bad-title detection: 92/100 (3% Coordinators slipped in — filter)
6. Catch-all density: 80/100 (8% catch-all — consider dropping)
7. ICP fit: 88/100 (88% match declared industry filter)
8. Name quality: 97/100 (good)
Top 5 issues to fix:
1. 23 emails are duplicates (1.1%) — deduplicate before upload
2. 64 leads are on catch-all addresses (3.0%) — drop or deprioritize
3. 64 Coordinators in the list — filter by seniority ≥ Manager
4. 147 leads cluster on 12 domains (>5 each) — cap at 3 per domain
5. 258 leads outside declared industry filter (12%) — filter by company_industry
Pre-send checklist:
[ ] Deduplicate by email
[ ] Drop catch-all if >5% (reduces bounce rate)
[ ] Filter out bad titles
[ ] Cap per-domain concentration
[ ] Re-run verifier if list shrunk >10%
When to use
- AFTER list-building skills (
/prospeo-full-export,/blitz-list-builder,/google-maps-list-builder,/disco-like) - AFTER email waterfall (
/email-waterfall) - BEFORE Smartlead upload
When NOT to use
- On a list of <100. Sample too small for reliable stats.
- On a fully static list (same every send). Check once, reuse.
Scripts
scripts/score-list.ts— the main scorecard
What to do next
If grade ≥ B: /campaign-copywriting to write the emails. Then /smartlead-campaign-upload-public to launch as DRAFT.
If grade < C: fix the top 3 issues (from scorecard output), re-run this skill until grade ≥ B. Don't upload a C-grade list — bounces and low reply rates will damage domain reputation.
Or wait: if large fixes are needed (missing email verification, 30%+ bad titles), address those BEFORE spending more on email-finding or enrichment.
Related skills
/icp-prompt-builder— more surgical ICP fit scoring (AI per-company)/icp-onboarding— produces theclient-profile.yamlthis skill checks against/email-waterfall— run BEFORE this skill for verification coverage
The 1% rule alignment
A list that scores below C-grade is very likely to produce reply rates below 1%, which violates the 1% rule (see /email-deliverability-audit). Catching list issues here saves you the deliverability hangover later.
Files bundled with it
These load only when the skill asks for them, so they cost nothing until it runs.
Other skills for the same job
Different authors, same problem. Matched on the words in the skill name, across every library in the catalogue except this one.
- list-builder by Othmane-Khadri · 290
- list-adapters by Othmane-Khadri · 290
- conversation-quality-scoring by louisblythe · 143
- list-building by extruct-ai · 107
- list-enrichment by extruct-ai · 107
- list-segmentation by extruct-ai · 107
- quality-gate by impecablemee · 66
- list-segmentation by getbeton · 6
Need help setting it up?
This page tells you what list-quality-scorecard does and what it needs. Cheetah builds the agent setup it runs inside: data, CRM, sequencing and the guardrails.
Book a call →The directory stays free. There is nothing gated behind this.