Handshake Jobs Scraper: Internships, Salaries & Job Deadlines avatar

Handshake Jobs Scraper: Internships, Salaries & Job Deadlines

Pricing

from $0.05 / 1,000 job postings

Go to Apify Store
Handshake Jobs Scraper: Internships, Salaries & Job Deadlines

Handshake Jobs Scraper: Internships, Salaries & Job Deadlines

Scrape public Handshake jobs and internships by keyword, role, city or link. Get salary ranges, application deadlines, employer careers links, industry and full descriptions. Filter by remote, employment type and date, or schedule daily runs for new postings only. No login needed.

Pricing

from $0.05 / 1,000 job postings

Rating

0.0

(0)

Developer

GetAScraper

GetAScraper

Maintained by Community

Actor stats

0

Bookmarked

13

Total users

4

Monthly active users

5 days ago

Last modified

Security

Limited permissions

Share

Get Handshake internships and jobs with salary, real deadlines and the employer's careers link, ready for your spreadsheet in minutes.
Search by keyword, role, city or link, filter by remote, type and date, and schedule a daily feed of new postings. No Handshake account needed.
๐Ÿ’ฐ Salary with schedule
Minimum and maximum pay, per hour or per year, in the listing's own currency.
โณ Real deadlines only
A deadline appears only when the employer set one, not Handshake's default expiry.
๐Ÿ”— Employer careers link
Every row carries the employer's own careers page and industry for outreach and research.
๐Ÿ”” New postings only
Schedule it daily and receive just the postings you have not seen before.

Handshake Jobs Scraper collects public job and internship postings from joinhandshake.com, the campus recruiting platform used by thousands of employers and universities. Search by keyword, role category, city or by pasting Handshake links, then narrow by employer, country, employment type, remote or on site, posting date and pay. Each posting comes back as one clean record with salary, deadline, industry, the employer's careers link and the full description. Run it once for a snapshot or schedule it to keep a live feed flowing into your dataset, spreadsheet or internal tool.

๐ŸŽฏ Why use this Handshake scraper?

  • I am a campus recruiting lead tracking which employers are posting internships on Handshake, so I can compare our roles on salary and application deadlines.
  • I am a university career services coordinator mirroring live internship and new-grad listings onto our own job board, so students find every open role in one place.
  • I am a recruiting agency researcher building a feed of early-career openings with employer careers links, so my team can reach employers before a role closes.
  • I am a market researcher tracking internship and entry-level pay by role, city and employer, so I can publish accurate early-career compensation benchmarks.

๐Ÿš€ How to use Handshake Jobs Scraper

STEP 1
Choose what to collect
Pick internships, jobs or both, then add keywords, roles, cities or Handshake links. Leave everything empty for the newest postings.
STEP 2
Run the Actor
It reads Handshake's public pages and turns each posting into one clean record.
STEP 3
Export your data
Download JSON, CSV or Excel, or connect the dataset to your own dashboard or spreadsheet.
  1. Open the Input tab. Choose internships, jobs or both, and add keywords such as nurse or data analyst boston, role categories, cities, or links to Handshake pages.
  2. Narrow results with employer, country, employment type, workplace, posting date or pay if you need a tighter list.
  3. Click Start. Results stream into the dataset as they are found.
  4. Open the Output tab to browse or download the results in JSON, CSV, Excel, HTML or XML.
  5. For a daily feed, turn on Only new jobs and schedule the Actor. Each run returns only postings you have not received before.

๐Ÿ“ Input

FieldTypeRequiredDescription
startUrlsarray of linksNoPublic Handshake job pages or public find-jobs and internships pages. Job links are always read in full.
jobKindstringNoInternships and jobs, internships only, or jobs only.
keywordsarray of stringsNoWords such as nurse or software engineer. A city in the keyword narrows the search to that city.
rolesarray of stringsNoHandshake role categories such as accounting, nursing or software-engineering. Up to 10.
locationsarray of stringsNoCities such as new-york-ny or Austin, TX, or remote. Up to 10. Combined with roles, the city and role page is used when one exists.
employerNamesarray of stringsNoKeep only jobs whose employer name contains one of these words.
countriesarray of stringsNoKeep only jobs located in these countries.
employmentTypesarrayNoFull time, part time, internship, temporary, contractor or volunteer.
workplaceTypesarrayNoRemote or on site, when the posting states it.
postedWithinDaysintegerNoKeep jobs first posted in the last N days.
datePostedAfter / datePostedBeforedateNoKeep jobs first posted inside this date range.
minCompensation / maxCompensationintegerNoPay range in the posting's own unit, such as per hour or per year. Jobs without published pay are excluded once a limit is set.
maxItemsintegerNoMaximum number of postings to return.
fetchJobDetailsbooleanNoRead each posting in full for description, all employment types, deadline, industry, careers link and exact pay. On by default.
onlyNewJobsbooleanNoReturn only postings not seen in earlier runs with the same search.
deepScanbooleanNoAlso read the newest postings from Handshake's public job index, beyond the 200 behind each page.
scanLimitintegerNoHow many postings a deep scan may open.
proxyConfigurationobjectNoUsed only if direct requests are refused.

