Resume Scraper & Candidate Sourcing - Hacker News avatar

Resume Scraper & Candidate Sourcing - Hacker News

Pricing

Pay per event

Go to Apify Store
Resume Scraper & Candidate Sourcing - Hacker News

Resume Scraper & Candidate Sourcing - Hacker News

Resume scraper and candidate sourcing for recruiting teams: parses the monthly Hacker News Who wants to be hired thread into developer profiles with email, resume URL, GitHub, tech stack, seniority and remote preference. Candidates actively looking. Export CSV, JSON or API.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Andres Garcia-Baquero Leon

Andres Garcia-Baquero Leon

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

14 days ago

Last modified

Share

Hacker News Who Wants to Be Hired Scraper - Candidates

Get a sourcing-ready dataset of software engineers who publicly said they want a new job this month. This Actor turns the monthly "Ask HN: Who wants to be hired?" thread into structured candidate profiles with location, tech stack, remote and relocation preferences, resume link, GitHub, LinkedIn and a contact email.

You do not get a pile of HTML comments. You get rows you can filter, score and push straight into your ATS, CRM or sourcing spreadsheet.

Job scrapers vs this Actor

Everyone scrapes the "Who is hiring?" side. That is the demand side, and it is crowded. This Actor covers the supply side: the candidates themselves.

A job scraper gives youThis Actor gives you
Open roles and company job adsReal people actively looking for work
Companies you then have to pitchCandidates who asked to be contacted
Recruiter competition on every postingUncontested talent most sourcers never touch
Company name, title, descriptionLocation, stack, seniority, email, resume, GitHub, LinkedIn
Leads you must qualify for intentStated intent to be hired, in their own words
Something you sell intoSomething you place, which is the billable side

Example output

{
"location": "Geneva, Switzerland",
"remote": true,
"willingToRelocate": true,
"technologies": ["C++", "Python", "CUDA", "Go", "PyTorch", "LLM inference", "RAG", "Docker"],
"seniority": "unspecified",
"yearsExperience": null,
"email": "mail@elashri.com",
"resumeUrl": "https://melashri.net/pdf/CV.pdf",
"githubUrl": null,
"linkedinUrl": null,
"contactScore": 5,
"hasContact": true,
"hnUrl": "https://news.ycombinator.com/item?id=49183126",
"hnUser": "elashri",
"threadTitle": "Ask HN: Who wants to be hired? (August 2026)"
}

Flattened into a table, the same record looks like this:

hnUserlocationremotewillingToRelocatesenioritytechnologiesemailresumeUrlcontactScore
elashriGeneva, SwitzerlandtruetrueunspecifiedC++, Python, CUDA, Go, PyTorch, LLM inference, RAG, Dockermail@elashri.comhttps://melashri.net/pdf/CV.pdf5

Output fields

FieldTypeDescription
locationstringStated location (city, country, timezone)
remoteboolean / nullParsed from the Remote: line
willingToRelocateboolean / nullParsed from the Willing to relocate: line
technologiesarrayClean array of technologies, for example ["Rust", "Kubernetes", "Postgres"]
senioritystringprincipal, senior, mid, junior, or unspecified
yearsExperienceinteger / nullYears of experience when stated
emailstring / nullContact email, including de-obfuscated name at domain dot com forms
resumeUrlstring / nullResume or CV link, full URL, un-truncated
githubUrlstring / nullGitHub profile
linkedinUrlstring / nullLinkedIn profile
otherLinksarrayPersonal site, portfolio, blog and similar links
contactScoreinteger0-7 how actionable the lead is (email=3, resume=2, GitHub=1, LinkedIn=1)
hasContactbooleanWhether any contact channel was found
hnUrlstringDirect link to the HN comment
hnUserstringHN username
postedAtintegerUnix timestamp
threadTitlestringFor example Ask HN: Who wants to be hired? (August 2026)
textstringFull plain-text profile

How to use it

  1. Click Try for free on the Actor page in Apify Store.
  2. Leave the input empty. Running with empty input {} works out of the box: it parses the latest "Who wants to be hired?" thread with no filters. Add filters only when you want a narrower list.
  3. Click Start and watch candidates stream into the dataset while the run is still going.
  4. Export the results as CSV, JSON, Excel, XML or HTML, pull them through the Apify API, or fire a webhook into your own system.

Input

{
"threadType": "wants_to_be_hired",
"month": "latest",
"remoteOnly": true,
"mustHaveEmail": true,
"requiredTech": ["rust", "kubernetes"],
"maxResults": 500
}
FieldTypeDefaultDescription
threadTypestringwants_to_be_hiredwants_to_be_hired (job seekers) or freelancer (Freelancer? Seeking freelancer? thread)
monthstringlatestlatest or a specific month like July 2026
threadIdstring-Override: parse a specific HN story item ID
remoteOnlybooleanfalseOnly candidates open to remote work
willingToRelocateOnlybooleanfalseOnly candidates willing to relocate
mustHaveEmailbooleanfalseOnly candidates with a detected email
requiredTecharray[]Match ANY of these technologies
keywordsarray[]Match ANY keyword anywhere in the profile
maxResultsinteger500Max profiles to return (1-1000)

Example 1: remote senior Rust candidates

{
"threadType": "wants_to_be_hired",
"month": "latest",
"remoteOnly": true,
"requiredTech": ["rust"],
"keywords": ["senior"],
"maxResults": 200
}

