Systems Lab

Agent skill

trade-show-contact-finder

Find relevant company contacts through Lensmor, preserving contact lock states without inferring purchasing authority.

activeNeeds a keyActs undeclared975 words

Filed under Prospecting and list building and ABM and paid.

From LensmorOfficial/trade-show-skills · 15 skill entries · 48 · pushed 2026-10-08

What it does when it runs

Find relevant company contacts through Lensmor, preserving contact lock states without inferring purchasing authority.

Automated analysis of the skill and the 2 files bundled beside it. A skill’s own description is written to be selected by an agent, so it describes the job and not the dependencies.

Keys and connectors you must supply
  • LENSMOR_API_KEY
Hosts it reaches
  • api.lensmor.com
  • platform.lensmor.com
  • www.lensmor.com
  • www.linkedin.com
Tool permissions it declares
No allowed-tools in the frontmatter. It does act, so it runs under whatever permissions your session already grants.
Actions present in the files
shell

Ask about trade-show-contact-finder

Opens your assistant with this page's recorded context. Check the linked sources before relying on it.

Is this safe to install?ClaudeChatGPT
Adapt it to my stackClaudeChatGPT
What else do I need for it to workClaudeChatGPT
Rather ask a human? Talk to Cheetah
git clone --depth 1 --filter=blob:none --sparse https://github.com/LensmorOfficial/trade-show-skills.git /tmp/trade-show-skills
git -C /tmp/trade-show-skills sparse-checkout set "trade-show-contact-finder"
mkdir -p ~/.claude/skills/trade-show-contact-finder
cp -R "/tmp/trade-show-skills/trade-show-contact-finder/." ~/.claude/skills/trade-show-contact-finder/

Picked up without a restart. A project skill of the same name is shadowed by your personal one. For one repository only, swap ~/.claude/skills for .claude/skills. Claude Code docs ↗

The folder is the same in every client that implements the format — 46 of them — so if yours is not above, only the destination changes.

Before you install: this skill will not complete its job on a bare agent. It needs LENSMOR_API_KEY, which you have to obtain separately.

Reproduced in full from LensmorOfficial/trade-show-skills/blob/9a0c2f7966085984c142c7049e371522c2054dd2/trade-show-contact-finder/SKILL.md, which is licensed MIT (skill frontmatter). 975 words, 16 headings.

Lensmor Contact Finder

Search Lensmor contact records by company and optional role or person name, then prioritize the returned contacts without inventing titles, seniority, or contact details.

Contact-Data Boundary

The search response includes an email field, but locked contacts return email: null with contactUnlockStatus: "locked". Already unlocked contacts may return an email. Searching does not unlock email or phone data.

Do not call an unlock endpoint from this skill. Email and phone unlocking are separate paid workflows that require explicit user approval.

Example Requests

  • Who should I contact at this company?
  • 找联系人
  • Entscheidungsträger finden
  • 担当者を探す
  • encontrar responsables de compras

Request Handling

  • Every Lensmor request, including event lookup and pagination, must send Authorization: Bearer $LENSMOR_API_KEY. Send the key only to https://platform.lensmor.com; never include it in URLs, output, or requests to company/event websites.
  • Use a 10-second connection timeout and 30-second request timeout. Inspect the HTTP status before interpreting JSON; a non-2xx response, malformed JSON, or missing required response fields is a failed request, not an empty result or a zero score.
  • Start with one page (page=1, pageSize at most 100). Preserve filters across pages and disclose partial coverage. Do not fetch every page automatically.
  • For a read-only GET, allow at most one retry after a 429 or temporary 5xx, respecting Retry-After; if the delay is unavailable or impractical, report the failure and stop. Do not retry a POST automatically. A timeout may leave its outcome unknown, especially for a charged search.
  • If event lookup returns multiple editions, ask for the intended year/edition before continuing. Use the resolved event ID, never a sample ID from this document.

Workflow

Step 1: API Key Check

[ -n "${LENSMOR_API_KEY:-}" ] && echo "ok" || echo "missing"

If missing, stop and direct the user to obtain a Lensmor API key. Never print its value.

Step 2: Collect Inputs

Required:

  • company_name — full or partial company name, 1–200 characters

Optional:

  • role — job-title or function filter
  • person_name — narrow the company-scoped search to a named person
  • page, pageSize — pagination; max page size 100

