Trade-show-skills trade-show-contact-finder
Find decision-makers and key contacts at exhibitor companies using the Lensmor API. \"Who should I contact at this company?\" / \"找联系人\" / \"Entscheidungsträger finden\" / \"担当者を探す\" / \"encontrar responsables de compras\". find contacts, decision maker, key person, find buyers, 找联系人, 找决策人, 谁负责采购, 找负责人 Entscheidungsträger Einkäufer 意思決定者 responsable de compras
git clone https://github.com/LensmorOfficial/trade-show-skills
T=$(mktemp -d) && git clone --depth=1 https://github.com/LensmorOfficial/trade-show-skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/trade-show-contact-finder" ~/.claude/skills/lensmorofficial-trade-show-skills-trade-show-contact-finder && rm -rf "$T"
trade-show-contact-finder/SKILL.mdLensmor Contact Finder
Find decision-makers and key contacts at target exhibitor companies using the Lensmor API — then connect on LinkedIn with a personalized outreach sequence.
When this skill triggers:
- Run the API key check (Step 1) before any API call
- Collect the target company name and optional role/function filter
- Call the contacts search endpoint and return a prioritized contact table
- Hand off to
for outreach copytrade-show-linkedin-templates
Use Cases
- Pre-show outreach: Identify the right buyer or champion at a target exhibitor before the show
- Booth meeting scheduling: Find titles to target for pre-scheduled booth meetings
- Account-based research: Build a contact list for a shortlist of exhibitor companies
Important: Email Not Available
The Lensmor contacts API does not return email addresses. LinkedIn is the primary contact channel. All outreach recommendations in this skill assume LinkedIn messaging.
Workflow
Step 1: API Key Check
Before making any API call, verify the key is configured:
[ -n "$LENSMOR_API_KEY" ] && echo "ok" || echo "missing"
If the result is
missing, stop and respond:
The
environment variable is not set. This skill requires a Lensmor API key to search contacts. Contact hello@lensmor.com to purchase access, then set the key:LENSMOR_API_KEYexport LENSMOR_API_KEY=your_key_here
Do not proceed to any API call until the key is confirmed present.
Step 2: Collect Inputs
Required:
— Full or partial company name (1–200 characters), e.g.company_nameOperaOps
Optional:
— Role or function filter. Examples:role
,VP Sales
,Marketing
,Procurement
,CTOHead of Operations
— Page number (default: 1)page
— Results per page (default: 20, max: 100)pageSize
If the user provides a list of companies from a prior
trade-show-exhibitor-search or trade-show-lead-recommender run, process each company sequentially and label sections clearly.
Role filter guidance: use broad department terms (
Marketing, Operations, Engineering) for wide coverage, or specific titles (VP Sales, Head of Procurement) for precision targeting.
Step 3: Call the API
Endpoint:
GET https://platform.lensmor.com/external/contacts/search
Authentication:
Authorization: Bearer $LENSMOR_API_KEY
Query parameters:
| Parameter | Required | Description |
|---|---|---|
| Yes | Company name to search |
| No | Role or function filter |
| No | Page number (default: 1) |
| No | Results per page (default: 20, max: 100) |
Step 4: Interpret the Response
Response envelope:
{ "items": [...], "total": 18, "page": 1, "pageSize": 20, "totalPages": 1 }
Item field reference:
| Field | Type | Description |
|---|---|---|
| string | Lensmor internal contact ID |
| string | Contact's full name |
| string | Job title as listed on their profile |
| string | Department or function (e.g. , , ) |
| string | , , , or |
| string | LinkedIn profile URL — primary outreach channel |
| string | Company they work at (confirms match to queried company) |
| string | Data provenance: , , , etc. |
Outreach priority signals:
| Signal | Priority Implication |
|---|---|
| Decision-maker — concise, high-value pitch |
| Budget holder or strong influencer — primary target |
| Champion or evaluator — good for discovery conversations |
| Use for introductions or referrals |
matches buyer function | Higher-priority than cross-functional contacts |
present | Ready for direct LinkedIn outreach |
Sort order:
Executive > Director > Manager > Individual Contributor within the same department. Within the same seniority, prioritize by department match to the user's target buyer function.
Step 5: Format the Output
Open with a result count summary, then deliver a prioritized table and outreach notes.
## Contacts at [Company Name] Found [total] contacts. Showing [pageSize] on page [page] of [totalPages]. Role filter: [role or "all"] | Note: email addresses are not available — LinkedIn is the primary outreach channel. | Priority | Name | Title | Department | Seniority | LinkedIn | |----------|------|-------|------------|-----------|----------| | 1 | Sarah Chen | VP Procurement | Procurement | Director | [LinkedIn](https://linkedin.com/in/sarahchen) | | 2 | Marcus Webb | Head of Operations | Operations | Director | [LinkedIn](https://linkedin.com/in/marcuswebb) | | 3 | Priya Rao | Procurement Manager | Procurement | Manager | [LinkedIn](https://linkedin.com/in/priyarao) | ### Outreach Priority Notes - **Sarah Chen (VP Procurement)**: Primary target — decision-maker authority, department match - **Marcus Webb (Head of Operations)**: Secondary target — strong influencer in operations-adjacent procurement - **Priya Rao (Procurement Manager)**: Champion candidate — hands-on evaluator, good for discovery **Suggested next step**: Use `trade-show-linkedin-templates` to draft personalized outreach for each seniority tier.
Error Handling
| HTTP Status | Meaning | Response |
|---|---|---|
| 401 | API key invalid or expired | "The API key was rejected. Verify or contact hello@lensmor.com." |
| 400 | Missing required parameter | "The request is missing . Provide a company name to search." |
| 429 | Rate limit exceeded | "Rate limit reached. Wait 60 seconds and retry." |
| 502 / 5xx | Server error | "The Lensmor API returned a server error. Try again in a moment." |
| No contacts found | "No contacts found for with role filter . Try broadening the role filter (e.g. use 'Marketing' instead of 'VP Marketing') or check the company name spelling." |
Follow-up Routing
| User says | Recommended action |
|---|---|
| "draft a message for [contact]" | Run |
| "find more companies like this" | Run or |
| "find contacts at multiple companies" | Process each company sequentially with this skill |
| "show me more" / "next page" | Re-call with incremented by 1 |
Skill Coordination
Upstream — who feeds this skill:
— produces the list of target companiestrade-show-exhibitor-search
— produces AI-ranked companies for ICP matchtrade-show-lead-recommender
Downstream — where contacts go next:
— generates personalized LinkedIn outreach messages for each contact tiertrade-show-linkedin-templates
Typical pre-show workflow:
→ find matching exhibitorstrade-show-lead-recommender
(this skill) → find decision-makers at each companytrade-show-contact-finder
→ draft personalized messages per seniority tiertrade-show-linkedin-templates
Output Rules
- All URLs formatted as
— never bare links[text](url) - Never output the value of
LENSMOR_API_KEY - Never expose endpoint paths, raw curl commands, or internal token values in the response
- Employee counts above 1,000 shown as "1.2K"; above 1,000,000 as "1.2M"
- Empty results: report honestly, suggest broadening role filter — never fabricate contacts
- End every response with 1–3 contextual follow-up suggestions
- Never imply email availability — explicitly note that only LinkedIn profiles are returned
- When
, prompt: "There are more contacts — say 'next page' to continue."totalPages > 1 - If API key is missing, direct user to hello@lensmor.com — do not just say "please configure"
- Open every response with "Found X contacts, showing Y."
Quality Checks
Before delivering:
- Do not invent contacts or titles; use only what the API returns
- If
is null, note that no LinkedIn profile is available and recommend manual search via LinkedIn Sales NavigatorlinkedinUrl - If user asks for email addresses, explicitly state the API does not provide them
- Seniority priority is a guideline; surface the closest available match if target title differs
- For multi-company batch requests, process each company separately and label sections clearly
Contact data sourced from the Lensmor platform. For AI-powered exhibitor discovery, decision-maker identification, and pre-show outreach sequencing, see Lensmor.