@anysiteio/agent-skills 1.3.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/.claude-plugin/marketplace.json +61 -1
  2. package/.claude-plugin/plugin.json +5 -1
  3. package/README.md +27 -33
  4. package/bin/install.js +186 -135
  5. package/bundles.json +19 -0
  6. package/package.json +3 -2
  7. package/skills/anysite-audience-analysis/SKILL.md +110 -38
  8. package/skills/anysite-audience-analysis/references/PLATFORM_COVERAGE.md +38 -19
  9. package/skills/anysite-audience-analysis/references/TOOL_MAPPING.md +16 -11
  10. package/skills/anysite-brand-reputation/SKILL.md +105 -43
  11. package/skills/anysite-competitor-analyzer/SKILL.md +170 -111
  12. package/skills/anysite-competitor-intelligence/SKILL.md +201 -116
  13. package/skills/anysite-competitor-intelligence/references/ANALYSIS_PATTERNS.md +17 -13
  14. package/skills/anysite-content-analytics/SKILL.md +101 -33
  15. package/skills/anysite-crm-account-brief/SKILL.md +71 -0
  16. package/skills/anysite-crm-audit/SKILL.md +59 -0
  17. package/skills/anysite-crm-champions/SKILL.md +76 -0
  18. package/skills/anysite-crm-competitor-intel/SKILL.md +74 -0
  19. package/skills/anysite-crm-enrich/SKILL.md +84 -0
  20. package/skills/anysite-crm-lookalikes/SKILL.md +64 -0
  21. package/skills/anysite-crm-prospect/SKILL.md +90 -0
  22. package/skills/anysite-crm-score/SKILL.md +72 -0
  23. package/skills/anysite-crm-setup/SKILL.md +147 -0
  24. package/skills/anysite-crm-signals/SKILL.md +96 -0
  25. package/skills/anysite-influencer-discovery/SKILL.md +123 -71
  26. package/skills/anysite-lead-generation/SKILL.md +288 -256
  27. package/skills/anysite-lead-generation/references/LINKEDIN_STRATEGIES.md +79 -71
  28. package/skills/anysite-lead-generation/references/WEB_SCRAPING.md +121 -87
  29. package/skills/anysite-market-research/SKILL.md +117 -68
  30. package/skills/anysite-mcp/SKILL.md +128 -0
  31. package/skills/anysite-mcp-migration/SKILL.md +290 -0
  32. package/skills/anysite-person-analyzer/SKILL.md +86 -53
  33. package/skills/anysite-trend-analysis/SKILL.md +119 -55
  34. package/skills/anysite-vc-analyst/SKILL.md +12 -2
  35. package/skills/competitor-discovery/SKILL.md +350 -0
  36. package/skills/customer-pain-mining/SKILL.md +318 -0
  37. package/skills/positioning-map/SKILL.md +314 -0
@@ -19,16 +19,33 @@ The anysite Competitor Intelligence skill helps you:
19
19
 
20
20
  This skill provides 90% coverage of competitive intelligence capabilities with excellent LinkedIn and social media monitoring.
21
21
 
22
+ ## v2 Tool Interface
23
+
24
+ All data fetching uses the universal `execute()` meta-tool:
25
+
26
+ ```
27
+ execute(source, category, endpoint, params) → returns data + cache_key
28
+ ```
29
+
30
+ After fetching, use these for analysis and export:
31
+ - `get_page(cache_key, offset, limit)` — paginate through large result sets
32
+ - `query_cache(cache_key, conditions, sort_by, aggregate, group_by)` — filter/sort/aggregate cached data without re-fetching
33
+ - `export_data(cache_key, format)` — export to CSV, JSON, or JSONL for sharing
34
+
35
+ Always call `discover(source, category)` first if unsure about endpoint names or params.
36
+
37
+ **Error handling**: Check response for `llm_hint` field on errors — it provides actionable guidance (e.g., "Likely passed fsd_company URN instead of company: prefix").
38
+
22
39
  ## Supported Platforms
23
40
 
