From anysite-skills
Analyzes startup websites and pitch decks to assess fundraising stage, identify ideal VC profiles, score investors, detect portfolio conflicts, and generate personalized outreach.
npx claudepluginhub anysiteio/agent-skills --plugin anysite-cliThis skill uses the workspace's default tool permissions.
Universal agent for startup investor research and outreach.
Finds VCs for startups from product URL/description: detects industry/stage, identifies 5 funded comparables, researches backers (Track A) and thesis publishers (Track B), ranks with sourced deep-dives and outreach hooks.
Guides founders through seed-stage fundraising: pitch deck creation, investor targeting, outreach strategies, readiness checklists, and process timelines.
Drafts personalized cold emails, warm intros, follow-ups, updates, and communications for investor outreach to angels, VCs, strategic investors, and accelerators.
Share bugs, ideas, or general feedback.
Universal agent for startup investor research and outreach.
Before analyzing investors, gather project context. Use AskUserQuestion tool.
Ask user to provide:
AskUserQuestion:
- "What's your company website?"
- "Do you have a pitch deck I can review? (path or link)"
- "In one sentence, what does your company do?"
Website: Use execute("webparser", "parse", "parse", {"url": website}) to understand:
Pitch deck: Use Read tool if local file, or WebFetch if link
Extract key info:
Ask with AskUserQuestion:
questions:
- question: "What stage are you raising?"
header: "Stage"
options:
- label: "Pre-Seed ($250K-$1M)"
description: "First institutional round, idea to early product"
- label: "Seed ($1M-$3M)"
description: "Product-market fit exploration"
- label: "Series A ($5M-$15M)"
description: "Scaling proven model"
- label: "Other"
description: "Specify your round"
- question: "How much are you raising?"
header: "Amount"
options:
- label: "$500K or less"
- label: "$500K - $1M"
- label: "$1M - $2M"
- label: "$2M+"
- question: "What's your current traction?"
header: "Traction"
options:
- label: "Pre-revenue"
description: "Building product, no revenue yet"
- label: "Early revenue (<$10K MRR)"
description: "First paying customers"
- label: "$10K-$50K MRR"
description: "Growing customer base"
- label: "$50K+ MRR"
description: "Strong traction"
Ask with AskUserQuestion:
questions:
- question: "What type of investors are you targeting?"
header: "Investor Type"
multiSelect: true
options:
- label: "Angel investors"
description: "Individual investors, $25K-$250K checks"
- label: "Micro VCs"
description: "Small funds, $100K-$500K checks"
- label: "Seed VCs"
description: "Institutional seed funds, $500K-$2M"
- label: "Strategic angels"
description: "Industry experts for advice + capital"
- question: "Geographic preference?"
header: "Location"
options:
- label: "US only"
- label: "US + Europe"
- label: "Global"
- label: "Specific region"
- question: "Any specific industries or themes they should focus on?"
header: "Thesis"
multiSelect: true
options:
- label: "B2B SaaS"
- label: "AI/ML"
- label: "Developer Tools"
- label: "Other (specify)"
After gathering info, create investor_criteria.json:
{
"company": {
"name": "...",
"website": "...",
"one_liner": "...",
"stage": "Pre-Seed",
"raising": "$1M",
"traction": "...",
"thesis_keywords": ["B2B SaaS", "AI", "..."]
},
"ideal_investor": {
"types": ["Angel", "Micro VC"],
"check_size": "$50K-$500K",
"stage_focus": ["Pre-Seed", "Seed"],
"thesis_match": ["B2B SaaS", "AI", "Developer Tools"],
"geography": "US + Europe"
},
"competitors": ["competitor1", "competitor2"],
"outreach": {
"pitch_deck_link": "...",
"calendar_link": "...",
"sender_name": "...",
"sender_title": "..."
}
}
Save to data/investor_criteria.json for reference.
After onboarding, analyze investors from CSV or list.
execute("linkedin", "user", "get", {"user": "linkedin-url-or-username"})
CSV data has ~20% error rate. Always verify actual role before scoring.
v2 tip: The
execute()call returns acache_key. Usequery_cache(cache_key, ...)to filter/sort results without re-fetching. Useget_page(cache_key, offset, limit)if paginated results exist. Useexport_data(cache_key, "csv")to save batch results as a downloadable file.
| Factor | Weight | Check |
|---|---|---|
| Is Actually Investor | GATE | Role: Partner, GP, Angel, EIR (NOT: Director, Manager, Engineer) |
| Stage Fit | 25% | Matches company's raising stage |
| Thesis Match | 25% | Matches company's thesis keywords |
| Portfolio Relevance | 30% | Similar companies in portfolio |
| Activity Level | 10% | Investments in last 12-18 months |
| Network Value | 10% | Accelerator ties, fund network |
Disqualifiers (Score = 0):
Search for investments in company's competitors:
WebSearch("[Fund name] portfolio companies")
WebSearch("[Investor name] investments [competitor name]")
If conflict found: -20 points + flag "PORTFOLIO CONFLICT"
For Score > 70, create personalized message using company's outreach config:
Hi [Name],
[Hook from verified portfolio/achievement relevant to THIS company]
[1-2 sentences about company - from one_liner]
[Traction from company profile]
[Question based on their expertise]
Here's our pitch deck: [pitch_deck_link]
If you'd like to chat: [calendar_link]
If no slots work, send your availability.
Best,
[sender_name]
[sender_title]
{
"investor": "Name",
"linkedin": "url",
"score": 85,
"current_role": "Partner @ Fund",
"stage_fit": "Pre-seed focus - MATCH",
"thesis_match": ["AI", "B2B SaaS"],
"portfolio_relevant": ["Company1", "Company2"],
"conflicts": [],
"risk_factors": [],
"outreach_hook": "Your investment in X...",
"message": "Full outreach text"
}
{
"batch": 1,
"total_analyzed": 20,
"strong_fit": 4,
"good_fit": 3,
"not_fit": 13,
"top_candidates": ["Name1", "Name2"]
}
execute() returns next_offset, use get_page(cache_key, offset, limit) to fetch additional results without re-running the query.query_cache(cache_key, conditions=[{"field": "score", "op": ">", "value": 70}], sort_by=[{"field": "score", "order": "desc"}]) to filter high-scoring investors from cached results.query_cache(cache_key, aggregate=[{"op": "avg", "field": "score"}]) to compute batch statistics.export_data(cache_key, "csv") to generate a downloadable CSV of all analyzed investors.execute() returns an error with llm_hint, follow the hint to fix params. Common issues: invalid LinkedIn URL format, rate limiting (retry after delay).| Command | Action |
|---|---|
/vc-analyst | Start full onboarding flow |
/vc-analyst analyze [linkedin] | Analyze single investor (requires prior onboarding) |
/vc-analyst batch [csv-path] | Analyze batch from CSV |
/vc-analyst update-criteria | Update investor criteria |
See references/scoring.md for detailed criteria and examples.