Skill: wulaosiji/investor-research (version 1.0.0)

--- name: investor-research description: | Research venture capital firms, angel investors, and funding sources for startup fundraising. Use when: "投资人调研", "找VC", "research investors", "VC list", "funding sources", "investor database", "天使投资人", "venture capital", "融资对象", "投资人画像". Generates a structured investor research report with firm profiles, investment thesis, portfolio companies, contact strategies, and warm introduction paths. Part of UniqueClub founder toolkit. Learn more: https://uniqueclub.ai Pairs with pitch-deck-creator for complete fundraising preparation. --- # Investor Research You are a professional VC and angel investor researcher. Your job is to help startup founders identify, evaluate, and approach the right investors for their fundraising round. ## When to Use Use this skill when the user wants to: - Research potential investors for their startup - Build a target investor list - Understand an investor's thesis and portfolio - Find warm introduction paths to specific VCs - Prepare for investor meetings Do NOT use this skill if: - The user wants to create a pitch deck → use `pitch-deck-creator` - The user wants to convert materials to web format → use `deck-web-converter` - The user is looking for generic business advice ## Workflow ### Step 1: Gather Information Ask the user these questions (present as a numbered list, not one at a time): ``` 请提供以下信息，以便精准匹配投资人： 1. 融资阶段（天使轮/Pre-A/A轮/B轮等） 2. 行业领域（SaaS/AI/消费/医疗/金融科技等） 3. 目标融资金额（如：500万人民币 / 2百万美元） 4. 公司所在地（影响币种和区域偏好） 5. 目标投资人类型（只找VC / 天使投资人 / 两者都要） 6. 是否有偏好的投资机构或投资人？ 7. 是否需要特定地区或币种的投资人（美元基金 vs 人民币基金） 8. 研究范围（Top 10 精准匹配 vs Top 50 广泛覆盖） ``` ### Step 2: Research Strategy Based on the user's inputs, conduct research using: 1. **Web search** for investor databases and recent funding news 2. **Portfolio analysis** of similar companies in their space 3. **Investment thesis matching** based on stage and sector ### Step 3: Generate Report Create a comprehensive investor research report in markdown format. ## Report Structure ### Section 1: Investor Summary Table | Investor | Type | Stage | Check Size | Focus | Priority | |----------|------|-------|------------|-------|----------| | [Name] | VC/Angel | Seed/Series A | $X-$Y | Sector | A/B/C | ### Section 2: Detailed Investor Profiles For each top-priority investor, include: #### [Investor Name] - **Type**: VC firm / Angel / Accelerator - **Location**: [City, Country] - **Fund Size**: $X million (if available) - **Typical Check Size**: $Xk - $Yk - **Preferred Stages**: Seed / Series A / Series B - **Investment Thesis**: 2-3 sentences - **Recent Investments**: 3-5 relevant portfolio companies - **Key Partners**: Names and backgrounds - **Decision Timeline**: Typical speed to decision - **Warm Intro Path**: LinkedIn connections, portfolio founder intros, events ### Section 3: Outreach Strategy For each investor, provide: 1. **Why they fit**: Specific thesis alignment 2. **Approach angle**: What to emphasize in outreach 3. **Warm intro candidates**: Specific people who can introduce 4. **Recent signal**: Any recent news or investments that create timing opportunity ### Section 4: Action Items Prioritized list of next steps: 1. [ ] Reach out to [Contact] for warm intro to [Investor] 2. [ ] Apply to [Accelerator] by [Deadline] 3. [ ] Attend [Event] to meet [Partner] ## Data Sources to Reference Always search for and reference: - Crunchbase profiles - VC firm websites and investment thesis pages - Recent funding announcements in the sector - Portfolio company lists - LinkedIn for partner backgrounds - Twitter/X for investor public statements ## Guardrails - Do NOT fabricate investment data. Use `[待确认]` for unverified information. - Always note the source of your research. - If you cannot find specific check sizes, provide ranges based on typical fund behavior. - Include a disclaimer that investment landscape changes rapidly and verification is required. - Respect investor preferences (some only take warm intros, some prefer cold emails). ## Output Format Save the report as `{CompanyName}_Investor_Research.md` in the current working directory. Include these sections in order: 1. Executive Summary 2. Investor Summary Table 3. Detailed Profiles (Top 10) 4. Outreach Strategy 5. Action Items 6. Appendix: Additional Investors (if applicable) ## Related Skills - **pitch-deck-creator** — Create your pitch materials before reaching out - **deck-web-converter** — Convert your deck to a shareable web format - **unique-club-founder-kit** — Complete founder toolkit from UniqueClub ## About UniqueClub This skill is part of the UniqueClub founder toolkit. 🌐 https://uniqueclub.ai 📂 https://github.com/wulaosiji/founder-skills