24
- - **LinkedIn** (Primary): Company pages, employee search, post monitoring, job listings, growth tracking
25
- - **Y Combinator**: Startup competitor research, funding data, batch analysis
26
- - **Twitter/X**: Social presence monitoring, content strategy, engagement analysis
27
- - **Reddit**: Community sentiment, product discussions, competitor mentions
28
- - **Instagram**: Brand presence, visual content strategy, influencer partnerships
29
- - **YouTube**: Video content, channel growth, community engagement
30
- - **Web Scraping**: Company websites, press releases, blog content
31
- - **SEC**: Public company filings for competitors
41
+ - **LinkedIn** (Primary): Company pages, employee search, post monitoring, job listings, growth tracking
42
+ - **Y Combinator**: Startup competitor research, funding data, batch analysis
43
+ - **Twitter/X**: Social presence monitoring, content strategy, engagement analysis
44
+ - **Reddit**: Community sentiment, product discussions, competitor mentions
45
+ - **Instagram**: Brand presence, visual content strategy, influencer partnerships
46
+ - **YouTube**: Video content, channel growth, community engagement
47
+ - **Web Scraping**: Company websites, press releases, blog content
48
+ - **SEC**: Public company filings for competitors
32
49
 
33
50
  ## Quick Start
34
51
 
@@ -36,12 +53,12 @@ This skill provides 90% coverage of competitive intelligence capabilities with e
36
53
 
37
54
  Choose your competitor identification method:
38
55
 
39
- | Goal | Primary Tool | Output |
40
- |------|-------------|--------|
41
- | Find similar companies | `search_linkedin_companies` | Company list with metrics |
42
- | Research startup competitors | `search_yc_companies` | YC startups by industry/batch |
43
- | Discover by employee search | `search_linkedin_users` → companies | Companies from employee profiles |
44
- | Find by keywords/industry | `search_linkedin_companies` + keywords | Filtered company list |
56
+ | Goal | v2 Call | Output |
57
+ |------|---------|--------|
58
+ | Find similar companies | `execute("linkedin", "search", "search_companies", {"keywords": "...", "count": 50})` | Company list with metrics |
59
+ | Research startup competitors | `execute("yc", "search", "search_companies", {"query": "...", "count": 50})` | YC startups by industry/batch |
60
+ | Discover by employee search | `execute("linkedin", "search", "search_users", {...})` → extract companies | Companies from employee profiles |
61
+ | Find by keywords/industry | `execute("linkedin", "search", "search_companies", {"keywords": "...", "industry": "...", "count": 50})` | Filtered company list |
45
62
 
46
63
  ### Step 2: Gather Competitive Intelligence
47
64
 
@@ -49,37 +66,38 @@ Execute MCP tools to collect competitor data:
49
66
 
50
67
  **Company Profile Analysis**
51
68
  ```
52
- Tool: mcp__anysite__get_linkedin_company
53
- Parameters:
54
- - company: "competitor-name" or LinkedIn URL
55
- Returns: Description, size, location, website, specialties
69
+ execute("linkedin", "company", "company", {"company": "competitor-name"})
70
+ → Returns: Description, size, location, website, specialties, URN
56
71
  ```
57
72
 
58
73
  **Employee Intelligence**
59
74
  ```
60
- Tool: mcp__anysite__search_linkedin_users
61
- Parameters:
62
- - company_keywords: "Competitor Inc"
63
- - title: "VP OR Director OR Head" (for leadership)
64
- - count: 50
65
- Returns: Key employees, org structure insights
75
+ execute("linkedin", "search", "search_users", {
76
+ "company_keywords": "Competitor Inc",
77
+ "title": "VP OR Director OR Head",
78
+ "count": 50
79
+ })
80
+ Returns: Key employees, org structure insights
81
+ → Use get_page(cache_key, 10, 50) to load more results
66
82
  ```
67
83
 
68
84
  **Hiring Velocity Analysis**
69
85
  ```
70
- Tool: mcp__anysite__get_linkedin_company_employee_stats
71
- Parameters:
72
- - urn: <company URN from search>
73
- Returns: Growth metrics, department distribution
86
+ execute("linkedin", "company", "company_employee_stats", {
87
+ "urn": {"type": "company", "value": "<company_id>"}
88
+ })
89
+ Returns: Growth metrics, department distribution
90
+ → Use query_cache(cache_key, sort_by=[{"field": "count", "order": "desc"}]) to rank departments
74
91
  ```
