From gtm-cowork-skills
Build an intelligent people map for a target company by combining Attio CRM, LinkedIn (Anysite MCP), Extruct enrichment, Gmail, and Granola meeting notes. Goes beyond a flat list — reads deal notes, email threads, and meeting history to classify each person's role and relevance to the deal. Outputs a CSV with Name, Title, LinkedIn URL, Deal Role, and Relevance Notes. Triggers on: "map out [company]", "org chart", "who works at [company]", "people at [company]", "company people list", "team map", "stakeholder map", "who should we talk to at [company]", "who can influence the deal at [company]", "build a contact list for [company]", even just "[company] org".
How this skill is triggered — by the user, by Claude, or both
Slash command
/gtm-cowork-skills:company-people-listThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Build a stakeholder map for a target company. This is not a flat contact dump — it's
Build a stakeholder map for a target company. This is not a flat contact dump — it's an intelligence product. Every person gets classified by their relevance to the deal, and the output tells the user who matters, who to bring into the conversation, and why.
A raw list of names and titles is useless for sales. What you need is to understand:
The deal context from emails, meetings, and CRM notes is what transforms a contact list into an actionable map.
| Source | What it provides | Tool |
|---|---|---|
| Attio | CRM contacts, deal records, interaction history, connection strength | MCP connector |
| Anysite | LinkedIn profiles, current titles, who actually works there now | MCP connector |
| Extruct | Enriched company data from Company CRM table | MCP connector |
| Gmail | Email threads — who's been in conversations, what's been discussed | MCP connector |
| Granola | Meeting notes — what was said, action items, who attended | MCP connector |
A CSV file with these columns:
Name,Title,LinkedIn URL,Deal Role,Relationship Status,Relevance Notes,LinkedIn Activity & Insights
Before pulling any people data, understand what you're selling and where the deal stands. This context is essential for classifying people later.
Use search-records with object: "companies" to find the company, then check
associated_deals on the company record. Fetch the deal with get-records-by-ids
on object: "deals".
Extract: deal name, stage, type, confidence, owner, associated people, associated company.
Important: Also check for duplicate company records in Attio. Search returns multiple records sometimes — fetch ALL of them and collect ALL team member IDs across duplicates. The "primary" record is the one with the most data (domains, description, most team members).
Use search-notes-by-metadata with parent_record_object: "deals" and the deal record ID.
Then get-note-body for each note. Also check company-level notes.
Use Gmail MCP: gmail_search_messages with from:{company-domain} OR to:{company-domain}.
Then gmail_read_thread on the most important threads (look for deal discussion threads,
not just calendar invites).
From emails, extract:
Use Granola MCP: query_granola_meetings with the company name.
Then get_meetings for details on relevant meetings.
From meetings, extract:
Before proceeding, write a brief internal summary:
This summary drives how you classify people in Step 3.
Collect people record IDs from the team field of EVERY company record matching
this company (including duplicates). Fetch them all with get-records-by-ids.
For each person, note:
strongest_connection_strength (tells you relationship quality)last_interaction dateorigin (Registration, Outbound, Event, etc.)associated_people on the deal record (directly involved)Use execute with source: "linkedin", category: "search", endpoint: "search_users",
params: { "current_company": "<company-name>", "count": 50 }.
Critical: Filter out non-employees. LinkedIn's current_company search returns
people who have the company mentioned anywhere in their profile — including board members,
advisors, portfolio companies' founders, and people who left. You MUST analyze each
result's headline to determine if they actually work there:
Keep if headline contains patterns like:
Filter out if headline suggests they work elsewhere:
For a VC firm specifically, keep: Partners, Principals, Associates, Analysts, Operations, Platform, Marketing/Comms, Fundraising, Legal, Finance roles. Filter out: Portfolio company founders, LPs, advisors who work elsewhere.
If the Extruct MCP is connected, check the Company CRM table and Reverse Lookup table
for people associated with the company. Use get_table_data with the cached table IDs
from .env (EXTRUCT_COMPANY_CRM_TABLE_ID, EXTRUCT_REVERSE_LOOKUP_TABLE_ID).
Note: The Extruct MCP may not be configured in every environment. If the tools aren't available or return no results, skip gracefully and note it in the output summary.
This is the most important step. For every person in the merged list, assign a Deal Role and Relationship Status based on the context gathered in Step 1.
Champion — Someone actively advocating for your product internally. Signs: they signed up for the product, they schedule meetings, they send data/files, they bring colleagues into the conversation, they respond quickly to emails.
Decision Maker — Has authority over budget or final purchasing decision. Signs: senior title (Partner, Managing Partner, VP, Head of), mentioned in deal context as approver, signs contracts.
End User — Will use the product day-to-day if the deal closes. Signs: their role matches the use case (e.g., analysts for a deal sourcing tool), they're mentioned as "the team" who will trial the product.
Influencer — Can sway the decision but doesn't have final authority. Signs: CC'd on emails but doesn't lead conversations, attends meetings but isn't the primary contact, their role intersects with the product's value prop.
Gatekeeper — Controls access to decision makers or manages procurement. Signs: operations/admin role, handles scheduling, manages tool evaluations.
Net New — Found on LinkedIn or Extruct but no interaction history. Worth reaching out to based on their role relevance. Signs: no email history, not in Attio, but their title suggests they'd benefit from or influence the purchase of your product.
Write 1-2 sentences explaining what you know about this person's relationship to the deal. Ground every note in actual data — cite specific emails, meetings, or CRM records. Examples:
Sort by Deal Role priority: Champion → Decision Maker → End User → Influencer → Gatekeeper → Net New. Within each role, sort by Relationship Status: Active → Warm → Cold → Unknown.
Use Python for proper CSV escaping. Save to the workspace folder.
For the most important people (Champions, Decision Makers, key Influencers, and high-value Net New contacts), pull their recent LinkedIn posts and analyze what they're talking about.
For each person, call Anysite execute with source: "linkedin", category: "user", endpoint: "user" using their LinkedIn alias. You need the urn (fsd_profile) from
the response to query posts.
Call execute with source: "linkedin", category: "user", endpoint: "user_posts",
passing the URN and count: 10. Use posted_after with a Unix timestamp (e.g.,
6 months ago) to get recent activity only.
For each person's posts, look for:
Add a "LinkedIn Activity & Insights" column to the CSV. Write 2-3 sentences summarizing what their posting behavior tells you about how to approach them. Always end with a "KEY INSIGHT" — one actionable takeaway.
Examples:
Create a note on the deal record in Attio using create-note so the analysis lives
in the CRM alongside the deal history. This is the most important output — the CSV
is the backup, the note is what the team actually reads.
Use parent_object: "deals" and the deal record ID from Step 1a.
## Stakeholder Map — [Company] ([Month Year])
**Deal:** [deal name] — [stage] (confidence [X])
**Generated:** [date]
**Full spreadsheet:** [link to CSV or Google Sheet]
---
## Key Players
**[Name]** — [Deal Role] ([Relationship Status])
[Title]. [2-3 sentences of reasoning grounded in emails, meetings, CRM data,
and LinkedIn activity. Include the KEY INSIGHT from LinkedIn analysis.]
[Repeat for top 3-5 people]
---
## What LinkedIn Activity Tells Us
- **[Name]**: [1-sentence insight about their posting behavior and what it means
for approach strategy]
[Repeat for each person whose LinkedIn was analyzed]
---
## Expansion Opportunities
1. **[Name]** — [Why they matter and how to reach them]
[Repeat for top 3-5 expansion targets]
---
## Approach Recommendations
- **[Name]**: [Specific action — e.g., "Re-engage via product demo", "Let trial
results speak, then escalate through champion"]
[Repeat for each key person]
---
## Gaps
- [What's missing — no CRM notes, contacts who may have left, missing data sources]
---
*[X] people mapped across Attio, LinkedIn, and email. Full details in the CSV.*
Don't just drop a CSV link. Present the findings as a brief intelligence summary:
| Variable | Source | Purpose |
|---|---|---|
| Attio | MCP connector | CRM data, deals, people, notes |
| Anysite | MCP connector | LinkedIn search and profiles |
| Gmail | MCP connector | Email thread history |
| Granola | MCP connector | Meeting notes and transcripts |
| Extruct | MCP (https://api.extruct.ai/mcp) | Company/people enrichment tables |
name, domains, linkedin, team (linked people), associated_dealsname, job_title, linkedin, email_addresses, company, strongest_connection_strength, last_interaction, originname, stage, deal_type, deal_confidence, associated_people, associated_company, ownersource: "linkedin", category: "company", endpoint: "company"source: "linkedin", category: "search", endpoint: "search_users"source: "linkedin", category: "user", endpoint: "user"source: "linkedin", category: "user", endpoint: "user_posts" (requires URN from user endpoint)source: "linkedin", category: "user", endpoint: "user_comments" (requires URN)Always call discover before execute if unsure of endpoint params.
EXTRUCT_COMPANY_CRM_TABLE_ID from .env, fetch via get_table_dataEXTRUCT_REVERSE_LOOKUP_TABLE_ID from .env, fetch via get_table_datanpx claudepluginhub extruct-ai/gtm-cowork-skillsResearches meeting attendees and their companies using real-time web data to surface roles, recent activity, company context, and talking points.
Retrieves contact profiles from Common Room by email, handle, or name+company, with activity history, scores, Spark persona, account context, and conversation hooks.
Finds company and contact data from 150M+ companies and 800M+ professionals for lead generation, prospect research, and talent identification.