skills/anysite-lead-generation/SKILL.md
Lead generation and prospecting using anysite MCP server for LinkedIn prospect discovery, email finding, company research, and contact enrichment. Extract contacts from websites, find decision-makers at target companies, and build qualified prospect lists for sales, recruiting, and business development. Supports LinkedIn (primary), web scraping for contact extraction, and Instagram business discovery. Use when users need to build prospect lists, find decision-makers, extract contact information, research potential customers, or enrich existing leads with additional data.
npx skillsauth add anysiteio/agent-skills anysite-lead-generationInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Professional lead generation and prospecting using the anysite MCP server. Find prospects on LinkedIn, discover verified emails, extract contacts from websites, and build comprehensive lead lists for sales, recruiting, and business development.
The anysite Lead Generation skill helps you:
This skill provides comprehensive lead generation capabilities with the added benefit of zero configuration and immediate execution through anysite MCP.
All data fetching uses the universal execute() tool with four parameters: source, category, endpoint, params. Supporting tools:
execute(source, category, endpoint, params) - Fetch data. Returns first page of items + cache_key.get_page(cache_key, offset, limit) - Load additional pages from a previous execute() result using the returned cache_key and next_offset.query_cache(cache_key, conditions, sort_by, aggregate, group_by) - Filter, sort, count, or aggregate already-fetched data without a new API call.export_data(cache_key, format) - Export a full dataset as CSV, JSON, or JSONL. Returns a download URL.discover(source, category) - Inspect available endpoints and their accepted params (use when unsure about params).v2 responses may include an llm_hint field with human-readable guidance when something goes wrong (e.g., invalid params, rate limits). Always check for llm_hint in the response and follow its advice before retrying.
Choose the appropriate data source based on your prospecting goal:
| Goal | v2 Call | Use Case |
|------|---------|----------|
| Find prospects by title/company | execute("linkedin", "search", "search_users", {...}) | B2B prospecting, targeted outreach |
| Enrich existing leads | execute("linkedin", "user", "get", {"user": ...}) | Add work history, education, skills |
| Find verified emails | execute("linkedin", "email", "find", {"user": ...}) | Email outreach campaigns |
| Extract website contacts | execute("webparser", "parse", "parse", {"url": ...}) | Get emails/phones from contact pages |
| Research target companies | execute("linkedin", "search", "search_companies", {...}) | Account-based marketing (ABM) |
| Find company employees | execute("linkedin", "search", "search_users", {...}) + company filter | Multi-threading into accounts |
Use anysite MCP v2 tools directly to gather lead data:
Example: Find Sales VPs in San Francisco
Tool: mcp__anysite__execute
Parameters:
- source: "linkedin"
- category: "search"
- endpoint: "search_users"
- params: {"title": "VP Sales", "location": "San Francisco Bay Area", "count": 25}
Example: Enrich a LinkedIn Profile
Tool: mcp__anysite__execute
Parameters:
- source: "linkedin"
- category: "user"
- endpoint: "get"
- params: {"user": "linkedin.com/in/johndoe", "with_experience": true, "with_education": true, "with_skills": true}
Example: Find Email Address
Tool: mcp__anysite__execute
Parameters:
- source: "linkedin"
- category: "email"
- endpoint: "find"
- params: {"user": "johndoe"}
Example: Extract Contacts from Website
Tool: mcp__anysite__execute
Parameters:
- source: "webparser"
- category: "parse"
- endpoint: "parse"
- params: {"url": "https://company.com/contact", "extract_contacts": true, "strip_all_tags": true}
After execute() returns data with a cache_key, use v2 post-processing:
query_cache(cache_key, conditions=[{"field": "title", "operator": "contains", "value": "VP"}])query_cache(cache_key, sort_by=[{"field": "follower_count", "order": "desc"}])query_cache(cache_key, aggregate=[{"function": "count", "field": "*"}])get_page(cache_key, offset=next_offset, limit=10)Also review the returned data for:
Choose your preferred output format:
Chat Summary (Default)
CSV Export (via v2 export_data)
Tool: mcp__anysite__export_data
Parameters:
- cache_key: <cache_key from execute>
- format: "csv"
Returns a download URL. Ready for CRM import (Salesforce, HubSpot, etc.)
JSON Export (via v2 export_data)
Tool: mcp__anysite__export_data
Parameters:
- cache_key: <cache_key from execute>
- format: "json"
Returns a download URL. Structured data for custom integration.
Scenario: Find 50 qualified prospects at SaaS companies in specific roles
Steps:
Tool: mcp__anysite__execute
Parameters:
- source: "linkedin"
- category: "search"
- endpoint: "search_users"
- params: {"keywords": "SaaS software cloud", "title": "Head of Marketing, VP Marketing, CMO", "location": "United States", "company_keywords": "software", "count": 50}
For each prospect from step 1:
Tool: mcp__anysite__execute
Parameters:
- source: "linkedin"
- category: "user"
- endpoint: "get"
- params: {"user": "<prospect_username>", "with_experience": true, "with_education": true}
For each qualified prospect:
Tool: mcp__anysite__execute
Parameters:
- source: "linkedin"
- category: "email"
- endpoint: "find"
- params: {"user": "<prospect_username>"}
Tool: mcp__anysite__export_data
Parameters:
- cache_key: <cache_key from search>
- format: "csv"
Import the CSV to your CRM system and set up outreach sequences.
Expected Output:
Scenario: Find decision-makers at specific target companies
Steps:
Tool: mcp__anysite__execute
Parameters:
- source: "linkedin"
- category: "search"
- endpoint: "search_companies"
- params: {"keywords": "<your ICP description>", "industry": "<target industry>", "employee_count": ["51-200", "201-500"], "location": "<target location>", "count": 20}
For each target company:
Tool: mcp__anysite__execute
Parameters:
- source: "linkedin"
- category: "company"
- endpoint: "get"
- params: {"company": "<company_identifier or URL>"}
For each target company:
Tool: mcp__anysite__execute
Parameters:
- source: "linkedin"
- category: "search"
- endpoint: "search_users"
- params: {"company_keywords": "<Company Name>", "title": "VP, Director, Head of, Chief", "count": 10}
For each decision-maker:
Tool: mcp__anysite__execute
source: "linkedin", category: "user", endpoint: "get", params: {"user": "<username>"}
Tool: mcp__anysite__execute
source: "linkedin", category: "email", endpoint: "find", params: {"user": "<username>"}
Tool: mcp__anysite__query_cache
Parameters:
- cache_key: <cache_key from employee search>
- conditions: [{"field": "title", "operator": "contains", "value": "VP"}]
- sort_by: [{"field": "name", "order": "asc"}]
Expected Output:
Scenario: Extract contact information from a list of company websites
Steps:
From LinkedIn company search or existing list
Tool: mcp__anysite__execute
Parameters:
- source: "linkedin"
- category: "company"
- endpoint: "get"
- params: {"company": "<company_identifier>"}
Extract: company website URLs
For each website:
Tool: mcp__anysite__execute
Parameters:
- source: "webparser"
- category: "parse"
- endpoint: "parse"
- params: {"url": "https://company.com/contact", "extract_contacts": true, "strip_all_tags": true}
Alternative pages to try:
- /contact
- /about/contact
- /about/team
- /about
Tool: mcp__anysite__execute
Parameters:
- source: "webparser"
- category: "parse"
- endpoint: "parse"
- params: {"url": "https://company.com/team", "extract_contacts": true}
Tool: mcp__anysite__discover
Parameters:
- source: "webparser"
- category: "parse"
(Use discover to find the sitemap endpoint and its params, then execute accordingly)
Identify pages likely to contain contacts:
- /contact, /team, /about, /leadership
Expected Output:
Scenario: Find qualified candidates for open positions
Steps:
Required skills, titles, experience level, location
Tool: mcp__anysite__execute
Parameters:
- source: "linkedin"
- category: "search"
- endpoint: "search_users"
- params: {"keywords": "Python React AWS", "title": "Software Engineer, Senior Engineer", "location": "Remote", "count": 100}
If response includes next_offset:
Tool: mcp__anysite__get_page
Parameters:
- cache_key: <cache_key from search>
- offset: <next_offset>
- limit: 50
For promising candidates:
Tool: mcp__anysite__execute
source: "linkedin", category: "user", endpoint: "get", params: {"user": "<username>", "with_experience": true, "with_education": true, "with_skills": true}
Tool: mcp__anysite__execute
source: "linkedin", category: "email", endpoint: "find", params: {"user": "<username>"}
Tool: mcp__anysite__query_cache
Parameters:
- cache_key: <cache_key from search>
- conditions: [{"field": "location", "operator": "contains", "value": "Remote"}]
- sort_by: [{"field": "follower_count", "order": "desc"}]
Expected Output:
v2 Call: execute("linkedin", "search", "search_users", {...})
Search for LinkedIn users by various criteria.
Parameters (passed in params):
keywords (optional): General keywords for searchtitle (optional): Job title keywords (e.g., "VP Sales", "Software Engineer")company_keywords (optional): Company name keywordslocation (optional): Location (city, state, country)school_keywords (optional): School/university keywordsfirst_name (optional): First namelast_name (optional): Last namecount (default: 10): Number of results to returnReturns: List of user profiles with name, title, location, profile URL, and URN. Includes cache_key for pagination and filtering.
Use Cases:
Pagination: If next_offset is returned, call get_page(cache_key, next_offset, limit) for more results.
v2 Call: execute("linkedin", "user", "get", {"user": ...})
Get comprehensive profile information for a LinkedIn user.
Parameters (passed in params):
user (required): LinkedIn username or full profile URLwith_education (default: true): Include education historywith_experience (default: true): Include work experiencewith_skills (default: true): Include skillsReturns: Complete profile with work history, education, skills, certifications, and more
Use Cases:
v2 Call: execute("linkedin", "email", "find", {"user": ...})
Search for email addresses associated with LinkedIn profiles.
Parameters (passed in params):
user (required): LinkedIn username or profile URLReturns: Email addresses associated with the LinkedIn profile
Use Cases:
v2 Call: execute("linkedin", "search", "search_companies", {...})
Search for LinkedIn companies by various criteria.
Parameters (passed in params):
keywords (optional): Company name or description keywordslocation (optional): Company locationindustry (optional): Industry typeemployee_count (optional): Array of employee count ranges (e.g., ["51-200", "201-500"])count (required): Number of results to returnReturns: List of companies with name, industry, size, location, and URN. Includes cache_key.
Use Cases:
v2 Call: execute("linkedin", "company", "get", {"company": ...})
Get detailed information about a LinkedIn company.
Parameters (passed in params):
company (required): Company identifier or LinkedIn URLReturns: Company profile with description, industry, size, specialties, website
Use Cases:
v2 Call: discover("linkedin", "company") to find the employee stats endpoint, then execute(...) with the discovered endpoint and params.
Get employee statistics and insights for a company.
Use Cases:
v2 Call: execute("webparser", "parse", "parse", {"url": ...})
Extract content and contact information from web pages.
Parameters (passed in params):
url (required): Webpage URLextract_contacts (default: false): Extract emails, phones, social linksstrip_all_tags (default: true): Remove HTML tagsonly_main_content (default: true): Extract only main content areaReturns: Page content, contacts (emails, phones), links
Use Cases:
v2 Call: discover("webparser", "parse") to find the sitemap endpoint, then execute(...) with discovered endpoint and params.
Retrieve sitemap URLs from a website.
Use Cases:
v2 Call: execute("linkedin", "post", "get_user_posts", {"user": ...})
Get recent posts from a LinkedIn user for engagement research.
Use Cases:
v2 Call: execute("linkedin", "post", "search_posts", {...})
Search LinkedIn posts by keywords.
Use Cases:
v2 Call: execute("linkedin", "job_search", "search_jobs", {...})
Search LinkedIn job postings.
Use Cases:
v2 Call: execute("linkedin", "google", "search", {"query": ...})
Search Google for LinkedIn profiles.
Use Cases:
The skill will provide:
Example:
Found 47 qualified prospects matching your criteria:
Top Prospects:
1. Jane Smith - VP Sales at TechCorp (San Francisco)
- Email: [email protected]
- 10 years in SaaS sales leadership
- Previously at Salesforce, Oracle
2. John Doe - Head of Sales at CloudCo (Remote)
- Email: Not found (try web scraping)
- 8 years experience
- Strong enterprise background
Quality Metrics:
- 32% have verified emails (15/47)
- 91% have complete LinkedIn profiles (43/47)
- 68% in target location (32/47)
Next Steps:
1. Export to CSV for CRM import
2. Set up email outreach sequence
3. Prioritize prospects with emails
4. Research companies for remaining prospects
Use export_data(cache_key, "csv") to get a download URL for CRM import and spreadsheet analysis.
How to Request: "Export the results as CSV"
CSV Structure:
Full Name,First Name,Last Name,Title,Company,Location,Email,Phone,LinkedIn URL,Profile URN,Years Experience,Education,Skills,Last Updated
Use Cases:
Use export_data(cache_key, "json") to get a download URL for programmatic access and custom integration.
How to Request: "Export the results as JSON"
JSON Structure:
{
"prospects": [
{
"profile": {
"firstName": "Jane",
"lastName": "Smith",
"headline": "VP Sales at TechCorp",
"location": "San Francisco Bay Area",
"profileUrl": "https://linkedin.com/in/janesmith",
"urn": "urn:li:fsd_profile:ABC123"
},
"currentPosition": {
"title": "VP Sales",
"company": "TechCorp",
"startDate": "2021-06"
},
"contact": {
"email": "[email protected]",
"phone": null
},
"experience": [...],
"education": [...],
"skills": [...]
}
],
"metadata": {
"total": 47,
"withEmails": 15,
"timestamp": "2026-01-29T01:00:00Z"
}
}
Use Cases:
Combine LinkedIn data with other platforms for comprehensive lead profiles:
Pattern: LinkedIn -> Company Website -> Instagram (for B2C)
Example:
1. execute("linkedin", "search", "search_users", {"keywords": "Emily Chen", "company_keywords": "FashionBrand"})
2. execute("linkedin", "company", "get", {"company": "FashionBrand"}) -> Get website URL
3. execute("webparser", "parse", "parse", {"url": "<website>/contact", "extract_contacts": true}) -> Get phone, email
4. execute("instagram", "search", "search_users", {"query": "FashionBrand"}) -> Find official account
5. execute("instagram", "user", "user", {"user": "fashionbrand"}) -> Verify business account, get follower count
Advanced LinkedIn search using keyword combinations:
Title Combinations:
"VP Sales" OR "Head of Sales" OR "Director Sales" - Multiple title variations"Software Engineer" AND "Python" - Title + required skill"Marketing" NOT "Intern" - Exclude junior levelsCompany Patterns:
"Google OR Meta OR Amazon" - Multiple target companies"SaaS" AND "B2B" - Industry qualifiers"Startup OR Early Stage" - Company stage targetingLocation Strategies:
"San Francisco Bay Area" - Metropolitan areas"United States" - Country-level"Remote" - Remote-only positionsScore prospects based on multiple criteria:
Scoring Dimensions:
Profile Completeness (0-20 points)
Title Match (0-30 points)
Company Fit (0-25 points)
Experience Level (0-15 points)
Location (0-10 points)
Total Score: 0-100 points
Use query_cache() to filter by score thresholds:
query_cache(cache_key, conditions=[{"field": "score", "operator": ">=", "value": 70}], sort_by=[{"field": "score", "order": "desc"}])
Systematic enrichment workflow for large lists:
Process:
Efficiency Tips:
This skill focuses on B2B lead generation where LinkedIn, web scraping, and professional networks provide the most comprehensive data. For local business discovery and contact extraction, the combination of LinkedIn company search and web scraping provides strong coverage.
Note on Crunchbase: Crunchbase tools are disabled in v2. Use LinkedIn company search and Y Combinator data as alternatives for company research and funding information.
Default Timeout: 300 seconds (5 minutes) per MCP tool call
Strategies for Large Datasets:
Batch Processing: Use count parameter to limit results per call
Pagination: Use get_page(cache_key, offset, limit) to retrieve additional results without re-executing the search.
Parallel Processing: For independent queries
Example:
Instead of:
execute("linkedin", "search", "search_users", {"count": 200}) -> May timeout
Do this:
execute("linkedin", "search", "search_users", {"count": 50, "location": "California"})
execute("linkedin", "search", "search_users", {"count": 50, "location": "New York"})
execute("linkedin", "search", "search_users", {"count": 50, "location": "Texas"})
execute("linkedin", "search", "search_users", {"count": 50, "location": "Florida"})
LinkedIn Data: Real-time access through anysite MCP
Recommendation:
execute("linkedin", "email", "find", {"user": ...}) for email discoveryLinkedIn Terms of Service:
Email Collection:
Best Practices:
For advanced techniques and strategies, see:
Symptoms: Search returns 0 results or very few
Causes:
Solutions:
execute("linkedin", "search", "search_companies", {...}) firstllm_hint in the response for guidanceExample Fix:
Too Restrictive:
execute("linkedin", "search", "search_users", {"title": "Vice President of Enterprise Sales", "location": "San Francisco, California", "company_keywords": "Salesforce Inc"})
Better:
execute("linkedin", "search", "search_users", {"title": "VP Sales OR Head of Sales", "location": "San Francisco Bay Area", "company_keywords": "Salesforce"})
Symptoms: Email find returns no results
Causes:
Solutions:
Alternative Workflow:
1. execute("linkedin", "user", "get", {"user": "<username>"}) -> Get current company
2. execute("linkedin", "company", "get", {"company": "<company>"}) -> Get company website
3. execute("webparser", "parse", "parse", {"url": "<website>/contact", "extract_contacts": true}) -> Extract company emails
4. Use email pattern: [email protected]
Symptoms: Request times out after 300 seconds
Causes:
Solutions:
count parameter (try 25-50 instead of 100+)llm_hint for retry guidanceExample:
May Timeout:
execute("linkedin", "search", "search_users", {"title": "Software Engineer", "count": 500})
Better:
execute("linkedin", "search", "search_users", {"title": "Software Engineer", "count": 50})
# Then use get_page(cache_key, next_offset, 50) for additional results
Symptoms: Profile missing work history, education, or skills
Causes:
Solutions:
with_experience, with_education, with_skills to true in paramsSymptoms: Error when using URN in follow-up calls
Causes:
Solutions:
urn:li:fsd_profile:XXXXXXXXXanysite MCP Server Issues:
llm_hint field in error responses for actionable guidanceSkill-Specific Questions:
references/ folderData Quality Issues:
count values firstquery_cache() to filter low-quality resultsIntegration Problems:
Goal: Find 100 qualified enterprise sales prospects
Process:
execute("linkedin", "search", "search_users", {"title": "VP Sales", "company_keywords": "Enterprise Software", "count": 100})execute("linkedin", "search", "search_companies", {...})export_data(cache_key, "csv") for Salesforce importSuccess Metrics:
Goal: Source 50 Python engineers for startup
Process:
execute("linkedin", "search", "search_users", {"keywords": "Python Django AWS", "title": "Software Engineer", "location": "Remote", "count": 100})query_cache() to remove <2 years experienceSuccess Metrics:
Goal: Find potential integration partners in marketing tech
Process:
execute("linkedin", "search", "search_companies", {"keywords": "marketing automation", "employee_count": ["51-200"]})execute("linkedin", "search", "search_users", {"title": "VP Product OR Head of Partnerships", "company_keywords": "<company>"})execute("linkedin", "post", "get_user_posts", {"user": ...})Success Metrics:
Ready to start generating leads? Ask Claude to help you find prospects, enrich profiles, or build comprehensive lead lists using this skill!
tools
Read-only static security audit of Claude Code skills, commands, and plugins. Analyzes SKILL.md frontmatter, body content, supporting scripts, and hooks for security risks. Use this skill when the user asks to "audit a skill", "review skill security", "check SKILL.md for risks", "scan a plugin for dangerous patterns", "verify skill safety", "check skill permissions", "analyze skill hooks", "audit a skill from GitHub", "review a remote skill", "check a skill by URL", or needs a security assessment of any Claude Code skill, command, or plugin before enabling it.
tools
Build a positioning map for 3–5 competitors and identify the empty quadrant the founder could own. Use when a founder asks "where's the positioning gap?", "how do I position against X?", "what's the competitive landscape look like on hero / pricing / hiring / customers?", or needs a structured comparison before a launch, repositioning, or fundraise. Combines Anysite MCP (LinkedIn company entity + post search + jobs search; SEC for late-stage) with Exa MCP (fetch JS-heavy SaaS marketing pages, find case studies and changelogs). Returns a comparison table across 5 axes (hero / pricing / specialities / recent shipping / hiring), 3 candidate positioning moves with explicit choice criteria, and a one-sentence positioning statement. Requires customer pain themes as input — positioning without pain context is just rearranging marketing copy. Run competitor-discovery and customer-pain-mining first if you don't have a curated competitor list + pain themes.
tools
Extract verbatim customer complaints about competitors — the exact wording the founder's product copy should steal, in customers' own words. Use when a founder asks "what do users hate about X?", "what's broken about [category]?", "what's the white space?", or needs raw customer language for landing-page copy, custdev prep, ad copy, or product strategy. Combines Anysite MCP (Reddit broad sweeps, LinkedIn issue-level pain search, YouTube comments under review videos, Twitter for viral pain quotes) with Exa MCP (semantic search for review blog posts, comparison articles, "why I left X" Medium posts). Returns 3–5 pain clusters with 2–3 verbatim quotes each plus a white-space section listing features customers ask for that no competitor ships. Run competitor-discovery first if there's no validated competitor list.
tools
--- name: competitor-discovery description: Find a startup's REAL competitors — the alternatives customers actually compare them to, not just the names on the pitch deck. Use when a founder asks "who are my real competitors?", asks "what does the choice landscape look like for X?", wants to validate or expand a pitch-deck competitor slide, or needs to map alternatives before pain mining or positioning work. Combines Anysite MCP (LinkedIn company/search, LinkedIn posts `mentioned[]` extraction +