75
92
 
76
93
  **Content Strategy**
77
94
  ```
78
- Tool: mcp__anysite__get_linkedin_company_posts
79
- Parameters:
80
- - urn: <company URN>
81
- - count: 20
82
- Returns: Recent posts, engagement, messaging themes
95
+ execute("linkedin", "company", "company_posts", {
96
+ "urn": {"type": "company", "value": "<company_id>"},
97
+ "count": 20
98
+ })
99
+ Returns: Recent posts, engagement, messaging themes
100
+ → Use query_cache(cache_key, aggregate=[{"field": "reactions", "function": "avg"}]) for engagement stats
83
101
  ```
84
102
 
85
103
  ### Step 3: Process and Analyze
@@ -90,11 +108,16 @@ Analyze gathered data for:
90
108
  - **Market positioning**: Messaging, target audience, value props
91
109
  - **Competitive threats**: New products, partnerships, key hires
92
110
 
111
+ Use `query_cache()` to filter and aggregate without re-fetching:
112
+ ```
113
+ query_cache(cache_key, conditions=[{"field": "department", "operator": "contains", "value": "Engineering"}])
114
+ ```
115
+
93
116
  ### Step 4: Format Output
94
117
 
95
118
  **Chat Summary**: Competitive insights with key findings
96
- **CSV Export**: Competitor comparison matrix
97
- **JSON Export**: Complete data for tracking over time
119
+ **CSV Export**: `export_data(cache_key, "csv")` → Competitor comparison matrix
120
+ **JSON Export**: `export_data(cache_key, "json")` → Complete data for tracking over time
98
121
 
99
122
  ## Common Workflows
100
123
 
@@ -106,54 +129,67 @@ Analyze gathered data for:
106
129
 
107
130
  1. **Company Overview**
108
131
  ```
109
- get_linkedin_company("competitor")
132
+ execute("linkedin", "company", "company", {"company": "competitor"})
110
133
  → Size, industry, description, website, founding year
134
+ → Save the URN (convert fsd_company to company: prefix for sub-endpoints)
111
135
  ```
112
136
 
113
137
  2. **Leadership Team**
114
138
  ```
115
- search_linkedin_users(
116
- company_keywords="Competitor Inc",
117
- title="C-level OR VP OR SVP OR President"
118
- )
139
+ execute("linkedin", "search", "search_users", {
140
+ "company_keywords": "Competitor Inc",
141
+ "title": "C-level OR VP OR SVP OR President",
142
+ "count": 50
143
+ })
119
144
  → C-suite and VP-level executives
145
+ → Use get_page(cache_key, 10, 50) for more results
120
146
  ```
121
147
 
122
148
  3. **Organizational Structure**
123
149
  ```
124
- get_linkedin_company_employee_stats(urn)
150
+ execute("linkedin", "company", "company_employee_stats", {
151
+ "urn": {"type": "company", "value": "<company_id>"}
152
+ })
125
153
  → Total employees, growth rate, department breakdown
126
154
 
127
155
  For each department:
128
- search_linkedin_users(company_keywords, title=<department_title>)
156
+ execute("linkedin", "search", "search_users", {
157
+ "company_keywords": "Competitor Inc",
158
+ "title": "<department_title>",
159
+ "count": 50
160
+ })
129
161
  → Team sizes, key roles
130
162
  ```
131
163
 
132
164
  4. **Hiring Intelligence**
133
165
  ```
134
- search_linkedin_jobs(keywords="Competitor Inc")
166
+ execute("linkedin", "search", "search_jobs", {"keywords": "Competitor Inc", "count": 50})
135
167
  → Open positions, hiring priorities, expansion areas
168
+ → Use query_cache(cache_key, group_by="location") to see geographic expansion
136
169
  ```
137
170
 
138
171
  5. **Content Strategy**
139
172
  ```
140
- get_linkedin_company_posts(urn, count=50)
173
+ execute("linkedin", "company", "company_posts", {
174
+ "urn": {"type": "company", "value": "<company_id>"},
175
+ "count": 50
176
+ })
141
177
  → Posting frequency, themes, engagement levels
142
178
 
143
- get_twitter_user("competitor")
144
- get_twitter_user_posts("competitor", count=50)
179
+ execute("twitter", "user", "user", {"user": "competitor"})
180
+ execute("twitter", "user", "user_posts", {"user": "competitor", "count": 50})
145
181
  → Social media presence and strategy
146
182
  ```
