Handshake Jobs Scraper
Pricing
from $0.05 / 1,000 job listings
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é
Maintained by CommunityActor stats
0
Bookmarked
127
Total users
29
Monthly active users
6 days ago
Last modified
Categories
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.
- Export Handshake Job Listings found by keyword, location, search URL, or direct job URL.
- Use Handshake Internship Search to find internships and co-ops with keywords and employment-type filters.
- Collect Remote Handshake Jobs listed as remote.
- Analyze Handshake Salary Data with published pay, currency, pay periods, and clear yearly values.
- Use Handshake Employer Hiring Research to focus on selected employer names.
- Compare roles, locations, workplace types, and posting dates with Handshake Job Market Analysis.
- Use Handshake Jobs API to run searches and read the dataset through the Apify API.
📦 Handshake job data you can export
Each dataset row represents one unique successful public Handshake job. Missing source values remain null or empty arrays rather than being invented.
| Data group | Fields |
|---|---|
| Identity | id, title |
| Employer | employer.id, employer.name, employer.url, employer.logoUrl, employer.industry, employer.description, employer.websiteUrl, employer.emails, employer.phones, employer.socialUrls |
| Classification | roleTypes, employmentTypes, workplace |
| Location | locations |
| Compensation | compensation.minAmount, compensation.maxAmount, compensation.currency, compensation.cadence |
| Dates | postedAt, firstActiveAt, expiresAt |
| Description | descriptionHtml |
🚀 How to collect Handshake jobs
- Add keywords or locations, or submit a public Handshake search or job URL in
startUrls. - Optionally add locations and job filters.
- Choose
maxDiscoveryItemsto bound search-discovered output. - 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.
⚙️ Input
| Field | Type | What it does |
|---|---|---|
keywords | array of strings | Job titles, skills, or terms used to discover public listings. |
locations | array of strings | Cities, regions, countries, or other location terms used for discovery, with or without keywords. |
startUrls | array of objects | Public Handshake search-result URLs or individual public job URLs. Search filters in a URL are kept. |
startUrls[].url | string | A public search or job URL. |
employers | array of strings | Includes jobs whose employer name matches one of the supplied values. Leave empty for any employer. |
countries | array of strings | Includes jobs with a matching published country, such as United States. Leave empty for any country. |
employmentTypes | array of strings | Includes published classifications such as full-time, part-time, internship, or co-op. Leave empty for any classification. |
workplace | string | Includes any workplace status, remote jobs only, or on-site jobs only. |
postedWithinDays | integer | Includes jobs with a published date inside the chosen number of days, from 1 to 365. Leave unset for any posting date. |
compensationFilter | object | Applies a minimum published amount for one ISO currency and pay cadence. Jobs without comparable pay are excluded. |
compensationFilter.amount | number | Minimum published amount, at least 0. |
compensationFilter.currency | string | Three-letter ISO 4217 currency code, such as USD. |
compensationFilter.cadence | string | Pay period: hour, month, or year. |
maxDiscoveryItems | integer | Stops after this many matching jobs from keywords, locations, and search URLs. The minimum is 1, with no fixed maximum. Leave empty to return all available matching jobs until the source is exhausted. Duplicates, filtered listings, and unreadable jobs do not count. Direct job URLs are bounded by the submitted list. |
onlyNewJobs | boolean | Returns only jobs not seen in earlier runs of this Actor. Each job must still be readable and valid. On the first run, all matching jobs are new. Defaults to false. |
Example input
This is the public input from a successful default-input run.
{"keywords": ["software engineer"],"locations": [],"startUrls": [],"employers": [],"employmentTypes": [],"workplace": "any","maxDiscoveryItems": 10,"onlyNewJobs": false}
🧾 Output
Each row is one public job. Employer contact fields can be empty when no public values are found.
| Field | Type | What it does |
|---|---|---|
id | string | Stable Handshake job ID used to remove duplicates. |
title | string | Published job title. |
employer | object | Published employer details. |
employer.id | string or null | Handshake employer ID when shown. |
employer.name | string | Published employer name. |
employer.url | string or null | Public Handshake employer profile URL when available. |
employer.logoUrl | string or null | Employer logo URL when shown. |
employer.industry | string or null | Published industry. |
employer.description | string or null | Published employer summary. |
employer.websiteUrl | string or null | Published employer website URL when available. |
employer.emails | array of strings | Public contact emails found on the employer website. Can be empty. |
employer.phones | array of strings | Public employer phone numbers when available. |
employer.socialUrls | array of strings | Published employer social profile URLs when available. |
roleTypes | array of strings | Published role or job-function groups. |
employmentTypes | array of strings | Published employment types, such as internship or full-time. |
locations | array of strings | Published work locations. |
workplace | string or null | remote, hybrid, or on-site when known. |
compensation | object or null | Published pay, or null when no comparable pay is shown. |
compensation.minAmount | number or null | Lower pay amount, or the single published amount. |
compensation.maxAmount | number or null | Upper pay amount when shown. |
compensation.currency | string | ISO 4217 currency code. |
compensation.cadence | string | Pay period: hour, day, week, month, or year. |
postedAt | string or null | Exact posting date and time when available. |
firstActiveAt | string or null | Source date and time when the job first became active, when available. |
expiresAt | string or null | Published application expiry date and time when available. |
descriptionHtml | string | Full source job description in HTML. |
Example job
This complete row comes from a successful run of the current beta build.
{"id": "11578366","title": ".Net Developer","employer": {"id": "529828","name": "Sapot Systems Inc","url": null,"logoUrl": "https://joinhandshake-production.imgix.net/app/public/assets/institutions/529828/original/hs-emp-logo-data.?ixlib=rb-4.1.1&w=150&h=150&fit=crop&v=1583270365&s=b5063d963ddb1d13e2cc93c4ea5c6ade","industry": "Internet & Software","description": "With the today's dynamic business environment and ever changing processes there is a compelling need to partner with a reliable and credible Enterprise Applications service provider and implementor. Sapot Systems has been expanding its operations and has a great team of certified and Dynamic consultants backed by experience from different industries to enable professional Enterprise services.","websiteUrl": "http://www.sapotsystems.com","emails": ["brandon@sapotsystems.com"],"phones": ["18552872768","+1 (855) 287-2768"],"socialUrls": ["https://www.linkedin.com/in/arun-reddy-315700b4","https://www.linkedin.com/in/brandon-staley-b0391535/","https://www.linkedin.com/in/hymasagi","https://www.linkedin.com/in/venkata-pradeep-p-a5b10b41"]},"firstActiveAt": "2026-10-01T18:30:00.000Z","roleTypes": ["Software Developers and Engineers"],"employmentTypes": ["full-time","job"],"locations": ["USA"],"workplace": "remote","compensation": {"minAmount": 30,"maxAmount": 40,"currency": "USD","cadence": "hour"},"postedAt": "2026-10-02T16:26:57.000Z","expiresAt": "2026-10-31T18:30:00.000Z","descriptionHtml": "<p>Title :: .Net Developer<br>Remote role<br>long term contract</p><p>We are looking for a .NET Developer with 4–5 years of experience in developing and maintaining scalable applications using C#, .NET Core, and Web APIs.<br>The candidate should have hands-on experience with MongoDB, including database design, queries, and performance optimization.<br>Strong exposure to AWS services, cloud deployments, and application integration is required.<br>Experience with REST APIs, microservices, Git, CI/CD, and Agile development practices is preferred.<br>The ideal candidate should have strong problem-solving skills and the ability to work independently as well as collaboratively with cross-functional teams.</p>"}
💳 Pricing
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.
🔌 Integrations
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
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, country, 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?
Use onlyNewJobs to collect jobs not seen in earlier runs. The Actor does not generate change or expiry alerts itself. Schedule runs and compare job IDs and fields in your own datastore or workflow to track those changes.
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.
📝 Changelog
v2.0 (06-10-2026)
- Job rows no longer include
url,descriptionText, or yearly pay estimates. UsedescriptionHtmlfor the full job description. - Employer rows now include website, phone, and social links when found. Public email lookup runs without the removed
includeEmployerEmailsoption. - Filter jobs by country with
countries. - Use
onlyNewJobsto skip jobs seen in earlier runs. - Search by location without a keyword.
- Leave
maxDiscoveryItemsunset to collect all matching jobs until sources run out. The limit no longer has a fixed maximum or a default of 10. - Job rows now include
firstActiveAtwhen the search source provides it. - Each saved job gets a progress line with the count so far.
- Failed jobs found within a search no longer cause public warnings. Search warnings name submitted values once instead of generated URLs.
v0.1
- Initial release.
🆘 Support
For issues, questions, or feature requests, file a ticket and I'll fix or implement it in less than 24h 🫡
🔗 Related Actors
- Welcome to the Jungle Jobs Scraper collects public WTTJ jobs across English and French markets.
- Rozee.pk Jobs Scraper helps research public job listings in Pakistan by keyword, city, or URL.
- CutShort Scraper helps analyze public Indian tech and startup roles, skills, and salaries.
- CWjobs Scraper helps monitor public UK technology jobs and salary signals.
- Jobsite Scraper collects broader public UK job listings with search and apply context.
Made with ❤️ by Maxime Dupré