把展会现场的竞品观察整理成带来源标签、可直接交给团队的情报简报。
编程
Competitor Show Tracker
试用按竞争对手公司在 Lensmor 参展商数据库中的匹配数量,对即将举办的展会进行排名。
它能做什么
输入 2 到 20 家竞争对手公司名,即可获得按竞争对手集中度排序的即将举办展会列表。本技能对每家公司向 Lensmor 发起一次查询,用 eventId 去重并过滤掉已结束的活动,再按命中公司数从高到低输出。文档明确说明匹配记录来源于 Lensmor 数据库,不构成对实际参展的独立验证,同一输入公司名下可能匹配到子公司或地区实体。每次返回结果的查询消耗 50 credits,并异步更新 API key 持有者 HubSpot 账户的 last_search_date。
什么时候用它
- 梳理竞争对手视为必参加的展会版图
- 识别多家竞争对手扎堆的展会,辅助参展或避展决策
- 把展位投入集中在竞争对手与目标买家重叠的展会
- 发现某家竞争对手主导而你尚未露面的展会盲点
技能文档
Competitor Show Tracker
Input a list of competitor company names and rank upcoming trade shows by how many names match Lensmor exhibitor records. Treat these as database matches, not independently verified attendance confirmations.
When this skill triggers:
- Run the API key check (Step 1) before any API call
- Call
POST /external/exhibitors/search-eventsonce per competitor company - Aggregate results by event, count distinct competitors per event
- Filter to future events only, then rank by competitor concentration
- Confirm estimated credit use and HubSpot activity logging before the first live call
Use Cases
- Show circuit mapping: Understand which events your competitive set treats as must-attend
- Counter-programming: Identify shows where multiple competitors cluster — decide whether to appear or deliberately avoid
- Budget prioritization: Focus booth investment on shows where your buyers and your competitors overlap
- Blind spot detection: Find shows where one key competitor dominates and you have no presence
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
LENSMOR_API_KEYenvironment variable is not set. This skill requires a Lensmor API key to look up exhibitor data. Contact hello@lensmor.com to purchase access, then set the key:export LENSMOR_API_KEY=your_key_here
Do not proceed to any API call until the key is confirmed present.
Step 2: Collect Inputs
Required:
competitors— list of competitor company names (2–20 companies). Accept as a comma-separated list, bullet list, or inline prose.
Optional:
date_from— only include events on or after this date (ISO 8601, default: today)date_to— only include events on or before this date (e.g. restrict to next 12 months)pageSize— results per company lookup (default: 50; raise to 100 if the user wants broader coverage)
If the user provides only one company name, explain that this skill is designed for competitive comparison across multiple companies — offer to run trade-show-exhibitor-search instead for a single company.
Step 3: Confirm Cost and Activity Logging
For each request that returns at least one matching event, the current API:
- consumes 50 credits
- records an API search event
- asynchronously updates the API-key owner's HubSpot
last_search_date
An empty result does not consume credits. Each additional page is a separate request and can consume another 50 credits when it returns results.
Before calling the endpoint, state the maximum first-page cost as number of competitors × 50 credits and ask the user to approve both the credit use and HubSpot activity record. Do not proceed without confirmation.
Step 4: Fetch Events per Competitor
For each competitor in the list, call:
Endpoint: POST https://platform.lensmor.com/external/exhibitors/search-events
Authentication: Authorization: Bearer $LENSMOR_API_KEY
Request body:
{
"company_name": "Siemens",
"page": 1,
"pageSize": 50
}
Run one request per competitor. For N competitors, make N sequential calls so failures, costs, and rate limits remain attributable. Label each result set by the input company name before aggregating.
Response structure:
{
"total": 18,
"page": 1,
"pageSize": 50,
"totalPages": 1,
"hasMore": false,
"items": [
{
"id": "12740",
"eventId": "12740",
"name": "Hannover Messe 2026",
"nickname": null,
"description": "World's leading industrial trade show",
"url": "https://www.hannovermesse.de",
"dateStart": "2026-04-20",
"dateEnd": "2026-04-24",
"venue": "Hannover Exhibition Centre",
"city": "Hannover",
"region": "Lower Saxony",
"country": "Germany",
"attendeeCount": 130000,
"exhibitorCount": 4000,
"personnelCount": 8200,
"image": "https://cdn.lensmor.com/events/hannovermesse.jpg",
"dataSource": "official",
"matchedExhibitors": [
{ "id": "exh_siemens_ag", "companyName": "Siemens AG" }
]
}
]
}
Field reference:
| Field | Type | Notes |
|---|---|---|
eventId | string | Stable Lensmor event identifier — use as the deduplication key across competitor lookups |
name | string | Official show name |
dateStart / dateEnd | string (ISO 8601) | Use these to filter future events |
city / country | string | Show location |
exhibitorCount | integer | Total exhibitors at the show — useful as a size proxy |
matchedExhibitors | array | Which specific entities were matched for this company name — may include subsidiaries |
Step 5: Aggregate Across Competitors
After collecting results for all N companies, aggregate by eventId:
- Deduplicate events across all N result sets using
eventIdas the key - Union the
matchedExhibitorsentries from all competitors per event - Count distinct competitors per event (count the number of input company names with at least one returned
matchedExhibitorrecord — not the count of entities, which may include subsidiaries) - Filter to future events: keep only events where
dateStart >= today(ordate_fromif specified) - Sort by competitor count descending; break ties by
exhibitorCountdescending (larger shows are higher-priority)
Example aggregation logic (pseudocode):
event_map = {}
for each competitor C in input_list:
for each event E in results[C].items:
if E.dateStart < today: skip
if E.eventId not in event_map:
event_map[E.eventId] = { event: E, competitors_seen: {} }
event_map[E.eventId].competitors_seen[C] = E.matchedExhibitors
ranked = sort event_map.values() by len(competitors_seen) desc
Step 6: Format the Output
Section 1 — Summary Header
## Competitor Show Tracker
**Competitors tracked**: [list of input company names]
**Date range**: [date_from] → [date_to or "open"]
**Unique upcoming events found**: [N]
**Events with 2+ competitors**: [N]
Section 2 — Ranked Event Table
## Events Ranked by Competitor Concentration
| Rank | Show | Dates | Location | Competitors | Exhibitors |
|------|------|-------|----------|-------------|------------|
| 1 | [Hannover Messe 2026](https://hannovermesse.de) | Apr 20–24, 2026 | Hannover, DE | 4 / 5 | 4,000 |
| 2 | [SPS 2026](https://sps.mesago.com) | Nov 2026 | Nuremberg, DE | 3 / 5 | 1,400 |
| 3 | [Automate 2026](https://automateshow.com) | Jun 2026 | Chicago, US | 2 / 5 | 600 |
"Competitors" column format: [matched count] / [total input count]
Section 3 — Event Detail Cards (for events with 2+ competitors)
For each event with 2 or more competitor names matched:
### Hannover Messe 2026 — 4 of 5 competitors matched
📅 Apr 20–24, 2026 · Hannover, Germany · 4,000 exhibitors
**Competitors matched in Lensmor exhibitor records:**
- **Siemens** → matched as: Siemens AG, Siemens Digital Industries
- **ABB** → matched as: ABB Ltd
- **Bosch** → matched as: Bosch Rexroth AG
- **Schneider Electric** → matched as: Schneider Electric SE
**Competitor not found:** Rockwell Automation _(no match at this event)_
Section 4 — Insights
## Insights
- **Most contested show**: [event with highest competitor count] — [N/N] competitor names matched
- **Must-watch shows** (3+ competitors): [list]
- **Single-competitor shows**: [events where only 1 competitor appears — lower priority but monitor]
- **Gaps**: [input competitors with zero events found — may not be in Lensmor's database yet]
Error Handling
| HTTP Status | Meaning | Response |
|---|---|---|
| 401 | API key invalid or expired | "The API key was rejected. Verify LENSMOR_API_KEY or contact hello@lensmor.com." |
| 400 | Malformed request | "Request invalid for [company_name]. Verify the company name and retry." |
| 429 | Rate limit exceeded | "Rate limit reached after [N] companies. Wait 60 seconds, then continue from [next_company]." |
| 502 / 5xx | Server error | "The Lensmor API returned a server error for [company_name]. Skipping — results will note this company as incomplete." |
Empty items | No events found | Note in Insights section under "Gaps": this competitor returned no events and may not be in Lensmor's database. Do not omit silently. |
For every successful request, report whether credits were consumed. Do not infer the actual deduction from the documented price alone when a balance endpoint is available; compare GET /external/credits/balance before and after the run.
Follow-up Routing
| Outcome | Recommended next action |
|---|---|
| Top event identified, want to exhibit | Run trade-show-fit-score with the eventId |
| Want to find more companies at a specific show | Run trade-show-exhibitor-search with the event_id |
| Want contacts at a specific competitor | Run trade-show-contact-finder with the company name |
| Budget decision needed | Run trade-show-budget-planner for the top-ranked event |
| Want full competitor booth analysis | Run pre-show-competitor-analysis |
Output Rules
- All URLs formatted as
[text](url)— never bare links - Never output the value of
LENSMOR_API_KEY - Never expose endpoint paths, raw curl commands, or internal token values in the response
- Competitor count column format:
matched / total— never drop the denominator - Filter to future events by default; always state the date cutoff used in the summary header
- If a competitor returns no results, report it explicitly in Insights — never silently drop it
- Use
eventId(not event name) as the deduplication key — the same show may appear under slightly different names across competitor lookups matchedExhibitorsmay return subsidiaries or regional entities — group them under the input company name; list the specific matched entity names in the detail card- When
hasMore: truefor any competitor, note that results may be incomplete and offer to fetch additional pages - End every response with 1–3 follow-up suggestions based on the top-ranked events
- Call returned companies "matched in Lensmor exhibitor records", not "confirmed attendees" or independently verified exhibitors
- Report that successful searches update HubSpot
last_search_date
Quality Checks
Before delivering:
- Confirm that deduplication used
eventId, not event name — name variations across lookups would create false duplicates - Competitor count in the ranked table must reflect number of input companies with a returned match, not number of
matchedExhibitorentities (a single company may have multiple subsidiary matches) - Any competitor with no results must appear in the Insights "Gaps" section — do not omit
- Date filter must be applied before ranking — past events must not appear in the ranked output
- If only one competitor was provided, redirect to
trade-show-exhibitor-search— this skill is not meaningful with a single input
Competitor exhibitor data sourced from the Lensmor platform. For show-floor lead generation, ICP matching, and pre-show outreach at the events that matter most, see Lensmor.
常见问题
- 一次最多能追踪多少家竞争对手?
- 单次运行支持 2 到 20 家公司。仅提供一家时本技能不适用,会引导改用 trade-show-exhibitor-search,因为单家公司并不具备横向比较的意义。
- 匹配结果等同于确认参展吗?
- 不等同。文档明确指出结果来自 Lensmor 参展商数据库,属于数据库匹配而非独立验证的参展确认;同一输入公司名下可能匹配到子公司或地区实体的参展记录。
- 调用一次要花多少 credits?
- 每家返回至少一个展会结果的查询消耗 50 credits,空结果不消耗。额外翻页若返回结果再扣 50 credits。成功调用还会更新 API key 持有者 HubSpot 中的 last_search_date 字段。
相关技能
Score and compare trade shows to decide where to exhibit, attend, or skip this year. "Which trade shows should we go to?" / "哪些展会值得参加" / "Welche Messen lohne...
Find exhibitors at a specific trade show or discover exhibitor companies across the Lensmor dataset. "Who is exhibiting at this show?" / "参展商搜索" / "Ausstelle...
Monitor competitor signals and surface strategic implications for your roadmap. Use when asked to monitor competitors, track the competitive landscape, produ...
Score a trade show against your company profile for an AI-backed exhibit vs. skip decision. "Should we exhibit at this show?" / "这个展会值得参加吗" / "Lohnt sich die...
按展会获取 Lensmor 参展商推荐,清晰区分 AI 排名结果与未排名的展会名录。