Y Combinator Founder Scraper avatar

Y Combinator Founder Scraper

Pricing

from $0.50 / actor start

Go to Apify Store
Y Combinator Founder Scraper

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

Techforce Global

Maintained by Community

Actor stats

0

Bookmarked

12

Total users

1

Monthly active users

7 days ago

Last modified

Share

Y Combinator Founder Scraper — Startup School Co-Founder Profiles, Enriched with LinkedIn

Apify Actor MCP Ready Output Auth

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 yourselfThis Actor
Profiles per passOne 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, unrecordedmatch_confidence score out of 100 on every row
Repeatability❌ Manual every time✅ Re-runnable, schedulable, session cached
Getting it into your stackManual copy-paste✅ Dataset export, API, or an MCP-capable agent
CredentialsYour 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 own
Startup School login, then finds each founder's public LinkedIn profile via search and
attaches 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 Search
results 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 the
CALLER'S OWN Startup School email and password. Co-founder-matching profiles are only
visible to a signed-in member. An agent must never supply credentials it was not explicitly
given 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: 5
note: "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 duplicates
or 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_confidence
is "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. Always
check 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 Apify
key-value store and reused on later runs. Set clear_session true to discard it and log in
again.
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 the
co-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 need
emails 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_confidence is 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" and match_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_session to force a fresh one when it expires.

When to use it — and when not to

ScenarioFit
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)

  1. yc_email and yc_password are 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.
  2. yc_password is 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.
  3. limit is 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.
  4. You can finish below limit. The Actor tries at most limit × 3 profiles; a queue with duplicates or unreadable profiles stops early. That is a successful run, not a failure.
  5. 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.
  6. linkedin_url is inferred, not verified. It is the best-ranked public search result for that name. Always read match_confidence before acting on it.
  7. match_confidence is a string, not a number"87.5/100". Parse it before comparing.
  8. A missing match is explicit. linkedin_url: "N/A" with match_confidence: "0/100". The keys are always present, so test the value, not the key.
  9. The session is cached in your key-value store and reused across runs. If login starts failing, set clear_session: true once to discard it.
  10. There is no proxy input. The Actor uses the container's connection for both Startup School and the LinkedIn search.
  11. No contact details, at any setting. No emails, no phone numbers, and no LinkedIn profile content beyond the URL.
  12. 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.

FieldTypeRequiredDefaultNotes
yc_emailstringYesYour Startup School account email
yc_passwordstring (secret)YesYour Startup School password. Encrypted by Apify; never logged or stored in the dataset
limitinteger⬜ No5Profiles to collect, 120. The Actor attempts up to limit × 3
clear_sessionboolean⬜ NofalseDiscard 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.