147
183
 
148
184
  6. **Product/Market Intelligence**
149
185
  ```
150
- parse_webpage("https://competitor.com")
186
+ execute("webparser", "parse", "parse", {"url": "https://competitor.com"})
151
187
  → Positioning, messaging, product offerings
152
188
 
153
- parse_webpage("https://competitor.com/blog")
189
+ execute("webparser", "parse", "parse", {"url": "https://competitor.com/blog"})
154
190
  → Content topics, thought leadership
155
191
 
156
- search_reddit_posts(query="Competitor Inc", count=20)
192
+ execute("reddit", "search", "search_posts", {"query": "Competitor Inc", "count": 20})
157
193
  → Customer sentiment, product feedback
158
194
  ```
159
195
 
@@ -164,6 +200,7 @@ search_reddit_posts(query="Competitor Inc", count=20)
164
200
  - Content strategy analysis
165
201
  - Product positioning insights
166
202
  - Customer sentiment summary
203
+ - Use `export_data(cache_key, "csv")` to create downloadable competitor report
167
204
 
168
205
  ### Workflow 2: Competitive Landscape Mapping
169
206
 
@@ -173,18 +210,18 @@ search_reddit_posts(query="Competitor Inc", count=20)
173
210
 
174
211
  1. **Identify Competitors**
175
212
  ```
176
- search_linkedin_companies(
177
- keywords="<your industry keywords>",
178
- industry="<industry>",
179
- employee_count=["51-200", "201-500", "501-1000"],
180
- count=50
181
- )
213
+ execute("linkedin", "search", "search_companies", {
214
+ "keywords": "<your industry keywords>",
215
+ "industry": "<industry>",
216
+ "employee_count": ["51-200", "201-500", "501-1000"],
217
+ "count": 50
218
+ })
182
219
  ```
183
220
 
184
221
  2. **Filter and Prioritize**
185
222
  ```
186
223
  For each company:
187
- get_linkedin_company(company)
224
+ execute("linkedin", "company", "company", {"company": "<alias>"})
188
225
  → Review description for relevance
189
226
  → Check employee count and growth
190
227
  → Verify competitive overlap
@@ -200,28 +237,35 @@ Potential: Adjacent space, could expand
200
237
  4. **Size and Growth Metrics**
201
238
  ```
202
239
  For each competitor:
203
- get_linkedin_company_employee_stats(urn)
240
+ execute("linkedin", "company", "company_employee_stats", {
241
+ "urn": {"type": "company", "value": "<company_id>"}
242
+ })
204
243
  → Employee count, growth rate
205
244
  → Department distribution
245
+ → Use query_cache() to compare across competitors
206
246
  ```
207
247
 
208
248
  5. **Positioning Analysis**
209
249
  ```
210
250
  For each competitor:
211
- get_linkedin_company_posts(urn, count=10)
251
+ execute("linkedin", "company", "company_posts", {
252
+ "urn": {"type": "company", "value": "<company_id>"},
253
+ "count": 10
254
+ })
212
255
  → Key messaging themes
213
256
 
214
- parse_webpage(website + "/about")
257
+ execute("webparser", "parse", "parse", {"url": "<website>/about"})
215
258
  → Value proposition, target market
216
259
  ```
217
260
 
218
261
  6. **Funding and Traction** (for startups)
219
262
  ```
220
- search_yc_companies(query="<industry>")
263
+ execute("yc", "search", "search_companies", {"query": "<industry>", "count": 50})
221
264
  → YC competitors with funding data
265
+ → Use query_cache(cache_key, sort_by=[{"field": "team_size", "order": "desc"}]) to rank by size
222
266
 
223
267
  For each YC company:
224
- get_yc_company(company)
268
+ execute("yc", "company", "get", {"slug": "<company_slug>"})
225
269
  → Batch, team size, description
