Handshake Jobs Scraper avatar

Handshake Jobs Scraper

Pricing

from $1.00 / 1,000 results

Go to Apify Store
Handshake Jobs Scraper

Handshake Jobs Scraper

Scrape public Handshake jobs and internships: employer, salary range, location, dates, role taxonomy and the full description. Search by city and role, or paste any listing or job URL. Every row carries the employer's own careers domain. No login and no student account needed.

Pricing

from $1.00 / 1,000 results

Rating

0.0

(0)

Developer

Muhamed Didovic

Muhamed Didovic

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

7 days ago

Last modified

Share

Scrape public job and internship postings from Handshake — the platform US colleges run their campus recruiting on. Search by city and role, or paste a listing or job URL. No login, no cookies, no student account.

Every posting comes back with the employer, salary range, location, dates, classification and the full job description — plus the employer's own careers URL, which most Handshake scrapers throw away.

How Handshake Jobs Scraper works

Why use this scraper

  • No account needed. This reads Handshake's public find-jobs pages and public job pages. It never touches a student login, a university SSO, or private student data.
  • The employer's real website, on every row. Handshake publishes each employer's own careers URL inside the posting. That gives you employerWebsite and employerDomain for free, and makes the optional email enrichment accurate instead of a domain guess.
  • Multi-location postings kept intact. A campus posting listed in Tampa, Dallas and Jersey City returns all three in allLocations, not just the first.
  • Salary that is actually there. Handshake employers fill in structured pay far more often than general job boards do — roughly 95% of rows in testing carried salaryMin/salaryMax with a currency and period.
  • Monitoring mode. Run it on a schedule and get only postings you have not seen before, with no charge for the ones that get skipped.
  • Expired postings are reported honestly. Handshake's listing pages are cached, so some ids point at jobs that have closed. Those are counted as expired, not silently dropped and not billed.

Overview

Handshake is where roughly 18 million US students and recent graduates look for entry-level jobs and internships, and where employers post to reach them. The postings this actor reads are the ones Handshake publishes openly for search engines, so no credentials are involved at any point.

Coverage is drawn from Handshake's own public find-jobs grid: 94 US cities, a remote listing, 62 nationwide role categories, and 762 city-plus-role pages. Each of those pages hands back up to 200 job ids in one request.

Supported inputs

InputExampleWhat it does
Citiesaustin-tx, Austin, TXEvery published role in that city
Rolesnursing, Software EngineeringThat role nationwide
Cities + Rolesakron-oh + nursingThe city/role page when Handshake publishes one
RemoteremoteOnly: trueHandshake's remote listing
Listing URLhttps://joinhandshake.com/find-jobs/austin-tx/sales/Scrapes that page directly
Job URLhttps://app.joinhandshake.com/public/jobs/11320393Scrapes that single posting

Cities accept plain text (Austin, TX) or Handshake's slug (austin-tx). Bare city names work when unambiguous, so use portland-or or portland-me rather than Portland.

Use cases

  • Campus recruiting intelligence. See which employers are hiring new graduates in a city, at what salary, in which role categories.
  • Entry-level salary benchmarking. salaryMin, salaryMax, salaryCurrency and salaryPeriod across a whole role or metro.
  • Recruiting-agency lead lists. Every row carries the employer's own domain, so an employer hiring 12 nurses in Akron is a qualified prospect with a website you can act on.
  • Job-board aggregation. Pull Handshake's early-career supply into your own board or newsletter.
  • New-posting alerts. Monitoring mode plus Apify's scheduler gives a "posted since last run" feed.
  • Labour-market research. Role-group taxonomy, industry, employment type and posting dates for early-career hiring.

How it works

  1. Your cities and roles resolve to Handshake find-jobs listing URLs. Handshake only publishes some city/role pairs, so a pair it does not publish widens to that city's unfiltered listing instead of returning nothing.
  2. Each listing page is fetched once. The job ids live in the page's embedded Next.js payload, up to 200 per page, not in the visible 15 cards. These pages do not paginate, so breadth comes from adding cities and roles rather than walking page numbers.
  3. Every job id is fetched in parallel from its public job page and parsed from the JobPosting structured data block.
  4. The 15 server-rendered cards carry three things the structured data does not — role groups, the remote flag and pay schedule — so those get merged in where available.
  5. Optionally, each employer's own careers site is read for a contact email.

