{"id":"d0bbe9e7-6121-48b5-8f7a-8c89e655d592","shortId":"3mregQ","kind":"skill","title":"vc-finder","tagline":"Takes a startup product URL or description, detects the industry and funding stage, identifies 5 comparable funded companies, searches who invested in those companies (Track A), finds VCs who publish investment theses about this space (Track B), and returns a ranked sourced list ","description":"# VC Finder\n\nTake a product URL or description. Detect industry and stage. Find 5 comparable funded companies. Run two research tracks: who invested in those comparables (Track A), and which VCs publish theses about this space (Track B). Return a sourced, ranked investor list with outreach hooks.\n\n---\n\n**Critical rule:** Every VC in Track A must include the specific comparable company they backed as evidence. Every VC in Track B must include the exact article or post title where they stated their thesis. If a VC name did not appear in Tavily search results, do not include them. No hallucinated fund names.\n\n---\n\n## Common Mistakes\n\n| The agent will want to... | Why that's wrong |\n|---|---|\n| Add a16z or Sequoia because they are famous | A famous VC without evidence is noise. Only include VCs that appear in Tavily search results for this specific product. Name-dropping wastes the founder's time. |\n| Continue when all 5 Track A searches return 0 results | Zero Track A results means the comparables were wrong or too obscure. Stop, regenerate comparables with broader known names, and retry. Continuing produces an evidence-free list. |\n| Include a Track B VC without citing the article or post | Thesis without a source is indistinguishable from hallucination. The founder cannot verify it and the list loses all credibility. |\n| Detect stage from website aesthetics (\"site looks polished\") | Stage must come from the specific CTA signals detected in Step 4. Aesthetic guessing sends founders to wrong-stage investors. |\n| Write generic outreach hooks like \"highlight your traction\" | Every outreach hook must name this specific product's differentiator and a specific VC portfolio signal. Generic hooks are removed by the QA step. |\n| Skip the URL fetch when the user also provides a description | Always fetch the URL. The live page often reveals stage signals (pricing CTAs, customer logos, job openings) that the user's description omits. |\n\n---\n\n## Step 1: Setup Check\n\n```bash\necho \"GEMINI_API_KEY: ${GEMINI_API_KEY:+set}\"\necho \"TAVILY_API_KEY: ${TAVILY_API_KEY:+set}\"\necho \"FIRECRAWL_API_KEY: ${FIRECRAWL_API_KEY:-not set, Tavily extract will be used as fallback}\"\n```\n\n**If GEMINI_API_KEY is missing:** Stop. Tell the user: \"GEMINI_API_KEY is required for product analysis and VC synthesis. Get it at aistudio.google.com. Add it to your .env file.\"\n\n**If TAVILY_API_KEY is missing:** Stop. Tell the user: \"TAVILY_API_KEY is required to research VC investments and theses. There is no fallback for this. Get it at app.tavily.com. Free tier: 1000 credits/month (about 125 full runs). Add it to your .env file.\"\n\n**If only FIRECRAWL_API_KEY is missing:** Continue silently. Tavily extract will be used for the URL fetch.\n\n---\n\n## Step 2: Gather Input\n\nYou need:\n- Product URL (required, unless user pastes a product description directly)\n- Optional: target stage hint (pre-seed, seed, series-a, series-b) -- if provided, use it and skip stage detection\n- Optional: geography preference (US, Europe, global) -- defaults to US if not specified\n\n**If the user provides only a pasted description (no URL):** Skip Steps 3-4. Go directly to Step 5 with the pasted text as `product_content`. Set `stage_source` to `user_description`.\n\n**If neither URL nor description is provided:** Ask: \"What is the URL of your product or startup? Or paste a short description: what it does, who it is for, and what stage you are at (pre-seed, seed, Series A).\"\n\nDerive product slug from URL for the output filename:\n\n```bash\nPRODUCT_SLUG=$(python3 -c \"\nfrom urllib.parse import urlparse\nurl = 'URL_HERE'\nhost = urlparse(url).netloc.replace('www.', '')\nprint(host.split('.')[0])\n\")\n```\n\n---\n\n## Step 3: Fetch Product Page\n\n**Primary: Firecrawl (if FIRECRAWL_API_KEY is set)**\n\n```bash\ncurl -s -X POST https://api.firecrawl.dev/v1/scrape \\\n  -H \"Authorization: Bearer $FIRECRAWL_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"url\": \"URL_HERE\", \"formats\": [\"markdown\"], \"onlyMainContent\": true}' \\\n  | python3 -c \"\nimport sys, json\nd = json.load(sys.stdin)\ncontent = d.get('data', {}).get('markdown', '') or d.get('markdown', '')\nprint(f'Fetched: {len(content)} characters')\nopen('/tmp/vc-product-raw.md', 'w').write(content)\n\"\n```\n\n**Fallback: Tavily extract (if FIRECRAWL_API_KEY is not set)**\n\n```bash\ncurl -s -X POST https://api.tavily.com/extract \\\n  -H \"Content-Type: application/json\" \\\n  -d \"{\\\"api_key\\\": \\\"$TAVILY_API_KEY\\\", \\\"urls\\\": [\\\"URL_HERE\\\"]}\" \\\n  | python3 -c \"\nimport sys, json\nd = json.load(sys.stdin)\ncontent = d.get('results', [{}])[0].get('raw_content', '')\nprint(f'Fetched via Tavily extract: {len(content)} characters')\nopen('/tmp/vc-product-raw.md', 'w').write(content)\n\"\n```\n\n**Step-level checkpoint:**\n\n```bash\npython3 -c \"\ncontent = open('/tmp/vc-product-raw.md').read()\nif len(content) < 200:\n    print('ERROR: Page returned fewer than 200 characters.')\nelse:\n    print(f'Content OK: {len(content)} characters')\n\"\n```\n\n**If content < 200 characters:** Stop fetching. Tell the user: \"The product page returned no readable content. This usually means the site is JavaScript-rendered and requires a browser. Please paste your product description directly: what it does, who it is for, and what stage you are at.\"\n\nProceed to Step 5 using the pasted description as `product_content`.\n\n---\n\n## Step 4: Detect Stage Signals Locally (No API)\n\nParse the fetched markdown with regex before any API call. This gives Gemini anchored evidence rather than asking it to guess from aesthetics.\n\n```bash\npython3 << 'PYEOF'\nimport re, json\n\ncontent = open('/tmp/vc-product-raw.md').read().lower()\nstage_signals = []\n\n# Pre-seed signals\nif re.search(r'join\\s+(the\\s+)?waitlist|sign\\s+up\\s+for\\s+beta|early\\s+access|request\\s+(an?\\s+)?invite|get\\s+notified', content):\n    stage_signals.append({'signal': 'waitlist or beta CTA', 'stage_hint': 'pre-seed'})\n\n# Seed signals\nif re.search(r'start\\s+(your\\s+)?free\\s+trial|try\\s+(it\\s+)?for\\s+free|request\\s+a?\\s+demo|book\\s+a?\\s+demo|schedule\\s+a?\\s+demo', content):\n    stage_signals.append({'signal': 'free trial or demo CTA', 'stage_hint': 'seed'})\n\n# Series A signals\nif re.search(r'contact\\s+sales|talk\\s+to\\s+(our\\s+)?sales|see\\s+pricing|view\\s+pricing|plans\\s+and\\s+pricing', content):\n    stage_signals.append({'signal': 'pricing or sales CTA', 'stage_hint': 'series-a'})\nif re.search(r'case\\s+stud(y|ies)|customer\\s+stor(y|ies)|trusted\\s+by\\s+[\\d,]+|used\\s+by\\s+[\\d,]+', content):\n    stage_signals.append({'signal': 'case studies or customer count', 'stage_hint': 'series-a'})\n\n# Series A/B signals\nif re.search(r'enterprise\\s+(plan|pricing|tier)|we.?re\\s+hiring|join\\s+our\\s+team|open\\s+positions', content):\n    stage_signals.append({'signal': 'enterprise tier or job openings', 'stage_hint': 'series-a-or-b'})\n\n# Funding announcement -- extract directly if present\nfunding_match = re.search(\n    r'raised\\s+\\$[\\d,.]+\\s*[mk]?|series\\s+[abc]\\s+round|seed\\s+round|(\\$[\\d,.]+\\s*[mk]?\\s+(?:seed|series\\s+[abc]))',\n    content\n)\nif funding_match:\n    stage_signals.append({'signal': f'funding text: {funding_match.group(0).strip()}', 'stage_hint': 'announced'})\n\n# Determine dominant stage\nif not stage_signals:\n    dominant = 'unknown'\nelif any(s['stage_hint'] == 'announced' for s in stage_signals):\n    dominant = 'announced'\nelif any(s['stage_hint'] == 'series-a-or-b' for s in stage_signals):\n    dominant = 'series-a'\nelif any(s['stage_hint'] == 'series-a' for s in stage_signals):\n    dominant = 'series-a'\nelif any(s['stage_hint'] == 'seed' for s in stage_signals):\n    dominant = 'seed'\nelse:\n    dominant = 'pre-seed'\n\nconfidence = 'high' if len(stage_signals) >= 2 else ('medium' if len(stage_signals) == 1 else 'low')\n\nresult = {'signals': stage_signals, 'dominant_stage': dominant, 'confidence': confidence}\njson.dump(result, open('/tmp/vc-stage-signals.json', 'w'), indent=2)\nprint(f'Stage: {dominant} ({confidence} confidence) from {len(stage_signals)} signal(s)')\nfor s in stage_signals:\n    print(f'  - {s[\"signal\"]} -> {s[\"stage_hint\"]}')\nPYEOF\n```\n\n---\n\n## Step 5: Product Analysis with Gemini\n\n```bash\npython3 << 'PYEOF'\nimport json\n\nproduct_content = open('/tmp/vc-product-raw.md').read()[:6000]\nstage_signals = json.load(open('/tmp/vc-stage-signals.json'))\n\nrequest = {\n    \"system_instruction\": {\n        \"parts\": [{\n            \"text\": \"You are a venture capital analyst. Analyze a product page and return structured JSON only. No commentary. No em dashes. Vague category labels like 'technology' or 'software' alone are not acceptable at L2 or L3 -- be specific. Comparable companies must be real funded companies with public funding records, well-known enough to appear in press coverage.\"\n        }]\n    },\n    \"contents\": [{\n        \"parts\": [{\n            \"text\": f\"\"\"Analyze this product page and return a JSON object with exactly these keys:\n\n1. product_name: string\n2. one_line_description: string -- what it does, for whom, core value prop. Under 20 words. No marketing language.\n3. industry_taxonomy: object with:\n   - l1: top-level (e.g. \"software\", \"fintech\", \"healthtech\", \"consumer\", \"hardware\")\n   - l2: sector (e.g. \"developer tools\", \"sales technology\", \"edtech\", \"logistics software\")\n   - l3: specific niche (e.g. \"CI/CD automation\", \"outbound prospecting\", \"last-mile routing\")\n4. icp: object with:\n   - buyer_persona: job title (e.g. \"VP Engineering\", \"founder\", \"sales ops manager\")\n   - company_type: (e.g. \"B2B SaaS\", \"e-commerce brand\", \"enterprise IT team\")\n   - company_size: (e.g. \"5-50 employees\", \"50-500 employees\", \"enterprise\")\n5. detected_stage: one of: pre-seed, seed, series-a, series-b, unknown\n6. stage_confidence: one of: high, medium, low\n7. stage_evidence: one sentence citing exactly which CTA or text on the page drove this classification. Write \"no clear signals found\" if unknown.\n8. comparable_companies: array of exactly 5 objects, each with:\n   - name: real company name (must have public VC funding records)\n   - similarity_reason: one sentence why this company is comparable to the product\n   - estimated_stage: their funding stage as of your knowledge cutoff\n9. geography_bias: one of: US, Europe, global, unclear -- infer from page text\n\nStage signals detected from the page (use as input to your stage classification):\n{json.dumps(stage_signals, indent=2)}\n\nProduct page content:\n{product_content}\"\"\"\n        }]\n    }],\n    \"generationConfig\": {\n        \"temperature\": 0.2,\n        \"maxOutputTokens\": 3000\n    }\n}\n\njson.dump(request, open('/tmp/vc-analysis-request.json', 'w'))\nPYEOF\n\ncurl -s -X POST \\\n  \"https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=$GEMINI_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d @/tmp/vc-analysis-request.json \\\n  | python3 -c \"\nimport sys, json\nd = json.load(sys.stdin)\ntext = d['candidates'][0]['content']['parts'][0]['text'].strip()\nif text.startswith('\\`\\`\\`'):\n    text = '\\n'.join(text.split('\\n')[1:-1])\nanalysis = json.loads(text)\njson.dump(analysis, open('/tmp/vc-product-analysis.json', 'w'), indent=2)\nprint('Product analysis complete.')\nprint('Product:', analysis['product_name'])\nprint('Industry:', analysis['industry_taxonomy']['l1'], '>', analysis['industry_taxonomy']['l2'], '>', analysis['industry_taxonomy']['l3'])\nprint('Stage:', analysis['detected_stage'], '(' + analysis['stage_confidence'] + ' confidence)')\nprint('Comparables:', ', '.join(c['name'] for c in analysis['comparable_companies']))\n\"\n```\n\n**If Gemini returns empty or JSON parsing fails:** Retry once with `maxOutputTokens` reduced to 2000. If retry also fails: Stop. Tell the user: \"Product analysis failed. Please paste a direct description (3-5 sentences: what it does, who it is for, current stage) and run again.\"\n\n---\n\n## Step 6: Track A -- Who Invested in Comparable Companies\n\nRun 5 Tavily searches, one per comparable. Save all results to a single file.\n\n```bash\npython3 << 'PYEOF'\nimport json, os, urllib.request\n\nanalysis = json.load(open('/tmp/vc-product-analysis.json'))\ncomparables = analysis['comparable_companies']\ntavily_key = os.environ.get('TAVILY_API_KEY', '')\nall_track_a = []\n\nfor comp in comparables:\n    company = comp['name']\n    query = f'\"{company}\" investors funding venture capital backed seed series'\n\n    payload = json.dumps({\n        \"api_key\": tavily_key,\n        \"query\": query,\n        \"search_depth\": \"advanced\",\n        \"max_results\": 5,\n        \"include_answer\": True\n    }).encode()\n\n    req = urllib.request.Request(\n        'https://api.tavily.com/search',\n        data=payload,\n        headers={'Content-Type': 'application/json'},\n        method='POST'\n    )\n\n    try:\n        with urllib.request.urlopen(req, timeout=30) as resp:\n            result = json.loads(resp.read())\n            all_track_a.append({\n                'comparable_company': company,\n                'similarity_reason': comp['similarity_reason'],\n                'query': query,\n                'answer': result.get('answer', ''),\n                'results': result.get('results', [])\n            })\n            print(f'Track A - {company}: {len(result.get(\"results\", []))} results')\n    except Exception as e:\n        print(f'Track A - {company}: FAILED ({e})')\n        all_track_a.append({\n            'comparable_company': company,\n            'similarity_reason': comp['similarity_reason'],\n            'query': query,\n            'answer': '',\n            'results': [],\n            'error': str(e)\n        })\n\njson.dump(all_track_a, open('/tmp/vc-tracka-results.json', 'w'), indent=2)\nprint(f'Track A complete. Comparables with results: {sum(1 for r in all_track_a if r.get(\"results\"))}')\nPYEOF\n```\n\n**If all 5 Track A searches return 0 results:** Tell the user: \"No funding data found for the comparable companies. This usually means the comparables are too early-stage or obscure for public press coverage. I will retry with broader comparable names.\" Then re-run Step 5 with a note to Gemini to choose \"well-funded companies with significant press coverage\" and retry Step 6.\n\nIf the retry also returns 0 results: proceed to Track B only, and flag this in `data_quality_flags`.\n\n---\n\n## Step 7: Track B -- VCs With Investment Theses About This Space\n\nRun 3 Tavily searches using the L2 and L3 taxonomy from Step 5.\n\n```bash\npython3 << 'PYEOF'\nimport json, os, urllib.request\n\nanalysis = json.load(open('/tmp/vc-product-analysis.json'))\nl2 = analysis['industry_taxonomy']['l2']\nl3 = analysis['industry_taxonomy']['l3']\nstage = analysis['detected_stage']\ntavily_key = os.environ.get('TAVILY_API_KEY', '')\n\nqueries = [\n    {\n        'name': 'thesis_l3',\n        'query': f'venture capital investment thesis \"{l3}\" investing 2023 OR 2024 OR 2025'\n    },\n    {\n        'name': 'thesis_l2',\n        'query': f'VC fund \"{l2}\" investment thesis portfolio companies'\n    },\n    {\n        'name': 'stage_space',\n        'query': f'{stage} investors \"{l3}\" startup venture capital fund'\n    }\n]\n\nall_track_b = []\n\nfor q in queries:\n    payload = json.dumps({\n        \"api_key\": tavily_key,\n        \"query\": q['query'],\n        \"search_depth\": \"advanced\",\n        \"max_results\": 7,\n        \"include_answer\": True\n    }).encode()\n\n    req = urllib.request.Request(\n        'https://api.tavily.com/search',\n        data=payload,\n        headers={'Content-Type': 'application/json'},\n        method='POST'\n    )\n\n    try:\n        with urllib.request.urlopen(req, timeout=30) as resp:\n            result = json.loads(resp.read())\n            all_track_b.append({\n                'query_name': q['name'],\n                'query': q['query'],\n                'answer': result.get('answer', ''),\n                'results': result.get('results', [])\n            })\n            print(f\"Track B - {q['name']}: {len(result.get('results', []))} results\")\n    except Exception as e:\n        print(f\"Track B - {q['name']}: FAILED ({e})\")\n        all_track_b.append({\n            'query_name': q['name'],\n            'query': q['query'],\n            'answer': '',\n            'results': [],\n            'error': str(e)\n        })\n\njson.dump(all_track_b, open('/tmp/vc-trackb-results.json', 'w'), indent=2)\nPYEOF\n```\n\n**If all 3 Track B searches return 0 results:** Proceed with Track A results only. Note in `data_quality_flags`: \"No thesis-led investors found via public search. Try checking Substack manually for VC newsletters covering this niche.\"\n\n---\n\n## Step 8: Gemini Synthesis -- Rank and Score All VCs\n\n```bash\npython3 << 'PYEOF'\nimport json\n\nanalysis = json.load(open('/tmp/vc-product-analysis.json'))\ntrack_a = json.load(open('/tmp/vc-tracka-results.json'))\ntrack_b = json.load(open('/tmp/vc-trackb-results.json'))\n\n# Compress results to stay within token limits\ntrack_a_summary = []\nfor item in track_a:\n    snippets = [{'title': r.get('title',''), 'url': r.get('url',''), 'content': r.get('content','')[:400]}\n                for r in item.get('results', [])[:3]]\n    track_a_summary.append({\n        'comparable_company': item['comparable_company'],\n        'similarity_reason': item['similarity_reason'],\n        'answer': item.get('answer', '')[:500],\n        'top_results': snippets\n    })\n\ntrack_b_summary = []\nfor item in track_b:\n    snippets = [{'title': r.get('title',''), 'url': r.get('url',''), 'content': r.get('content','')[:400]}\n                for r in item.get('results', [])[:4]]\n    track_b_summary.append({\n        'query_name': item['query_name'],\n        'answer': item.get('answer', '')[:500],\n        'top_results': snippets\n    })\n\ncontext = {\n    'product': {\n        'name': analysis['product_name'],\n        'description': analysis['one_line_description'],\n        'industry': analysis['industry_taxonomy'],\n        'icp': analysis['icp'],\n        'stage': analysis['detected_stage'],\n        'stage_confidence': analysis['stage_confidence'],\n        'geography': analysis['geography_bias']\n    },\n    'track_a_research': track_a_summary,\n    'track_b_research': track_b_summary\n}\n\nrequest = {\n    \"system_instruction\": {\n        \"parts\": [{\n            \"text\": \"\"\"You are a venture capital research analyst. Synthesize investor research into a sourced, ranked list. Follow these rules exactly:\n1. Only include VCs whose names appear in the provided Tavily search results. Do not add VCs not mentioned in the data.\n2. Every Track A VC must have evidence_company: the specific comparable company they backed (required -- omit the VC if you cannot confirm this).\n3. Every Track B VC must have thesis_source_title: the exact article or page title where they stated their thesis (required -- omit the VC if you cannot confirm this).\n4. stage_fit_score 1-10: penalize 3 points if the VC's typical stage does not match the product's detected stage.\n5. space_fit_score 1-10: only give 9-10 if the VC backed 2+ companies in this specific L3 niche.\n6. check_size: use ranges from search result data only. If not found, write \"not in search data\".\n7. approach_method: one of -- cold email, warm intro required, AngelList, application form, Twitter/X DM. Infer from what is publicly known about this fund's intake process.\n8. outreach_hook: must reference this specific product's differentiator and a named VC portfolio signal or thesis quote. Generic hooks like 'highlight your traction' are not acceptable.\n9. No em dashes anywhere in output.\n10. No marketing language.\"\"\"\n        }]\n    },\n    \"contents\": [{\n        \"parts\": [{\n            \"text\": f\"\"\"Synthesize this VC research for the product below. Return a JSON object with exactly these keys:\n\n1. product_summary: object with name, one_line_description, industry_l1, industry_l2, industry_l3, detected_stage, comparable_companies_used (array of names)\n\n2. track_a_vcs: array of VC objects from Track A research. Each object:\n   - fund_name, evidence_company (REQUIRED), evidence_source_url, stage_focus, check_size, thesis_summary (1-2 sentences), stage_fit_score (1-10), space_fit_score (1-10), approach_method\n\n3. track_b_vcs: array of VC objects from Track B research. Each object:\n   - fund_name, thesis_source_title (REQUIRED), thesis_source_url, stage_focus, check_size, thesis_summary (1-2 sentences), stage_fit_score (1-10), space_fit_score (1-10), approach_method\n\n4. top_5_deep_dives: array of exactly 5 objects (the 5 highest combined score VCs across both tracks). Each:\n   - fund_name, track (\"A\" or \"B\"), fund_overview (2-3 sentences), why_fit (2-3 sentences specific to this product's L3 niche), portfolio_in_space (array of 1-3 names from search data only), how_to_approach (specific steps, min 30 chars), outreach_hook (2-3 sentences, product-specific)\n\n5. outreach_hooks: array of exactly 3 objects:\n   - hook_type (e.g. \"portfolio overlap angle\", \"thesis language mirror\", \"comparable exit angle\"), hook_text (2-3 sentences a founder would actually send), best_for (which VC type this works for)\n\n6. data_quality_flags: array of strings noting any gaps or low-confidence areas\n\nResearch data:\n{json.dumps(context, indent=2)}\"\"\"\n        }]\n    }],\n    \"generationConfig\": {\n        \"temperature\": 0.3,\n        \"maxOutputTokens\": 6000\n    }\n}\n\njson.dump(request, open('/tmp/vc-synthesis-request.json', 'w'))\nprint('Synthesis request prepared.')\nPYEOF\n\ncurl -s -X POST \\\n  \"https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=$GEMINI_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d @/tmp/vc-synthesis-request.json \\\n  | python3 -c \"\nimport sys, json\nd = json.load(sys.stdin)\ntext = d['candidates'][0]['content']['parts'][0]['text'].strip()\nif text.startswith('\\`\\`\\`'):\n    text = '\\n'.join(text.split('\\n')[1:-1])\nresult = json.loads(text)\njson.dump(result, open('/tmp/vc-final-list.json', 'w'), indent=2)\nprint(f'Synthesis complete. Track A: {len(result.get(\\\"track_a_vcs\\\", []))} VCs. Track B: {len(result.get(\\\"track_b_vcs\\\", []))} VCs.')\n\"\n```\n\n**If Gemini returns empty or JSON parsing fails:** Retry once with `maxOutputTokens` reduced to 4000. If retry also fails: present whatever partial JSON was returned, mark missing sections `[INCOMPLETE]`, and tell the user: \"Synthesis incomplete. The research data may have been too large. Try running again.\"\n\n---\n\n## Step 9: Self-QA\n\nRun before presenting. Remove non-evidenced VCs structurally.\n\n```bash\npython3 << 'PYEOF'\nimport json\n\nresult = json.load(open('/tmp/vc-final-list.json'))\nfailures = []\n\n# Remove Track A VCs missing evidence_company\noriginal_a = len(result.get('track_a_vcs', []))\nresult['track_a_vcs'] = [v for v in result.get('track_a_vcs', []) if v.get('evidence_company')]\nremoved_a = original_a - len(result['track_a_vcs'])\nif removed_a > 0:\n    failures.append(f'Removed {removed_a} Track A VC(s) missing evidence_company')\n\n# Remove Track B VCs missing thesis_source_title\noriginal_b = len(result.get('track_b_vcs', []))\nresult['track_b_vcs'] = [v for v in result.get('track_b_vcs', []) if v.get('thesis_source_title')]\nremoved_b = original_b - len(result['track_b_vcs'])\nif removed_b > 0:\n    failures.append(f'Removed {removed_b} Track B VC(s) missing thesis_source_title')\n\n# Check top 5 deep dives\ndives = result.get('top_5_deep_dives', [])\nif len(dives) < 5:\n    failures.append(f'Only {len(dives)} deep dives (expected 5) -- insufficient search data')\nfor dd in dives:\n    if not dd.get('how_to_approach') or len(dd.get('how_to_approach', '')) < 30:\n        dd['how_to_approach'] = 'Approach method not determinable from search data. Check the fund website directly for application instructions.'\n        failures.append(f\"Fixed: '{dd.get('fund_name')}' had missing how_to_approach\")\n\n# Check outreach hooks count\nif len(result.get('outreach_hooks', [])) != 3:\n    failures.append(f\"Expected 3 outreach hooks, got {len(result.get('outreach_hooks', []))}\")\n\n# Check for em dashes\nif ':' in json.dumps(result):\n    result_str = json.dumps(result).replace(':', ':')\n    result = json.loads(result_str)\n    failures.append('Fixed: em dash characters removed from output')\n\n# Check for forbidden words\nforbidden = ['powerful', 'robust', 'seamless', 'innovative', 'game-changing', 'streamline', 'leverage', 'transform']\nfull_text = json.dumps(result).lower()\nfor word in forbidden:\n    if word in full_text:\n        failures.append(f\"Warning: forbidden word '{word}' found in output -- review before presenting\")\n\n# Ensure data_quality_flags exists\nif 'data_quality_flags' not in result:\n    result['data_quality_flags'] = []\nresult['data_quality_flags'].extend(failures)\n\njson.dump(result, open('/tmp/vc-final-list.json', 'w'), indent=2)\nprint(f'QA complete. Issues addressed: {len(failures)}')\nfor f in failures:\n    print(f'  - {f}')\nif not failures:\n    print('All QA checks passed.')\nPYEOF\n```\n\n---\n\n## Step 10: Save and Present Output\n\n```bash\nDATE=$(date +%Y-%m-%d)\nOUTPUT_FILE=\"docs/vc-intel/${PRODUCT_SLUG}-${DATE}.md\"\nmkdir -p docs/vc-intel\n```\n\nPresent the final output:\n\n```\n## VC Finder: [product_name]\nDate: [today] | Stage: [detected_stage] ([stage_confidence] confidence) | Geography: [geography_bias]\n\n---\n\n### Product Analysis\n\nWhat it does: [one_line_description]\nIndustry: [l1] > [l2] > [l3]\nBuyer: [buyer_persona] at [company_type], [company_size]\nComparable companies used for research: [comma-separated list]\n\n---\n\n### Track A: VCs Who Backed Similar Companies\n\n*These investors have already written a check in this space.*\n\n| Fund | Backed Comparable | Stage Focus | Check Size | Fit Score | Approach |\n|---|---|---|---|---|---|\n[one row per Track A VC, sorted by space_fit_score descending]\n\n---\n\n### Track B: Thesis-Led Investors\n\n*These investors are actively publishing about this space.*\n\n| Fund | Thesis Source | Stage Focus | Check Size | Fit Score | Approach |\n|---|---|---|---|---|---|\n[one row per Track B VC, sorted by space_fit_score descending]\n\n---\n\n### Top 5 Deep Dives\n\n#### [N]. [Fund Name] (Track [A/B])\n\nOverview: [fund_overview]\nWhy it fits: [why_fit]\nPortfolio in this space: [names, or \"Not found in search data\"]\nHow to approach: [how_to_approach]\nOutreach hook: \"[outreach_hook]\"\n\n[repeat for all 5]\n\n---\n\n### 3 Outreach Hooks for This Product Type\n\n**1. [hook_type]**\n[hook_text]\nBest for: [best_for]\n\n[repeat for all 3]\n\n---\nData quality notes: [data_quality_flags, or \"None\"]\nSaved to: docs/vc-intel/[PRODUCT_SLUG]-[DATE].md\n```\n\nClean up temp files:\n\n```bash\nrm -f /tmp/vc-product-raw.md /tmp/vc-stage-signals.json /tmp/vc-analysis-request.json \\\n      /tmp/vc-product-analysis.json /tmp/vc-tracka-results.json /tmp/vc-trackb-results.json \\\n      /tmp/vc-synthesis-request.json /tmp/vc-final-list.json /tmp/vc-qa-result.json\n```","tags":["finder","opendirectory","varnan-tech","agent-skills","gtm","hermes-agent","openclaw-skills","skills","technical-seo"],"capabilities":["skill","source-varnan-tech","skill-vc-finder","topic-agent-skills","topic-gtm","topic-hermes-agent","topic-openclaw-skills","topic-skills","topic-technical-seo"],"categories":["opendirectory"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/Varnan-Tech/opendirectory/vc-finder","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add Varnan-Tech/opendirectory","source_repo":"https://github.com/Varnan-Tech/opendirectory","install_from":"skills.sh"}},"qualityScore":"0.490","qualityRationale":"deterministic score 0.49 from registry signals: · indexed on github topic:agent-skills · 80 github stars · SKILL.md body (26,525 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-22T06:55:37.497Z","embedding":null,"createdAt":"2026-04-21T13:31:42.601Z","updatedAt":"2026-04-22T06:55:37.497Z","lastSeenAt":"2026-04-22T06:55:37.497Z","tsv":"'-1':1656,2978 '-10':2541,2564,2568,2742,2747,2786,2791 '-2':2736,2780 '-3':2823,2828,2843,2860,2888 '-4':552 '-5':1742 '-50':1474 '-500':1477 '/extract':725 '/search'',':1842,2158 '/tmp/vc-analysis-request.json':1614,1630,3637 '/tmp/vc-final-list.json':2985,3077,3378,3642 '/tmp/vc-product-analysis.json':1663,1789,2066,2294,3638 '/tmp/vc-product-raw.md':704,765,778,898,1296,3635 '/tmp/vc-qa-result.json':3643 '/tmp/vc-stage-signals.json':1253,1303,3636 '/tmp/vc-synthesis-request.json':2932,2952,3641 '/tmp/vc-tracka-results.json':1921,2299,3639 '/tmp/vc-trackb-results.json':2233,2304,3640 '/v1/scrape':661 '/v1beta/models/gemini-2.0-flash:generatecontent?key=$gemini_api_key':1623,2945 '0':203,640,751,1144,1642,1645,1952,2018,2245,2964,2967,3121,3178 '0.2':1608 '0.3':2926 '1':359,1238,1383,1655,1934,2460,2540,2563,2684,2735,2741,2746,2779,2785,2790,2842,2977,3600 '10':2660,3407 '1000':459 '125':462 '2':490,1231,1256,1387,1600,1666,1924,2236,2482,2573,2707,2822,2827,2859,2887,2923,2988,3381 '20':1401 '200':783,790,802 '2000':1724 '2023':2099 '2024':2101 '2025':2103 '3':551,642,1406,1741,2044,2240,2336,2506,2543,2750,2871,3275,3279,3593,3612 '30':1857,2173,2855,3235 '3000':1610 '4':282,860,1443,2379,2536,2794 '400':2330,2373 '4000':3023 '5':18,60,198,557,851,1283,1473,1480,1534,1766,1833,1947,1993,2055,2559,2796,2802,2805,2865,3194,3200,3206,3215,3552,3592 '50':1476 '500':2351,2389 '6':1496,1757,2012,2580,2903 '6000':1298,2928 '7':1504,2033,2149,2598 '8':1528,2278,2625 '9':1570,2567,2653,3056 'a/b':1066,3559 'a16z':160 'abc':1120,1133 'accept':1339,2652 'access':924 'across':2810 'activ':3524 'actual':2893 'add':159,420,465,2475 'address':3387 'advanc':1830,2146 'aesthet':267,283,889 'agent':151 'aistudio.google.com':419 'all_track_a.append':1863,1900 'all_track_b.append':2179,2215 'alon':1336 'alreadi':3486 'also':331,1727,2016,3026 'alway':335 'analysi':412,1285,1657,1661,1669,1673,1678,1682,1686,1692,1695,1707,1734,1786,1791,2063,2068,2073,2078,2291,2396,2400,2405,2409,2412,2417,2421,3448 'analyst':1314,2447 'analyz':1315,1370 'anchor':880 'angellist':2608 'angl':2878,2884 'announc':1104,1148,1163,1170 'answer':1835,1874,1876,1911,2151,2187,2189,2223,2348,2350,2386,2388 'anywher':2657 'api':365,368,373,376,381,384,397,406,428,437,474,650,666,713,732,735,866,875,1798,1822,2085,2137 'api.firecrawl.dev':660 'api.firecrawl.dev/v1/scrape':659 'api.tavily.com':724,1841,2157 'api.tavily.com/extract':723 'api.tavily.com/search'',':1840,2156 'app.tavily.com':456 'appear':135,178,1362,2466 'applic':2609,3253 'application/json':672,730,1628,1849,2165,2950 'approach':2599,2748,2792,2851,3228,3234,3239,3240,3265,3502,3538,3581,3584 'area':2917 'array':1531,2704,2711,2754,2799,2840,2868,2907 'articl':120,241,2518 'ask':578,884 'author':663 'autom':1436 'b':40,84,115,236,518,1102,1180,1494,2023,2035,2130,2196,2210,2231,2242,2301,2356,2362,2431,2434,2509,2752,2760,2819,3002,3006,3136,3143,3147,3151,3159,3167,3169,3173,3177,3183,3185,3516,3543 'b2b':1461 'back':108,1817,2496,2572,3480,3494 'bash':362,621,654,718,773,890,1288,1779,2056,2286,3069,3412,3632 'bearer':664 'best':2895,3605,3607 'beta':921,938 'bias':1572,2423,3446 'book':969 'brand':1466 'broader':221,1985 'browser':828 'buyer':1447,3459,3460 'c':625,682,741,775,1632,1702,1705,2954 'call':876 'candid':1641,2963 'cannot':254,2503,2533 'capit':1313,1816,2094,2126,2445 'case':1032,1055 'categori':1330 'chang':3323 'char':2856 'charact':702,763,791,799,803,3308 'check':361,2268,2581,2731,2775,3192,3247,3266,3287,3312,3403,3489,3498,3534 'checkpoint':772 'choos':2000 'ci/cd':1435 'cite':239,1509 'classif':1520,1595 'clean':3628 'clear':1523 'cold':2603 'combin':2807 'come':273 'comma':3473 'comma-separ':3472 'commentari':1325 'commerc':1465 'common':148 'comp':1804,1808,1869,1906 'compani':21,27,63,106,1347,1352,1458,1470,1530,1540,1554,1709,1764,1793,1807,1812,1865,1866,1884,1897,1902,1903,1964,2004,2115,2339,2342,2490,2494,2574,2702,2724,3085,3108,3133,3463,3465,3468,3482 'compar':19,61,72,105,211,219,1346,1529,1556,1700,1708,1763,1771,1790,1792,1806,1864,1901,1930,1963,1969,1986,2338,2341,2493,2701,2882,3467,3495 'complet':1670,1929,2992,3385 'compress':2305 'confid':1225,1248,1249,1261,1262,1498,1697,1698,2416,2419,2916,3442,3443 'confirm':2504,2534 'consum':1419 'contact':996 'content':564,670,689,701,707,728,748,754,762,768,776,782,795,798,801,815,858,896,933,979,1017,1052,1088,1134,1294,1366,1603,1605,1626,1643,1847,2163,2327,2329,2370,2372,2664,2948,2965 'content-typ':669,727,1625,1846,2162,2947 'context':2393,2921 'continu':195,226,478 'core':1397 'count':1059,3269 'cover':2274 'coverag':1365,1980,2008 'credibl':262 'credits/month':460 'critic':94 'cta':277,939,986,1023,1512 'ctas':347 'curl':655,719,1617,2939 'current':1751 'custom':348,1037,1058 'cutoff':1569 'd':673,686,731,745,1046,1051,1115,1126,1629,1636,1640,2951,2958,2962,3417 'd.get':690,695,749 'dash':1328,2656,3290,3307 'data':691,1843,1959,2029,2159,2255,2481,2588,2597,2847,2904,2919,3046,3218,3246,3354,3359,3366,3370,3578,3613,3616 'date':3413,3414,3423,3436,3626 'dd':3220,3236 'dd.get':3225,3231,3258 'deep':2797,3195,3201,3212,3553 'default':533 'demo':968,973,978,985 'depth':1829,2145 'deriv':612 'descend':3514,3550 'descript':10,54,334,356,503,546,570,575,592,833,855,1390,1740,2399,2403,2692,3454 'detect':11,55,263,279,526,861,1481,1585,1693,2079,2413,2557,2699,3439 'determin':1149,3243 'develop':1424 'differenti':309,2634 'direct':504,554,834,1106,1739,3251 'dive':2798,3196,3197,3202,3205,3211,3213,3222,3554 'dm':2612 'docs/vc-intel':3420,3427,3623 'domin':1150,1156,1169,1186,1203,1218,1221,1245,1247,1260 'drop':189 'drove':1518 'e':1464,1892,1899,1915,2206,2214,2227 'e-commerc':1463 'e.g':1415,1423,1434,1451,1460,1472,2875 'earli':922,1973 'early-stag':1972 'echo':363,371,379 'edtech':1428 'elif':1158,1171,1190,1207 'els':792,1220,1232,1239 'em':1327,2655,3289,3306 'email':2604 'employe':1475,1478 'empti':1713,3012 'encod':1837,2153 'engin':1453 'enough':1360 'ensur':3353 'enterpris':1071,1091,1467,1479 'env':424,469 'error':785,1913,2225 'estim':1560 'europ':531,1576 'everi':96,111,300,2483,2507 'evid':110,171,230,881,1506,2489,2723,2726,3084,3107,3132 'evidenc':3066 'evidence-fre':229 'exact':119,1380,1510,1533,2459,2517,2681,2801,2870 'except':1889,1890,2203,2204 'exist':3357 'exit':2883 'expect':3214,3278 'extend':3373 'extract':389,481,710,760,1105 'f':698,756,794,1140,1258,1275,1369,1811,1881,1894,1926,2092,2108,2120,2194,2208,2667,2990,3123,3180,3208,3256,3277,3342,3383,3391,3395,3396,3634 'fail':1717,1728,1735,1898,2213,3016,3027 'failur':3078,3374,3389,3393,3399 'failures.append':3122,3179,3207,3255,3276,3304,3341 'fallback':394,450,708 'famous':166,168 'fetch':327,336,488,643,699,757,805,869 'fewer':788 'file':425,470,1778,3419,3631 'filenam':620 'final':3430 'find':30,59 'finder':3,48,3433 'fintech':1417 'firecrawl':380,383,473,647,649,665,712 'fit':2538,2561,2739,2744,2783,2788,2826,3500,3512,3536,3548,3565,3567 'fix':3257,3305 'flag':2026,2031,2257,2906,3356,3361,3368,3372,3618 'focus':2730,2774,3497,3533 'follow':2456 'forbidden':3314,3316,3335,3344 'form':2610 'format':677 'found':1525,1960,2263,2592,3347,3575 'founder':192,253,286,1454,2891 'free':231,457,954,963,982 'full':463,3327,3339 'fund':15,20,62,146,1103,1109,1136,1141,1351,1355,1546,1563,1814,1958,2003,2110,2127,2621,2721,2764,2814,2820,3249,3259,3493,3529,3556,3561 'funding_match.group':1143 'game':3322 'game-chang':3321 'gap':2912 'gather':491 'gemini':364,367,396,405,879,1287,1711,1998,2279,3010 'generationconfig':1606,2924 'generativelanguage.googleapis.com':1622,2944 'generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generatecontent?key=$gemini_api_key':1621,2943 'generic':293,316,2644 'geographi':528,1571,2420,2422,3444,3445 'get':416,453,692,752,930 'give':878,2566 'global':532,1577 'go':553 'got':3282 'guess':284,887 'h':662,668,726,1624,2946 'hallucin':145,251 'hardwar':1420 'header':1845,2161 'healthtech':1418 'high':1226,1501 'highest':2806 'highlight':297,2647 'hint':508,941,988,1025,1061,1097,1147,1162,1175,1194,1211,1280 'hire':1079 'hook':93,295,302,317,2627,2645,2858,2867,2873,2885,3268,3274,3281,3286,3586,3588,3595,3601,3603 'host':633 'host.split':639 'icp':1444,2408,2410 'identifi':17 'ie':1036,1041 'import':628,683,742,893,1291,1633,1782,2059,2289,2955,3072 'includ':102,117,142,175,233,1834,2150,2462 'incomplet':3037,3043 'indent':1255,1599,1665,1923,2235,2922,2987,3380 'indistinguish':249 'industri':13,56,1407,1677,1679,1683,1687,2069,2074,2404,2406,2693,2695,2697,3455 'infer':1579,2613 'innov':3320 'input':492,1591 'instruct':1306,2438,3254 'insuffici':3216 'intak':2623 'intro':2606 'invest':24,34,69,444,1761,2038,2095,2098,2112 'investor':89,291,1813,2122,2262,2449,3484,3520,3522 'invit':929 'issu':3386 'item':2316,2340,2345,2359,2383 'item.get':2334,2349,2377,2387 'javascript':823 'javascript-rend':822 'job':350,1094,1449 'join':910,1080,1652,1701,2974 'json':685,744,895,1292,1322,1377,1635,1715,1783,2060,2290,2678,2957,3014,3031,3073 'json.dump':1250,1611,1660,1916,2228,2929,2982,3375 'json.dumps':1596,1821,2136,2920,3293,3297,3329 'json.load':687,746,1301,1637,1787,2064,2292,2297,2302,2959,3075 'json.loads':1658,1861,2177,2980,3301 'key':366,369,374,377,382,385,398,407,429,438,475,651,667,714,733,736,1382,1795,1799,1823,1825,2082,2086,2138,2140,2683 'knowledg':1568 'known':222,1359,2618 'l1':1411,1681,2694,3456 'l2':1341,1421,1685,2049,2067,2071,2106,2111,2696,3457 'l3':1343,1431,1689,2051,2072,2076,2090,2097,2123,2578,2698,2835,3458 'label':1331 'languag':1405,2663,2880 'larg':3051 'last':1440 'last-mil':1439 'led':2261,3519 'len':700,761,781,797,1228,1235,1264,1885,2199,2995,3003,3088,3113,3144,3170,3204,3210,3230,3271,3283,3388 'level':771,1414 'leverag':3325 'like':296,1332,2646 'limit':2311 'line':1389,2402,2691,3453 'list':46,90,232,259,2455,3475 'live':340 'local':864 'logist':1429 'logo':349 'look':269 'lose':260 'low':1240,1503,2915 'low-confid':2914 'lower':900,3331 'm':3416 'manag':1457 'manual':2270 'mark':3034 'markdown':678,693,696,870 'market':1404,2662 'match':1110,1137,2553 'max':1831,2147 'maxoutputtoken':1609,1721,2927,3020 'may':3047 'md':3424,3627 'mean':209,818,1967 'medium':1233,1502 'mention':2478 'method':1850,2166,2600,2749,2793,3241 'mile':1441 'min':2854 'mirror':2881 'miss':400,431,477,3035,3083,3131,3138,3188,3262 'mistak':149 'mk':1117,1128 'mkdir':3425 'must':101,116,272,303,1348,1542,2487,2511,2628 'n':1651,1654,2973,2976,3555 'name':132,147,188,223,304,1385,1538,1541,1675,1703,1809,1987,2088,2104,2116,2181,2183,2198,2212,2217,2219,2382,2385,2395,2398,2465,2637,2689,2706,2722,2765,2815,2844,3260,3435,3557,3572 'name-drop':187 'need':494 'neither':572 'netloc.replace':636 'newslett':2273 'nich':1433,2276,2579,2836 'nois':173 'non':3065 'non-evidenc':3064 'none':3620 'note':1996,2253,2910,3615 'notifi':932 'object':1378,1409,1445,1535,2679,2687,2714,2720,2757,2763,2803,2872 'obscur':216,1976 'often':342 'ok':796 'omit':357,2498,2528 'one':1388,1483,1499,1507,1550,1573,1769,2401,2601,2690,3452,3503,3539 'onlymaincont':679 'op':1456 'open':351,703,764,777,897,1085,1095,1252,1295,1302,1613,1662,1788,1920,2065,2232,2293,2298,2303,2931,2984,3076,3377 'option':505,527 'origin':3086,3111,3142,3168 'os':1784,2061 'os.environ.get':1796,2083 'outbound':1437 'output':619,2659,3311,3349,3411,3418,3431 'outreach':92,294,301,2626,2857,2866,3267,3273,3280,3285,3585,3587,3594 'overlap':2877 'overview':2821,3560,3562 'p':3426 'page':341,645,786,811,1318,1373,1517,1581,1588,1602,2520 'pars':867,1716,3015 'part':1307,1367,1644,2439,2665,2966 'partial':3030 'pass':3404 'past':500,545,560,589,830,854,1737 'payload':1820,1844,2135,2160 'penal':2542 'per':1770,3505,3541 'persona':1448,3461 'plan':1012,1073 'pleas':829,1736 'point':2544 'polish':270 'portfolio':314,2114,2639,2837,2876,3568 'posit':1087 'post':122,243,658,722,1620,1851,2167,2942 'power':3317 'pre':510,607,904,943,1223,1486 'pre-se':509,606,903,942,1222,1485 'prefer':529 'prepar':2937 'present':1108,3028,3062,3352,3410,3428 'press':1364,1979,2007 'price':346,1008,1011,1016,1020,1074 'primari':646 'print':638,697,755,784,793,1257,1274,1667,1671,1676,1690,1699,1880,1893,1925,2193,2207,2934,2989,3382,3394,3400 'proceed':848,2020,2247 'process':2624 'produc':227 'product':7,51,186,307,411,495,502,563,585,613,622,644,810,832,857,1284,1293,1317,1372,1384,1559,1601,1604,1668,1672,1674,1733,2394,2397,2555,2632,2674,2685,2833,2863,3421,3434,3447,3598,3624 'product-specif':2862 'prop':1399 'prospect':1438 'provid':332,520,542,577,2469 'public':1354,1544,1978,2265,2617 'publish':33,78,3525 'pyeof':892,1281,1290,1616,1781,1944,2058,2237,2288,2938,3071,3405 'python3':624,681,740,774,891,1289,1631,1780,2057,2287,2953,3070 'q':2132,2142,2182,2185,2197,2211,2218,2221 'qa':322,3059,3384,3402 'qualiti':2030,2256,2905,3355,3360,3367,3371,3614,3617 'queri':1810,1826,1827,1872,1873,1909,1910,2087,2091,2107,2119,2134,2141,2143,2180,2184,2186,2216,2220,2222,2381,2384 'quot':2643 'r':909,949,995,1031,1070,1112,1936,2332,2375 'r.get':1942,2322,2325,2328,2365,2368,2371 'rais':1113 'rang':2584 'rank':44,88,2281,2454 'rather':882 'raw':753 're':894,1077,1990 're-run':1989 're.search':908,948,994,1030,1069,1111 'read':779,899,1297 'readabl':814 'real':1350,1539 'reason':1549,1868,1871,1905,1908,2344,2347 'record':1356,1547 'reduc':1722,3021 'refer':2629 'regener':218 'regex':872 'remov':319,3063,3079,3109,3119,3124,3125,3134,3166,3176,3181,3182,3309 'render':824 'repeat':3589,3609 'replac':3299 'req':1838,1855,2154,2171 'request':925,964,1304,1612,2436,2930,2936 'requir':409,440,497,826,2497,2527,2607,2725,2769 'research':66,442,2426,2432,2446,2450,2671,2718,2761,2918,3045,3471 'resp':1859,2175 'resp.read':1862,2178 'result':139,182,204,208,750,1241,1251,1774,1832,1860,1877,1879,1887,1888,1912,1932,1943,1953,2019,2148,2176,2190,2192,2201,2202,2224,2246,2251,2306,2335,2353,2378,2391,2472,2587,2979,2983,3074,3093,3114,3149,3171,3294,3295,3298,3300,3302,3330,3364,3365,3369,3376 'result.get':1875,1878,1886,2188,2191,2200,2996,3004,3089,3101,3145,3157,3198,3272,3284 'retri':225,1718,1726,1983,2010,2015,3017,3025 'return':42,85,202,787,812,1320,1375,1712,1951,2017,2244,2676,3011,3033 'reveal':343 'review':3350 'rm':3633 'robust':3318 'round':1122,1125 'rout':1442 'row':3504,3540 'rule':95,2458 'run':64,464,1754,1765,1991,2043,3053,3060 'saa':1462 'sale':998,1005,1022,1426,1455 'save':1772,3408,3621 'schedul':974 'score':2283,2539,2562,2740,2745,2784,2789,2808,3501,3513,3537,3549 'seamless':3319 'search':22,138,181,201,1768,1828,1950,2046,2144,2243,2266,2471,2586,2596,2846,3217,3245,3577 'section':3036 'sector':1422 'see':1006 'seed':511,512,608,609,905,944,945,989,1123,1130,1212,1219,1224,1487,1488,1818 'self':3058 'self-qa':3057 'send':285,2894 'sentenc':1508,1551,1743,2737,2781,2824,2829,2861,2889 'separ':3474 'sequoia':162 'seri':514,517,610,990,1027,1063,1065,1099,1118,1131,1177,1188,1196,1205,1490,1493,1819 'series-a':513,1026,1062,1187,1195,1204,1489 'series-a-or-b':1098,1176 'series-b':516,1492 'set':370,378,387,565,653,717 'setup':360 'short':591 'sign':915 'signal':278,315,345,863,902,906,935,946,981,992,1019,1054,1067,1090,1139,1155,1168,1185,1202,1217,1230,1237,1242,1244,1266,1267,1273,1277,1300,1524,1584,1598,2640 'signific':2006 'silent':479 'similar':1548,1867,1870,1904,1907,2343,2346,3481 'singl':1777 'site':268,820 'size':1471,2582,2732,2776,3466,3499,3535 'skill' 'skill-vc-finder' 'skip':324,524,549 'slug':614,623,3422,3625 'snippet':2320,2354,2363,2392 'softwar':1335,1416,1430 'sort':3509,3545 'sourc':45,87,247,567,2453,2514,2727,2767,2771,3140,3164,3190,3531 'source-varnan-tech' 'space':38,82,2042,2118,2560,2743,2787,2839,3492,3511,3528,3547,3571 'specif':104,185,276,306,312,1345,1432,2492,2577,2631,2830,2852,2864 'specifi':538 'stage':16,58,264,271,290,344,507,525,566,602,844,862,901,940,987,1024,1060,1096,1146,1151,1154,1161,1167,1174,1184,1193,1201,1210,1216,1229,1236,1243,1246,1259,1265,1272,1279,1299,1482,1497,1505,1561,1564,1583,1594,1597,1691,1694,1696,1752,1974,2077,2080,2117,2121,2411,2414,2415,2418,2537,2550,2558,2700,2729,2738,2773,2782,3438,3440,3441,3496,3532 'stage_signals.append':934,980,1018,1053,1089,1138 'start':950 'startup':6,587,2124 'state':126,2524 'stay':2308 'step':281,323,358,489,550,556,641,770,850,859,1282,1756,1992,2011,2032,2054,2277,2853,3055,3406 'step-level':769 'stop':217,401,432,804,1729 'stor':1039 'str':1914,2226,3296,3303 'streamlin':3324 'string':1386,1391,2909 'strip':1145,1647,2969 'structur':1321,3068 'stud':1034 'studi':1056 'substack':2269 'sum':1933 'summari':2314,2357,2429,2435,2686,2734,2778 'synthes':2448,2668 'synthesi':415,2280,2935,2991,3042 'sys':684,743,1634,2956 'sys.stdin':688,747,1638,2960 'system':1305,2437 'take':4,49 'talk':999 'target':506 'tavili':137,180,372,375,388,427,436,480,709,734,759,1767,1794,1797,1824,2045,2081,2084,2139,2470 'taxonomi':1408,1680,1684,1688,2052,2070,2075,2407 'team':1084,1469 'technolog':1333,1427 'tell':402,433,806,1730,1954,3039 'temp':3630 'temperatur':1607,2925 'text':561,1142,1308,1368,1514,1582,1639,1646,1650,1659,2440,2666,2886,2961,2968,2972,2981,3328,3340,3604 'text.split':1653,2975 'text.startswith':1649,2971 'these':35,79,446,2039 'thesi':128,244,2089,2096,2105,2113,2260,2513,2526,2642,2733,2766,2770,2777,2879,3139,3163,3189,3518,3530 'thesis-l':2259,3517 'tier':458,1075,1092 'time':194 'timeout':1856,2172 'titl':123,1450,2321,2323,2364,2366,2515,2521,2768,3141,3165,3191 'today':3437 'token':2310 'tool':1425 'top':1413,2352,2390,2795,3193,3199,3551 'top-level':1412 'topic-agent-skills' 'topic-gtm' 'topic-hermes-agent' 'topic-openclaw-skills' 'topic-skills' 'topic-technical-seo' 'track':28,39,67,73,83,99,114,199,206,235,1758,1801,1882,1895,1918,1927,1939,1948,2022,2034,2129,2195,2209,2230,2241,2249,2295,2300,2312,2318,2355,2361,2424,2427,2430,2433,2484,2508,2708,2716,2751,2759,2812,2816,2993,2997,3001,3005,3080,3090,3094,3102,3115,3127,3135,3146,3150,3158,3172,3184,3476,3506,3515,3542,3558 'track_a_summary.append':2337 'track_b_summary.append':2380 'traction':299,2649 'transform':3326 'tri':957,1852,2168,2267,3052 'trial':956,983 'true':680,1836,2152 'trust':1042 'twitter/x':2611 'two':65 'type':671,729,1459,1627,1848,2164,2874,2899,2949,3464,3599,3602 'typic':2549 'unclear':1578 'unknown':1157,1495,1527 'unless':498 'url':8,52,326,338,487,496,548,573,582,616,630,631,635,674,675,737,738,2324,2326,2367,2369,2728,2772 'urllib.parse':627 'urllib.request':1785,2062 'urllib.request.request':1839,2155 'urllib.request.urlopen':1854,2170 'urlpars':629,634 'us':530,535,1575 'use':392,484,521,852,1047,1589,2047,2583,2703,3469 'user':330,354,404,435,499,541,569,808,1732,1956,3041 'usual':817,1966 'v':3097,3099,3153,3155 'v.get':3106,3162 'vagu':1329 'valu':1398 'vc':2,47,97,112,131,169,237,313,414,443,1545,2109,2272,2486,2500,2510,2530,2547,2571,2638,2670,2713,2756,2898,3129,3186,3432,3508,3544 'vc-finder':1 'vcs':31,77,176,2036,2285,2463,2476,2710,2753,2809,2999,3000,3007,3008,3067,3082,3092,3096,3104,3117,3137,3148,3152,3160,3174,3478 'ventur':1312,1815,2093,2125,2444 'verifi':255 'via':758,2264 'view':1009 'vp':1452 'w':705,766,1254,1615,1664,1922,2234,2933,2986,3379 'waitlist':914,936 'want':153 'warm':2605 'warn':3343 'wast':190 'websit':266,3250 'well':1358,2002 'well-fund':2001 'well-known':1357 'whatev':3029 'whose':2464 'within':2309 'without':170,238,245 'word':1402,3315,3333,3337,3345,3346 'work':2901 'would':2892 'write':292,706,767,1521,2593 'written':3487 'wrong':158,213,289 'wrong-stag':288 'www':637 'x':657,721,1619,2941 'y':1035,1040,3415 'zero':205","prices":[{"id":"da2479da-f949-4c69-9c0d-436291f2a39d","listingId":"d0bbe9e7-6121-48b5-8f7a-8c89e655d592","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"Varnan-Tech","category":"opendirectory","install_from":"skills.sh"},"createdAt":"2026-04-21T13:31:42.601Z"}],"sources":[{"listingId":"d0bbe9e7-6121-48b5-8f7a-8c89e655d592","source":"github","sourceId":"Varnan-Tech/opendirectory/vc-finder","sourceUrl":"https://github.com/Varnan-Tech/opendirectory/tree/main/skills/vc-finder","isPrimary":false,"firstSeenAt":"2026-04-21T13:31:42.601Z","lastSeenAt":"2026-04-22T06:55:37.497Z"}],"details":{"listingId":"d0bbe9e7-6121-48b5-8f7a-8c89e655d592","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"Varnan-Tech","slug":"vc-finder","github":{"repo":"Varnan-Tech/opendirectory","stars":80,"topics":["agent-skills","gtm","hermes-agent","openclaw-skills","skills","technical-seo"],"license":null,"html_url":"https://github.com/Varnan-Tech/opendirectory","pushed_at":"2026-04-21T16:48:11Z","description":" AI Agent Skills built for GTM, Technical Marketing, and growth automation.","skill_md_sha":"b8384e74900667bf9a93b83a97c8076c2fc1a509","skill_md_path":"skills/vc-finder/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/Varnan-Tech/opendirectory/tree/main/skills/vc-finder"},"layout":"multi","source":"github","category":"opendirectory","frontmatter":{"name":"vc-finder","description":"Takes a startup product URL or description, detects the industry and funding stage, identifies 5 comparable funded companies, searches who invested in those companies (Track A), finds VCs who publish investment theses about this space (Track B), and returns a ranked sourced list of relevant investors with deep-dives and outreach hooks. Use when asked to find investors for a startup, identify which VCs fund products like mine, research who backs companies in my space, build a VC target list, or find investor-market fit. Trigger when a user says \"find VCs for my startup\", \"who invests in my space\", \"build me a VC list\", \"which funds should I pitch\", \"find investors for my product\", \"who backed companies like mine\", or \"help me find venture capital\".","compatibility":"[claude-code, gemini-cli, github-copilot]"},"skills_sh_url":"https://skills.sh/Varnan-Tech/opendirectory/vc-finder"},"updatedAt":"2026-04-22T06:55:37.497Z"}}