226
270
  ```
227
271
 
@@ -231,6 +275,7 @@ For each YC company:
231
275
  - Size and growth metrics for each
232
276
  - Positioning and messaging summaries
233
277
  - Competitive landscape map
278
+ - Use `export_data(cache_key, "csv")` for the full comparison matrix
234
279
 
235
280
  ### Workflow 3: Hiring Velocity Tracking
236
281
 
@@ -240,15 +285,18 @@ For each YC company:
240
285
 
241
286
  1. **Baseline Employee Count**
242
287
  ```
243
- get_linkedin_company_employee_stats(competitor_urn)
288
+ execute("linkedin", "company", "company_employee_stats", {
289
+ "urn": {"type": "company", "value": "<company_id>"}
290
+ })
244
291
  → Current total employees
245
292
  → Department distribution
246
293
  ```
247
294
 
248
295
  2. **Track Open Positions**
249
296
  ```
250
- search_linkedin_jobs(keywords="Competitor Inc")
297
+ execute("linkedin", "search", "search_jobs", {"keywords": "Competitor Inc", "count": 100})
251
298
  → All open positions
299
+ → Use query_cache(cache_key, group_by="location") to group by office
252
300
 
253
301
  Group by department:
254
302
  - Engineering roles
@@ -259,14 +307,18 @@ Group by department:
259
307
 
260
308
  3. **Analyze Recent Hires**
261
309
  ```
262
- search_linkedin_users(
263
- company_keywords="Competitor Inc",
264
- count=100
265
- )
310
+ execute("linkedin", "search", "search_users", {
311
+ "company_keywords": "Competitor Inc",
312
+ "count": 100
313
+ })
266
314
  → Get all employees
315
+ → Use get_page(cache_key, 10, 100) to paginate through full list
267
316
 
268
317
  Filter for recent joins:
269
- get_linkedin_user_experience(urn)
318
+ execute("linkedin", "user", "user_experience", {
319
+ "urn": {"type": "fsd_profile", "value": "<profile_id>"},
320
+ "count": 5
321
+ })
270
322
  → Start date at current company
271
323
  → Identify hires from last 3-6 months
272
324
  ```
@@ -274,7 +326,7 @@ get_linkedin_user_experience(urn)
274
326
  4. **Track Key Departures**
275
327
  ```
276
328
  For former employees:
277
- search_linkedin_users(keywords="Competitor Inc")
329
+ execute("linkedin", "search", "search_users", {"keywords": "Competitor Inc", "count": 50})
278
330
  → Filter profiles showing "Former" or past employment
279
331
 
280
332
  Identify:
@@ -289,6 +341,7 @@ Identify where competitors hire from:
289
341
  - For each new hire: get previous companies
290
342
  - Track talent pipelines
291
343
  - Identify poaching patterns
344
+ → Use export_data(cache_key, "csv") to build a hiring tracker spreadsheet
292
345
  ```
293
346
 
294
347
  **Expected Output**:
@@ -306,7 +359,11 @@ Identify where competitors hire from:
306
359
 
307
360
  1. **LinkedIn Content**
308
361
  ```
309
- get_linkedin_company_posts(urn, count=50)
362
+ execute("linkedin", "company", "company_posts", {
363
+ "urn": {"type": "company", "value": "<company_id>"},
364
+ "count": 50
365
+ })
366
+ → Use query_cache(cache_key, aggregate=[{"field": "comment_count", "function": "avg"}]) for engagement stats
310
367
 
311
368
  Analyze:
312
369
  - Posting frequency (posts/week)
@@ -318,8 +375,8 @@ Analyze:
318
375
 
319
376
  2. **Twitter/X Content**
320
377
  ```
321
- get_twitter_user("competitor")
322
- get_twitter_user_posts("competitor", count=100)
378
+ execute("twitter", "user", "user", {"user": "competitor"})
379
+ execute("twitter", "user", "user_posts", {"user": "competitor", "count": 100})
323
380
 
324
381
  Analyze:
325
382
  - Tweet frequency
@@ -331,10 +388,10 @@ Analyze:
331
388
 
332
389
  3. **YouTube Content**
