Agent skill
data-enrichment
Enrich raw Lead records with verified emails, phone numbers, social links, and citable personalization hooks via a verifier waterfall, deliverability classification, and source-tracked hook capture.
Filed under Prospecting and list building.
From devangk003/gtm-agent-skills · 32 skills · 0 · pushed 2026-06-18
What it does when it runs
Enrich raw Lead records with verified emails, phone numbers, social links, and citable personalization hooks via a verifier waterfall, deliverability classification, and source-tracked hook capture. Use when a sourcing skill has produced a list with unverified emails, missing phones, or no hooks; when a BYO list needs schema repair; or when stale records need re-verification before outreach.
Read from the skill and the 4 files 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
- AGENTIC_APP_TOKEN
- ATTIO_ACCESS_TOKEN
- ATTIO_API_KEY
- 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
- writes files
Install it
View source on GitHub ↗git clone --depth 1 --filter=blob:none --sparse https://github.com/devangk003/gtm-agent-skills.git /tmp/gtm-agent-skills git -C /tmp/gtm-agent-skills sparse-checkout set "data-enrichment" mkdir -p ~/.claude/skills/data-enrichment cp -R "/tmp/gtm-agent-skills/data-enrichment/." ~/.claude/skills/data-enrichment/
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.
Before you install: this skill will not complete its job on a bare agent. It needs AGENTIC_APP_TOKEN, ATTIO_ACCESS_TOKEN, ATTIO_API_KEY, which you have to obtain separately.
The skill
Source on GitHub ↗Reproduced in full from devangk003/gtm-agent-skills/blob/6b9a1b0094ffd83d6c02bc03b7ce1610661a1644/data-enrichment/SKILL.md, which is licensed MIT (skill frontmatter). 1,019 words, 9 headings.
Data Enrichment
Decorate raw Lead records with verified email statuses, phone numbers (mobile/landline classified), normalized social links, and citable personalization hooks. The output is a Lead record lead-scoring can score with confidence and cold-email can write an opener against without inventing context.
Clarification Protocol
When you encounter any of the following, STOP and ask the user — do NOT make a silent assumption, and do NOT flatly refuse:
- Ambiguous or missing input
- A fork in approach (multiple valid frameworks, segments, scopes, or sources)
- A rule that would block progress
- An assumption that materially shapes the output
- Unverified data that a downstream step depends on
Present 2–4 concrete options with trade-offs and your recommendation.
Format:
Decision needed: <what's being decided> Options:
- A) <option> — trade-off
- B) <option> — trade-off
- C) <option> — trade-off My recommendation: <X> because <reason>. Confirm or pick a different option before I continue.
Refusing to proceed is NEVER the final answer. Every "block" must come with an override option. If the user picks an override, honor it on the first request — do not re-prompt the same block multiple times in one run.
Scope
This skill ONLY produces enriched lead records (verified emails, phones, personalization hooks, technographics, signals) per the lead schema. Do not expand into adjacent topics. If the user's request implies adjacent scope, trigger Clarification Protocol with options to (A) stay in scope, (B) note the adjacent need as a follow-up, (C) hand off to a different skill.
When to Use
- "Verify these 500 emails before we send"
- User has leads with unverified emails, missing phones, or no personalization hooks
- BYO list needs schema repair before scoring
- Stale records need re-verification before outreach
- Pre-scoring quality gate after any sourcing run
- Pre-outreach freshness pass before high-effort sequences
Legend — Enrichment Confidence (per derived field)
- [H] — verified primary source (verifier API "valid", LinkedIn first-party)
- [M] — single secondary source (third-party DB, pattern-guess corroborated by one signal)
- [L] — inferred (pattern guess only, similar-account extrapolation)
Quick Reference
| Concept | Value |
|---|---|
| Three passes | Email verify → Phone discovery → Hook capture |
| Verifier waterfall | Syntax → MX → SMTP → catch-all → role-based detection |
| Email status enum | verified / risky / catch-all-domain / role-based / invalid / unverified |
| Phone status enum | mobile / landline / voip / dnc / unverified / invalid |
| Hook rule | Permalink + date OR null — no URL, no hook |
| Catch-all rule | Verifier "valid" + accept-all domain → catch-all-domain (never verified) |
| Freshness windows | Email: 90d; phone: 12mo; hook: 90d |
| Compliance | EU → gdpr_basis: legitimate-interest; DNC → strip phone; role-addresses → never Tier-1 |
| Push routing | PATCH person for verified; interaction:research only for [unverified — needs check] |
Procedure
- Triage the input batch. Group records: email-verify-only / phone / hook / all-three / fresh-skip. Surface counts.
- Cost-quote across passes. Estimate email verify + phone + hook. User chooses passes if budget tight. Reference
${HERMES_SKILL_DIR}/references/enrichment-deep-reference.mdfor verifier cost models. If an enrichment API is not connected, trigger Clarification Protocol: (A) browser session for manual lookup, (B) CSV upload of pre-enriched records, (C) skip the field and mark[UNVERIFIED]. Honor user choice on first response. - Email verification waterfall. Syntax → MX → verifier API → map result to
email_statusenum. Stampprovenance_email: [verified: <verifier>:run_<id>]for valid;[unverified — needs check]for risky/unknown. Tag confidence[H/M/L]per derived field. - Phone discovery + classification. Hunter / Lusha lookup; classify mobile / landline / voip; cross-check DNC for US contacts. Stamp
phone_status. - Personalization-hook capture. Within permission flags: LinkedIn posts → news search → podcast → company blog → G2 review. Capture source URL + date + verbatim text. Hooks ship with permalink OR null. If you reference any Anti-ICP enrichment template (e.g. from
${HERMES_SKILL_DIR}/references/enrichment-deep-reference.md), label it inline as TEMPLATE — DO NOT TREAT AS DATA. Downstream skills must not read template fields as enriched values. Run${HERMES_SKILL_DIR}/scripts/normalize_lead.pyfor field updates. 5a. Manual-mode flow (when API enrichment isn't available). 1) Open the lead's LinkedIn (or company) page in a browser; 2) Manually copy-paste fields into the CSV; 3) Tag provenance asmanualand confidence[M]unless ≥2 sources verified (then[H]); 4) Push as usual via the same script chain. - Compliance pass. EU/UK →
gdpr_basis; personal-email B2B flagged;phone_status: dncstrips phone. - Dedup re-check. Newly-discovered LinkedIn URLs / emails may collide with existing CRM. Run
${HERMES_SKILL_DIR}/scripts/dedup_leads.py. Log merges. - Push patched records. Run
${HERMES_SKILL_DIR}/scripts/push_to_crm.py. PATCH person fields for verified;interaction:researchfor unverified. - Emit run summary + missing-fields report. One-screen: per-pass results, costs, missing-fields, recommended next skill (
lead-scoring).
Pitfalls
- Trusting upstream verifier flags — Apollo's "verified" is hint-quality; always re-verify
- Inventing hooks — "Saw your post on X" with no URL is a hallucinated opener; ship null instead
- Catch-all noise —
@apple.comstyle domains mark everything valid; treat ascatch-all-domain - DNC complacency — TCPA fines are per-violation; strict strip on
phone_status: dnc - Verifying once and forgetting — email lists decay ~30%/year; re-verify quarterly
- Pattern-guessed emails treated as verified — Hunter's pattern-guess is best-guess; verify before promoting
Verification
- Every patched record's
email_statustraces to a verifier run_id - Every personalization hook has a permalink that resolves
- Missing-fields report lists which records still need work and why
lead-scoringcan apply scorecard without[unverified]field gaps capping scores
Output Format
- Sections required: Enriched CSV (same lead schema), Run Summary, Assumptions to Validate
- Tables / fields: Enriched lead schema with
email_status,phone_status,personalization_hook,provenance_<field>, confidence[H/M/L]per derived field - Length target: Run Summary ≤300 words; Assumptions to Validate as bulleted list
- File type: CSV (UTF-8, RFC 4180) + markdown summary
- Mandatory closing sections: Run Summary (records processed, fields filled, confidence distribution, cost), Assumptions to Validate, Recommended Next Skill (
lead-scoring)
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.
- data-enrichment-integration by louisblythe · 136
- data-enrichment by NEON-Rutger · 45
- lead-enrichment by janskuba · 199
- data-viz-deck by thatrebeccarae · 119
- data-and-funnel-analytics by manojbajaj95 · 92
- lead-enrichment by chadboyda · 74
- gtm-data-architecture by NEON-Rutger · 45
- revops-data-governance by NEON-Rutger · 45
Need help setting it up?
This page tells you what data-enrichment 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.