Contact Research logo

Contact Research

Organization
explorium-ai
contact-research

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.

Overview

Publisherexplorium-ai
Repositorygtm-skills
Skill namecontact-research
Stars
293
Forks
3
Bundled files
Instructions only
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • Self-contained

    Everything the model needs lives in the instructions — no extra files to sync.

  • Open source

    Published by explorium-ai on GitHub. Read the source before you install it.

Installation

Install the Contact Research AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/explorium-ai/gtm-skills/tree/main/skills/contact-research
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/explorium-ai/gtm-skills.git /tmp/gtm-skills
mkdir -p .claude/skills
cp -r /tmp/gtm-skills/skills/contact-research .claude/skills/contact-research
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Contact Research in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Contact Research on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Contact Research is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

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:

bash
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):

ColumnDescription
full_nameFull name (or first_name + last_name separately)
emailWork or personal email
linkedinLinkedIn profile URL
company_nameCurrent company name
business_idVibe 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.

bash
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.

bash
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.

bash
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.

bash
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:

ColumnDescription
full_nameFull name
job_titleCurrent title
company_nameCurrent company
work_emailVerified work email
linkedin_urlLinkedIn URL
phoneDirect phone (if available)
synopsisClaude's professional synopsis
career_signalMost recent job change or promotion (if any, last 12 months)
years_in_roleApproximate 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

ProblemSolution
Vibe Prospecting tools missingConnect from connector store; wait for mcp__*__fetch-entities to appear
Low match rateAdd LinkedIn URLs or emails to input — they're the strongest match signals. Names alone match poorly for common names
Profile data sparseNot all profiles are equally populated. Flag thin records to the user and note what's missing
No contact info returnedSome people have limited public contact data. Note it in the synopsis card rather than leaving it blank
Career events emptyPerson may not have changed jobs recently — note their tenure in current role instead
Synopsis feels genericClaude needs data to work with — if enrichment returned little, flag the record rather than inventing details

Frequently asked questions

What does the Contact Research AI skill do?

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.

Why use Contact Research on TypingMind?

Because you install it once and use it with any model. Contact Research is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Contact Research in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/explorium-ai/gtm-skills/tree/main/skills/contact-research. TypingMind reads its SKILL.md and installs it as a skill you can enable per chat.

Which AI models can use Contact Research?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Contact Research?

As many as you like. As long as a model supports skills, you can use Contact Research with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Contact Research AI skill free?

Yes. It is published on GitHub by explorium-ai under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