333
390
  ```
334
- get_youtube_channel_videos("competitor", count=30)
391
+ execute("youtube", "channel", "channel_videos", {"channel": "competitor", "count": 30})
335
392
 
336
393
  For each video:
337
- get_youtube_video(video_id)
394
+ execute("youtube", "video", "video", {"video": "<video_id>"})
338
395
 
339
396
  Analyze:
340
397
  - Upload frequency
@@ -342,12 +399,13 @@ Analyze:
342
399
  - Engagement (likes, comments)
343
400
  - Content types (demos, webinars, customer stories)
344
401
  - Video length and production quality
402
+ → Use query_cache(cache_key, sort_by=[{"field": "view_count", "order": "desc"}]) to find top videos
345
403
  ```
346
404
 
347
405
  4. **Instagram Content** (if B2C)
348
406
  ```
349
- get_instagram_user("competitor")
350
- get_instagram_user_posts("competitor", count=50)
407
+ execute("instagram", "user", "user", {"user": "competitor"})
408
+ execute("instagram", "user", "user_posts", {"user": "competitor", "count": 50})
351
409
 
352
410
  Analyze:
353
411
  - Post frequency
@@ -359,8 +417,8 @@ Analyze:
359
417
 
360
418
  5. **Blog/Website Content**
361
419
  ```
362
- parse_webpage("https://competitor.com/blog")
363
- get_sitemap("https://competitor.com")
420
+ execute("webparser", "parse", "parse", {"url": "https://competitor.com/blog"})
421
+ execute("webparser", "sitemap", "sitemap", {"url": "https://competitor.com"})
364
422
  → Find all blog posts
365
423
 
366
424
  Analyze:
@@ -372,14 +430,15 @@ Analyze:
372
430
 
373
431
  6. **Community Sentiment**
374
432
  ```
375
- search_reddit_posts(query="Competitor Inc", count=50)
376
- search_reddit_posts(query="competitor product name", count=50)
433
+ execute("reddit", "search", "search_posts", {"query": "Competitor Inc", "count": 50})
434
+ execute("reddit", "search", "search_posts", {"query": "competitor product name", "count": 50})
377
435
 
378
436
  Analyze:
379
437
  - Customer feedback
380
438
  - Common complaints
381
439
  - Product strengths
382
440
  - Feature requests
441
+ → Use query_cache(cache_key, sort_by=[{"field": "comment_count", "order": "desc"}]) to find most-discussed threads
383
442
  ```
384
443
 
385
444
  **Expected Output**:
@@ -388,91 +447,108 @@ Analyze:
388
447
  - Content themes and messaging
389
448
  - Platform prioritization insights
390
449
  - Community sentiment summary
450
+ - Use `export_data(cache_key, "csv")` for cross-platform content comparison
391
451
 
392
- ## MCP Tools Reference
452
+ ## MCP Tools Reference (v2)
393
453
 
394
454
  ### LinkedIn Company Intelligence
395
455
 
396
- **search_linkedin_companies**
397
- - Search for companies by keywords, location, industry, size
398
- - Returns: Company list with basic info and URNs
399
-
400
- **get_linkedin_company**
456
+ **Company Profile** — `execute("linkedin", "company", "company", {"company": "..."})`
401
457
  - Get detailed company profile
402
- - Returns: Description, website, size, industry, specialties
458
+ - Returns: Description, website, size, industry, specialties, URN
403
459
 
404
- **get_linkedin_company_employee_stats**
460
+ **Employee Stats** — `execute("linkedin", "company", "company_employee_stats", {"urn": {"type": "company", "value": "..."}})`
405
461
  - Get employee statistics and growth
406
462
  - Returns: Total employees, growth metrics, department distribution
463
+ - Note: URN must use `company:` prefix (not `fsd_company`). Convert: `urn:li:fsd_company:1441` → `company:1441`
407
464
 
408
- **get_linkedin_company_posts**
465
+ **Company Posts** — `execute("linkedin", "company", "company_posts", {"urn": {"type": "company", "value": "..."}, "count": N})`
409
466
  - Get recent company posts
410
467
  - Returns: Posts with engagement metrics, content, timestamps
411
468
 
412
469
  ### LinkedIn People Intelligence
413
470
 
414
- **search_linkedin_users**
471
+ **Search Users** — `execute("linkedin", "search", "search_users", {"company_keywords": "...", "title": "...", "count": N})`
415
472
  - Find employees at competitor companies
