Lensmor Contact Finder
SkillDev toolsFind relevant company contacts through Lensmor, preserving contact lock states without inferring purchasing authority.
Use Lensmor Contact Finder in Claude, ChatGPT or Ahel Desktop
Free. Sign in, add Lensmor Contact Finder and connect your AI. About a minute.
Also: Claude Code · Cursor · Codex
Then ask your AI: use the Lensmor Contact Finder skill
Details
Instructions available. Your AI can read the instructions. Execution depends on the setup they require.
Account requirements not reviewed. Check the skill instructions before use; Ahel provides instructions and does not run this skill.
No other account needed.
Add Ahel to your AI once: Claude, ChatGPT, Cursor, Claude Code or Codex. Then ask it to use this.
What this skill tells your AI
The instructions your AI receives, as published by lensmorofficial/trade-show-skills in trade-show-contact-finder/SKILL.md and read by Ahel’s review.
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 tohttps://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,pageSizeat 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 filterperson_name— narrow the company-scoped search to a named personpage,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:
| Field | Meaning |
|---|---|
fullName, title, department, seniorityLevel | Returned professional identity fields |
companyName | Company attached to the record; verify it matches the query |
linkedinUrl | Public LinkedIn profile when available |
sourceType | Record provenance label |
email, contactUnlockStatus | Email value and lock state |
phone, phoneUnlockStatus | Phone value and unlock-processing state |
linkedinActivity, linkedinActivityStatus | Optional activity evidence |
eventCount | Optional 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:
- Exact company match
- Role or department match to the user's requested outreach function
- Title relevance to the requested outreach theme
- Returned seniority value when present
- 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
| Condition | Response behavior |
|---|---|
| 400 | company_name is missing or invalid |
| 401 | API key invalid or expired |
| 429 | Wait for the rate-limit window and retry |
total: 0 | Broaden 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
- Never output
LENSMOR_API_KEYor raw authorization headers. - Never invent contacts, titles, departments, or seniority.
- Do not claim email is unavailable universally; report the returned email and lock state accurately.
- Do not expose an unlocked email unless the user explicitly asks for contact details in the current workflow.
- Do not initiate email or phone unlocks.
- Preserve varied seniority values instead of forcing them into a fixed hierarchy.
- If LinkedIn is null, say it is unavailable in the returned record.
- For multiple companies, keep each company in a separate labeled section.
- Format public URLs as Markdown links.
- Describe priority as contact relevance; do not infer purchasing power, budget ownership, or decision authority.
- When suggesting broader role filters, describe the goal as finding cross-functional contacts, never decision involvement or purchasing authority.
Signals
- GitHub stars
- 48
- Forks
- 6
- Last commit
- Oct 2026
Advanced
- Item type
- skill
- Key
trade-show-contact-finder- Source
- github.com/lensmorofficial/trade-show-skills
github.com/lensmorofficial/trade-show-skills
Related picks
Skill · alirezarezvani
The pick for LinkedInlinkedin-marketing
Skill · sergebulaev
The pick for LinkedInlark-markdown
Skill · larksuite
The pick for Markdownmarkdown-formatter
Skill · nvidia
The pick for Markdownlinkedin-interviewer
Skill · sergebulaev
The pick for LinkedInlinkedin-post
Skill · hamzafarooq
The pick for LinkedIn