Input configuration

FieldTypeDefaultDescription
locationsarray["new-york-ny"]Cities to search, as slugs or plain text
rolesarray[]Role categories; empty means every role in the chosen cities
remoteOnlybooleanfalseAdd Handshake's remote listing
startUrlsarray[]Listing or job URLs; replaces the city/role search when set
enrichEmailsbooleanfalseLook up a contact email on the employer's own site
qualifyByPaymentbooleanfalseFlag employers that take payments online; needs enrichEmails
monitoringModebooleanfalseReturn only postings not seen on previous runs
resetMonitoringStatebooleanfalseOne-shot: clear the "already seen" record
maxItemsinteger1000Hard cap on jobs collected
maxConcurrencyinteger10Job pages fetched in parallel
proxyobjectdisabledOptional; Handshake's public pages serve fine direct

Example input

{
"locations": ["austin-tx", "new-york-ny"],
"roles": ["sales", "software-engineering"],
"maxItems": 500,
"enrichEmails": false
}

Output overview

One row per job posting. No padding rows, no duplicate rows for the same posting inside a run.

Output sample

{
"jobId": "11320393",
"jobUrl": "https://app.joinhandshake.com/public/jobs/11320393",
"title": "Sales Account Manager",
"employerName": "Ford Audio-Video, LLC",
"employerWebsite": "http://www.fordav.com",
"employerDomain": "fordav.com",
"employerLogoUrl": "https://joinhandshake-production.imgix.net/app/public/assets/institutions/15545/original/hs-emp-logo-data.",
"description": "As a Sales Account Manager, you will:\n\n• Prospect, qualify, and close new business opportunities.\n\n• Present AV solutions to senior executives.",
"descriptionHtml": "<p></p><p class=\"MsoNormal\">As a Sales Account Manager, you will:</p><ul>...",
"employmentType": "FULL_TIME",
"jobType": "Job",
"industry": "Construction",
"roleGroups": [
"Sales Managers",
"Advertising Sales Agents",
"Customer Success Managers and Sales Representatives of Services"
],
"location": "Austin, Texas",
"addressLocality": "Austin",
"addressRegion": "Texas",
"addressCountry": "United States",
"allLocations": [
{ "city": "Austin", "state": "Texas", "country": "United States" }
],
"isRemote": false,
"salaryMin": 82500,
"salaryMax": 440000,
"salaryCurrency": "USD",
"salaryPeriod": "YEAR",
"paySchedule": "Annual Salary",
"datePosted": "2026-08-18T19:35:46Z",
"validThrough": "2027-08-18T19:35:45Z",
"scrapedAt": "2026-08-25T10:10:00.868Z"
}

Key output fields

FieldTypeNotes
jobIdstringHandshake's numeric posting id
jobUrlstringPublic job page
titlestringJob title, with Handshake's | employer | Handshake suffix removed
employerNamestringHiring organisation
employerWebsitestringThe employer's own careers URL, from the posting
employerDomainstringBare domain from that URL
employerLogoUrlstringEmployer logo
descriptionstringFull description as plain text
descriptionHtmlstringFull description with original markup
employmentTypestringFULL_TIME, PART_TIME, INTERN, CONTRACTOR
jobTypestringHandshake's own Job vs Internship split; see the FAQ
industrystringEmployer industry
roleGroupsarrayHandshake role taxonomy; see the FAQ
locationstringPrimary location, City, State
allLocationsarrayEvery site on a multi-location posting
isRemotebooleanSee the FAQ
salaryMin / salaryMaxnumberPay range
salaryCurrencystringUsually USD
salaryPeriodstringYEAR, HOUR, MONTH
paySchedulestringHandshake's own label, e.g. Annual Salary
datePostedstringISO 8601
validThroughstringISO 8601 expiry
contactEmailstringOnly when enrichEmails is on
contactWebsitestringOnly when enrichEmails is on
emailEnrichmentobjectEmails, phones, socials, confidence; only when enrichEmails is on

