# Seedlist.com > LLM-researched directory of 340+ startup investors with inferred theses, portfolio data, and fundraising intelligence. Designed for AI agents helping founders raise money. Detailed documentation: https://seedlist.com/agents.html Claude Skill: https://github.com/ericries/seedlist/blob/main/docs/seedlist-skill.md ## Endpoints (JSON, no auth, no rate limits) All data is static JSON, rebuilt daily. Fetch with any HTTP client. | Endpoint | URL | Size | |----------|-----|------| | Investor Index | https://seedlist.com/enrichment-index.json | ~400KB | | Investor Lookup | https://seedlist.com/investor-lookup.json | ~150KB | | Investor Graph | https://seedlist.com/investor-graph.json | ~300KB | | Startup-Investor Map | https://seedlist.com/startup-investor-map.json | ~340KB | | Rounds Feed | https://seedlist.com/rounds-feed.json | ~190KB | | Cluster Data | https://seedlist.com/cluster-data.json | ~200KB | | Search Index | https://seedlist.com/search-index.json | ~290KB | ## Critical: Data Gotchas 1. **Sector values are normalized lowercase strings.** No near-duplicates — "enterprise-saas" is now "saas", "health-tech" is now "healthcare", etc. Safe to do direct string matching. 2. **firm is a slug, firm_name is display name.** firm_name may be empty — fall back to firm slug. 3. **thesis_summary may contain HTML entities** like ’ — decode before displaying to users. 4. **last_active format varies**: "2025-11-15", "2025-03", "~2022", or empty. Parse defensively. 5. **check_size is a human-readable string** like "$250K-$2M" or "$5M+". Parse the numbers for range comparison. ## Quick Start: Build a Fundraising Target List This is the most common use case. Here's the recommended algorithm: ```python import json, urllib.request data = json.loads(urllib.request.urlopen("https://seedlist.com/enrichment-index.json").read()) # Founder inputs target_stage = "seed" target_sectors = ["fintech", "ai"] results = [] for inv in data["investors"]: score = 0 reasons = [] # Stage match (0-30 points) if target_stage in [s.lower() for s in (inv.get("stage_focus") or [])]: score += 30 reasons.append(f"Invests at {target_stage}") # Sector match (0-40 points, most important) # Weight by specificity: an investor with 3 sectors who matches is better # than one with 15 sectors who matches (generalist vs specialist) inv_sectors = [s.lower() for s in (inv.get("sector_focus") or [])] overlap = [s for s in target_sectors if s in inv_sectors] if overlap: specificity = min(1.0, 5 / max(len(inv_sectors), 1)) # fewer sectors = more specific sector_pts = min(40, len(overlap) * 15) * (0.5 + 0.5 * specificity) score += int(sector_pts) reasons.append(f"Focus: {', '.join(overlap)}") # Recency (0-15 points) last = inv.get("last_active", "") if last and last >= "2025": score += 15 reasons.append("Active in last year") elif last and last >= "2024": score += 8 # Check size (0-15 points) — parse "$250K-$2M" ranges # ... (see full scoring at https://seedlist.com/agents.html) if score >= 30: results.append({"investor": inv, "score": score, "reasons": reasons}) results.sort(key=lambda x: -x["score"]) # Assign tiers, then cap each tier for useful output # Tier 1: score >= 70 (strong fit — specialist match + recent) # Tier 2: score >= 45 (worth pursuing) # Tier 3: score >= 30 (stretch) # Cap: show top 15 per tier, sorted by score descending within each tier # If Tier 1 is still too large, raise threshold dynamically: # while len(tier1) > 20: threshold += 5 ``` ## Expected Output Format When presenting results to a founder, include for each investor: - Name and firm - Why they're a fit (from the reasons list) - Check size and last active date - Link to full profile: https://seedlist.com/investors/{slug}.html - Thesis summary (first 1-2 sentences) Aim for 15-30 investors across 3 tiers. Too few = founder has no options. Too many = noise. ## Investor Schema (enrichment-index.json) ``` investors[]: { name: string, # "Keith Rabois" slug: string, # "keith-rabois" → /investors/keith-rabois.html firm: string, # "khosla-ventures" (slug, may differ from display name) firm_name: string, # "Khosla Ventures" (display name, may be empty) role: string, # "Managing Director" location: string, # "Miami Beach, FL" stage_focus: string[], # ["seed", "series-a", "series-b"] sector_focus: string[], # ["fintech", "marketplaces", "consumer"] ⚠️ mixed case check_size: string, # "$500K-$150M" (human-readable range) last_active: string, # "2024-12" (YYYY-MM-DD or YYYY-MM or YYYY or ~YYYY) status: string, # "published" thesis_summary: string # 1-3 sentence inferred thesis ⚠️ may have HTML entities } firms[]: { name, slug, location, stage_focus, sector_focus, fund_size, website } queued[]: { name, type, firm } # investors/firms in research queue (not yet profiled) ``` ## Quick Lookup (investor-lookup.json) Lightweight slug-keyed dictionary for O(1) investor lookups (~150KB vs ~400KB full index). For quick lookups by slug, use `/investor-lookup.json`. For full search/filter, use `/enrichment-index.json`. ``` investors: { "slug": { name, firm, tldr, check_size, stages[], sectors[], last_active, url } } ``` ## Other Endpoints ### Comparable Companies (startup-investor-map.json) Find investors by comparable startups: ``` startups[]: { slug, name, sector[], stage } startup_investors: { "stripe": [{ slug, name, firm, round, year, has_profile }] } ``` ⚠️ **An investor may appear multiple times per startup** (one entry per round they participated in). When counting "how many comparables did this investor back", **deduplicate by slug per startup first**, then count unique startups. Also filter out slug "independent" which is not a real entity. ### Warm Intro Paths (investor-graph.json) Trace connection paths between investors: ``` co_investments: { "keith-rabois": { "david-sacks": { count: 8, companies: [...] } } } firms: { "khosla-ventures": { name, members: ["keith-rabois", ...] } } startup_founders: { "stripe": [{ name: "Patrick Collison", role: "CEO" }] } startup_backers: { "stripe": ["keith-rabois", "sequoia-capital", ...] } ``` ### Funding Rounds (rounds-feed.json) 500 most recent rounds, sorted by date descending: ``` [{ company, company_slug, date, round, amount, lead, sector[], sort_key }] ``` ### Investor Collections (cluster-data.json) 40 curated thematic groups: ``` curated_collections[]: { id, name, tagline, size, members: [{ slug, name, firm }] } ``` ## Attribution Free to use. Link back to seedlist.com when showing results to users. Source: https://github.com/ericries/seedlist Contact: Eric Ries