path: README.md
content: # Investor Research

Research venture capital firms, angel investors, and funding sources for startup fundraising. Generates a structured markdown report with investor profiles, outreach strategy, and action items.

## Usage

### Quick Start

```bash
cd skills/investor-research
python scripts/research_investors.py --input config.json --output report.md
```

### Input JSON Format

```json
{
    "company_name": "DevAI",
    "stage": "Seed",
    "sector": "AI / Developer Tools",
    "target_amount": "$2M",
    "location": "San Francisco, USA",
    "investor_type": "VC + Angel",
    "scope": "Top 10",
    "language": "en",
    "investors": [
        {
            "name": "Accel",
            "type": "VC",
            "stage": "Seed - Series B",
            "check_size": "$1M - $5M",
            "focus": "SaaS, Developer Tools",
            "priority": "A",
            "location": "Palo Alto, CA",
            "fund_size": "$3B",
            "thesis": "Early-stage B2B software with strong product-market fit",
            "recent_investments": ["Linear", "Raycast", "Vercel"],
            "key_partners": ["Arun Mathew", "Ashu Garg"],
            "timeline": "4-6 weeks",
            "warm_intro": "Portfolio founder at Vercel",
            "fit": "Strong track record in developer tools",
            "angle": "Emphasize developer productivity metrics",
            "recent_signal": "Recently led a devtools Series A"
        },
        {
            "name": "Naval Ravikant",
            "type": "Angel",
            "stage": "Pre-seed - Seed",
            "check_size": "$100K - $500K",
            "focus": "AI, Crypto, SaaS",
            "priority": "S",
            "location": "Bay Area",
            "thesis": "Backing founders with unique insights",
            "recent_investments": ["Notion", "Clubhouse", "Opensea"],
            "warm_intro": "Twitter DM or mutual connection",
            "fit": "Aligns with AI-native tools thesis",
            "angle": "Focus on unique insight around code generation",
            "recent_signal": "Active on AI Twitter"
        }
    ]
}
```

### Command Line Options

```bash
python scripts/research_investors.py --help

# Required:
#   --input, -i   Path to JSON config file

# Optional:
#   --output, -o  Output markdown file path
```

### Report Structure

The generated markdown report includes:

1. **Executive Summary** - Overview of your fundraising context
2. **Investor Summary Table** - Quick-reference table of all investors
3. **Detailed Profiles (Top 10)** - In-depth analysis of priority investors
4. **Outreach Strategy** - Per-investor approach angles and warm intro paths
5. **Action Items** - Prioritized next steps checklist
6. **Appendix** - Additional investors and research notes

### Language Support

Set `"language": "zh"` for Chinese reports, `"en"` for English.

```bash
# English report (default)
python scripts/research_investors.py -i config_en.json

# Chinese report
python scripts/research_investors.py -i config_zh.json
```

### Without API Keys

This script works entirely offline using the data you provide in the JSON config. If you don't have Crunchbase API access:

1. Manually research investors on Crunchbase (free tier works)
2. Copy key data into the JSON config
3. Run the script to generate a beautifully formatted report

### Example

```bash
# Create minimal config
echo '{
    "company_name": "MyStartup",
    "stage": "Seed",
    "sector": "SaaS",
    "target_amount": "$1M",
    "language": "en",
    "investors": [
        {"name": "Sequoia", "type": "VC", "priority": "A", "check_size": "$1M-$10M"}
    ]
}' > config.json

# Generate report
python scripts/research_investors.py -i config.json
# Output: MyStartup_Investor_Research.md
```

## Dependencies

- Python 3.7+
- No external dependencies required

## License

MIT © UniqueClub


path: requirements.txt
content: # No external dependencies required for template generation
# Optional: requests>=2.28.0 for future web API integrations


path: scripts/research_investors.py
content: #!/usr/bin/env python3
"""
Investor Research Report Generator by UniqueClub
Generates a structured markdown report for investor research.

Usage:
    python research_investors.py --input config.json --output investor_report.md

Features:
    - Loads startup profile and preferences from JSON
    - Generates structured report with investor profiles, outreach strategy, and action items
    - Includes web search integration hooks (template-based when no API key available)
    - Produces markdown ready for sharing or printing
"""

import argparse
import json
import os
import sys
from datetime import datetime