FAQ

Do I need a Handshake account or student login? No. This reads only the pages Handshake publishes openly for search engines. It never authenticates, and it never touches student profiles or applications.

Why are jobType, roleGroups, isRemote and paySchedule empty on some rows? Handshake renders 15 rich job cards per listing page but hands out up to 200 ids. Those four fields exist only on the 15 cards. Rows built from the other ids carry every other field in full. To maximise how many rows get them, use more city and role combinations with a smaller maxItems each, rather than one page with a large cap.

Why did I get fewer rows than maxItems? Handshake's listing pages are cached and can lag by several days, so some ids point at postings that have since closed. Those return a 404, are counted as expired in the run log, and produce no dataset row and no charge.

Why did my city plus role combination return the whole city instead? Handshake only publishes certain city/role pages. akron-oh/nursing exists, austin-tx/nursing does not. When a pair has no page, the run widens to that city's unfiltered listing and says so in the log.

How many jobs can I get from one city? Up to 200 ids per listing page, and the page reports Handshake's own totalCount so you can see what it is capping. Add role pages for the same city to reach more.

Do I need a proxy? No. Handshake's public pages answer fine over a direct connection. The proxy input is there for high-volume runs or blocked networks.

How accurate is the email enrichment? Handshake hands over the employer's own careers URL, so enrichment reads that exact site rather than guessing a domain from the company name. Hit rate still depends on whether the employer publishes an address at all; large employers usually route through forms instead. You are billed only when an email is returned.

Support

Found a bug or need a field that is missing? Open an issue on the actor's Issues tab and it will be looked at.

Additional services

Need this data on a schedule, pushed into your own database, or combined with other job boards? Custom scraping and data-delivery work is available on request via the Issues tab.

Explore more scrapers

Other job-board scrapers in this collection: Indeed, Dice, ZipRecruiter, Glassdoor, Google Jobs, Greenhouse, Ashby, BambooHR, CharityJob, CWjobs, Bayt, and a combined Greenhouse/Lever/Workday/iCIMS ATS scraper covering 52 applicant tracking systems.

🤖 For AI agents & LLM apps

This actor is a clean data source for agent pipelines. Output is flat JSON with stable field names, one object per posting.

  • Deterministic input. Pass locations and roles as arrays of slugs; no natural-language parsing needed on your side.
  • Stable ids. jobId is Handshake's own posting id, so it is safe as a primary key across runs.
  • Deduplication built in. monitoringMode keeps a per-user record of delivered ids, so an agent polling on a schedule sees each posting exactly once.
  • Both description formats. description is plain text ready for embedding or summarisation; descriptionHtml keeps the markup when you need structure.
  • Cost control. maxItems is a hard cap, and expired postings are never billed.

Call it from the Apify API, the MCP server, or any LangChain / LlamaIndex Apify integration.

⚠️ Disclaimer

This actor collects only publicly accessible job postings that Handshake publishes for search engine indexing. It does not log in, does not bypass authentication, does not access student profiles, applications or any private data, and does not solve CAPTCHAs.

You are responsible for how you use the data, including compliance with Handshake's terms of service, applicable data-protection law (GDPR, CCPA and equivalents), and any restrictions that apply to contact data in your jurisdiction. This actor is not affiliated with, endorsed by, or connected to Handshake or Stryder Corp.

SEO Keywords

handshake scraper, handshake jobs scraper, joinhandshake scraper, handshake job scraper api, scrape handshake jobs, handshake internships scraper, college jobs scraper, campus recruiting data, entry level jobs scraper, new grad jobs scraper, student jobs api, university job board scraper, handshake job listings export, handshake data extraction, early career jobs dataset, internship listings scraper, handshake employer data, graduate jobs scraper usa, handshake salary data, campus hiring intelligence