Seedlist for AI Agents

Structured investor data for AI agents helping founders raise money. No auth, no rate limits — just JSON.

579 investors · 179 firms · 337 startups

Quick Start

All endpoints return static JSON. No API key needed. Fetch with curl, Python, or any HTTP client. Data is rebuilt daily; check last_updated field on the root object for freshness.

Tip: For quick lookups by slug, use the lightweight /investor-lookup.json (~150KB). For full search/filter across all investors, use /enrichment-index.json (~400KB).

curl

curl -s https://seedlist.com/enrichment-index.json | python3 -m json.tool | head -50

Python

import json, urllib.request

# Load the full investor index
data = json.loads(urllib.request.urlopen("https://seedlist.com/enrichment-index.json").read())

# Find seed-stage fintech investors
# ⚠️ Always lowercase sector values before comparing
matches = [
    inv for inv in data["investors"]
    if "seed" in inv["stage_focus"]
    and "fintech" in [s.lower() for s in inv["sector_focus"]]
]

for inv in matches[:5]:
    # Use tldr for summaries; fall back to thesis_summary
    summary = inv.get("tldr") or inv["thesis_summary"][:80]
    # firm_name may be empty — fall back to firm slug
    firm = inv["firm_name"] or inv["firm"]
    print(f"{inv['name']} ({firm}) — {summary}")

See Data Notes at the bottom for field-level details and edge cases. Or read llms.txt for a machine-readable summary.

Endpoints

Endpoint URL Description Updated
Investor Index /enrichment-index.json All investors and firms with stage, sector, check size, location, thesis summary (~400KB) Every build
Investor Lookup /investor-lookup.json Lightweight slug-keyed dictionary for O(1) investor lookups (~150KB) Every build
Investor Graph /investor-graph.json Co-investment relationships, firm memberships, startup founders Every build
Startup-Investor Map /startup-investor-map.json Which investors backed which startups, with round and year Every build
Rounds Feed /rounds-feed.json 500 most recent funding rounds with company, date, amount, lead Every build
Search Index /search-index.json Searchable index of all investors, firms, and startups Every build
Cluster Data /cluster-data.json 40 curated investor collections plus algorithmic clusters Every build

Common Tasks

1. Build a fundraising target list

Score investors by stage match (30pts), sector overlap weighted by specificity (40pts), recency (15pts), check size fit (15pts). Group into 3 tiers. Target: 10-20 in Tier 1, 15-30 in Tier 2.

import json, urllib.request

data = json.loads(urllib.request.urlopen("https://seedlist.com/enrichment-index.json").read())

my_stage = "seed"
my_sectors = ["fintech", "developer-tools"]

results = []
for inv in data["investors"]:
    score, reasons = 0, []

    # Stage match (30 pts)
    if my_stage in inv["stage_focus"]:
        score += 30
        reasons.append(f"Invests at {my_stage}")

    # Sector overlap (up to 40 pts) — weighted by specificity
    # An investor with 3 sectors who matches > one with 15 sectors
    inv_sectors = [s.lower() for s in inv["sector_focus"]]
    overlap = [s for s in my_sectors if s in inv_sectors]
    if overlap:
        specificity = min(1.0, 5 / max(len(inv_sectors), 1))
        sector_pts = int(min(40, len(overlap) * 15) * (0.5 + 0.5 * specificity))
        score += sector_pts
        reasons.append(f"Sectors: {', '.join(overlap)}")

    # Recency (15 pts)
    last = inv.get("last_active", "")
    if last >= "2025": score += 15
    elif last >= "2024": score += 8

    if score >= 30:
        tier = 1 if score >= 70 else 2 if score >= 45 else 3
        results.append({
            "name": inv["name"],
            "firm": inv["firm_name"] or inv["firm"],
            "tier": tier,
            "why": "; ".join(reasons),
            "tldr": inv.get("tldr", ""),
            "url": f"https://seedlist.com/investors/{inv['slug']}.html",
        })