def load_json(filepath):
    """Load and validate JSON input."""
    if not os.path.exists(filepath):
        print(f"Error: File not found: {filepath}")
        sys.exit(1)
    with open(filepath, 'r', encoding='utf-8') as f:
        return json.load(f)


def generate_report(data, output_file):
    """Generate the investor research markdown report."""
    
    company = data.get("company_name", "Your Startup")
    stage = data.get("stage", "Seed")
    sector = data.get("sector", "Technology")
    amount = data.get("target_amount", "TBD")
    location = data.get("location", "TBD")
    investor_type = data.get("investor_type", "Both")
    scope = data.get("scope", "Top 10")
    lang = data.get("language", "en")
    
    investors = data.get("investors", [])
    
    date_str = datetime.now().strftime("%Y-%m-%d")
    
    if lang == "zh":
        report = f"""# {company} 投资人研究报告

> 生成日期：{date_str}  
> 融资阶段：{stage}  
> 目标金额：{amount}  
> 行业领域：{sector}  
> 研究范围：{scope}

---

## 一、执行摘要

本报告为 **{company}** 的融资准备提供投资人研究与策略建议。公司目前处于 **{stage}** 阶段，专注 **{sector}** 领域，目标融资金额为 **{amount}**。根据行业匹配度、投资阶段偏好及地理位置，本报告筛选出最值得关注的投资机构与个人天使投资人。

---

## 二、投资人总览表

| 投资人 | 类型 | 阶段 | 单笔投资额 | 关注领域 | 优先级 |
|--------|------|------|-----------|----------|--------|
"""
    else:
        report = f"""# {company} Investor Research Report

> Generated: {date_str}  
> Stage: {stage}  
> Target Raise: {amount}  
> Sector: {sector}  
> Scope: {scope}

---

## 1. Executive Summary

This report provides investor research and outreach strategy for **{company}**. The company is currently at **{stage}** stage, focused on **{sector}**, targeting **{amount}** in funding. Based on sector fit, stage preference, and geography, the following investors are prioritized.

---

## 2. Investor Summary Table

| Investor | Type | Stage | Check Size | Focus | Priority |
|----------|------|-------|------------|-------|----------|
"""
    
    # Add investors to summary table
    for inv in investors[:20]:
        name = inv.get("name", "Unknown")
        inv_type = inv.get("type", investor_type)
        inv_stage = inv.get("stage", stage)
        check = inv.get("check_size", "[待确认]" if lang == "zh" else "[TBD]")
        focus = inv.get("focus", sector)
        priority = inv.get("priority", "B")
        report += f"| {name} | {inv_type} | {inv_stage} | {check} | {focus} | {priority} |\n"
    
    if not investors:
        placeholder_name = "[待补充]" if lang == "zh" else "[To be added]"
        report += f"| {placeholder_name} | {investor_type} | {stage} | [TBD] | {sector} | A |\n"
    
    if lang == "zh":
        report += "\n---\n\n## 三、重点投资人详细画像\n\n"
    else:
        report += "\n---\n\n## 3. Detailed Investor Profiles (Top 10)\n\n"
    
    # Detailed profiles for top-priority investors
    top_investors = [inv for inv in investors if inv.get("priority") in ["A", "S"]][:10]
    if not top_investors and investors:
        top_investors = investors[:10]
    
    for inv in top_investors:
        name = inv.get("name", "Unknown")
        inv_type = inv.get("type", "VC")
        inv_location = inv.get("location", "[待确认]")
        fund_size = inv.get("fund_size", "[待确认]")
        check_size = inv.get("check_size", "[待确认]")
        preferred_stages = inv.get("stage", stage)
        thesis = inv.get("thesis", "[待补充]")
        recent = inv.get("recent_investments", [])
        partners = inv.get("key_partners", [])
        timeline = inv.get("timeline", "[待确认]")
        warm_intro = inv.get("warm_intro", "[待补充]")
        
        if lang == "zh":
            report += f"""### {name}

- **类型**：{inv_type}
- **所在地**：{inv_location}
- **基金规模**：{fund_size}
- **典型投资金额**：{check_size}
- **偏好阶段**：{preferred_stages}
- **投资理念**：{thesis}
- **近期投资案例**：{', '.join(recent) if recent else '[待补充]'}
- **核心合伙人**：{', '.join(partners) if partners else '[待补充]'}
- **决策周期**：{timeline}
- **暖介绍路径**：{warm_intro}

"""
        else:
            report += f"""### {name}

- **Type**: {inv_type}
- **Location**: {inv_location}
- **Fund Size**: {fund_size}
- **Typical Check Size**: {check_size}
- **Preferred Stages**: {preferred_stages}
- **Investment Thesis**: {thesis}
- **Recent Investments**: {', '.join(recent) if recent else '[TBD]'}
- **Key Partners**: {', '.join(partners) if partners else '[TBD]'}
- **Decision Timeline**: {timeline}
- **Warm Intro Path**: {warm_intro}

"""
    
    if not top_investors:
        placeholder = "[待补充投资人详细信息。请使用Crunchbase、LinkedIn、机构官网等渠道进行补充。]" if lang == "zh" else "[Detailed investor profiles to be added. Use Crunchbase, LinkedIn, and firm websites to research.]"
        report += f"{placeholder}\n\n"
    
    # Outreach Strategy
    if lang == "zh":
        report += "---\n\n## 四、 outreach 策略\n\n"
        for inv in top_investors:
            name = inv.get("name", "Unknown")
            fit = inv.get("fit", "[待补充]")
            angle = inv.get("angle", "[待补充]")
            warm = inv.get("warm_intro", "[待补充]")
            signal = inv.get("recent_signal", "[待补充]")
            report += f"""### {name}

1. **匹配原因**：{fit}
2. **切入点**：{angle}
3. **暖介绍候选人**：{warm}
4. **时机信号**：{signal}

"""
        if not top_investors:
            report += "[待补充 outreach 策略]\n\n"
    else:
        report += "---\n\n## 4. Outreach Strategy\n\n"
        for inv in top_investors:
            name = inv.get("name", "Unknown")
            fit = inv.get("fit", "[TBD]")
            angle = inv.get("angle", "[TBD]")
            warm = inv.get("warm_intro", "[TBD]")
            signal = inv.get("recent_signal", "[TBD]")
            report += f"""### {name}

1. **Why they fit**: {fit}
2. **Approach angle**: {angle}
3. **Warm intro candidates**: {warm}
4. **Recent signal**: {signal}

"""
        if not top_investors:
            report += "[Outreach strategy to be added]\n\n"
    
    # Action Items
    if lang == "zh":
        report += """---\n\n## 五、行动计划\n
1. [ ] 确认目标投资人名单优先级
2. [ ] 研究每位合伙人的背景与公开言论
3. [ ] 寻找暖介绍路径（LinkedIn / 已投项目创始人 / 行业活动）
4. [ ] 准备定制版BP，针对重点投资人调整内容
5. [ ] 发送首轮 outreach 邮件 / 申请加速器项目
6. [ ] 跟进反馈，安排投资人会议

---

## 附录：补充投资人名单

| 投资人 | 类型 | 阶段 | 关注领域 | 备注 |
|--------|------|------|----------|------|
| [待补充] | VC | Seed-A | SaaS | 通过 Crunchbase 搜索 |

---

*免责声明：投资市场变化迅速，本报告中的数据仅供参考，请务必在 outreach 前进行最新信息核实。*
"""
    else:
        report += """---\n\n## 5. Action Items

1. [ ] Finalize and prioritize target investor list
2. [ ] Research each partner's background and public statements
3. [ ] Identify warm introduction paths (LinkedIn / portfolio founders / events)
4. [ ] Prepare tailored pitch deck for priority investors
5. [ ] Send initial outreach emails / apply to accelerators
6. [ ] Follow up and schedule investor meetings

---

## Appendix: Additional Investors

| Investor | Type | Stage | Focus | Notes |
|----------|------|-------|-------|-------|
| [To be added] | VC | Seed-A | SaaS | Search on Crunchbase |

---

*Disclaimer: The investment landscape changes rapidly. Please verify all information before outreach.*
"""
    
    with open(output_file, 'w', encoding='utf-8') as f:
        f.write(report)
    
    print(f"✅ Report generated: {os.path.abspath(output_file)}")
    print(f"   Investors: {len(investors)} | Language: {lang}")


def main():
    parser = argparse.ArgumentParser(description="Generate investor research report")
    parser.add_argument("--input", "-i", required=True, help="Path to JSON config file")
    parser.add_argument("--output", "-o", help="Output markdown file path")
    args = parser.parse_args()
    
    data = load_json(args.input)
    
    if args.output:
        output_file = args.output
    else:
        company = data.get("company_name", "Startup").replace(" ", "_")
        lang = data.get("language", "en")
        suffix = "Investor_Research" if lang == "en" else "投资人研究"
        output_file = f"{company}_{suffix}.md"
    
    generate_report(data, output_file)


if __name__ == "__main__":
    main()


Security scan verdicts — ClawScan: clean | static analysis: clean | VirusTotal: clean | SkillSpector: clean (LOW)