416
473
  - Filter by title, department, location
417
474
  - Returns: Employee profiles with titles and URLs
418
475
 
419
- **get_linkedin_profile**
476
+ **User Profile** — `execute("linkedin", "user", "user", {"user": "..."})`
420
477
  - Get detailed employee profile
421
478
  - Returns: Work history, education, skills
422
479
 
423
- **get_linkedin_user_experience**
480
+ **User Experience** — `execute("linkedin", "user", "user_experience", {"urn": {"type": "fsd_profile", "value": "..."}, "count": N})`
424
481
  - Get detailed work history
425
482
  - Returns: All positions with dates and descriptions
426
483
 
484
+ ### LinkedIn Jobs
485
+
486
+ **Search Jobs** — `execute("linkedin", "search", "search_jobs", {"keywords": "...", "count": N})`
487
+ - Search job listings by keywords, location, and filters
488
+ - Returns: Open positions with company, location, work type
489
+
427
490
  ### Y Combinator Intelligence
428
491
 
429
- **search_yc_companies**
492
+ **Search Companies** — `execute("yc", "search", "search_companies", {"query": "...", "count": N})`
430
493
  - Search YC companies by industry, batch, filters
431
494
  - Returns: Company list with batch, team size, status
432
495
 
433
- **get_yc_company**
496
+ **Company Details** — `execute("yc", "company", "get", {"slug": "..."})`
434
497
  - Get detailed YC company profile
435
498
  - Returns: Description, founders, batch, status, links
436
499
 
437
- **search_yc_founders**
500
+ **Search Founders** — `execute("yc", "search", "search_founders", {"query": "...", "count": N})`
438
501
  - Search for founders by criteria
439
502
  - Returns: Founder profiles with company associations
440
503
 
441
504
  ### Social Media Monitoring
442
505
 
443
506
  **Twitter/X**:
444
- - `search_twitter_posts` - Find competitor mentions
445
- - `get_twitter_user` - Get competitor profile
446
- - `get_twitter_user_posts` - Get recent tweets
507
+ - `execute("twitter", "search", "search_posts", {"query": "...", "count": N})` Find competitor mentions
508
+ - `execute("twitter", "user", "user", {"user": "..."})` Get competitor profile
509
+ - `execute("twitter", "user", "user_posts", {"user": "...", "count": N})` Get recent tweets
447
510
 
448
511
  **Instagram**:
449
- - `search_instagram_posts` - Find hashtag/keyword mentions
450
- - `get_instagram_user` - Get profile stats
451
- - `get_instagram_user_posts` - Get recent posts
512
+ - `execute("instagram", "search", "search_posts", {"query": "...", "count": N})` Find hashtag/keyword mentions
513
+ - `execute("instagram", "user", "user", {"user": "..."})` Get profile stats
514
+ - `execute("instagram", "user", "user_posts", {"user": "...", "count": N})` Get recent posts
452
515
 
453
516
  **Reddit**:
454
- - `search_reddit_posts` - Find discussions about competitors
455
- - `get_reddit_post` - Get post details and sentiment
517
+ - `execute("reddit", "search", "search_posts", {"query": "...", "count": N})` Find discussions about competitors
518
+ - `execute("reddit", "posts", "posts", {"post_url": "..."})` Get post details and sentiment
456
519
 
457
520
  **YouTube**:
458
- - `search_youtube_videos` - Find competitor videos
459
- - `get_youtube_channel_videos` - Get all channel videos
460
- - `get_youtube_video` - Get video details and metrics
521
+ - `execute("youtube", "search", "search_videos", {"query": "...", "count": N})` Find competitor videos
522
+ - `execute("youtube", "channel", "channel_videos", {"channel": "...", "count": N})` Get all channel videos
523
+ - `execute("youtube", "video", "video", {"video": "..."})` Get video details and metrics
461
524
 
462
525
  ### Web Intelligence
463
526
 
464
- **parse_webpage**
527
+ **Parse Webpage** — `execute("webparser", "parse", "parse", {"url": "..."})`
465
528
  - Extract content from competitor websites
466
529
  - Returns: Text content, links, contacts
467
530
 
468
- **get_sitemap**
531
+ **Sitemap** — `execute("webparser", "sitemap", "sitemap", {"url": "..."})`
469
532
  - Get all pages on competitor site