Use a broad role term such as marketing, operations, or procurement when a precise title returns no result.

Step 3: Call the API

Endpoint: GET https://platform.lensmor.com/external/contacts/search

Authentication: Authorization: Bearer $LENSMOR_API_KEY

Example query:

company_name=Siemens%20Healthineers&role=marketing&page=1&pageSize=20

Step 4: Interpret the Response

The paginated response includes items, total, page, pageSize, totalPages, and hasMore.

Contact fields include:

FieldMeaning
fullName, title, department, seniorityLevelReturned professional identity fields
companyNameCompany attached to the record; verify it matches the query
linkedinUrlPublic LinkedIn profile when available
sourceTypeRecord provenance label
email, contactUnlockStatusEmail value and lock state
phone, phoneUnlockStatusPhone value and unlock-processing state
linkedinActivity, linkedinActivityStatusOptional activity evidence
eventCountOptional event-association count

Seniority values are not guaranteed to use a fixed title-case vocabulary. Preserve returned values such as director, manager, senior, or owner. Do not map them to Executive/Director/Manager tiers without evidence.

Step 5: Prioritize Carefully

Prioritize using this evidence order:

  1. Exact company match
  2. Role or department match to the user's requested outreach function
  3. Title relevance to the requested outreach theme
  4. Returned seniority value when present
  5. LinkedIn availability and activity evidence

This priority is an operational sort created by the skill, not a Lensmor-provided rank. Say so when reordering the API results. It measures outreach relevance, not verified decision authority. Never call someone a decision-maker, budget holder, champion, or primary authority based only on title, department, or seniority. Priority notes must use factual wording such as Exact company match; marketing department and manager title matched the requested filter. Do not say buyer scope, decision involvement, or equivalent authority language.

Step 6: Format the Output

## Contacts at [Company]

Found [total] contacts. Showing [item count] on page [page] of [totalPages].
Filters: [role/person_name or none]

| Priority | Name | Title | Department | Seniority | Contact state | LinkedIn |
|---:|---|---|---|---|---|---|
| 1 | [fullName] | [title] | [department] | [seniorityLevel] | Email [locked/available] | [LinkedIn](url) |

### Priority Notes
- **[Contact]**: [company match + role/title evidence]

Email search status: [locked contacts remain null / already unlocked email available]. No unlock was performed.

Error Handling

ConditionResponse behavior
400company_name is missing or invalid
401API key invalid or expired
429Wait for the rate-limit window and retry
total: 0Broaden the role filter or verify the company name

Follow-up Routing

  • Draft pre-show outreach → booth-invitation-writer
  • Draft LinkedIn-specific copy using the LinkedIn templates repository; this is a template collection, not an installed skill
  • Find more event companies → trade-show-exhibitor-search
  • Rank event accounts when recommendation evidence exists → trade-show-lead-recommender

Output Rules

  1. Never output LENSMOR_API_KEY or raw authorization headers.
  2. Never invent contacts, titles, departments, or seniority.
  3. Do not claim email is unavailable universally; report the returned email and lock state accurately.
  4. Do not expose an unlocked email unless the user explicitly asks for contact details in the current workflow.
  5. Do not initiate email or phone unlocks.
  6. Preserve varied seniority values instead of forcing them into a fixed hierarchy.
  7. If LinkedIn is null, say it is unavailable in the returned record.
  8. For multiple companies, keep each company in a separate labeled section.
  9. Format public URLs as Markdown links.
  10. Describe priority as contact relevance; do not infer purchasing power, budget ownership, or decision authority.
  11. When suggesting broader role filters, describe the goal as finding cross-functional contacts, never decision involvement or purchasing authority.

Files bundled with it

These load only when the skill asks for them, so they cost nothing until it runs.

Other skills for the same job

Different authors, same problem. Matched on the words in the skill name, across every library in the catalogue except this one.

Need help setting it up?

This page tells you what trade-show-contact-finder does and what it needs. Cheetah builds the agent setup it runs inside: data, CRM, sequencing and the guardrails.

Book a call →

The directory stays free. There is nothing gated behind this.

Build my GTM engine

Tell us what you want to improve. Fedor reviews the workflow and replies by email when there is a useful fit.

Fedor reviews every request personally. If there is a useful fit, he will reply by email.