Handshake Jobs Scraper avatar

Handshake Jobs Scraper

Pricing

from $0.02 / 1,000 job results

Go to Apify Store
Handshake Jobs Scraper

Handshake Jobs Scraper

Export public Handshake jobs with titles, employers, locations, pay, dates, and descriptions for recruiting research, talent intelligence, and analysis.

Pricing

from $0.02 / 1,000 job results

Rating

0.0

(0)

Developer

Hanna Nosova

Hanna Nosova

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Share

Export anonymous public Handshake job listings from public Handshake search pages and direct job URLs. Build repeatable job-market snapshots for recruiting research, talent intelligence, and vacancy analysis without a Handshake login.

What you get

This Handshake jobs scraper exports one row for each unique anonymous public job posting. Capture canonical job identity, employer, location, classification, published compensation, dates, and descriptions that Handshake exposes publicly.

Who is it for?

  • Recruiting teams building a reusable public job-market snapshot.
  • Talent-intelligence analysts comparing public roles, locations, and compensation signals.
  • Researchers and operations teams who need structured public job data in a spreadsheet, dashboard, or workflow.

Ready-to-run examples

Open a public example to inspect its input, run it, or reuse it as a task:

Discover a public category in a location

{
"keywords": ["finance"],
"locations": ["Austin, Texas"],
"maxItems": 10,
"includeDescriptions": true
}

The Actor resolves these terms only through Handshake's public sitemap. Unsupported source categories or locations fail clearly instead of silently broadening your search.

Collect known public job pages

{
"jobUrls": [{ "url": "https://app.joinhandshake.com/public/jobs/11369785" }],
"maxItems": 1,
"remoteOnly": false
}

Input settings

InputDescription
keywordsPublic Handshake job-category terms (for example, finance) resolved against the source sitemap.
locationsPublic location terms (for example, Austin, Texas or remote) resolved against the source sitemap.
searchUrlsPublic joinhandshake.com/find-jobs/ pages used to discover public jobs.
jobUrlsIndividual public app.joinhandshake.com/public/jobs/{id} pages.
maxItemsMaximum unique jobs to save, from 1 to 1,000.
includeDescriptionsInclude the published HTML and normalized plain-text description.
remoteOnlySave only jobs explicitly published as remote.
minSalaryOptional minimum published salary; jobs without a comparable published value are excluded.

Output fields

GroupFields
IdentityjobId, jobUrl, title, scrapedAt, sourceSearchUrl
EmployeremployerName, employerWebsite, employerLogoUrl, industry
ClassificationjobType, roleGroups, employmentType, isRemote
Locationcity, state, country
CompensationsalaryMin, salaryMax, salaryCurrency, salaryUnit, paySchedule
DatesdatePosted, validThrough
Description & applicationdescriptionHtml, descriptionText, qualifications, applicationUrl

Example result

{
"jobId": "11369785",
"jobUrl": "https://app.joinhandshake.com/public/jobs/11369785",
"title": "Software Developer (WSCE)-Junior",
"employerName": "AMEWAS",
"isRemote": false,
"scrapedAt": "2026-09-03T12:37:11.608Z"
}

Use cases

  • Compare public job demand across roles or markets.
  • Create periodic snapshots using jobId to identify new or changed listings.
  • Export public job descriptions for recruiting and labor-market research.
  • Feed a dataset into an internal dashboard, spreadsheet, or AI analysis workflow.

API usage

Use the same input object with the Apify API. Replace APIFY_TOKEN with your token.

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('fetch_cat/handshake-jobs-scraper').call({
jobUrls: [{ url: 'https://app.joinhandshake.com/public/jobs/11369785' }],
maxItems: 1,
});
console.log(await client.dataset(run.defaultDatasetId).listItems());
from apify_client import ApifyClient
client = ApifyClient('APIFY_TOKEN')
run = client.actor('fetch_cat/handshake-jobs-scraper').call(run_input={
'jobUrls': [{'url': 'https://app.joinhandshake.com/public/jobs/11369785'}],
'maxItems': 1,
})
print(client.dataset(run['defaultDatasetId']).list_items().items)
curl -X POST "https://api.apify.com/v2/acts/fetch_cat~handshake-jobs-scraper/runs?token=APIFY_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"jobUrls":[{"url":"https://app.joinhandshake.com/public/jobs/11369785"}],"maxItems":1}'

For agent workflows, connect through Apify MCP and provide the same input JSON. You can also schedule runs or export the default dataset as JSON, CSV, Excel, XML, RSS, or HTML.

Pricing

Each run has a one-time start fee plus a charge for every unique public job saved to the default dataset. Review the current result rate and tier discounts on the Actor Pricing tab before a run starts.

Limits and responsible use

This Actor supports only anonymous public Handshake pages. It does not access accounts, institution-personalized results, applications, student data, employer administration pages, or private data. A null field means the public job page did not publish that value; the Actor never guesses it.

FAQ

Do I need a Handshake account? No. This Actor only uses anonymous public job pages.

Why did I get fewer results than maxItems? A source page may expose fewer public job links, or filters such as remoteOnly and minSalary can exclude jobs. Keyword/location discovery only supports categories and locations published in Handshake's current sitemap.

Can I use it with the API or MCP? Yes. Use the same input object through the Apify API, schedules, or the Actor's MCP tool.

What can I export from a public Handshake job page? When published, rows can include job identity, title, employer, location, employment type, compensation, dates, and descriptions. Missing public values remain null.

Does it include applications or student data? No. Those scopes are excluded from this public-data Actor.

Troubleshooting

No rows were returned. Confirm that each submitted URL is a public Handshake search page or a public job page. A public page can contain no currently available listings, and filters can remove otherwise available jobs.

A value is blank. Handshake does not publish every field on every job. Blank values are retained as null rather than guessed, including compensation, dates, qualifications, and application links.

I received fewer rows than requested. maxItems is a ceiling, not a promise that a source page contains that many public jobs. Use several public search URLs when you want to cover distinct public job collections.

Support

For help, open an issue from this Actor's Apify page and include: the public Handshake URL submitted; the input JSON with any sensitive values removed; the run ID; when the run occurred (including timezone); the expected and actual result counts; and one affected public job URL or job ID where available. Do not send account credentials, cookies, student data, application details, or other private information.