YC company scraping agent
Every new YC startup becomes a founder you can reach out to.
Reaching out to newly launched YC companies means first finding them and their founders’ contact details, over and over, as new batches launch. Done by hand it means re-browsing the same directory, and someone has to remember which companies were already looked at so the same one is not read twice.
Running on our own company since Oct 13, 2026 · YC website · Risk: Medium. This page is public; the full list it collects is visible to signed-in team accounts via the button above.
Tasks and outputs
What it takes on
List and dedupe
Sorts the YC directory by launch date and drops every company already in the tracked leads file, keyed by YC slug.
Read each company page
Opens each new company’s own page and reads founder name, LinkedIn, Twitter and email straight out of its HTML.
Record and publish
Appends one row per founder, regenerates the website’s JSON copy, commits and pushes both files, and triggers the deploy.
Who it is for: Teams doing outbound into the YC population who want a standing, de-duplicated list of newly launched companies and their founders’ public contact details, fed to whoever follows up.
How we use it: Live since October 2026, in batches of up to 10 new companies per run — the run log below shows every batch so far. Its output feeds the LinkedIn connect agent directly: every founder it records with a LinkedIn URL is a candidate for a connection request.
This is the same build-it-or-we-run-it model behind our AEO work. See your own AI visibility baseline
What gets collected, and what does not
01Up to 10 companies not already in the tracked leads file, sorted by YC launch date, newest first.
02Dedup is a plain read of the tracked leads file, keyed on YC slug — no external query, no network call beyond the YC pages themselves.
03Founder name, LinkedIn URL, Twitter/X URL and email are read only from hrefs already present in the company’s own YC page — never navigated to, never guessed, never looked up elsewhere.
04A company whose page has no identifiable founder is skipped and reported, not recorded with blank rows.
05A company whose page errors is skipped and reported; the rest of the batch continues.
The rules the agent’s output is written to, from the file named above. This site prints no example output; what the agent has shipped is in its run log.
Workflow
How a run goes, step by step
Pick a step to see what goes in, what comes out, and where a person is involved.
Step 1 of 5
List by launch date
Opens the YC companies directory, sorts it by launch date, and scrolls until enough candidates are loaded to cover the batch size after already-recorded companies are filtered out.
ycombinator.com/companies
A list of company slugs and detail-page URLs
Nobody. If the page layout has changed enough that no companies load, the run stops and reports it.
Step 2 of 5
Dedupe against the tracked leads file
Reads every row already in the tracked leads file and keeps only companies whose YC slug is not already present, up to 10.
The company list, and the tracked leads file
Up to 10 new companies
Nobody. If every candidate is already recorded, the run reports zero new companies and stops.
Step 3 of 5
Read each founder
Visits each new company’s own page and, for each name matching a founder title, looks for a LinkedIn, Twitter or mailto link in the same part of the page and records whichever are present.
Each company’s detail page
Zero or more founders per company, each with whatever contact links its own page exposed
Nobody. A company with no identifiable founder is recorded as skipped, not as empty rows.
Step 4 of 5
Record and export
Appends one row per founder to the tracked leads file, then regenerates the JSON copy the website reads so the two never drift apart.
The founders found this run
New rows in tools/yc-leads/yc-leads.md and web/content/yc-leads.json
Nobody in this step.
Step 5 of 5
Commit, push, deploy
Commits only the tracked leads file and its JSON export, pushes, and triggers the deploy that puts the batch on the public run log.
The two changed files
A live deploy reflecting the new batch
When the push conflicts with a concurrent edit (most likely the LinkedIn connect agent editing the same file): a person resolves it by hand.
Before you start
What you’ll need to bring
Company material
Nothing company-specific — this agent reads YC’s public directory, not anything about your own company.
Source material
None beyond the YC companies directory itself, which is public.
Platform account
None. The YC directory needs no login.
Run environment
A machine that can keep that Chrome open during runs, Node.js for the publishing script, and an agent runner that follows a written workflow. We use Claude Code.
Run log
Recent runs, as they happened
The full log is public and read-only. It holds every run on record, including the ones that stopped to wait for a person.
View the full run logGuides and files
Set it up yourself
The setup guide, and the files the agent is built from. You run it in your own environment, with your own accounts.
- 01
Runtime
- Node.js, with the dependencies installed in the scripts’ folder (a browser driver; no markdown or API client needed since the system of record is a plain file).
- An agent runner that follows a written workflow, the same shape as the LinkedIn and Reddit posting agents — ours is Claude Code, run on demand today rather than on a fixed schedule.
- 02
Browser setup
- A Chrome started with remote debugging on a fixed port, any profile. The YC companies directory is public, so unlike the social-posting agents this one needs no account signed in to that specific Chrome window.
- 03
Account setup
- None. Reading the YC directory and company pages needs no account; nothing here signs in anywhere.
- 04
Configuration
- The tracked leads file’s location and column order — fixed today, not meant to be reconfigured per run.
- The batch size (10 new companies per run) and the over-fetch cap used when sorting past already-recorded companies.
- 05
First run
- Run the batch script once and read the tracked leads file afterward: confirm the new rows have the right company, founder, and whichever of LinkedIn/Twitter/email the company’s page actually exposed.
- Run the JSON export step and confirm the generated file matches the tracked leads file row for row.
- Run the batch a second time with no new YC launches in between, and confirm it records zero new rows — the dedup check working as intended.
collect-leads.mjs
Script · Node. Lists companies by launch date, dedupes, reads each founder, appends new rows.
extract-founders.mjs
Script · Node. Reads founder name, LinkedIn, Twitter and email off one company’s own page.
leads-md.mjs
Module · Node. Shared read/write access to the tracked leads file — the one place that parses it.
export-to-web-json.mjs
Script · Node. Regenerates the website’s JSON copy of the tracked leads file.
yc-leads.md
Leads file · Markdown. The system of record: one row per founder, with Owner and Status columns the LinkedIn connect agent and manual edits update.
Not packaged for public download yet. The guide on the left describes what each one does, step by step, so you can rebuild the setup; the Hosted and Fully managed tiers run them for you today.
Rather have us run it?
Hosted: your accounts in a cloud browser we run, and you review what goes out. Fully managed: we set the strategy and run the agents.
Good to know
Where it stops and asks for you
- A company’s page has no identifiable founder. That company is recorded as skipped, not as blank rows, and the batch continues with the next company.
- A company’s page errors while loading. That company is recorded as an error with a screenshot saved, and the batch continues.
- Every candidate company is already recorded. The run reports zero new companies and stops before writing anything.
- Two agents try to update the leads file at the same time. The run stops rather than guess which edit should win — a person merges it by hand, so nothing is silently overwritten.
Risk notice
What to watch for
- Only what a company chooses to put on its own public YC page is collected — no lookup, no guessing, no third-party data source. Coverage is therefore uneven by design: some founders show no LinkedIn, Twitter or email at all.
- A YC page redesign can silently reduce what gets found on future runs without erroring; this is the same maintenance burden every browser-driven agent in this list carries.
- The tracked leads file is edited by both this agent and the LinkedIn connect agent. Running them back to back rather than at the same time avoids a write race; there is no file locking.
FAQ
Questions about this agent
Most founders show no email at all.
Expected. Email is read only from a mailto: link a company happens to put on its own YC page — most do not. LinkedIn and Twitter are far more commonly present.
A company’s founder cards are not being found.
The extractor looks for a founder title near a LinkedIn, Twitter or mailto link in the page’s own markup. A YC page redesign can change that structure enough to need an update; the company is skipped for that run rather than recorded with missing data.
The same company shows up twice.
Should not happen — dedup is a plain check against every row already in the tracked file, keyed on YC slug. If it does, check whether two runs wrote to the file at the same time without one finishing first.
Would you rather we ran this agent for you? There is a managed service for that.
Talk to us