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 ↗

Use now

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

explorium-ai/main1 file shown
SKILL.md
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:

  1. Who they are right now — current role, company, seniority. What they're responsible for.
  2. How they got here — 1–2 relevant prior roles that show their trajectory or expertise.
  3. What they know — domain expertise, industries they've worked in, notable skills or patterns across their career.
  4. What's changed recently — any job change or promotion in the last 12 months. If nothing changed, note their tenure in the current role.
  5. 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---
2name: contact-research
3description: "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."
4compatibility: "Requires: Vibe Prospecting CLI (npx @vibeprospecting/vpai@latest) or connector"
5---
6 
7# Contact Research — Vibe Prospecting Deep Profile
8 
9Given 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```bash
29npx @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 
38Ask 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
43Claude 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
46Accepted 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 
56Save the file as `people-input.csv`.
57 
58### Option C — Find them from scratch
59If 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```bash
62npx @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 
81Resolve each person to an Explorium prospect ID. This unlocks all downstream enrichment.
82 
83```bash
84npx @vibeprospecting/vpai@latest match-prospects --all-parameters
85 
86# From CSV
87npx @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 
93Note 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 
101Pull the full professional profile for each matched person, plus their verified contact details.
102 
103```bash
104npx @vibeprospecting/vpai@latest enrich-prospects --all-parameters
105 
106npx @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 
132Pull 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```bash
135npx @vibeprospecting/vpai@latest fetch-prospects-events --all-parameters
136 
137npx @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 
148Save the combined enriched + events data as `people-enriched.csv`.
149 
150---
151 
152## Phase 5 — Write Professional Synopses
153 
154Read `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 
1581. **Who they are right now** — current role, company, seniority. What they're responsible for.
1592. **How they got here** — 1–2 relevant prior roles that show their trajectory or expertise.
1603. **What they know** — domain expertise, industries they've worked in, notable skills or patterns across their career.
1614. **What's changed recently** — any job change or promotion in the last 12 months. If nothing changed, note their tenure in the current role.
1625. **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 
174Present results in two formats:
175 
176### 1. In-chat briefing (for small lists, ≤ 10 people)
177 
178Show 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 
190Career 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 
196Write `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

AI Sales Team — Main OrchestratorYou are a comprehensive AI sales intelligence and outreach system for Claude Code. You help founders, sales teams, agency owners, and…Sales & ecommerce · MITAuto research publicAutonomous cold email campaign launcher. Takes one target company domain, scrapes their website, generates an ICP with Claude, pulls matching leads via Prospeo, enriches emails + company descriptions, personalizes each lead with parallel Claude Code Task sub-agents (A/B/C variants), and uploads as a live Smartlead campaign. Uses local JSON files for state (no database required). Use for automated daily campaign launches after you have an initial `client-profile.yaml` from /icp-onboarding. Triggers on "auto-research", "launch an automated campaign", "daily campaign", "run the research loop".Sales & ecommerce · MITABM Campaign — DIY PlaybookABM campaign skill for Claude Code: run a full Account-Based Marketing campaign end-to-end — from ICP definition to live LinkedIn Ads. Builds targeted account lists with Vibe Prospecting, enriches and scores companies with real-time B2B data, generates personalized ad creatives with Claude Code and Figma, pushes matched audiences to LinkedIn Ads, and monitors campaigns daily at scale. The complete GTM skill for AI-driven account-based marketing in Claude Code, Codex, Hermes-Agent, and OpenClaw. No agency needed.Sales & ecommerce · MITAccount contact shortlistContact data skill for Claude Code and Codex: build a ranked shortlist of decision-makers and contacts at a target company for outbound prospecting, deal acceleration, or renewal/expansion plays. Returns verified contact data including email, phone, LinkedIn profile, title, seniority, and department. Provide a company name or domain plus optional seniority focus or use case. Use for contact data enrichment, LinkedIn profile lookup, and building outbound contact lists. Works in Claude Code, Codex, Hermes-Agent, and OpenClaw.Business & ops · MIT