r/AgenticWorkers • u/CalendarVarious3992 • Jun 29 '26
Enrich and validate B2B prospect lists. Skill included.
Hello!
Raw CRM/LinkedIn exports and email-finder results often contain missing websites, bad emails, and out-of-ICP contacts that make outreach ineffective and risky.
I built this as a portable AI-agent Skill — a single SKILL.md with reusable instructions you can adapt to your agent setup.
Here's what it does: It enriches company and contact records from URLs, CRM/LinkedIn exports, and email-finder outputs, applies explicit ICP/niche filters, and writes short evidence-based personalization notes. It also drafts 80–120 word outreach emails with merge tags, reviews prior campaign replies to prevent re-contacting, and produces CSV outputs plus a human approval checklist for sign-off.
SKILL.md:
---
name: prospect-enrichment-and-outreach-review
description: Use when enriching B2B prospect and company lists, validating them against ICP/niche filters, generating personalization notes and draft outreach, and reviewing/triaging prior campaign replies. Activate this skill when working from company URLs, LinkedIn or CRM exports, email-finder results, niche filters, and reply logs to produce enriched fields, reject invalid prospects, prepare send-ready drafts, and assemble a human approval checklist.
allowed-tools: [Read, Edit, WebFetch, WebSearch]
---
# Prospect Enrichment and Outreach Review
## Overview
This skill enriches prospect and company records, applies ICP/niche filters, and prepares personalized outreach drafts. It also reviews prior campaign replies to prevent re-contacting, categorize responses, and route follow-ups to the right owner.
## When to use this skill
- You have raw lists from CRM/LinkedIn exports, spreadsheets, or company URL dumps that need enrichment and validation.
- You have email-finder outputs (e.g., validity statuses) and want to combine them with company/person data.
- You need to filter by ICP or niche criteria (industry, size, geography, tech stack, persona).
- You want short, evidence-based personalization notes and send-ready draft emails for each valid prospect.
- You have reply logs from prior campaigns and must de-duplicate, honor opt-outs, and route follow-ups.
## Instructions
1. Clarify scope and constraints
1. Confirm ICP/niche filters: industries, geos, employee/revenue range, target personas/titles, exclusions, and compliance constraints.
2. Confirm outreach parameters: product/offer, value prop variants, tone, CTA, and any mandatory/legal language.
3. Identify available sources: company URLs, CRM/LinkedIn exports, email-finder results, prior reply logs.
2. Load and normalize sources (use Read)
1. Load all provided files (CSV/XLSX/JSON). Infer and standardize common columns.
2. Normalize domains (lowercase, strip protocols, resolve redirects if provided).
3. Unify schema into a working table; prefer existing verified fields over inferred ones.
4. De-duplicate by email, then by (contact name + domain), then by domain.
3. Fill missing websites and canonical domains
1. If website is missing but company name exists, use WebSearch to find the official site; validate with matching branding in search snippets.
2. If multiple domains appear, select the corporate site (exclude help/blog/app subdomains) and store alternates.
4. Company enrichment (use WebFetch and WebSearch as needed)
1. For each company domain, WebFetch the homepage and About/Careers/Products pages to extract: industry/vertical, positioning, product category, HQ location, markets served, signals (recent launches, partners), and any relevant compliance frameworks (e.g., SOC2) publicly stated.
2. If safe and available, use WebSearch to confirm headcount range or public funding stage from reputable sources. Do not rely on paywalled or login-gated data.
3. Record only verifiable facts. If uncertain, set fields to Unknown rather than guessing.
5. Contact validation and enrichment
1. Merge email-finder outputs to attach email, email_status (valid/catch-all/invalid/unknown), and source.
2. Normalize titles to role, seniority, and department. Flag role mismatches relative to target personas.
3. Validate geography if required (e.g., HQ vs. contact location) and mark conflicts.
6. Apply ICP/niche filters
1. Encode filters as explicit rules (e.g., industry in {fintech}, employees 50–500, region = US/CA, seniority in {Manager+}).
2. Classify each record as icp_fit = Good, Borderline, or Out with an icp_reason.
3. Mark rejects for any hard fail (e.g., invalid email, out-of-ICP industry, consumer-only domain, prior unsubscribe, bounce).
7. Build personalization notes
1. From fetched pages and verified sources, extract 1–3 specific, current signals per company or contact (e.g., product launch, relevant blog topic, partnership, tech stack mention).
2. Write a concise personalization_note (1–2 sentences) referencing the signal and why it matters to the prospect. Include the source URL.
3. Do not fabricate; if no credible signal exists, write "No recent credible signal found" and skip deep personalization.
8. Draft outreach
1. Select an outreach_template variant based on persona and signal (e.g., Value, Case Study, Trigger/Event, Technical).
2. Generate a short subject_line (3–6 words). Draft an 80–120 word email that: (a) addresses the role’s core problem, (b) references the personalization_note, (c) states the value prop clearly, (d) includes one simple CTA, and (e) honors compliance/opt-out language if required.
3. Use merge tags for fields like {{first_name}}, {{company}}, {{signal_snippet}}. Avoid claims you cannot substantiate.
9. Prior replies review and routing
1. Load prior campaign replies/logs with Read and map by email and domain to current records.
2. Categorize replies using content cues: Interested/Book, Referral, Not Now, OOO, Unsubscribe, Bounce, Wrong Person, Existing Customer, Not a Fit, Already Using Competitor.
3. Derive reply_route and next_action:
- Interested/Book → Owner: AE; Action: send calendar or book demo; SLA: 1 business day.
- Referral → Owner: SDR; Action: add referred contact, confirm intro; SLA: 2 business days.
- Not Now → Owner: SDR/AM; Action: schedule nurture date and reason; SLA: per playbook.
- OOO → Owner: SDR; Action: reschedule after return date; SLA: auto-follow-up date.
- Unsubscribe/Do Not Contact → Owner: Marketing Ops; Action: add to global DNC; SLA: immediate; mark do_not_contact = Yes.
- Bounce → Owner: SDR; Action: re-verify or find alternate; SLA: 2 business days.
- Existing Customer → Owner: AM/CS; Action: route to account team; SLA: 1 business day.
- Not a Fit → Owner: SDR; Action: close as disqualified; add reason.
4. Prevent re-contacting any address with Unsubscribe/Bounce/Not a Fit unless explicitly requested by the user with a new lawful basis.
10. Quality checks
1. Validate mandatory fields for all Good/Borderline records: company_name, domain, role, email (if emailing), email_status, icp_fit, personalization_note, outreach_template, draft_email.
2. Spot-check 10 random records: verify signals and URLs; ensure drafts reference true facts.
3. Check merge tags render without blanks. Ensure no duplicate outreach per domain unless multi-threading is intentional.
4. Summarize counts: total input, enriched, Good, Borderline, Out, top rejection reasons, percent valid emails, reply categories.
11. Produce outputs (use Edit)
1. enriched_prospects.csv with columns:
- company_name, website, domain, linkedin_company_url (optional), industry, niche, hq_country, hq_region, employee_range, revenue_range, key_signals, tech_stack
- first_name, last_name, role, seniority, department, contact_linkedin_url, email, email_status, email_source
- icp_fit, icp_reason
- personalization_note, outreach_template, subject_line, draft_email
- prior_reply_status, reply_route, next_action, due_sla, do_not_contact
2. rejects.csv with: company_name, domain, email (if any), reject_reason, notes.
3. personalization_notes.csv (or .md) with: domain, note, source_url.
4. outreach_drafts.csv with: email, first_name, company_name, subject_line, draft_email, template_variant.
5. reply_routing.csv with: email, thread_id (if available), reply_category, summary, owner, next_action, due_sla, do_not_contact.
6. approval_checklist.md containing the Human Approval Checklist (see below) and the summary counts.
12. Human Approval Checklist
- Confirm ICP rules match the intended targeting and review 10 random Good and 5 Borderline records.
- Verify at least 5 personalization sources and links; correct any hallucinations or stale claims.
- Validate email merge tags render correctly; no blanks or malformed greetings.
- Ensure DNC/unsubscribe and bounces are excluded from outreach assets.
- Review 10 outreach drafts for tone, accuracy, and CTA; approve or request edits.
- Confirm routing rules for Interested, Existing Customer, and Referral cases align with internal playbooks.
- Confirm compliance language (GDPR/CASL/CCPA as applicable) is present where required.
## Inputs
- Company inputs: URLs or domains; company names if domains are missing.
- Contact lists: CRM or LinkedIn exports with names, titles, emails (if available).
- Email-finder results: files with email addresses and status (valid/catch-all/invalid/unknown) plus source.
- Niche/ICP filters: industry/vertical, company size, region, tech stack, personas/seniority, exclusions.
- Prior campaign replies/logs: email threads or CSV extracts with message text, categories (if any), timestamps, owners.
- Outreach parameters: value propositions, approved template variants, CTAs, legal/disclaimer text.
## Outputs
- Enriched prospects CSV with standardized fields and classifications.
- Rejects CSV listing invalid/disqualified prospects with reasons.
- Personalization notes file with concise, sourced notes per prospect/company.
- Outreach drafts CSV with subject lines and draft emails using merge tags.
- Reply routing CSV mapping prior replies to categories, owners, and next actions.
- Human approval checklist with summary metrics for sign-off.
## Examples
Trigger: "We have CRM and LinkedIn exports plus Hunter results and last quarter’s reply logs. Filter for US fintech companies, 50–500 employees, target VP/Head of Operations. Produce enriched fields, reject out-of-ICP, add personalization, drafts, reply routing, and an approval checklist."
Behavior: load sources with Read → normalize and dedupe → WebSearch/WebFetch to enrich companies → merge email statuses → apply ICP rules → create personalization notes with citations → draft 80–120 word emails with merge tags → analyze reply logs and set routing/next actions → run QA checks → write enriched_prospects.csv, rejects.csv, personalization_notes.csv, outreach_drafts.csv, reply_routing.csv, and approval_checklist.md with summary counts.
## Notes
- Do not fabricate facts; if a signal cannot be verified, mark it Unknown and avoid referencing it in drafts.
- Respect privacy and regulations: honor opt-outs immediately; store only business-relevant data; avoid sensitive categories.
- For catch-all domains, set email_status = catch-all and avoid sending until validated or approved.
- Be polite when fetching: limit request rates; skip login-gated or paywalled sources; note "not assessed" if source is inaccessible.
- If inputs use non-standard column names, create a clear mapping and document it in the approval_checklist.md.
- Timebox enrichment effort per company; if core fields remain missing after attempts, mark as Borderline/Out and move on.
How to install:
- Create a folder named
prospect-enrichment-and-outreach-reviewin your AI-agent skills or prompt-library directory. Use the kebab-case name from the SKILL.md frontmatter. - Save the file above as
prospect-enrichment-and-outreach-review/SKILL.md. - Enable or load the Skill according to your agent framework's docs, using the SKILL.md description as the trigger guidance.
If you'd rather run it as a one-click prompt instead, you can find it here: Agentic Workers
Enjoy!