Example 2: only candidates with a resume and an email

{
"threadType": "wants_to_be_hired",
"month": "July 2026",
"mustHaveEmail": true,
"keywords": ["resume", "cv"],
"maxResults": 500
}

Then sort the dataset by contactScore and work the top of the list first.

Use cases

  • Technical recruiters - build a monthly shortlist of inbound, remote-ready engineers before your competitors read the thread.
  • Recruiting and staffing agencies - refill the bench every month with candidates who have stated hiring intent.
  • Talent pipelines - accumulate months of profiles into one searchable pool segmented by stack, seniority and location.
  • Headhunting - filter for principal and senior seniority plus a specific stack, and go direct with an email or resume in hand.
  • Talent market and salary research - track which stacks, locations and remote preferences dominate month over month.
  • ATS and CRM enrichment - match parsed GitHub, LinkedIn and resume URLs onto records you already hold.
  • Freelance vendor discovery - switch threadType to freelancer to source contractors instead of full-time hires.

Integrations

Connect the output to whatever you already run:

  • Zapier, Make and n8n for no-code automations.
  • Slack to drop new matching candidates into a sourcing channel.
  • Google Sheets and Airtable for shared shortlists.
  • Airbyte to load candidates into your warehouse.
  • LangChain and the Apify integrations for AI screening and ranking.
  • REST API and webhooks to trigger runs and receive results in your own stack.

Set a monthly schedule in Apify so the Actor fires shortly after each new thread goes up, and every month's candidates land in your pipeline without anyone remembering to press a button.

Field coverage

Measured on the live August 2026 thread (54 parsed profiles from the first 60 comments):

FieldCoverage
location98%
technologies92%
remote85%
willingToRelocate79%
resumeUrl79%
email70%
hasContact (any channel)94%

Coverage depends on what each candidate chose to include in their post.

Pricing

Pay per result - you only pay for candidate profiles actually returned.

EventPrice
Candidate profile$0.02
Actor start$0.00005

A full month's thread (~400 candidates) costs about $8 - cheaper than a single sourcing-tool seat, for leads with stated intent to be hired. Use maxResults and the filters to control spend.

Reliability

  • 100% official APIs (Hacker News Firebase API + Algolia HN Search for thread discovery) - no HTML scraping, no proxies, no login, no anti-bot risk.
  • Retries with exponential backoff on rate limits and 5xx responses.
  • Incremental pushing - a late failure still leaves you the results already parsed.
  • A single malformed comment can never fail the run.

FAQ

Do I need a Hacker News account or API key? No. There is no login, no cookie and no proxy configuration. The Actor reads the official public Hacker News Firebase API and uses Algolia HN Search to find the right monthly thread.

Is this legal? The data is public. Candidates post these profiles themselves, in a thread whose explicit purpose is to be contacted by employers. Use them for genuine recruiting outreach, honour opt-outs, and comply with GDPR, CAN-SPAM and applicable local law. Do not use this dataset for bulk unsolicited marketing unrelated to hiring.

How fresh is the data? The "Ask HN: Who wants to be hired?" thread is posted once a month. With month: "latest" the Actor always targets the current thread, and candidates keep posting to it throughout the month, so re-running gives you newly added profiles.

Why are some fields empty or null? Because the candidate did not include them. Nothing is guessed or filled in. If someone omits their email or does not write a Remote: line, those fields come back null. See the field coverage table above for what to expect.

Can I get past months? Yes. Set month to a specific month like "July 2026", or pass a threadId to parse a specific HN story item ID directly. Run it once per month to backfill a full pipeline.

Will it break? It runs entirely on official Hacker News APIs rather than HTML scraping, so there is no markup to break and no anti-bot system to trip. Rate limits and 5xx responses are retried with exponential backoff, and results are pushed incrementally so a late error never costs you the profiles already parsed.

Can I get freelancers instead of full-time job seekers? Yes. Set threadType to freelancer to parse the "Freelancer? Seeking freelancer?" thread instead.

Troubleshooting

ProblemFix
Zero results returnedYour filters are too strict. Remove requiredTech / keywords or turn off remoteOnly and mustHaveEmail, then re-run.
Fewer results than expectedRaise maxResults (max 1000). Early in the month the thread simply has fewer comments.
Wrong month parsedSet month explicitly, for example "July 2026", or pass the exact threadId.
email is null for many rowsThose candidates did not post an email. Filter with mustHaveEmail: true, or use resumeUrl and githubUrl instead.
Technologies look incompleteThe parser only extracts what the candidate wrote. Use the text field for the full raw profile.
Run cost higher than expectedPricing is per candidate profile returned. Lower maxResults and tighten filters.
Run slower than expected on big threadsLarge threads mean more API calls. Results are pushed incrementally, so you can start reading the dataset before the run finishes.
Need results in another systemExport to CSV, JSON, Excel, XML or HTML, or wire up a webhook or the REST API integration.

Responsible use

These profiles are published voluntarily and publicly by the candidates themselves in a thread whose explicit purpose is to be contacted by employers. Even so, they contain personal data. Use them for genuine recruiting outreach, honour opt-outs, and comply with GDPR, CAN-SPAM and any applicable local law.

Store categories: JOBS, LEAD_GENERATION, DEVELOPER_TOOLS