Contact Research — Vibe Prospecting Deep Profile skill
Contact research skill for Claude Code and Codex: given a list of people, match and enrich each one with Vibe Prospecting — verified work email, LinkedIn, direct phone, current role, work history, seniority, and recent job changes — then write a 4-6 sentence professional synopsis per person.
by explorium-ai·MIT license·★ 197 Stars on the repo·GitHub ↗
npx degit explorium-ai/gtm-skills/skills/contact-research#main ~/.claude/skills/contact-researchChecked ·commit main
Inside this skill
SKILL.md · the author's own words# Contact Research — Vibe Prospecting Deep Profile Given a list of people, match and enrich each one with Vibe Prospecting, then have Claude write a professional synopsis — who they are, wha… **What you'll end up with:** - Verified contact info (work email, LinkedIn, direct phone) for each person - A full professional profile: current role, work history, seniority, department, company context - Recent career signals: job changes, promotions - A 4–6 sentence professional synopsis per person, written by Claude in plain English **Good for:** pre-call research, account intelligence, investor diligence on founders, recruiting, conference prep. --- ## Step 0 — Credential Check (Claude: always do this first)
Word-for-word excerpt, not a result. Read the full SKILL.md ↓
Files of Contact Research — Vibe Prospecting Deep Profile
Show the full text236 lines
Contact Research — Vibe Prospecting Deep Profile
Given a list of people, match and enrich each one with Vibe Prospecting, then have Claude write a professional synopsis — who they are, what they do, their career trajectory, and what's relevant to know before engaging with them.
What you'll end up with:
- Verified contact info (work email, LinkedIn, direct phone) for each person
- A full professional profile: current role, work history, seniority, department, company context
- Recent career signals: job changes, promotions
- A 4–6 sentence professional synopsis per person, written by Claude in plain English
Good for: pre-call research, account intelligence, investor diligence on founders, recruiting, conference prep.
Step 0 — Credential Check (Claude: always do this first)
Cowork mode: confirm mcp__*__fetch-entities is in your tool list.
- ✅ Found → proceed
- ❌ Missing → tell the user: "Please connect the Vibe Prospecting connector from the connector store, then let me know." Wait. Do not continue.
Claude Code / terminal:
npx @vibeprospecting/vpai@latest --help
- ✅ Lists tools → proceed
- ❌ Error → run:
npx @vibeprospecting/vpai@latest config --api-key "YOUR_VP_API_KEY"
Phase 1 — Prepare Your People List
Ask the user how they want to provide their list:
"How would you like to provide the people? You can: (A) paste names and companies directly in chat, (B) share a CSV file, or (C) describe who you're targeting and I'll find them from Vibe Prospecting's database."
Option A — Paste in chat
Claude converts the input into a structured CSV. Minimum needed per person: full_name + one of company_name, email, or linkedin.
Option B — CSV file
Accepted columns (use whatever you have — more is better for matching):
| Column | Description |
|---|---|
full_name |
Full name (or first_name + last_name separately) |
email |
Work or personal email |
linkedin |
LinkedIn profile URL |
company_name |
Current company name |
business_id |
Vibe Prospecting business ID (skip match step if you have this) |
Save the file as people-input.csv.
Option C — Find them from scratch
If the user describes a persona (e.g. "CFOs at fintech companies in the US"), use fetch-entities with entity_type: prospects to build the list, then proceed from Phase 2. Sample 5 first before scaling.
npx @vibeprospecting/vpai@latest fetch-entities \
--args '{
"entity_type": "prospects",
"filters": {
"job_level": {"values": ["c_suite"]},
"job_department": {"values": ["finance"]},
"linkedin_category": {"values": ["Financial Services"]},
"company_country_code": {"values": ["US"]},
"has_email": true
}
}' \
--number-of-results 5 \
--tool-reasoning '<user request verbatim>'
Phase 2 — Match to Vibe Prospecting IDs
Resolve each person to an Explorium prospect ID. This unlocks all downstream enrichment.
npx @vibeprospecting/vpai@latest match-prospects --all-parameters
# From CSV
npx @vibeprospecting/vpai@latest match-prospects \
--file-path people-input.csv \
--schema '{"full_name":"full_name","email":"email","linkedin":"linkedin","company_name":"company_name"}' \
--tool-reasoning 'Match people list for deep contact research'
Note the session_id and table_name from the output.
On low match confidence: drop records with confidence < 0.7 and flag them for the user — they may need a cleaner input (e.g. adding LinkedIn URL or email helps significantly).
Phase 3 — Enrich Profiles and Contact Info
Pull the full professional profile for each matched person, plus their verified contact details.
npx @vibeprospecting/vpai@latest enrich-prospects --all-parameters
npx @vibeprospecting/vpai@latest enrich-prospects \
--args '{
"enrichments": ["contacts", "profiles"]
}' \
--session-id <SESSION_ID> \
--table-name <TABLE_NAME_FROM_MATCH_STEP> \
--tool-reasoning 'Enrich profiles and contact info for research' \
--csv
What "profiles" gives you:
- Current job title, department, seniority level
- Full work history (company, title, dates)
- Education history
- LinkedIn URL
- Skills and areas of expertise
What "contacts" gives you:
- Verified work email
- Direct phone / mobile (when available)
- LinkedIn URL (confirmed)
Phase 4 — Fetch Career Signals
Pull recent career events for each person — job changes and promotions are the most useful signals for understanding where someone is and why they might be receptive to a conversation.
npx @vibeprospecting/vpai@latest fetch-prospects-events --all-parameters
npx @vibeprospecting/vpai@latest fetch-prospects-events \
--args '{
"event_types": ["job_change", "promotion"],
"timestamp_from": "<12 months ago, format YYYY-MM-DD>"
}' \
--session-id <SESSION_ID> \
--table-name <TABLE_NAME_FROM_ENRICH_STEP> \
--tool-reasoning 'Fetch career events for contact research' \
--csv
Save the combined enriched + events data as people-enriched.csv.
Phase 5 — Write Professional Synopses
Read people-enriched.csv and write a professional brief for each person. Each synopsis should be in plain, natural English — like a colleague briefing you before a meeting, not a LinkedIn bio.
For each person, write a 4–6 sentence synopsis covering:
- Who they are right now — current role, company, seniority. What they're responsible for.
- How they got here — 1–2 relevant prior roles that show their trajectory or expertise.
- What they know — domain expertise, industries they've worked in, notable skills or patterns across their career.
- What's changed recently — any job change or promotion in the last 12 months. If nothing changed, note their tenure in the current role.
- What's worth knowing — one insight that would be useful before engaging: a shared background, a relevant company pivot, a pattern in their career, or a company context signal (e.g. their company just raised, or is in a growth stage).
Tone: confident, specific, no filler. Avoid phrases like "passionate about", "seasoned professional", or "proven track record." Use the actual data.
Example synopsis:
Sarah Chen is the VP of Revenue Operations at Lattice, where she owns the full RevOps stack — CRM, pipeline reporting, territory planning, and sales tool evaluation. Before Lattice she spent four years at Salesforce, first as a sales ops analyst and then as a senior manager, which explains her strong bias toward CRM-native workflows. Her career has stayed tightly in the revenue/GTM ops lane, moving from execution roles into leadership over the last three years. She joined Lattice 14 months ago, likely as part of a post-Series D scaling push. Worth knowing: Lattice runs HubSpot, not Salesforce — so she made a deliberate switch when she moved, which suggests she's not locked into any one platform.
Phase 6 — Deliver the Output
Present results in two formats:
1. In-chat briefing (for small lists, ≤ 10 people)
Show each person as a card:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
👤 [Full Name] — [Title] at [Company]
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📧 [work_email]
🔗 [linkedin_url]
📱 [phone if available]
[Synopsis paragraph]
Career signals: [any job change/promotion in last 12 months, or "No recent changes — [X] years in current role"]
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
2. CSV export (for larger lists or when the user wants to save/share)
Write people-research.csv with columns:
| Column | Description |
|---|---|
full_name |
Full name |
job_title |
Current title |
company_name |
Current company |
work_email |
Verified work email |
linkedin_url |
LinkedIn URL |
phone |
Direct phone (if available) |
synopsis |
Claude's professional synopsis |
career_signal |
Most recent job change or promotion (if any, last 12 months) |
years_in_role |
Approximate tenure in current role |
Full Checklist
[ ] Step 0 — Vibe Prospecting connected
[ ] Phase 1 — People list prepared (pasted, CSV, or fetched)
[ ] Phase 2 — Matched to Vibe Prospecting prospect IDs
[ ] Phase 3 — Profiles and contact info enriched
[ ] Phase 4 — Career signals fetched (job changes, promotions)
[ ] Phase 5 — Professional synopses written by Claude
[ ] Phase 6 — Delivered as in-chat cards and/or CSV export
Troubleshooting
| Problem | Solution |
|---|---|
| Vibe Prospecting tools missing | Connect from connector store; wait for mcp__*__fetch-entities to appear |
| Low match rate | Add LinkedIn URLs or emails to input — they're the strongest match signals. Names alone match poorly for common names |
| Profile data sparse | Not all profiles are equally populated. Flag thin records to the user and note what's missing |
| No contact info returned | Some people have limited public contact data. Note it in the synopsis card rather than leaving it blank |
| Career events empty | Person may not have changed jobs recently — note their tenure in current role instead |
| Synopsis feels generic | Claude needs data to work with — if enrichment returned little, flag the record rather than inventing details |
| 1 | |
| 2 | name contact-research |
| 3 | description "Contact research skill for Claude Code and Codex: given a list of people, match and enrich each one with Vibe Prospecting — verified work email, LinkedIn, direct phone, current role, work history, seniority, and recent job changes — then write a 4-6 sentence professional synopsis per person. Use for pre-call research, account intelligence, founder diligence, recruiting, and conference prep. Triggers on 'research these people', 'profile this contact list', 'who are these attendees', 'background on these prospects'. Works in Claude Code, Codex, Grok, and Claude Cowork." |
| 4 | compatibility "Requires: Vibe Prospecting CLI (npx @vibeprospecting/vpai@latest) or connector" |
| 5 | |
| 6 | |
| 7 | # Contact Research — Vibe Prospecting Deep Profile |
| 8 | |
| 9 | Given a list of people, match and enrich each one with Vibe Prospecting, then have Claude write a professional synopsis — who they are, what they do, their career trajectory, and what's relevant to know before engaging with them. |
| 10 | |
| 11 | **What you'll end up with:** |
| 12 | Verified contact info (work email, LinkedIn, direct phone) for each person |
| 13 | A full professional profile: current role, work history, seniority, department, company context |
| 14 | Recent career signals: job changes, promotions |
| 15 | A 4–6 sentence professional synopsis per person, written by Claude in plain English |
| 16 | |
| 17 | **Good for:** pre-call research, account intelligence, investor diligence on founders, recruiting, conference prep. |
| 18 | |
| 19 | |
| 20 | |
| 21 | ## Step 0 — Credential Check (Claude: always do this first) |
| 22 | |
| 23 | **Cowork mode:** confirm `mcp__*__fetch-entities` is in your tool list. |
| 24 | ✅ Found → proceed |
| 25 | ❌ Missing → tell the user: *"Please connect the Vibe Prospecting connector from the connector store, then let me know."* Wait. Do not continue. |
| 26 | |
| 27 | **Claude Code / terminal:** |
| 28 | |
| 29 | npx @vibeprospecting/vpai@latest --help |
| 30 | |
| 31 | ✅ Lists tools → proceed |
| 32 | ❌ Error → run: `npx @vibeprospecting/vpai@latest config --api-key "YOUR_VP_API_KEY"` |
| 33 | |
| 34 | |
| 35 | |
| 36 | ## Phase 1 — Prepare Your People List |
| 37 | |
| 38 | Ask the user how they want to provide their list: |
| 39 | |
| 40 | > *"How would you like to provide the people? You can: (A) paste names and companies directly in chat, (B) share a CSV file, or (C) describe who you're targeting and I'll find them from Vibe Prospecting's database."* |
| 41 | |
| 42 | ### Option A — Paste in chat |
| 43 | Claude converts the input into a structured CSV. Minimum needed per person: `full_name` + one of `company_name`, `email`, or `linkedin`. |
| 44 | |
| 45 | ### Option B — CSV file |
| 46 | Accepted columns (use whatever you have — more is better for matching): |
| 47 | |
| 48 | | Column | Description | |
| 49 | |--------|-------------| |
| 50 | | `full_name` | Full name (or `first_name` + `last_name` separately) | |
| 51 | | `email` | Work or personal email | |
| 52 | | `linkedin` | LinkedIn profile URL | |
| 53 | | `company_name` | Current company name | |
| 54 | | `business_id` | Vibe Prospecting business ID (skip match step if you have this) | |
| 55 | |
| 56 | Save the file as `people-input.csv`. |
| 57 | |
| 58 | ### Option C — Find them from scratch |
| 59 | If the user describes a persona (e.g. "CFOs at fintech companies in the US"), use `fetch-entities` with `entity_type: prospects` to build the list, then proceed from Phase 2. Sample 5 first before scaling. |
| 60 | |
| 61 | |
| 62 | npx @vibeprospecting/vpai@latest fetch-entities \ |
| 63 | --args '{ |
| 64 | "entity_type": "prospects", |
| 65 | "filters": { |
| 66 | "job_level": {"values": ["c_suite"]}, |
| 67 | "job_department": {"values": ["finance"]}, |
| 68 | "linkedin_category": {"values": ["Financial Services"]}, |
| 69 | "company_country_code": {"values": ["US"]}, |
| 70 | "has_email": true |
| 71 | } |
| 72 | }' \ |
| 73 | --number-of-results 5 \ |
| 74 | --tool-reasoning '<user request verbatim>' |
| 75 | |
| 76 | |
| 77 | |
| 78 | |
| 79 | ## Phase 2 — Match to Vibe Prospecting IDs |
| 80 | |
| 81 | Resolve each person to an Explorium prospect ID. This unlocks all downstream enrichment. |
| 82 | |
| 83 | |
| 84 | npx @vibeprospecting/vpai@latest match-prospects --all-parameters |
| 85 | |
| 86 | # From CSV |
| 87 | npx @vibeprospecting/vpai@latest match-prospects \ |
| 88 | --file-path people-input.csv \ |
| 89 | --schema '{"full_name":"full_name","email":"email","linkedin":"linkedin","company_name":"company_name"}' \ |
| 90 | --tool-reasoning 'Match people list for deep contact research' |
| 91 | |
| 92 | |
| 93 | Note the `session_id` and `table_name` from the output. |
| 94 | |
| 95 | **On low match confidence:** drop records with confidence < 0.7 and flag them for the user — they may need a cleaner input (e.g. adding LinkedIn URL or email helps significantly). |
| 96 | |
| 97 | |
| 98 | |
| 99 | ## Phase 3 — Enrich Profiles and Contact Info |
| 100 | |
| 101 | Pull the full professional profile for each matched person, plus their verified contact details. |
| 102 | |
| 103 | |
| 104 | npx @vibeprospecting/vpai@latest enrich-prospects --all-parameters |
| 105 | |
| 106 | npx @vibeprospecting/vpai@latest enrich-prospects \ |
| 107 | --args '{ |
| 108 | "enrichments": ["contacts", "profiles"] |
| 109 | }' \ |
| 110 | --session-id <SESSION_ID> \ |
| 111 | --table-name <TABLE_NAME_FROM_MATCH_STEP> \ |
| 112 | --tool-reasoning 'Enrich profiles and contact info for research' \ |
| 113 | --csv |
| 114 | |
| 115 | |
| 116 | **What "profiles" gives you:** |
| 117 | Current job title, department, seniority level |
| 118 | Full work history (company, title, dates) |
| 119 | Education history |
| 120 | LinkedIn URL |
| 121 | Skills and areas of expertise |
| 122 | |
| 123 | **What "contacts" gives you:** |
| 124 | Verified work email |
| 125 | Direct phone / mobile (when available) |
| 126 | LinkedIn URL (confirmed) |
| 127 | |
| 128 | |
| 129 | |
| 130 | ## Phase 4 — Fetch Career Signals |
| 131 | |
| 132 | Pull recent career events for each person — job changes and promotions are the most useful signals for understanding where someone is and why they might be receptive to a conversation. |
| 133 | |
| 134 | |
| 135 | npx @vibeprospecting/vpai@latest fetch-prospects-events --all-parameters |
| 136 | |
| 137 | npx @vibeprospecting/vpai@latest fetch-prospects-events \ |
| 138 | --args '{ |
| 139 | "event_types": ["job_change", "promotion"], |
| 140 | "timestamp_from": "<12 months ago, format YYYY-MM-DD>" |
| 141 | }' \ |
| 142 | --session-id <SESSION_ID> \ |
| 143 | --table-name <TABLE_NAME_FROM_ENRICH_STEP> \ |
| 144 | --tool-reasoning 'Fetch career events for contact research' \ |
| 145 | --csv |
| 146 | |
| 147 | |
| 148 | Save the combined enriched + events data as `people-enriched.csv`. |
| 149 | |
| 150 | |
| 151 | |
| 152 | ## Phase 5 — Write Professional Synopses |
| 153 | |
| 154 | Read `people-enriched.csv` and write a professional brief for each person. Each synopsis should be in plain, natural English — like a colleague briefing you before a meeting, not a LinkedIn bio. |
| 155 | |
| 156 | **For each person, write a 4–6 sentence synopsis covering:** |
| 157 | |
| 158 | **Who they are right now** — current role, company, seniority. What they're responsible for. |
| 159 | **How they got here** — 1–2 relevant prior roles that show their trajectory or expertise. |
| 160 | **What they know** — domain expertise, industries they've worked in, notable skills or patterns across their career. |
| 161 | **What's changed recently** — any job change or promotion in the last 12 months. If nothing changed, note their tenure in the current role. |
| 162 | **What's worth knowing** — one insight that would be useful before engaging: a shared background, a relevant company pivot, a pattern in their career, or a company context signal (e.g. their company just raised, or is in a growth stage). |
| 163 | |
| 164 | **Tone:** confident, specific, no filler. Avoid phrases like "passionate about", "seasoned professional", or "proven track record." Use the actual data. |
| 165 | |
| 166 | **Example synopsis:** |
| 167 | |
| 168 | > Sarah Chen is the VP of Revenue Operations at Lattice, where she owns the full RevOps stack — CRM, pipeline reporting, territory planning, and sales tool evaluation. Before Lattice she spent four years at Salesforce, first as a sales ops analyst and then as a senior manager, which explains her strong bias toward CRM-native workflows. Her career has stayed tightly in the revenue/GTM ops lane, moving from execution roles into leadership over the last three years. She joined Lattice 14 months ago, likely as part of a post-Series D scaling push. Worth knowing: Lattice runs HubSpot, not Salesforce — so she made a deliberate switch when she moved, which suggests she's not locked into any one platform. |
| 169 | |
| 170 | |
| 171 | |
| 172 | ## Phase 6 — Deliver the Output |
| 173 | |
| 174 | Present results in two formats: |
| 175 | |
| 176 | ### 1. In-chat briefing (for small lists, ≤ 10 people) |
| 177 | |
| 178 | Show each person as a card: |
| 179 | |
| 180 | |
| 181 | ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ |
| 182 | 👤 [Full Name] — [Title] at [Company] |
| 183 | ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ |
| 184 | 📧 [work_email] |
| 185 | 🔗 [linkedin_url] |
| 186 | 📱 [phone if available] |
| 187 | |
| 188 | [Synopsis paragraph] |
| 189 | |
| 190 | Career signals: [any job change/promotion in last 12 months, or "No recent changes — [X] years in current role"] |
| 191 | ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ |
| 192 | |
| 193 | |
| 194 | ### 2. CSV export (for larger lists or when the user wants to save/share) |
| 195 | |
| 196 | Write `people-research.csv` with columns: |
| 197 | |
| 198 | | Column | Description | |
| 199 | |--------|-------------| |
| 200 | | `full_name` | Full name | |
| 201 | | `job_title` | Current title | |
| 202 | | `company_name` | Current company | |
| 203 | | `work_email` | Verified work email | |
| 204 | | `linkedin_url` | LinkedIn URL | |
| 205 | | `phone` | Direct phone (if available) | |
| 206 | | `synopsis` | Claude's professional synopsis | |
| 207 | | `career_signal` | Most recent job change or promotion (if any, last 12 months) | |
| 208 | | `years_in_role` | Approximate tenure in current role | |
| 209 | |
| 210 | |
| 211 | |
| 212 | ## Full Checklist |
| 213 | |
| 214 | |
| 215 | [ ] Step 0 — Vibe Prospecting connected |
| 216 | [ ] Phase 1 — People list prepared (pasted, CSV, or fetched) |
| 217 | [ ] Phase 2 — Matched to Vibe Prospecting prospect IDs |
| 218 | [ ] Phase 3 — Profiles and contact info enriched |
| 219 | [ ] Phase 4 — Career signals fetched (job changes, promotions) |
| 220 | [ ] Phase 5 — Professional synopses written by Claude |
| 221 | [ ] Phase 6 — Delivered as in-chat cards and/or CSV export |
| 222 | |
| 223 | |
| 224 | |
| 225 | |
| 226 | ## Troubleshooting |
| 227 | |
| 228 | | Problem | Solution | |
| 229 | |---------|----------| |
| 230 | | Vibe Prospecting tools missing | Connect from connector store; wait for `mcp__*__fetch-entities` to appear | |
| 231 | | Low match rate | Add LinkedIn URLs or emails to input — they're the strongest match signals. Names alone match poorly for common names | |
| 232 | | Profile data sparse | Not all profiles are equally populated. Flag thin records to the user and note what's missing | |
| 233 | | No contact info returned | Some people have limited public contact data. Note it in the synopsis card rather than leaving it blank | |
| 234 | | Career events empty | Person may not have changed jobs recently — note their tenure in current role instead | |
| 235 | | Synopsis feels generic | Claude needs data to work with — if enrichment returned little, flag the record rather than inventing details | |
| 236 |
Discussion
Alternatives
Browse more free Claude skills or everything in Sales.