Handshake Jobs Scraper avatar

Handshake Jobs Scraper

Pricing

from $0.05 / 1,000 job listings

Go to Apify Store
Handshake Jobs Scraper

Handshake Jobs Scraper

Collect anonymous public Handshake jobs by keyword, location, search URL, or job URL. Export employer, classification, compensation, dates, and full descriptions.

Pricing

from $0.05 / 1,000 job listings

Rating

0.0

(0)

Developer

Maxime Dupré

Maxime Dupré

Maintained by Community

Actor stats

0

Bookmarked

7

Total users

4

Monthly active users

4 days ago

Last modified

Share

🔎 Find and export public Handshake jobs

Recruiters, labor-market researchers, and job-data teams can use Handshake Jobs Scraper to collect anonymous public Handshake listings without a Handshake login or API key. Get job identity, employer, classifications, locations, compensation, dates, and full descriptions in structured rows for analysis and recurring workflows.

📦 What data is returned?

Each dataset row represents one unique successful public Handshake job. Missing source values remain null or empty arrays rather than being invented.

Data groupFields
Identityid, url, title
Employeremployer.id, employer.name, employer.url, employer.logoUrl, employer.industry, employer.description
ClassificationroleTypes, employmentTypes, workplace
Locationlocations
Compensationcompensation.minAmount, compensation.maxAmount, compensation.currency, compensation.cadence, compensation.annualizedMinAmount, compensation.annualizedMaxAmount
DatespostedAt, expiresAt, collectedAt
DescriptiondescriptionHtml, descriptionText

🚀 How do I run the Actor?

  1. Add at least one value to keywords, or submit a public Handshake search or job URL in startUrls.
  2. Optionally add locations and job filters.
  3. Choose maxDiscoveryItems to bound search-discovered output.
  4. Run the Actor and open the default dataset.

You can combine keyword discovery, public search URLs, and direct job URLs in one run. Duplicate canonical jobs are returned once across all submitted sources.

🎛️ What input can I use?

FieldWhat it does
keywordsJob titles, skills, or terms used to discover public listings.
locationsCities, regions, countries, or other location terms paired with keyword discovery.
startUrlsPublic Handshake search-result URLs or individual public job URLs.
employersIncludes jobs whose employer name matches one of the supplied values.
employmentTypesIncludes published classifications such as full-time, part-time, internship, or co-op.
workplaceIncludes any workplace status, remote jobs only, or on-site jobs only.
postedWithinDaysIncludes jobs with a published date inside the chosen number of days.
compensationFilterApplies a minimum published amount for one ISO currency and pay cadence.
maxDiscoveryItemsLimits matching jobs returned through keyword, location, and search-URL discovery, up to 10,000. Direct job URLs are bounded by the submitted list.

Example input:

{
"keywords": ["software engineer"],
"locations": ["Austin, Texas"],
"employmentTypes": ["internship"],
"workplace": "any",
"postedWithinDays": 30,
"maxDiscoveryItems": 25
}

🧾 What does the output look like?

{
"id": "9876543",
"url": "https://app.joinhandshake.com/public/jobs/9876543",
"title": "Software Engineer Intern",
"employer": {
"id": null,
"name": "Acme Technologies",
"url": null,
"logoUrl": "https://example.com/acme-logo.png",
"industry": "Computer Software",
"description": null
},
"roleTypes": ["Software Development", "Engineering"],
"employmentTypes": ["internship"],
"locations": ["Austin, Texas, United States"],
"workplace": "on-site",
"compensation": {
"minAmount": 5000,
"maxAmount": 6000,
"currency": "USD",
"cadence": "month",
"annualizedMinAmount": 60000,
"annualizedMaxAmount": 72000
},
"postedAt": "2026-07-01T14:30:00.000Z",
"expiresAt": "2026-08-15T23:59:59.000Z",
"descriptionHtml": "<p>Join our engineering team.</p>",
"descriptionText": "Join our engineering team.",
"collectedAt": "2026-07-18T10:15:30.000Z"
}

💳 How does pricing work?

This Actor uses pay-per-event pricing with account-tier rates. You are charged for each unique successful Handshake job listing saved to the default dataset. Duplicates, filtered candidates, unavailable jobs, malformed jobs, and runs with no saved jobs do not create this job charge.

Use maxDiscoveryItems to bound search-discovered output and cost. Submitted direct job URLs are separate from that discovery limit and remain bounded by the number of URLs you provide.

🔌 Which integrations are available?

Export the dataset as JSON, CSV, Excel, XML, RSS, or HTML. You can also run the Actor through the Apify API, schedule recurring snapshots, trigger webhooks, and connect results to supported Apify integrations.

❓ FAQ

Do I need a Handshake account, institution access, or API key?

No. The Actor collects only anonymous public Handshake listings. It does not access institution-personalized results, saved jobs, applications, applicant data, or private account pages.

Can I submit a Handshake search URL or a single job URL?

Yes. startUrls accepts public Handshake search-result URLs and individual public job URLs. You can combine them with keyword discovery in the same run.

Why did a filter exclude a job with no published value?

Date, workplace, employment-type, and compensation filters require comparable public source data. A listing without the value needed for a selected filter is excluded rather than guessed.

Are duplicate jobs returned or charged twice?

No. The Actor uses canonical Handshake job identity to deduplicate the same job across all sources in a run. Only a unique successful listing saved to the default dataset creates the job charge.

Does maxDiscoveryItems limit direct job URLs?

No. It limits jobs returned from keywords, locations, and public search URLs. Direct job URLs are bounded by the submitted URL list itself.

Can this Actor alert me when a job changes or expires?

The Actor produces repeatable snapshots but does not keep cross-run state or generate change alerts itself. Schedule runs and compare canonical job IDs and fields in your own datastore or workflow.

📝 Changelog

  • 0.1: Initial release.

🆘 Support

For issues, questions, or feature requests, file a ticket and I'll fix or implement it in less than 24h 🫡

Made with ❤️ by Maxime Dupré