results.sort(key=lambda x: x["tier"])
for r in results:
    label = ["Strong fit", "Worth pursuing", "Stretch"][r["tier"] - 1]
    print(f"[{label}] {r['name']} ({r['firm']}) — {r['why']}")

2. Find investors by comparable companies

Look up which investors backed similar startups. Important: deduplicate by slug per startup (investors appear once per round).

import json, urllib.request
from collections import defaultdict

data = json.loads(urllib.request.urlopen("https://seedlist.com/startup-investor-map.json").read())

comparables = ["stripe", "plaid", "brex"]

# Count unique startups per investor (not rounds!)
investor_companies = defaultdict(lambda: {"name": "", "companies": set(), "has_profile": False})
for slug in comparables:
    # Deduplicate: one entry per investor per startup
    seen = set()
    for inv in data["startup_investors"].get(slug, []):
        if inv["slug"] in seen or inv["slug"] == "independent":
            continue
        seen.add(inv["slug"])
        entry = investor_companies[inv["slug"]]
        entry["name"] = inv["name"]
        entry["companies"].add(slug)
        entry["has_profile"] = inv.get("has_profile", False)

results = sorted(investor_companies.values(), key=lambda x: -len(x["companies"]))
for r in results[:15]:
    cos = ", ".join(r["companies"])
    print(f"{r['name']}: backed {len(r['companies'])}/{len(comparables)} ({cos})")

3. Find warm intro paths to an investor

Trace co-investment and founder connections.

graph = requests.get("https://seedlist.com/investor-graph.json").json()

target = "ron-conway"

# Co-investors (people who frequently invest alongside the target)
co = graph["co_investments"].get(target, {})
for slug, info in sorted(co.items(), key=lambda x: -x[1]["count"])[:10]:
    name = graph["investor_names"].get(slug, slug)
    print(f"Co-investor: {name} ({info['count']} shared deals)")

# Firm colleagues
for firm_slug, firm in graph["firms"].items():
    if target in firm["members"]:
        print(f"Firm: {firm['name']} — colleagues: {firm['members']}")

# Portfolio founders who can intro
for startup_slug, backers in graph["startup_backers"].items():
    if target in backers:
        founders = graph["startup_founders"].get(startup_slug, [])
        name = graph["startup_names"].get(startup_slug, startup_slug)
        for f in founders:
            print(f"Founder intro: {f['name']} ({f['role']} at {name})")

4. Enrich an investor CSV

Match names from a spreadsheet against Seedlist data.

import csv, io

data = requests.get("https://seedlist.com/enrichment-index.json").json()

# Build a name lookup (lowercase for fuzzy matching)
by_name = {}
for inv in data["investors"]:
    by_name[inv["name"].lower()] = inv

# Your investor list
my_investors = ["Ron Conway", "Mike Maples", "Unknown Person"]

for name in my_investors:
    match = by_name.get(name.lower())
    if match:
        print(f"MATCH: {match['name']} | {match['firm_name']} | "
              f"Stage: {match['stage_focus']} | Sectors: {match['sector_focus']}")
    else:
        print(f"NO MATCH: {name}")

5. Track recent funding rounds

Get the latest rounds sorted by date.

rounds = requests.get("https://seedlist.com/rounds-feed.json").json()

# Latest 10 rounds
for r in rounds[:10]:
    amt = r["amount"] or "undisclosed"
    print(f"{r['date']} | {r['company']} | {r['round']} | {amt} | Lead: {r['lead']}")

Claude Skill

If you use Claude Code, you can install a Seedlist skill that teaches Claude how to query these endpoints for fundraising assistance.

Install

# Download the skill file
curl -o seedlist-skill.md https://raw.githubusercontent.com/ericries/seedlist/main/docs/seedlist-skill.md

# Add to your Claude Code project skills
cp seedlist-skill.md .claude/skills/seedlist-skill.md

