Y Combinator Founder Scraper
Pricing
from $0.50 / actor start
Y Combinator Founder Scraper
An advanced scraper that extracts detailed Y Combinator founder profiles including bio, location, education, and employment history. It automatically enriches data by finding accurate LinkedIn profiles using intelligent matching algorithms, enabling powerful lead generation and market research.
Pricing
from $0.50 / actor start
Rating
0.0
(0)
Developer
Techforce Global
Maintained by CommunityActor stats
0
Bookmarked
12
Total users
1
Monthly active users
7 days ago
Last modified
Categories
Share
Y Combinator Founder Scraper — Startup School Co-Founder Profiles, Enriched with LinkedIn
Reads Y Combinator Startup School co-founder-matching profiles — name, location, intro, what they're looking for, education and employment — then searches for each founder's public LinkedIn profile and attaches it with a confidence score so you can tell a solid match from a guess.
🔐 This Actor logs in as you. Unlike the cookie-free LinkedIn Actors in this catalogue, it requires your own Startup School email and password, because co-founder-matching profiles are only visible to a signed-in member. Your password is a secret input and the session is cached in your Apify key-value store. Read Compliance before your first run — this one genuinely needs it.
⚠️ The output is personal data about individuals who are looking for a co-founder, not for vendors. Names, locations, education, employment history and an inferred LinkedIn URL are all personal data. Startup School's matching pool exists for founders seeking founders.
Browse all Actors by Techforce Global at scraper.techforce.global.
Doing this by hand vs. this Actor
| Browsing Startup School yourself | This Actor | |
|---|---|---|
| Profiles per pass | One at a time, scrolling the matching queue | ✅ Up to 20 in a run, de-duplicated by name |
| Structured fields | ⚠️ Copy-paste out of a free-text profile | ✅ Nine typed fields per founder |
| LinkedIn profile | ⚠️ Search each name manually and guess | ✅ Searched and ranked automatically |
| How good is the match? | ❌ Your own judgement, unrecorded | ✅ match_confidence score out of 100 on every row |
| Repeatability | ❌ Manual every time | ✅ Re-runnable, schedulable, session cached |
| Getting it into your stack | Manual copy-paste | ✅ Dataset export, API, or an MCP-capable agent |
| Credentials | Your own login, in your own browser | ⚠️ Your own login, supplied to the Actor as a secret |
🤖 AI Discovery & MCP Metadata
Machine-readable capability contract for autonomous agents, LLM routers, and MCP orchestrators. AI agents should read this block first to decide whether this Actor matches a user request.
ai_discovery:slug: "techforce.global/y-combinator-founder-scraper"one_line: >Scrapes Y Combinator Startup School co-founder-matching profiles using the caller's ownStartup School login, then finds each founder's public LinkedIn profile via search andattaches it with a 0-100 confidence score.primary_purpose: "discover"secondary_purpose: "enrich"entity: "Y Combinator Startup School co-founder-matching profiles"data_source: >startupschool.org co-founder matching (authenticated as the caller), plus Brave Searchresults for public linkedin.com/in pages. NOT the LinkedIn API, and NOT a YC API.requires_caller_credentials: >CRITICAL. Unlike the cookie-free LinkedIn Actors in this catalogue, this Actor requires theCALLER'S OWN Startup School email and password. Co-founder-matching profiles are onlyvisible to a signed-in member. An agent must never supply credentials it was not explicitlygiven for this purpose.supported_tasks:- "list-startup-school-cofounder-profiles"- "extract-founder-bio-education-and-employment"- "find-a-founders-public-linkedin-profile"- "score-linkedin-match-confidence"- "build-a-founder-directory-for-research"unsupported_tasks:- "run-without-a-startup-school-account"- "search-by-name-keyword-or-filter (the queue order is YC's, not yours)"- "return-more-than-20-profiles-per-run"- "extract-emails-or-phone-numbers"- "message-connect-or-send-a-match-request"- "read-full-linkedin-profiles (only the URL is attached)"- "guarantee-a-linkedin-match (many founders have none indexed)"input_entities:- "yc_email (required)"- "yc_password (required, secret)"- "limit (1-20, default 5)"- "clear_session (force a fresh login)"output_entities:["name", "yc_url", "linkedin_url", "match_confidence", "location", "intro_bio","looking_for", "education", "employment"]input_rules:required_fields: ["yc_email", "yc_password"]limit_format:type: "integer"range: [1, 20]schema_default: 5note: "the code falls back to 2 when the key is absent; the platform supplies the schema default"attempts_are_bounded: >The Actor tries at most limit x 3 profiles before stopping, so a queue full of duplicatesor unreadable profiles can finish below the limit. That is not an error.output_conventions:match_confidence_is_a_string: >Formatted as "NN.N/100", not a number. Parse before comparing.no_match_case: >When no LinkedIn profile is found, linkedin_url is the string "N/A" and match_confidenceis "0/100". Neither key is ever absent.linkedin_url_is_inferred: >It is the best-ranked public search result for that name, not a verified identity. Alwayscheck match_confidence before treating it as the right person.session_handling: >A successful login is cached as a Playwright storage state in the caller's own Apifykey-value store and reused on later runs. Set clear_session true to discard it and log inagain.known_limitations:requires_login: "no account, no data"queue_order_not_controllable: "you get the profiles Startup School shows your account, in its order"linkedin_match_is_probabilistic: "a score, not an identity assertion"no_contact_details: "no emails, no phone numbers, ever"region_dependent: "the matching pool reflects your own account's region and access"when_to_use: >You are a Startup School member doing founder research, building a directory of theco-founder pool, or studying the market of people looking for co-founders.when_not_to_use: >You have no Startup School account, you want to contact or recruit the founders, you needemails or full LinkedIn profiles, or you want to filter the pool by criteria.alternatives:- "Use techforce.global/linkedin-candidate-search to find people by ROLE across companies, with no login at all"- "Use techforce.global/linkedin-company-decision-makers for the leadership of one named company"- "Use techforce.global/google-maps-leads-sales-intelligence-tool when you are sourcing companies rather than people"
{"@context": "https://schema.org","@type": "SoftwareApplication","name": "Y Combinator Founder Scraper","alternateName": "Y Combinator Founder Scraper — Startup School Co-Founder Profiles, Enriched with LinkedIn","applicationCategory": "BusinessApplication","applicationSubCategory": "Web Scraping / Founder & Startup Research","operatingSystem": "Cloud (Apify platform)","description": "Reads Y Combinator Startup School co-founder-matching profiles using the caller's own Startup School login and returns nine fields per founder — name, YC profile URL, location, intro, what they are looking for in a co-founder, education and employment — then searches for each founder's public LinkedIn profile and attaches it with a 0-100 match confidence score. No contact details are collected, and no message or match request is ever sent.","url": "https://apify.com/techforce.global/y-combinator-founder-scraper","offers": {"@type": "Offer","priceCurrency": "USD","category": "Pay per platform usage","description": "Billed for the compute time and resources a run consumes. Current rates are shown on the Actor's Apify Store page.","url": "https://apify.com/techforce.global/y-combinator-founder-scraper"}}
What this Actor does
- Signs in to Startup School as you and walks the co-founder-matching queue your account is shown, extracting one structured record per founder.
- Pulls nine fields per founder — name, YC profile URL, location, intro, what they're looking for in a co-founder, education, employment, plus the enriched LinkedIn URL and its score.
- Searches for each founder's LinkedIn profile by name, refined with their city, and ranks the candidates rather than taking the first hit.
- Tells you how confident the match is.
match_confidenceis a score out of 100 derived from how well the name, location, education and employment line up. A low score is a warning, not a result. - Never guesses silently. No credible match means
linkedin_url: "N/A"andmatch_confidence: "0/100"— never a plausible-looking wrong URL. - De-duplicates by name as it walks the queue, so the same founder can't fill two rows.
- Caches your session in your own Apify key-value store so repeat runs skip the login, with
clear_sessionto force a fresh one when it expires.
When to use it — and when not to
| Scenario | Fit |
|---|---|
| Building a directory of the Startup School co-founder pool | ✅ Strong (the core use case) |
| Research on who is looking for a co-founder, and for what | ✅ Strong — looking_for and intro_bio |
| Attaching a LinkedIn profile to a founder you already saw on YC | ✅ Strong — with a confidence score |
| Understanding the education and employment mix of the pool | ✅ Strong |
| Running without a Startup School account | ❌ Impossible — the pool is behind a login |
| Filtering the pool by skills, stage or location | ❌ You get the queue YC shows your account, in its order |
| More than 20 profiles per run | ⚠️ Hard cap of 20 |
| Founder emails or phone numbers | ❌ Never returned |
| Full LinkedIn profile data | ❌ Only the URL is attached |
| Messaging, connecting or sending a match request | ❌ Not supported — read-only |
| A guaranteed LinkedIn URL for every founder | ⚠️ Many have none indexed; expect "N/A" rows |
| Cold outreach to the founders | ⚠️ Possible, and a poor idea — see Compliance |
⚡ Execution Rules (Avoid Common Agent Failures)
yc_emailandyc_passwordare both required, and they are your credentials. There is no cookie-free mode. An agent must never supply credentials it wasn't explicitly given for this purpose.yc_passwordis a secret input. It is stored encrypted by Apify and used only to sign in. It never appears in the dataset or the run log.limitis 1–20, default 5. The code falls back to 2 if the key is missing entirely, so pass it explicitly from API and MCP calls rather than relying on a default.- You can finish below
limit. The Actor tries at mostlimit× 3 profiles; a queue with duplicates or unreadable profiles stops early. That is a successful run, not a failure. - You do not control which founders you get. Startup School decides the queue and its order based on your own account's region and access. There is no search, filter or sort input.
linkedin_urlis inferred, not verified. It is the best-ranked public search result for that name. Always readmatch_confidencebefore acting on it.match_confidenceis a string, not a number —"87.5/100". Parse it before comparing.- A missing match is explicit.
linkedin_url: "N/A"withmatch_confidence: "0/100". The keys are always present, so test the value, not the key. - The session is cached in your key-value store and reused across runs. If login starts
failing, set
clear_session: trueonce to discard it. - There is no proxy input. The Actor uses the container's connection for both Startup School and the LinkedIn search.
- No contact details, at any setting. No emails, no phone numbers, and no LinkedIn profile content beyond the URL.
- Read-only. The Actor never sends a match request, message or connection.
dependencies:- rule: "yc_email and yc_password are required"on_violation: "the run cannot reach the co-founder pool at all"- rule: "limit is 1-20; the Actor attempts at most limit x 3 profiles"note: "finishing below the limit is normal, not an error"- rule: "linkedin_url is the top-ranked search result, not a verified identity"on_violation: "treating a low-confidence match as the right person"- rule: "match_confidence is the string NN.N/100"on_violation: "numeric comparison fails silently"- rule: "no match yields linkedin_url N/A and match_confidence 0/100"note: "keys are always present; test the value"authentication:actor_input: "your own Startup School email and password (password is a secret input, REQUIRED)"platform: "Apify API token required for API / SDK / MCP invocation"target_site: "an active Y Combinator Startup School account"
📥 Input Contract
.actor/input_schema.json is authoritative — if any table on this page disagrees with the schema
files, the schema files win.
| Field | Type | Required | Default | Notes |
|---|---|---|---|---|
yc_email | string | ✅ Yes | — | Your Startup School account email |
yc_password | string (secret) | ✅ Yes | — | Your Startup School password. Encrypted by Apify; never logged or stored in the dataset |
limit | integer | ⬜ No | 5 | Profiles to collect, 1–20. The Actor attempts up to limit × 3 |
clear_session | boolean | ⬜ No | false | Discard the cached session and log in fresh |
The schema sets additionalProperties: false, so an unexpected key is rejected rather than
ignored.
Examples
A first run — confirm the login works before scaling:
{"yc_email": "you@example.com","yc_password": "<your-password>","limit": 3}
A full run:
{"yc_email": "you@example.com","yc_password": "<your-password>","limit": 20}
Recovering from an expired session:
{"yc_email": "you@example.com","yc_password": "<your-password>","limit": 10,"clear_session": true}
📤 Output Contract & Data Structure
Storage: Apify Dataset — one JSON object per founder, pushed as each profile completes.
Duplicates: de-duplicated by name within a run. Across runs, dedupe on yc_url.
| Field | Type | Meaning |
|---|---|---|
name | string | Founder's name as shown on their Startup School profile |
yc_url | string | Their co-founder-matching profile URL — the stable key |
linkedin_url | string | Best-ranked public LinkedIn profile, or "N/A" |
match_confidence | string | "NN.N/100" — how well the LinkedIn hit matched. "0/100" when none |
location | string | Location as stated on the profile |
intro_bio | string | Their self-written intro |
looking_for | string | What they want in a co-founder |
education | string | Education as stated on the profile |
employment | string | Employment as stated on the profile |
No emails, no phone numbers, no LinkedIn profile content beyond the URL itself.
Example output item
{"name": "Jordan Alvarez","yc_url": "https://www.startupschool.org/cofounder-matching/candidate/<id>","linkedin_url": "https://www.linkedin.com/in/jordan-alvarez-1a2b3c","match_confidence": "86.0/100","location": "San Francisco, CA","intro_bio": "Backend engineer, eight years on payments infrastructure. Left fintech to build in climate.","looking_for": "A technical co-founder with ML depth who wants to own the model side end to end.","education": "Stanford University, Computer Science","employment": "Stripe, Senior Software Engineer"}
Reading match_confidence properly
def score(row):"""match_confidence is the string 'NN.N/100' - parse before comparing."""raw = (row.get("match_confidence") or "0/100").split("/")[0]try:return float(raw)except ValueError:return 0.0confident = [r for r in items if score(r) >= 70]unmatched = [r for r in items if r["linkedin_url"] == "N/A"]print(f"{len(confident)} strong matches, {len(unmatched)} with no LinkedIn found")
What a successful run looks like
{ "status": "SUCCEEDED", "defaultDatasetId": "<datasetId>", "stats": { "itemCount": 8 } }
itemCount below limit is normal — the Actor stops after limit × 3 attempts, and duplicate
or unreadable profiles consume attempts without producing rows. itemCount: 0 usually means the
login failed; check the run log first.
▶️ Invocation & Integration
Apify Console
Open the Actor → Input tab → enter your Startup School email and password → set Number of profiles → Start → export from the Dataset tab (JSON, CSV, Excel, XML).
Model Context Protocol (MCP)
claude mcp add --transport http apify \"https://mcp.apify.com?tools=techforce.global/y-combinator-founder-scraper"
Python (apify-client)
import osfrom apify_client import ApifyClientclient = ApifyClient(os.getenv("APIFY_TOKEN"))run = client.actor("techforce.global/y-combinator-founder-scraper").call(run_input={"yc_email": os.environ["YC_EMAIL"],"yc_password": os.environ["YC_PASSWORD"], # keep it out of source control"limit": 10,})items = client.dataset(run["defaultDatasetId"]).list_items().itemsprint(f"{len(items)} founders")for f in items:conf = f["match_confidence"]link = f["linkedin_url"] if f["linkedin_url"] != "N/A" else "(no match)"print(f'{f["name"]:<24} {conf:>10} {link}')
JavaScript / TypeScript (apify-client)
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('techforce.global/y-combinator-founder-scraper').call({yc_email: process.env.YC_EMAIL,yc_password: process.env.YC_PASSWORD,limit: 10,});const { items } = await client.dataset(run.defaultDatasetId).listItems();// match_confidence is a string like "86.0/100" - parse before comparing.const strong = items.filter((i) => parseFloat(String(i.match_confidence).split('/')[0]) >= 70);console.log(`${items.length} founders, ${strong.length} with a confident LinkedIn match`);
cURL — asynchronous with a spend cap (recommended)
# 1. Start execution with a hard spend limitcurl -X POST -H 'Content-Type: application/json' \-H 'Authorization: Bearer <YOUR_APIFY_TOKEN>' \-d '{"yc_email":"you@example.com","yc_password":"<your-password>","limit":20}' \'https://api.apify.com/v2/acts/techforce.global~y-combinator-founder-scraper/runs?maxTotalChargeUsd=0.50'# 2. Pollcurl -H 'Authorization: Bearer <YOUR_APIFY_TOKEN>' \'https://api.apify.com/v2/actor-runs/<runId>'# 3. Retrieve when SUCCEEDEDcurl -H 'Authorization: Bearer <YOUR_APIFY_TOKEN>' \'https://api.apify.com/v2/datasets/<DATASET_ID>/items?clean=true&format=json'
⚠️ Autonomous Agent Error Handling & Resolution Matrix
| Error Code | Detection Condition | Underlying Cause | Deterministic Agent Action |
|---|---|---|---|
AUTH_INVALID | HTTP 401 from Apify | Missing or malformed APIFY_TOKEN | Abort & Prompt User: request a valid Apify token. |
RATE_LIMITED | HTTP 429 from Apify | Apify API rate / concurrency limits | Retry: exponential backoff (2s, 4s, 8s). |
MISSING_CREDENTIALS | Input validation rejection | yc_email or yc_password absent | Abort & Prompt User. Never substitute credentials the user did not provide for this purpose. |
YC_LOGIN_FAILED | itemCount: 0, login errors in the log | Wrong password, changed password, or a challenge on the account | Prompt User: verify the credentials, then retry once with clear_session: true. |
SESSION_EXPIRED | Worked before, now returns nothing | The cached session state is stale | Modify Input: clear_session: true for one run. |
FEWER_THAN_LIMIT | itemCount below limit | The Actor stops after limit × 3 attempts; duplicates and unreadable profiles consume attempts | Not an error. Re-run later for more of the queue. |
NO_LINKEDIN_MATCH | linkedin_url: "N/A", match_confidence: "0/100" | No credible public profile was found for that name | Not an error. Expected for founders with no indexed profile. |
LOW_CONFIDENCE_MATCH | match_confidence well below 100 | The name matched but location/education/employment did not corroborate | Verify before treating it as the right person. |
CONFIDENCE_PARSE_FAILED | Numeric comparison on match_confidence fails | It is the string "NN.N/100" | Fix Code: split on / and parse the first part. |
QUEUE_NOT_FILTERABLE | User asks for founders matching criteria | Startup School controls the queue and its order | Fix Expectation: filter the dataset after the run. |
NO_CONTACT_DATA | No email or phone in any row | Never returned | Fix Expectation: this Actor does not do contact enrichment. |
CHARGE_LIMIT | Run aborted before limit reached | maxTotalChargeUsd threshold reached | Prompt User: confirm a higher spend cap. |
Reading run status:
SUCCEEDEDwith an empty dataset almost always means the login did not succeed — check the run log before assuming the queue was empty. Only aFAILEDstatus is a platform-level problem.
🗣️ Natural Language → Actor Mapping
| User says | Intent | Constructed Actor input |
|---|---|---|
| "Pull the YC co-founder profiles I'm being shown" | Directory build | {"yc_email":"…","yc_password":"…","limit":20} |
| "Get me a few to see the shape of the data" | Probe | {"limit":3} plus credentials |
| "Find these founders' LinkedIn profiles" | Enrichment | Built in — read linkedin_url and match_confidence |
| "Only the ones we're confident about" | Quality filter | Run, then filter match_confidence ≥ 70 |
| "Who's looking for a technical co-founder?" | Pool research | Run, then filter looking_for locally |
| "What backgrounds are in the pool?" | Market research | Run, then group on education / employment |
| "Login stopped working" | Session reset | {"clear_session":true} plus credentials |
| "Find founders in Berlin" | Filtered search | ⚠️ No filter input — the queue is YC's; filter location after the run |
| "Get their email addresses" | Contact enrichment | ❌ Out of scope — no contact fields |
| "Pull their full LinkedIn profiles" | Profile export | ❌ Out of scope — only the URL is attached |
| "Message these founders for me" | Outreach | ❌ Out of scope — read-only |
| "Run it without a YC account" | Unauthenticated | ❌ Impossible — the pool is behind a login |
| "Find senior Java developers in Pune" | Role sourcing | ➡️ Route to LinkedIn Candidate Search |
Should NOT route here: anything without a Startup School account · filtered or keyword search of the founder pool · emails or phone numbers · full LinkedIn profile exports · messaging, connecting or match requests · recruiting candidates generally (→ LinkedIn Candidate Search) · company-anchored people search (→ Decision Makers).
🧭 Agent Execution & Routing Logic
[Input User Query]│▼1. Is the target the YC Startup School co-founder pool? NO → Route to a LinkedIn Actor│ YES▼2. ── PRECONDITION ── Did the user explicitly provide THEIR OWN Startup Schoolcredentials for this purpose?│ NO → STOP and ask. Never reuse or infer credentials.│ YES → set yc_email + yc_password (password is a secret input)▼3. Do they want to filter the pool by criteria? YES → Explain: the queue is YC's.│ Scrape, then filter the dataset.▼4. Set limit EXPLICITLY (1-20; the Actor attempts up to limit x 3)▼5. Login previously failed? YES → clear_session: true for one run▼[Execute]│├──► SUCCEEDED, itemCount 0 → almost certainly a login failure; read the log├──► SUCCEEDED, itemCount < limit → normal; attempts are bounded at limit x 3└──► SUCCEEDED, rows returned →parse match_confidence ("NN.N/100") before comparingtreat linkedin_url "N/A" as "none found", not an errordedupe across runs on yc_urlexpect NO contact fields
💰 Cost Control & Pricing Transparency
This Actor bills for platform usage — the compute time and resources a run consumes — not per row. Current rates are on the Actor's Apify page, and the Console shows the live total while a run is in progress.
| Choice | Effect on cost |
|---|---|
limit | The main driver. Each founder costs a profile read plus a LinkedIn search. |
| Attempts | The Actor may try up to limit × 3 profiles, so a duplicate-heavy queue costs more per row returned. |
| Login | A cached session skips the login entirely; clear_session: true pays for it again. |
| LinkedIn search | One search per founder, in a real browser — the larger half of the per-row cost. |
Keeping runs predictable:
- First run:
limit: 3. Confirms the login works and shows you the field shape cheaply. - Leave
clear_sessionoff unless login is actually failing — the cached session is free speed. - Always set
maxTotalChargeUsdon unattended and scheduled runs.
ℹ️ Always confirm the live rate on the Actor's Apify Store page before committing to a large run. The Store listing is what bills you.
🔍 Companion machine-readable files
| File | Purpose |
|---|---|
.actor/actor.json | Identity, version, and the inline dataset view definition |
.actor/input_schema.json | Authoritative typed input contract — credentials, limit (1–20), clear_session |
.actor/output_schema.json | Declares where results are stored |
src/main.py | Startup School login and session caching, profile extraction, LinkedIn search and match scoring |
If any table on this page disagrees with the schema files, the schema files win.
🛠️ Troubleshooting
| # | Symptom you see | Most likely cause | Fix |
|---|---|---|---|
| 1 | Input rejected | yc_email and yc_password are both required, and unknown keys are rejected (additionalProperties: false) | Send both, and only the documented fields. |
| 2 | SUCCEEDED with an empty dataset | The login did not succeed | Check the run log first. Verify the credentials, then retry once with clear_session: true. |
| 3 | It worked yesterday, nothing today | The cached session expired | One run with clear_session: true re-establishes it. |
| 4 | Fewer rows than limit | The Actor stops after limit × 3 attempts; duplicates and unreadable profiles consume attempts | Expected. Re-run later to see more of the queue. |
| 5 | linkedin_url is "N/A" on several rows | No credible public profile was found for those names | Expected — many founders have no indexed profile. match_confidence is "0/100" on those rows. |
| 6 | A LinkedIn URL is clearly the wrong person | The match is the top-ranked search result, not a verified identity | Read match_confidence. Treat anything low as unconfirmed and check manually. |
| 7 | Numeric comparison on match_confidence never matches | It is the string "NN.N/100" | Split on / and parse the first part. |
| 8 | You can't get founders matching your criteria | There is no search, filter or sort input — the queue is Startup School's | Scrape, then filter the dataset on location, looking_for or employment. |
| 9 | Different founders on every run | The matching queue changes, and is specific to your account's region and access | Expected. Dedupe across runs on yc_url. |
| 10 | No emails anywhere | Contact details are never collected | Not a defect. This Actor does no contact enrichment. |
| 11 | Run is slow for few rows | Each founder costs a profile read plus a browser-driven LinkedIn search | Expected; cost tracks work done, not rows returned. |
Diagnostic checklist before opening an issue
- Read the run log first. A login failure is by far the most common cause of an empty run, and the log says so.
- Try
clear_session: trueonce. A stale cached session produces exactly the same symptom as bad credentials. - Confirm you can sign in to Startup School manually in a normal browser with the same credentials.
- Probe with
limit: 3. If that returns rows, the pipeline works and the issue is scale or the queue. - Check
match_confidencebefore reporting a wrong LinkedIn URL — a low score is the Actor telling you it wasn't sure.
If it survives all five, open an Issues ticket with the run ID and the exact input JSON with the password removed.
❓ FAQ
Setup & access
Do I need a Y Combinator Startup School account?
Yes. Co-founder-matching profiles are only visible to a signed-in member, so there is no cookie-free or unauthenticated mode. No account, no data.
Why does this Actor need my password when your LinkedIn Actors don't?
Because the data lives behind a login. The LinkedIn Actors read a public search engine index, which needs no credentials. Startup School's matching pool is members-only, so the Actor has to sign in as you.
Is my password safe?
It is a secret input, encrypted by Apify, used only to sign in. It never appears in the dataset or the run log. The resulting session is cached in your own Apify key-value store, not in any third-party database.
What does clear_session actually do?
It discards the cached login session so the next run signs in from scratch. Use it when login starts failing; leave it off otherwise, because reusing the session is faster and cheaper.
Can I plug it into Claude, Cursor, or a LangChain agent?
Yes — it is a native MCP tool:
claude mcp add --transport http apify "https://mcp.apify.com?tools=techforce.global/y-combinator-founder-scraper"
Scope & results
Can I search or filter the founder pool?
No. There is no search, filter or sort input. Startup School decides which profiles your account is shown and in what order — scrape, then filter the dataset on location, looking_for or employment.
How many profiles can one run return?
Up to 20. The Actor attempts at most limit × 3 profiles, so a queue with duplicates or unreadable entries can finish below your limit.
Why do I get different founders each run?
Because the matching queue changes over time and is specific to your account's region and access. Dedupe across runs on yc_url.
The LinkedIn match
How is the LinkedIn profile found?
By searching for the founder's name, refined with their city, and ranking the public results against their location, education and employment. The best-ranked candidate is attached.
What does match_confidence mean?
A score out of 100 for how well the LinkedIn hit corroborated the founder's other details. It is the string "NN.N/100" — parse before comparing. Treat a low score as "unconfirmed", not as a result.
What if no LinkedIn profile is found?
linkedin_url is the string "N/A" and match_confidence is "0/100". The Actor deliberately returns nothing rather than a plausible-looking wrong URL.
Is the LinkedIn URL verified?
No. It is an inference from a name search. Always check match_confidence, and verify manually before acting on a match.
Do I get the LinkedIn profile's contents?
No — only the URL. There is no headline, no experience, no skills.
Output & data
What do I get per founder?
Nine fields: name, yc_url, linkedin_url, match_confidence, location, intro bio, what they're looking for, education and employment.
Can I get founder emails or phone numbers?
No, at any setting. This Actor performs no contact enrichment.
What is the stable key for joining runs?
yc_url. Names repeat and the queue reshuffles; the profile URL does not.
Cost
How is this billed?
Per platform usage — the compute time a run consumes, not per row. Current rates are on the Actor's Apify page.
What makes a run expensive?
limit, mostly: each founder costs a profile read plus a browser-driven LinkedIn search. A duplicate-heavy queue costs more per row returned, because attempts are bounded at limit × 3 rather than at rows produced.
How do I guarantee an agent never overspends?
Pass maxTotalChargeUsd as a query parameter on the run endpoint — a hard per-execution ceiling.
🔗 Related Actors
Finding people, without a login
| Actor | Anchored on | Why pick it over this one |
|---|---|---|
| This Actor | The YC Startup School co-founder pool | The only way to read that pool — but it needs your account |
| LinkedIn Candidate Search | A role / tech stack, across employers | Sourcing people by skill with no login at all |
| LinkedIn Decision Makers | One named company | The leadership of a specific company, cookie-free |
| LinkedIn Employee Scraper | One named company | The whole staff roster, with department and seniority |
ℹ️ If you don't have a Startup School account, the three LinkedIn Actors are the ones to reach for — they read a public search index and require no credentials of any kind.
Enrichment & downstream
| Actor | Use it for |
|---|---|
| Advanced Website Crawling Actor | Crawl a founder's project or portfolio site for context |
| Google Maps Business Leads & Sales Intelligence | Sourcing companies rather than individuals |
Suggested pipeline patterns
📇 Founder directory
Run on a schedule with a modest limit → dedupe on yc_url → the directory grows as the queue rotates, without re-reading the same profiles.
🎯 Confident matches only
Run → filter match_confidence ≥ 70 → those rows have a LinkedIn URL worth trusting; the rest need a human look.
📊 Pool composition research
Run over several sessions → group on education and employment → a picture of who is looking for a co-founder, with no individual singled out.
Browse all Actors by Techforce Global at scraper.techforce.global.
🔐 Compliance & Data Privacy
This is an independent Actor. It is not affiliated with, endorsed by, or sponsored by Y Combinator or LinkedIn.
This Actor is different from the others in this catalogue in two ways that matter, and both increase your responsibility.
-
It authenticates as you, so your account bears the exposure. Y Combinator's terms govern what you may do with Startup School and its co-founder-matching pool, including automated access and bulk collection. Running this Actor is an action taken by your account — review those terms and stay within them. Suspension risk, if any, is yours.
-
The output is personal data about individuals in a specific context. Names, locations, self-written bios, education and employment history, and an inferred LinkedIn URL are all personal data under GDPR / UK GDPR and CCPA/CPRA. You become a data controller the moment you store it: have a lawful basis, keep only what you need, set a retention period, and be ready to honour access and erasure requests.
-
Context matters more than usual here. People join co-founder matching to find a co-founder. They did not publish those profiles to receive vendor pitches, recruitment approaches or newsletter signups. Repurposing the pool for unrelated outreach fails the reasonable-expectation test that a legitimate-interest basis depends on, and anti-spam rules (GDPR Art. 6/21, ePrivacy/PECR, CAN-SPAM, CASL) apply on top.
-
linkedin_urlis an inference, not a fact. A wrong match attaches one real person's LinkedIn profile to another real person's founder profile. Inferred personal data is still personal data, and accuracy is an obligation under GDPR Art. 5(1)(d).match_confidenceexists so you can tell the difference — use it, and don't store low-confidence matches as though they were verified. -
Minimise what you keep. For pool research you need
location,educationandemployment— not names or profile URLs. Dropping the identifying fields on ingest removes most of the obligations above at no analytical cost.
You are responsible for ensuring your use complies with Y Combinator's and LinkedIn's terms of service and with all applicable data-protection and marketing law.
🆘 Support & Custom Pipeline Engineering
Need scheduled directory refreshes, contact enrichment on top of the profiles, or a full founder research pipeline?
- Email: bhavin.shah@techforceglobal.com
- Custom Enterprise Integrations: Book a 15-Minute Technical Consultation
- Maintained by: Techforce Global — Specialists in High-Performance Web Scrapers and Agentic Workflows.
Made with ❤️ by Techforce Global Specialists in High-Performance Data Extraction and AI Automation.
🏷️ Structured data for search & AI discovery
SoftwareApplication describes the Actor; FAQPage wraps the FAQ above so those answers are
eligible for rich results, matching it question-for-question.
{"@context": "https://schema.org","@type": "SoftwareApplication","name": "Y Combinator Founder Scraper","alternateName": "Y Combinator Founder Scraper — Startup School Co-Founder Profiles, Enriched with LinkedIn","applicationCategory": "BusinessApplication","applicationSubCategory": "Web Scraping / Founder & Startup Research","operatingSystem": "Cloud (Apify platform)","description": "Reads Y Combinator Startup School co-founder-matching profiles using the caller's own Startup School login and returns nine fields per founder — name, YC profile URL, location, intro, what they are looking for in a co-founder, education and employment — then searches for each founder's public LinkedIn profile and attaches it with a 0-100 match confidence score. No contact details are collected, and no message or match request is ever sent.","url": "https://apify.com/techforce.global/y-combinator-founder-scraper","author": {"@type": "Organization","name": "Techforce Global","url": "https://www.techforceglobal.com"},"provider": {"@type": "Organization","name": "Apify","url": "https://apify.com"},"offers": {"@type": "Offer","priceCurrency": "USD","category": "Pay per platform usage","description": "Billed for the compute time and resources a run consumes. Current rates are shown on the Actor's Apify Store page.","url": "https://apify.com/techforce.global/y-combinator-founder-scraper"},"featureList": ["Reads the Startup School co-founder-matching pool your own account is shown","Nine structured fields per founder, including their self-written intro and co-founder brief","Public LinkedIn profile searched by name and refined with the founder's city","Candidate profiles ranked rather than taking the first search hit","A 0-100 match confidence score on every row, so a guess is distinguishable from a match","No credible match returns N/A rather than a plausible-looking wrong URL","De-duplicated by name within a run; yc_url is the stable key across runs","Login session cached in your own Apify key-value store, with a clear-session switch","Password supplied as an encrypted secret input, never logged or stored in the dataset","Read-only: no messages, connections or match requests are ever sent"],"isAccessibleForFree": false,"softwareRequirements": "Apify account and API token; an active Y Combinator Startup School account","softwareHelp": {"@type": "CreativeWork","url": "https://apify.com/techforce.global/y-combinator-founder-scraper"},"keywords": "Y Combinator scraper, Startup School, co-founder matching, founder directory, startup research, LinkedIn enrichment, founder profiles, venture research, cofounder search"}
{"@context": "https://schema.org","@type": "FAQPage","mainEntity": [{"@type": "Question","name": "Do I need a Y Combinator Startup School account?","acceptedAnswer": {"@type": "Answer","text": "Yes. Co-founder-matching profiles are only visible to a signed-in member, so there is no cookie-free or unauthenticated mode. No account, no data."}},{"@type": "Question","name": "Why does this Actor need my password when your LinkedIn Actors don't?","acceptedAnswer": {"@type": "Answer","text": "Because the data lives behind a login. The LinkedIn Actors read a public search engine index, which needs no credentials. Startup School's matching pool is members-only, so the Actor has to sign in as you."}},{"@type": "Question","name": "Is my password safe?","acceptedAnswer": {"@type": "Answer","text": "It is a secret input, encrypted by Apify, used only to sign in. It never appears in the dataset or the run log. The resulting session is cached in your own Apify key-value store, not in any third-party database."}},{"@type": "Question","name": "What does clear_session actually do?","acceptedAnswer": {"@type": "Answer","text": "It discards the cached login session so the next run signs in from scratch. Use it when login starts failing; leave it off otherwise, because reusing the session is faster and cheaper."}},{"@type": "Question","name": "Can I plug it into Claude, Cursor, or a LangChain agent?","acceptedAnswer": {"@type": "Answer","text": "Yes - it is a native MCP tool:"}},{"@type": "Question","name": "Can I search or filter the founder pool?","acceptedAnswer": {"@type": "Answer","text": "No. There is no search, filter or sort input. Startup School decides which profiles your account is shown and in what order - scrape, then filter the dataset on location, looking_for or employment."}},{"@type": "Question","name": "How many profiles can one run return?","acceptedAnswer": {"@type": "Answer","text": "Up to 20. The Actor attempts at most limit 3 profiles, so a queue with duplicates or unreadable entries can finish below your limit."}},{"@type": "Question","name": "Why do I get different founders each run?","acceptedAnswer": {"@type": "Answer","text": "Because the matching queue changes over time and is specific to your account's region and access. Dedupe across runs on yc_url."}},{"@type": "Question","name": "How is the LinkedIn profile found?","acceptedAnswer": {"@type": "Answer","text": "By searching for the founder's name, refined with their city, and ranking the public results against their location, education and employment. The best-ranked candidate is attached."}},{"@type": "Question","name": "What does match_confidence mean?","acceptedAnswer": {"@type": "Answer","text": "A score out of 100 for how well the LinkedIn hit corroborated the founder's other details. It is the string \"NN.N/100\" - parse before comparing. Treat a low score as \"unconfirmed\", not as a result."}},{"@type": "Question","name": "What if no LinkedIn profile is found?","acceptedAnswer": {"@type": "Answer","text": "linkedin_url is the string \"N/A\" and match_confidence is \"0/100\". The Actor deliberately returns nothing rather than a plausible-looking wrong URL."}},{"@type": "Question","name": "Is the LinkedIn URL verified?","acceptedAnswer": {"@type": "Answer","text": "No. It is an inference from a name search. Always check match_confidence, and verify manually before acting on a match."}},{"@type": "Question","name": "Do I get the LinkedIn profile's contents?","acceptedAnswer": {"@type": "Answer","text": "No - only the URL. There is no headline, no experience, no skills."}},{"@type": "Question","name": "What do I get per founder?","acceptedAnswer": {"@type": "Answer","text": "Nine fields: name, yc_url, linkedin_url, match_confidence, location, intro bio, what they're looking for, education and employment."}},{"@type": "Question","name": "Can I get founder emails or phone numbers?","acceptedAnswer": {"@type": "Answer","text": "No, at any setting. This Actor performs no contact enrichment."}},{"@type": "Question","name": "What is the stable key for joining runs?","acceptedAnswer": {"@type": "Answer","text": "yc_url. Names repeat and the queue reshuffles; the profile URL does not."}},{"@type": "Question","name": "How is this billed?","acceptedAnswer": {"@type": "Answer","text": "Per platform usage - the compute time a run consumes, not per row. Current rates are on the Actor's Apify page."}},{"@type": "Question","name": "What makes a run expensive?","acceptedAnswer": {"@type": "Answer","text": "limit, mostly: each founder costs a profile read plus a browser-driven LinkedIn search. A duplicate-heavy queue costs more per row returned, because attempts are bounded at limit 3 rather than at rows produced."}},{"@type": "Question","name": "How do I guarantee an agent never overspends?","acceptedAnswer": {"@type": "Answer","text": "Pass maxTotalChargeUsd as a query parameter on the run endpoint - a hard per-execution ceiling."}}]}