๐Ÿ“ค Output

Every run returns one record per posting. Here is a real example, with the description shortened:

{
"id": "11669721",
"title": "Student Diagnostician",
"employerName": "Virginia Tech Department of Entomology - Insect ID Lab",
"employerWebsite": "https://www.ento.vt.edu/idlab.html",
"industry": "Agriculture",
"city": "Blacksburg",
"state": "Virginia",
"country": "United States",
"locationLabel": "Blacksburg, Virginia",
"workplaceType": "on_site",
"employmentType": "PART_TIME",
"employmentTypes": ["PART_TIME", "INTERN"],
"jobType": "Internship",
"roleCategories": ["Zoologists and Wildlife Biologists", "Farm and Home Management Educators"],
"salaryMin": 16,
"salaryMax": 16,
"paySchedule": "HOUR",
"currency": "USD",
"description": "If you are interested in applying to this position, you will need to attend an information session...",
"descriptionHtml": "<p>If you are interested in applying to this position, you will need to attend an information session...</p>",
"datePosted": "2026-10-15T15:39:34Z",
"applicationDeadline": "2026-11-05T04:59:59Z",
"sourceUrl": "https://app.joinhandshake.com/public/jobs/11669721",
"scrapedAt": "2026-10-23T02:22:00.344Z"
}

Fields Handshake does not publish for a posting are left out instead of filled with placeholders. You can download the dataset in JSON, CSV, Excel, HTML or XML from the Output tab.

Data table

FieldTypeDescription
idstringHandshake's job ID.
titlestringJob or internship title.
employerNamestringHiring company or organization.
employerLogoUrlstringEmployer logo, when published.
employerWebsitestringThe employer's own careers page, when published.
industrystringEmployer industry, when published.
city, state, countrystringWhere the role is based.
locationLabelstringPrimary location as shown on Handshake.
locationsarrayEvery location listed for the posting.
workplaceTypestringRemote or on site, when stated.
employmentTypestringPrimary employment type.
employmentTypesarrayEvery employment type listed, such as part time and internship.
jobTypestringWhether the posting is a job or an internship.
roleCategoriesarrayHandshake role categories attached to the posting.
salaryMin, salaryMaxnumberPublished pay range in the posting's own unit.
paySchedulestringHow pay is measured, such as hour or year.
currencystringCurrency of the published pay.
descriptionstringFull job description as plain text.
descriptionHtmlstringFull job description with its original formatting kept, such as bullet lists, bold and links.
datePostedstringWhen the posting went live.
applicationDeadlinestringThe employer's deadline, only when one was set.
sourceUrlstringLink to the posting on Handshake.
scrapedAtstringWhen the record was collected.

Each run also saves a short run summary with the pages visited, postings inspected and anything skipped.

๐Ÿ’ฐ Pricing

Pricing is pay per result and is billed per posting saved to your dataset, plus a very small charge when a run starts. Empty runs cost nothing beyond that start charge, and a spend limit you set on the run is always respected.

There are no monthly subscriptions and no maintenance fees. Larger volume plans on Apify lower the per-posting price further.

โญ Enjoying Handshake Jobs Scraper: Internships, Salaries & Job Deadlines?

โญ โญ โญ โญ โญ
Did this save you hours of copying postings by hand?
A 5-star rating takes 10 seconds and helps other recruiters and researchers find it. Your feedback also guides future improvements.
โ˜…ย ย Rate this Actor on Apify

โ“ FAQ

Do I need a Handshake account, cookies or an API key?

No. The Actor reads only public Handshake pages. There is no login, key or cookie, and no proxy setup is needed.

How many postings can I get per run?

Each public listing page shows up to 200 postings. Add several roles, cities or keywords to cover more ground, or turn on the newest-postings scan to dig further into the public job index. Only postings Handshake shows publicly can be collected.

Why is a deadline missing on some postings?

Handshake gives every posting a default one-year expiry, which is not a real deadline. The Actor only fills applicationDeadline when the employer set one, so you can trust the date when it is there.

How do I get only new postings every day?

Turn on Only new jobs, keep the same search, and schedule the Actor. The first run returns everything that matches. Every later run returns only postings it has not delivered before for that search.

๐Ÿ”— Other actors