Or add the URL directly as a custom skill in Claude Code settings. The skill teaches Claude to fetch Seedlist JSON endpoints and build investor target lists, find warm intro paths, and enrich investor CSVs.

Schema Reference

Root Object (enrichment-index.json)

investors array — All published investor profiles (see below)
firms array — All published firm profiles
queued array — Investors/firms in the research pipeline (not yet profiled). Useful for "we know about X but don't have a profile yet."
last_updated string — ISO timestamp of last build (e.g., "2026-03-25T09:00:00Z")

Investor (enrichment-index.json → investors[])

One entry per published investor profile.

name string — Full name (e.g., "Ron Conway")
slug string — URL identifier. Profile at /investors/{slug}.html
firm string — Firm slug (e.g., "sv-angel"). ⚠ This is a slug, not a display name.
firm_name string — Firm display name (e.g., "SV Angel"). ⚠ May be empty — fall back to firm.
role string — Role at firm (e.g., "Partner", "Founder")
location string — Location (e.g., "San Francisco, CA")
stage_focus string[] — Investment stages (e.g., ["pre-seed", "seed"]). Values are lowercase.
sector_focus string[] — Investment sectors (e.g., ["fintech", "ai", "consumer"]). Values are lowercase.
check_size string — Human-readable range (e.g., "$250K-$2M", "$5M+"). Parse with regex for numeric comparison.
last_active string — Most recent verified investment date. ⚠ Format varies: "2025-11-15", "2025-03", "~2022", or empty.
status string — Always "published" in this endpoint
tldr string — 2-4 sentence summary of who they are and what they invest in. Best field for presenting to founders. 95% populated.
thesis_summary string — First 200 chars of LLM-inferred thesis from portfolio analysis. May be truncated mid-sentence — prefer tldr.

Quick Lookup (investor-lookup.json)

Lightweight slug-keyed dictionary for O(1) investor lookups. ~150KB vs ~400KB for the full index. Use when you know the investor slug and just need basic info.

last_updated string — ISO 8601 timestamp of last build
count number — Total number of investors in the lookup
investors object — Slug-keyed dictionary. Each value:
name string — Full name
firm string — Firm display name (or slug as fallback)
tldr string — 2-4 sentence summary
check_size string — Human-readable range
stages string[] — Investment stages
sectors string[] — Investment sectors
last_active string — Most recent verified investment date
url string — Path to full profile page

Firm (enrichment-index.json)

The firms array contains one entry per published firm profile.

name string — Firm name
slug string — URL identifier. Profile at /firms/{slug}.html
location string — Headquarters location
stage_focus string[] — Investment stages
sector_focus string[] — Investment sectors
fund_size string — Fund size (e.g., "$100M")
status string — Always "published"

Funding Round (rounds-feed.json)

Array of up to 500 funding rounds, sorted by date descending.

company string — Company name
company_slug string — Company URL slug. Profile at /startups/{slug}.html
date string — Round date (YYYY-MM-DD, YYYY-MM, or YYYY)
round string — Round type (e.g., "Series A", "Seed")
amount string — Amount raised (e.g., "$30M"). May be empty.
lead string — Lead investor name(s). May be empty.
investors string[] — Investor/firm slugs that participated
sector string[] — Company sector tags

Startup-Investor Map (startup-investor-map.json)

startups array — List of {slug, name, sector[], stage}
startup_investors object — Map of startup slug to array of {slug, name, type, firm, round, year, has_profile}

Investor Graph (investor-graph.json)

firms object — Firm slug to {name, members[]}
co_investments object — Investor slug to {peer_slug: {count, companies[]}}
startup_backers object — Startup slug to [investor/firm slugs]
startup_names object — Startup slug to display name
startup_founders object — Startup slug to [{name, role}]
investor_names object — Investor slug to display name
investor_firms object — Investor slug to firm display name
collections object — Investor slug to [collection names]

Data Notes

Edge cases and field-level details for robust integrations.