FieldTypeMeaning
namestringFounder's name as shown on their Startup School profile
yc_urlstringTheir co-founder-matching profile URL — the stable key
linkedin_urlstringBest-ranked public LinkedIn profile, or "N/A"
match_confidencestring"NN.N/100" — how well the LinkedIn hit matched. "0/100" when none
locationstringLocation as stated on the profile
intro_biostringTheir self-written intro
looking_forstringWhat they want in a co-founder
educationstringEducation as stated on the profile
employmentstringEmployment 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.0
confident = [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 profilesStart → 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 os
from apify_client import ApifyClient
client = 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().items
print(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`);
# 1. Start execution with a hard spend limit
curl -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. Poll
curl -H 'Authorization: Bearer <YOUR_APIFY_TOKEN>' \
'https://api.apify.com/v2/actor-runs/<runId>'
# 3. Retrieve when SUCCEEDED
curl -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 CodeDetection ConditionUnderlying CauseDeterministic Agent Action
AUTH_INVALIDHTTP 401 from ApifyMissing or malformed APIFY_TOKENAbort & Prompt User: request a valid Apify token.
RATE_LIMITEDHTTP 429 from ApifyApify API rate / concurrency limitsRetry: exponential backoff (2s, 4s, 8s).
MISSING_CREDENTIALSInput validation rejectionyc_email or yc_password absentAbort & Prompt User. Never substitute credentials the user did not provide for this purpose.
YC_LOGIN_FAILEDitemCount: 0, login errors in the logWrong password, changed password, or a challenge on the accountPrompt User: verify the credentials, then retry once with clear_session: true.
SESSION_EXPIREDWorked before, now returns nothingThe cached session state is staleModify Input: clear_session: true for one run.
FEWER_THAN_LIMITitemCount below limitThe Actor stops after limit × 3 attempts; duplicates and unreadable profiles consume attemptsNot an error. Re-run later for more of the queue.
NO_LINKEDIN_MATCHlinkedin_url: "N/A", match_confidence: "0/100"No credible public profile was found for that nameNot an error. Expected for founders with no indexed profile.
LOW_CONFIDENCE_MATCHmatch_confidence well below 100The name matched but location/education/employment did not corroborateVerify before treating it as the right person.
CONFIDENCE_PARSE_FAILEDNumeric comparison on match_confidence failsIt is the string "NN.N/100"Fix Code: split on / and parse the first part.
QUEUE_NOT_FILTERABLEUser asks for founders matching criteriaStartup School controls the queue and its orderFix Expectation: filter the dataset after the run.
NO_CONTACT_DATANo email or phone in any rowNever returnedFix Expectation: this Actor does not do contact enrichment.
CHARGE_LIMITRun aborted before limit reachedmaxTotalChargeUsd threshold reachedPrompt User: confirm a higher spend cap.

Reading run status: SUCCEEDED with an empty dataset almost always means the login did not succeed — check the run log before assuming the queue was empty. Only a FAILED status is a platform-level problem.


🗣️ Natural Language → Actor Mapping

User saysIntentConstructed 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"EnrichmentBuilt in — read linkedin_url and match_confidence
"Only the ones we're confident about"Quality filterRun, then filter match_confidence ≥ 70
"Who's looking for a technical co-founder?"Pool researchRun, then filter looking_for locally
"What backgrounds are in the pool?"Market researchRun, 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 School
credentials 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 comparing
treat linkedin_url "N/A" as "none found", not an error
dedupe across runs on yc_url
expect 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.

ChoiceEffect on cost
limitThe main driver. Each founder costs a profile read plus a LinkedIn search.
AttemptsThe Actor may try up to limit × 3 profiles, so a duplicate-heavy queue costs more per row returned.
LoginA cached session skips the login entirely; clear_session: true pays for it again.
LinkedIn searchOne search per founder, in a real browser — the larger half of the per-row cost.

Keeping runs predictable:

  1. First run: limit: 3. Confirms the login works and shows you the field shape cheaply.
  2. Leave clear_session off unless login is actually failing — the cached session is free speed.
  3. Always set maxTotalChargeUsd on 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

FilePurpose
.actor/actor.jsonIdentity, version, and the inline dataset view definition
.actor/input_schema.jsonAuthoritative typed input contract — credentials, limit (1–20), clear_session
.actor/output_schema.jsonDeclares where results are stored
src/main.pyStartup 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 seeMost likely causeFix
1Input rejectedyc_email and yc_password are both required, and unknown keys are rejected (additionalProperties: false)Send both, and only the documented fields.
2SUCCEEDED with an empty datasetThe login did not succeedCheck the run log first. Verify the credentials, then retry once with clear_session: true.
3It worked yesterday, nothing todayThe cached session expiredOne run with clear_session: true re-establishes it.
4Fewer rows than limitThe Actor stops after limit × 3 attempts; duplicates and unreadable profiles consume attemptsExpected. Re-run later to see more of the queue.
5linkedin_url is "N/A" on several rowsNo credible public profile was found for those namesExpected — many founders have no indexed profile. match_confidence is "0/100" on those rows.
6A LinkedIn URL is clearly the wrong personThe match is the top-ranked search result, not a verified identityRead match_confidence. Treat anything low as unconfirmed and check manually.
7Numeric comparison on match_confidence never matchesIt is the string "NN.N/100"Split on / and parse the first part.
8You can't get founders matching your criteriaThere is no search, filter or sort input — the queue is Startup School'sScrape, then filter the dataset on location, looking_for or employment.
9Different founders on every runThe matching queue changes, and is specific to your account's region and accessExpected. Dedupe across runs on yc_url.
10No emails anywhereContact details are never collectedNot a defect. This Actor does no contact enrichment.
11Run is slow for few rowsEach founder costs a profile read plus a browser-driven LinkedIn searchExpected; cost tracks work done, not rows returned.

Diagnostic checklist before opening an issue

  1. Read the run log first. A login failure is by far the most common cause of an empty run, and the log says so.
  2. Try clear_session: true once. A stale cached session produces exactly the same symptom as bad credentials.
  3. Confirm you can sign in to Startup School manually in a normal browser with the same credentials.
  4. Probe with limit: 3. If that returns rows, the pipeline works and the issue is scale or the queue.
  5. Check match_confidence before 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.


Finding people, without a login

ActorAnchored onWhy pick it over this one
This ActorThe YC Startup School co-founder poolThe only way to read that pool — but it needs your account
LinkedIn Candidate SearchA role / tech stack, across employersSourcing people by skill with no login at all
LinkedIn Decision MakersOne named companyThe leadership of a specific company, cookie-free
LinkedIn Employee ScraperOne named companyThe 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

ActorUse it for
Advanced Website Crawling ActorCrawl a founder's project or portfolio site for context
Google Maps Business Leads & Sales IntelligenceSourcing 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_url is 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_confidence exists 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, education and employment — 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?


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."
}
}
]
}