470
533
  - Returns: URL list for comprehensive analysis
471
534
 
472
- **duckduckgo_search**
535
+ **Web Search** — `execute("duckduckgo", "search", "search", {"query": "..."})`
473
536
  - Search for competitor mentions across the web
474
537
  - Returns: Search results with URLs and descriptions
475
538
 
539
+ ### Data Analysis Tools (use with any cache_key from execute)
540
+
541
+ **Pagination** — `get_page(cache_key, offset, limit)`
542
+ - Load more results beyond first page when `next_offset` is returned
543
+
544
+ **Filter/Aggregate** — `query_cache(cache_key, conditions, sort_by, aggregate, group_by)`
545
+ - Filter, sort, aggregate cached data without new API calls
546
+ - Example: `query_cache(cache_key, sort_by=[{"field": "employee_count", "order": "desc"}])`
547
+
548
+ **Export** — `export_data(cache_key, format)`
549
+ - Export to "csv", "json", or "jsonl"
550
+ - Returns downloadable URL
551
+
476
552
  ## Output Formats
477
553
 
478
554
  ### Chat Summary
@@ -486,7 +562,7 @@ Provides competitive intelligence highlights:
486
562
 
487
563
  ### CSV Export
488
564
 
489
- Competitor comparison matrix with:
565
+ Use `export_data(cache_key, "csv")` for competitor comparison matrix with:
490
566
  - Company name, size, location
491
567
  - Employee count and growth rate
492
568
  - Posting frequency and engagement
@@ -495,7 +571,7 @@ Competitor comparison matrix with:
495
571
 
496
572
  ### JSON Export
497
573
 
498
- Complete competitive data for:
574
+ Use `export_data(cache_key, "json")` for complete competitive data for:
499
575
  - Time-series tracking
500
576
  - Dashboard visualization
501
577
  - Automated monitoring
@@ -571,11 +647,11 @@ Track deals against specific competitors:
571
647
  **Intelligence Gathering**:
572
648
  ```
573
649
  For each competitor in win/loss:
574
- 1. get_linkedin_company → Current positioning
575
- 2. parse_webpage(website + "/pricing") → Pricing strategy
576
- 3. parse_webpage(website + "/features") → Feature set
577
- 4. search_reddit_posts(competitor) → Customer feedback
578
- 5. get_linkedin_company_posts → Recent messaging
650
+ 1. execute("linkedin", "company", "company", {"company": "..."}) → Current positioning
651
+ 2. execute("webparser", "parse", "parse", {"url": "<website>/pricing"}) → Pricing strategy
652
+ 3. execute("webparser", "parse", "parse", {"url": "<website>/features"}) → Feature set
653
+ 4. execute("reddit", "search", "search_posts", {"query": "competitor", "count": 20}) → Customer feedback
654
+ 5. execute("linkedin", "company", "company_posts", {"urn": {"type": "company", "value": "..."}, "count": 10}) → Recent messaging
579
655
  ```
580
656
 
581
657
  **Analysis**:
@@ -620,6 +696,7 @@ Excellent coverage through:
620
696
  - Search for employees and extract company
621
697
  - Check if using DBA vs. legal name
622
698
  - Try website domain search
699
+ - Error `412` means not found — check the `llm_hint` in the response for guidance
623
700
 
624
701
  ### Issue: Limited Employee Data
625
702
 
@@ -637,6 +714,14 @@ Excellent coverage through:
637
714
  - Use website blog for content analysis
638
715
  - Focus on employee posts mentioning company
639
716
 
717
+ ### Issue: URN Format Errors (422)
718
+
719
+ **Solution**:
720
+ - Company sub-endpoints require `company:` prefix, NOT `fsd_company`
721
+ - Convert: `urn:li:fsd_company:1441` → use `{"type": "company", "value": "1441"}`
722
+ - User sub-endpoints require `fsd_profile` URN from `/linkedin/user` response
723
+ - Always get URNs from the parent endpoint response first
724
+
640
725
  ---
641
726
 
642
727
  **Ready to analyze competitors?** Ask Claude to help you research competitors, track hiring patterns, or benchmark competitive positioning using this skill!