# Changelog of Y Combinator Jobs Scraper (`parsebird/yc-jobs-scraper`) Actor

- **URL**: https://apify.com/parsebird/yc-jobs-scraper/changelog.md
- **Full Actor documentation**: https://apify.com/parsebird/yc-jobs-scraper.md

## Changelog

### \[2.4] - 2026-06-18

#### Added

- **Location filter**: New `locationFilter` input parameter — filter jobs by city or region (e.g. "New York", "Remote", "San Francisco"). Supports comma-separated values for multiple locations treated as OR.
- Location terms are integrated into the search query for better API-level discovery, then post-filtered for accuracy
- YC company page enrichment: fetches `ycombinator.com/companies/{slug}` to populate company tagline, status, founded year, founders, role category, and role subcategory

### \[2.2] - 2026-05-06

#### Changed

- **Complete discovery overhaul**: Scraper now discovers ALL companies first (via exhaustive 2-letter search queries), then fetches ALL jobs from each company's page — guaranteeing no jobs are missed regardless of how they're indexed
- Previous approach queried the search API (capped at ~23 results per query) and missed thousands of jobs. New approach: discover 800+ companies → fetch all their jobs → yields 3,500+ total jobs
- **594 sales jobs** now found (up from 264 in v2.1) when using `roleFilter: "sales"` with empty search
- LunaJoy Health sales roles now correctly discovered (5 jobs including "Head of Sales", "Sales Cold Caller", etc.)
- Firstbase.io sales roles now complete (4 jobs: Growth Manager, Account Executive, Business Operations Manager, Head of Revenue)
- Enrichment phase now runs with 10x concurrency (batched parallel requests), reducing total run time from 10+ minutes to ~2.5 minutes for a full sales scan
- Company metadata (industry, founders, description, team size) now populated from company pages even before enrichment

#### Fixed

- Fixed the core discovery gap: the WAAS search API returns at most ~23 jobs per query with no pagination. By fetching company pages directly, we now get ALL jobs for every discovered company

### \[2.1] - 2026-05-05

#### Fixed

- **Fixed role filter returning wrong results**: The `roleFilter` for "sales" (and other non-engineering roles) was returning unrelated jobs (HR, recruiting) because it relied on the platform's `roleType` field which is `null` for most non-engineering jobs
- Role filter now uses a dual-matching strategy: checks the `roleType` tag AND performs keyword matching against the job title, dramatically improving accuracy
- "Full cycle" role type is now correctly mapped to "recruiting" (not "sales")
- Added role-specific discovery queries: when a role filter is active, the scraper also searches for role-related keywords to ensure comprehensive coverage
- Sales filter now correctly finds SDRs, BDRs, Account Executives, GTM roles, Business Development, Revenue roles, etc.

### \[2.0] - 2026-05-03

#### Changed (Breaking)

- **Complete rewrite**: Switched from scraping `ycombinator.com/jobs/role/` pages (which returned a 404) to using the Work at a Startup (WAAS) search API at `workatastartup.com/jobs/search`
- **Massively increased coverage**: Old version found only ~34 jobs per run. New version discovers **1,000+ unique jobs** across the entire YC ecosystem by querying the search API with comprehensive terms
- Replaced `role` and `location` inputs with `searchQuery` (keyword search) and `roleFilter` (post-discovery filtering)
- Removed `maxPages` input — no longer needed since the API handles discovery
- Detail enrichment now uses WAAS Inertia.js data (richer than old JSON-LD parsing) — gets equity, skills, visa sponsorship, interview process, founders with avatars, company industry, and more
- Removed `selectolax` dependency — all parsing is now JSON-based
- URLs now point to `workatastartup.com` (the canonical WAAS platform) instead of `ycombinator.com`

#### Added

- Full discovery mode: leave `searchQuery` empty to automatically find all available jobs via alphabet + keyword sweeps
- `skills` field in output — extracted from WAAS detail page
- `companyIndustry` field in output
- `companyLogo` and `companyWebsite` fields
- Founder avatar URLs

### \[1.2] - 2026-05-03

#### Fixed

- Fixed pagination: YC no longer supports server-side pagination — all jobs for a role are embedded in a single page. The scraper now extracts jobs from the embedded JSON data (Inertia.js `data-page` attribute) instead of relying on broken `?page=N` parameter
- Scraper now detects duplicate pages and stops immediately instead of wasting time fetching identical content
- Added HTML DOM parser as fallback if embedded JSON extraction fails

### \[1.1] - 2026-04-04

#### Changed

- Simplified pricing: single `yc-job-detail` event at $0.0028 per job ($2.80/1,000)
- Removed `includeDetails` toggle; detail pages are now always fetched for every job
- Removed `yc-job-listing` charge event

#### Fixed

- Output schema now uses `actorOutputSchemaVersion` (was causing build validation error)

### \[1.0] - 2026-04-04

#### Added

- Initial release of Y Combinator Jobs Scraper
- Listing page scraping with role and location filters
- Pagination support for filtered pages (by role, location, or both)
- Detail page enrichment with JSON-LD parsing (salary min/max, currency, employment type, posted date)
- Equity range extraction from detail pages
- Experience requirement extraction
- Visa sponsorship detection
- Full job description in plain text and HTML
- Company metadata: name, YC batch, tagline, founded year, team size, status, website, logo
- Founder name extraction
- Company description extraction
- Apply URL extraction
- Lightweight httpx-based architecture (no browser/Chromium needed)
