Skip to main content

yc-batch-evaluator

Evaluate YC batch companies for investment — scrapes the YC directory, researches each company and its founders (work history, LinkedIn, website), assesses founder-company fit, and exports to Google Sheets with priority rankings. Use when asked to evaluate YC companies, research a YC batch, screen startups, or do due diligence on YC companies.

Source facts

Repository
criptogus/agent-evolve-network
Last source activity
July 4, 2026 at 17:42
Detected SKILL.md language
English
Stars
275
Forks
3

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

File Explorer
2 files

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
yc-batch-evaluator
description
Evaluate YC batch companies for investment — scrapes the YC directory, researches each company and its founders (work history, LinkedIn, website), assesses founder-company fit, and exports to Google Sheets with priority rankings. Use when asked to evaluate YC companies, research a YC batch, screen startups, or do due diligence on YC companies.
source
orthogonal
# YC Batch Evaluator ## Setup Read your credentials from ~/.gooseworks/credentials.json: ```bash export GOOSEWORKS_API_KEY=$(python3 -c "import json;print(json.load(open('$HOME/.gooseworks/credentials.json'))['api_key'])") export GOOSEWORKS_API_BASE=$(python3 -c "import json;print(json.load(open('$HOME/.gooseworks/credentials.json')).get('api_base','https://api.gooseworks.ai'))") ``` If ~/.gooseworks/credentials.json does not exist, tell the user to run: `npx gooseworks login` All endpoints use Bearer auth: `-H "Authorization: Bearer $GOOSEWORKS_API_KEY"` Scrape a YC batch, research every company and founder, assess founder-company fit, and export a live-updating Google Sheet with priority rankings. Designed for investors evaluating YC companies. ## IMPORTANT: Do NOT ask clarifying questions. Just start immediately. All inputs are optional. If the user said a batch, use it. If they didn't specify sectors or thesis, process ALL companies. **Always create a new Google Sheet** — never ask for an existing spreadsheet ID. **Start scraping immediately — do not ask "which batch?", "any sector filters?", or "should I create a sheet?".** This is designed for live demos where speed and visual impact matter. "Spring 2026" is a real YC batch (also called "X26"). It exists and has ~22 companies. ## Input - **batch** (optional) — defaults to "Spring 2026". Examples: "Winter 2026", "Summer 2025" - **sectors** (optional) — filter to specific sectors (e.g. "AI", "fintech", "infrastructure"). If not provided, process ALL companies. - **thesis** (optional) — investor's focus areas for tailored scoring and ranking. If not provided, rank on general investment quality. ## Step 1: Scrape the YC Batch Directory The YC companies page is JavaScript-rendered (Algolia-powered). Scrapegraph handles the JS rendering. ```bash curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \ -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"api":"scrapegraph","path":"/v1/smartscraper"}' "website_url": "https://www.ycombinator.com/companies?batch={batch_url_encoded}", "user_prompt": "Extract every company listed: company name, one-line description, sector/tags, location, and URL slug for each company page (e.g. /companies/orthogonal). Return as a structured list." }' ``` Batch URL encoding: "Spring 2026" → `Spring%202026`, "Winter 2026" → `Winter%202026`. If the investor specified sectors, filter the list. Otherwise process all companies. **Expected response structure:** ```json { "result": { "companies": [ { "name": "Indexable", "description": "sandbox infrastructure for AI agents", "tags": ["B2B", "Infrastructure"], "location": "San Francisco, CA, USA", "url_slug": "/companies/indexable" } ] } } ``` Note: The batch page returns `tags` (e.g. "B2B", "Infrastructure"), NOT detailed sectors. Individual YC pages (Step 3a) return richer `sectors` (e.g. "Artificial Intelligence", "Manufacturing"). Always prefer individual page data when available. ## Step 2: Create Google Sheet and Share Link Immediately Before any research, create the sheet and populate it with company names + descriptions from the batch scrape. Share the link so the investor can watch results fill in live. ```bash curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \ -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"api":"google-sheets","path":"/create-spreadsheet","body":{"title":"YC {batch} Batch Evaluation"}}' ``` **Column layout (A through N):** | Col | Header | Source | |-----|--------|--------| | A | Company | Batch scrape | | B | Description | Batch scrape | | C | Sector | Individual YC page (`sectors`) — overwrite batch `tags` | | D | Location | Individual YC page → Apollo fallback | | E | Website | Individual YC page (`website_url`) | | F | Founders | Individual YC page (names + titles) | | G | Founder LinkedIn(s) | Individual YC page (`linkedin_url`) | | H | Founder Twitter/X | Individual YC page (`twitter_url`) | | I | Founder Background | Apollo employment history + YC page bios | | J | Founder-Company Fit | Your assessment | | K | Website Analysis | Company website scrape | | L | Market/Competitors | Perplexity | | M | Overall Assessment | Your assessment | | N | Priority Rank | Your ranking | Write header row + all company rows (research columns blank): ```bash curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \ -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"api":"google-sheets","path":"/update-values"}' "spreadsheet_id": "{spreadsheet_id}", "sheet_name": "Sheet1", "first_cell_location": "A1", "valueInputOption": "USER_ENTERED", "values": [ ["Company", "Description", "Sector", "Location", "Website", "Founders", "Founder LinkedIn(s)", "Founder Twitter/X", "Founder Background", "Founder-Company Fit", "Website Analysis", "Market/Competitors", "Overall Assessment", "Priority Rank"], ["{company_name}", "{description}", "{tags}", "{location}", "", "", "", "", "", "", "", "", "", ""] ] }' ``` Populate Sector (C) and Location (D) from the batch scrape initially — they'll be overwritten with richer data from the individual YC pages. **Share the sheet link with the user immediately** so they can watch it fill in. ## Step 3: Research Each Company — Row by Row ### Parallelization Strategy **The demo effect matters.** Rows filling in one-by-one on the spreadsheet is the visual payoff. Optimize for a steady stream of rows appearing — not for dumping everything at once. Process companies in **batches of 3-5 at a time**. Within each batch, all companies' research runs in parallel. But **update each row individually** the moment that company's research completes — do NOT wait for the whole batch to finish before writing. For each batch of companies (run all in parallel): 1. **Scrape all YC company pages** in the batch simultaneously (Step 3a) 2. As each YC page returns, **immediately launch its downstream calls in parallel**: - Scrape the company's website (Step 3b) - Apollo lookup for each founder (Step 3c) — multiple calls if multiple founders, all in parallel - Perplexity market analysis (Step 3d) 3. As each company's full research set completes, **compile and update its row** (Step 4) **immediately** — one `update-values` call per row, don't batch them 4. Move to the next batch **Key: each row gets its own sheet update call.** This creates the live-fill effect where the investor watches rows appear every 3-5 seconds. Never batch multiple rows into a single sheet write — that kills the visual cadence. With batches of 5, a 22-company batch completes in ~2-3 minutes with rows streaming in throughout. ### 3a. Scrape the YC company page (~$0.03 each) YC company pages are server-rendered and contain rich data: founders with LinkedIn, Twitter/X, bios, team size, sectors, website. ```bash curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \ -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"api":"scrapegraph","path":"/v1/smartscraper"}' "website_url": "https://www.ycombinator.com/companies/{company_slug}", "user_prompt": "Extract: full company description, all founders (full name, title, LinkedIn URL, Twitter/X URL, bio), company website URL, team size, location, sectors, founding year." }' ``` **Expected response structure:** ```json { "result": { "founders": [ { "full_name": "William Alexander", "title": "Founder", "linkedin_url": "https://www.linkedin.com/in/william--alexander/", "twitter_url": null, "bio": "Manufacturing nerd from Iowa. Stanford Econ + CS." }, { "full_name": "Tom Blomfield", "title": "Primary Partner", "linkedin_url": null, "twitter_url": null, "bio": null } ], "website_url": "https://arzana.ai", "location": "San Francisco, CA, US", "sectors": ["Artificial Intelligence", "Manufacturing"], "team_size": 4, "founding_year": 2025 } } ``` **Critical parsing rules:** 1. **Filter out YC partners**: Entries with title "Primary Partner" or "Group Partner" are YC staff (e.g. Tom Blomfield, Harj Taggar), NOT founders. Exclude them. 2. **Website field name varies**: Check `website_url`, `company_website_url`, and `company_website` — Scrapegraph returns different field names depending on the page. 3. **Sectors field name varies**: Check `sectors`, `sector_tags`, and `tags`. Prefer the individual page's `sectors` over the batch page's `tags` — individual pages return specific sectors like "Artificial Intelligence" vs generic tags like "B2B". 4. **LinkedIn URL may be null**: Some founders don't have LinkedIn listed on YC. Use Apollo fallback (Step 3c) with name + company search. 5. **Twitter/X URL may be null**: Only populate if present, don't invent URLs. ### 3b. Scrape the company's own website (~$0.03 each) **Always run this step.** Company websites have product details, pricing, customer logos, testimonials, and hiring signals that no other source provides. ```bash curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/orthogonal/run \ -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"api":"scrapegraph","path":"/v1/smartscraper"}' "website_url": "https://{company_website}", "user_prompt": "Extract: what the product does, target customer, pricing model, key features, traction signals (customer logos, metrics, testimonials), hiring signals. Be specific about what you find." }' ``` **Expected response — varies by company, but typically includes:** ```json { "result": { "product_description": "...", "target_customer": "..." or ["...", "..."], "pricing": "Not disclosed" or {"model": "...", "price": "..."}, "key_features": ["...", "..."], "traction_signals": { "customer_logos": ["Heineken", "Toyota", "..."], "metrics": ["99.7% accuracy", "25K patients/day"], "testimonials": [{"author": "...", "quote": "..."}] }, "hiring_signals": ["Careers page present"] } } ``` Note: The response structure varies significantly between companies. The `traction_signals` field is sometimes called `traction`. Customer logos may be actual names or just "logos displayed but not identified". Pricing may be a string, object, or array. Parse flexibly. If the scrape fails (404, timeout, empty), put "Website not available or pre-launch" in the Website Analysis column — never leave it blank. ### 3c. Apollo — founder work history (~$0.01 per founder) Use the LinkedIn URL from the YC page to get full employment history. Run one call per founder. ```bash curl -s -X POST $GOOSEWORKS_API_BASE/v1/proxy/apollo/people/match \ -H "Authorization: Bearer $GOOSEWORKS_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "linkedin_url": "{founder_linkedin_url}", "reveal_personal_emails": true }' ``` **Key fields in the Apollo response:** ```json { "person": { "name": "William Alexander", "headline": "Co-Founder & CEO, Arzana | Stanford Economics + CS", "city": "San Francisco", "state": "California", "employment_history": [ { "organization_name": "Arzana", "title": "Co-Founder", "start_date": "2025-06-01", "end_date": null, "current": true }, { "organization_name": "Previous Company", "title": "Engineer", "start_date": "2022-01-01", "end_date": "2025-05-01", "current": false } ] } } ``` **What to extract:**
View on GitHub
This SKILL.md is very large, so SkillsMP previews the first section here. View on GitHub