Dataspryva

Handshake Campus Jobs & Employer Showcase Extractor

Reads Handshake's public job explore page for campus internships and entry-level roles, plus the public employer showcase, returning title, company, location, salary, and deadline.

Input schema

Input fields, types, required flags, descriptions, defaults, and prefills come from the published definition. Prefill examples are distinct from defaults.

FieldTypeRequiredDescription
modestringrequiredWhat to scrape.
searchQuerystringoptionalWords matched against job titles and descriptions (mode=searchJobs/bySearchUrls). Leave empty to browse.
jobRolestringoptionalHandshake role category used for discovery (mode=searchJobs/bySearchUrls).
Show all input fields
FieldTypeRequiredDescription
modestringrequiredWhat to scrape.
searchQuerystringoptionalWords matched against job titles and descriptions (mode=searchJobs/bySearchUrls). Leave empty to browse.
jobRolestringoptionalHandshake role category used for discovery (mode=searchJobs/bySearchUrls).
internshipRolestringoptionalInternship role category from the public /internships/ pages (implies internshipsOnly; mode=searchJobs).
locationstringoptionalCity with a published Handshake jobs page (mode=searchJobs/bySearchUrls).
workplacestringoptionalRemote, hybrid or on-site filter.
employmentTypestringoptionalFull-time or part-time filter.
internshipsOnlybooleanoptionalKeep jobs whose title or description mentions an internship or co-op.
postedWithinDaysintegeroptionalKeep jobs posted in the last N days (1-365). Leave empty for any date.
companyFilterstringoptionalKeep jobs whose employer name contains this text.
minSalaryintegeroptionalKeep jobs whose published maximum pay is at least this amount. Compare with the pay period selected below.
salaryPeriodstringoptionalRestrict to jobs with pay published per year, month or hour.
jobIdsarrayoptionalHandshake numeric job IDs (mode=byJobUrls).
jobUrlsarrayoptionalPublic Handshake job or share-preview URLs (mode=byJobUrls).
searchUrlsarrayoptionalPublic joinhandshake.com/find-jobs/ or /internships/ listing URLs (mode=bySearchUrls).
employerQuerystringoptionalKeep employers whose name contains this text (mode=employers).
includeProfilesbooleanoptionalFetch about, industry, size, ownership, address and reviews for each employer (mode=employers).
includeReviewsbooleanoptionalAdd recent public review cards to employer profiles (mode=employers).
includeDescriptionsbooleanoptionalAdd the full job description as HTML and plain text.
maxItemsintegeroptionalMaximum job records to return.
onlyNewJobsbooleanoptionalReturn only job IDs not seen in previous runs (mode=searchJobs/bySearchUrls/bySitemap).
resetMonitoringStatebooleanoptionalClear the saved seen-job list before this run.
maxEmployersintegeroptionalMaximum employer records to return (mode=employers).
maxReviewsPerEmployerintegeroptionalMaximum recent public reviews to keep per employer profile (mode=employers, includeReviews=true).

Download the published input schema

View complete JSON
{
  "description": "Scrape public Handshake jobs by keyword, role, city, or URL, plus public employer profiles with industry, size and reviews.",
  "properties": {
    "companyFilter": {
      "default": "",
      "description": "Keep jobs whose employer name contains this text.",
      "editor": "textfield",
      "prefill": "",
      "title": "Company contains",
      "type": "string"
    },
    "employerQuery": {
      "default": "",
      "description": "Keep employers whose name contains this text (mode=employers).",
      "editor": "textfield",
      "prefill": "",
      "title": "Employer contains",
      "type": "string"
    },
    "employmentType": {
      "default": "any",
      "description": "Full-time or part-time filter.",
      "editor": "select",
      "enum": [
        "any",
        "full-time",
        "part-time"
      ],
      "enumTitles": [
        "Any employment type",
        "Full-time",
        "Part-time"
      ],
      "prefill": "any",
      "title": "Employment type",
      "type": "string"
    },
    "includeDescriptions": {
      "default": true,
      "description": "Add the full job description as HTML and plain text.",
      "prefill": false,
      "title": "Include job descriptions",
      "type": "boolean"
    },
    "includeProfiles": {
      "default": true,
      "description": "Fetch about, industry, size, ownership, address and reviews for each employer (mode=employers).",
      "prefill": true,
      "title": "Include employer profiles",
      "type": "boolean"
    },
    "includeReviews": {
      "default": true,
      "description": "Add recent public review cards to employer profiles (mode=employers).",
      "prefill": true,
      "title": "Include employer reviews",
      "type": "boolean"
    },
    "internshipRole": {
      "default": "any",
      "description": "Internship role category from the public /internships/ pages (implies internshipsOnly; mode=searchJobs).",
      "editor": "select",
      "enum": [
        "any",
        "accounting",
        "architecture",
        "business",
        "computer-science",
        "construction-management",
        "consulting",
        "cybersecurity",
        "data-science",
        "electrical-engineering",
        "engineering",
        "finance",
        "graphic-design",
        "human-resources",
        "information-technology",
        "interior-design",
        "legal",
        "marketing",
        "mechanical-engineering",
        "project-management",
        "psychology",
        "public-health",
        "real-estate",
        "sports",
        "supply-chain"
      ],
      "enumTitles": [
        "Any internship role",
        "Accounting",
        "Architecture",
        "Business",
        "Computer Science",
        "Construction Management",
        "Consulting",
        "Cybersecurity",
        "Data Science",
        "Electrical Engineering",
        "Engineering",
        "Finance",
        "Graphic Design",
        "HR",
        "IT",
        "Interior Design",
        "Legal",
        "Marketing",
        "Mechanical Engineering",
        "Project Management",
        "Psychology",
        "Public Health",
        "Real Estate",
        "Sports",
        "Supply Chain"
      ],
      "prefill": "any",
      "title": "Internship role",
      "type": "string"
    },
    "internshipsOnly": {
      "default": false,
      "description": "Keep jobs whose title or description mentions an internship or co-op.",
      "prefill": false,
      "title": "Internships & co-ops only",
      "type": "boolean"
    },
    "jobIds": {
      "default": [],
      "description": "Handshake numeric job IDs (mode=byJobUrls).",
      "editor": "stringList",
      "items": {
        "type": "string"
      },
      "prefill": [],
      "title": "Job IDs",
      "type": "array"
    },
    "jobRole": {
      "default": "any",
      "description": "Handshake role category used for discovery (mode=searchJobs/bySearchUrls).",
      "editor": "select",
      "enum": [
        "any",
        "accounting",
        "administrative-support",
        "business-consulting",
        "childcare",
        "civil-engineering",
        "clinical-research-coordinator",
        "construction-management",
        "customer-service",
        "customer-success",
        "data-analytics",
        "early-career-programs",
        "education-administration",
        "electrical-engineering",
        "engineering",
        "facilities-maintenance",
        "finance",
        "food-service",
        "graphic-design",
        "healthcare-management",
        "higher-education-faculty",
        "home-health",
        "human-resources",
        "insurance",
        "legal",
        "marketing",
        "mechanical-engineering",
        "medical",
        "medical-assistant",
        "medical-lab",
        "medical-scribe",
        "mental-health-counseling",
        "nurse-practitioner",
        "nursing",
        "operations",
        "pharmacist",
        "pharmacy",
        "physician",
        "physician-assistant",
        "product-management",
        "psychiatric-technician",
        "public-health",
        "public-policy",
        "real-estate",
        "registered-nurse",
        "religious-work",
        "retail",
        "sales",
        "science-research",
        "security-public-safety",
        "social-work",
        "software-engineering",
        "special-education",
        "sports-recreation",
        "student-research",
        "supply-chain",
        "teaching",
        "teaching-assistants",
        "therapy-rehab",
        "translation",
        "travel",
        "tutoring",
        "web-it"
      ],
      "enumTitles": [
        "Any role",
        "Accounting",
        "Administrative Support",
        "Business and Consulting",
        "Childcare",
        "Civil Engineering",
        "Clinical Research Coordinator",
        "Construction Management",
        "Customer Service",
        "Customer Success",
        "Data Analytics",
        "Early Career Programs",
        "Education Administration and Student Support",
        "Electrical Engineering",
        "Engineering",
        "Facilities and Maintenance",
        "Finance",
        "Food Service",
        "Graphic Design",
        "Healthcare Management",
        "Higher Education Faculty",
        "Home Health",
        "Human Resources",
        "Insurance",
        "Legal",
        "Marketing",
        "Mechanical Engineering",
        "Medical",
        "Medical Assistant",
        "Medical Lab and Diagnostics",
        "Medical Scribe",
        "Mental Health and Counseling",
        "Nurse Practitioner",
        "Nursing",
        "Operations",
        "Pharmacist",
        "Pharmacy",
        "Physician",
        "Physician Assistant",
        "Product Management",
        "Psychiatric Technician",
        "Public Health",
        "Public Policy",
        "Real Estate",
        "Registered Nurse",
        "Religious Work",
        "Retail",
        "Sales",
        "Science Research",
        "Security and Public Safety",
        "Social Work",
        "Software Engineering",
        "Special Education",
        "Sports and Recreation",
        "Research Assistant and Student Research",
        "Supply Chain",
        "Teaching",
        "Teaching Assistants",
        "Therapy and Rehabilitation",
        "Translation and Interpretation",
        "Travel",
        "Tutoring",
        "Web and IT"
      ],
      "prefill": "software-engineering",
      "title": "Role",
      "type": "string"
    },
    "jobUrls": {
      "default": [],
      "description": "Public Handshake job or share-preview URLs (mode=byJobUrls).",
      "editor": "requestListSources",
      "items": {
        "properties": {
          "url": {
            "description": "Public URL",
            "title": "URL",
            "type": "string"
          }
        },
        "type": "object"
      },
      "prefill": [],
      "title": "Job URLs",
      "type": "array"
    },
    "location": {
      "default": "any",
      "description": "City with a published Handshake jobs page (mode=searchJobs/bySearchUrls).",
      "editor": "select",
      "enum": [
        "any",
        "akron-oh",
        "albany-ny",
        "anchorage-ak",
        "atlanta-ga",
        "augusta-ga",
        "austin-tx",
        "bakersfield-ca",
        "baltimore-md",
        "baton-rouge-la",
        "bend-or",
        "birmingham-al",
        "boise-id",
        "boston-ma",
        "buffalo-ny",
        "chapel-hill-nc",
        "charleston-sc",
        "charlotte-nc",
        "chattanooga-tn",
        "chicago-il",
        "cincinnati-oh",
        "cleveland-oh",
        "colorado-springs-co",
        "columbus-oh",
        "corvallis-or",
        "dallas-tx",
        "dayton-oh",
        "denver-co",
        "detroit-mi",
        "fairbanks-ak",
        "fort-worth-tx",
        "fresno-ca",
        "grand-rapids-mi",
        "green-bay-wi",
        "greenville-sc",
        "greenwood-sc",
        "harrisburg-pa",
        "hartford-ct",
        "houston-tx",
        "indianapolis-in",
        "irvine-ca",
        "jacksonville-fl",
        "kansas-city-mo",
        "killeen-tx",
        "knoxville-tn",
        "las-vegas-nv",
        "los-angeles-ca",
        "louisville-ky",
        "memphis-tn",
        "miami-fl",
        "milwaukee-wi",
        "minneapolis-mn",
        "monterey-ca",
        "naperville-il",
        "nashville-tn",
        "new-orleans-la",
        "new-york-ny",
        "newark-de",
        "odessa-tx",
        "oklahoma-city-ok",
        "omaha-ne",
        "orlando-fl",
        "philadelphia-pa",
        "phoenix-az",
        "pittsburgh-pa",
        "portland-me",
        "portland-or",
        "providence-ri",
        "provo-ut",
        "raleigh-nc",
        "reno-nv",
        "richmond-va",
        "riverside-ca",
        "rochester-ny",
        "sacramento-ca",
        "salt-lake-city-ut",
        "san-antonio-tx",
        "san-diego-ca",
        "san-francisco-ca",
        "san-jose-ca",
        "sarasota-fl",
        "savannah-ga",
        "seattle-wa",
        "st-louis-mo",
        "statesboro-ga",
        "stony-brook-ny",
        "tacoma-wa",
        "tampa-fl",
        "toledo-oh",
        "traverse-city-mi",
        "tucson-az",
        "virginia-beach-va",
        "washington-dc",
        "west-palm-beach-fl",
        "worcester-ma"
      ],
      "enumTitles": [
        "Any city",
        "Akron, OH",
        "Albany, NY",
        "Anchorage, AK",
        "Atlanta, GA",
        "Augusta, GA",
        "Austin, TX",
        "Bakersfield, CA",
        "Baltimore, MD",
        "Baton Rouge, LA",
        "Bend, OR",
        "Birmingham, AL",
        "Boise, ID",
        "Boston, MA",
        "Buffalo, NY",
        "Chapel Hill, NC",
        "Charleston, SC",
        "Charlotte, NC",
        "Chattanooga, TN",
        "Chicago, IL",
        "Cincinnati, OH",
        "Cleveland, OH",
        "Colorado Springs, CO",
        "Columbus, OH",
        "Corvallis, OR",
        "Dallas, TX",
        "Dayton, OH",
        "Denver, CO",
        "Detroit, MI",
        "Fairbanks, AK",
        "Fort Worth, TX",
        "Fresno, CA",
        "Grand Rapids, MI",
        "Green Bay, WI",
        "Greenville, SC",
        "Greenwood, SC",
        "Harrisburg, PA",
        "Hartford, CT",
        "Houston, TX",
        "Indianapolis, IN",
        "Irvine, CA",
        "Jacksonville, FL",
        "Kansas City, MO",
        "Killeen, TX",
        "Knoxville, TN",
        "Las Vegas, NV",
        "Los Angeles, CA",
        "Louisville, KY",
        "Memphis, TN",
        "Miami, FL",
        "Milwaukee, WI",
        "Minneapolis, MN",
        "Monterey, CA",
        "Naperville, IL",
        "Nashville, TN",
        "New Orleans, LA",
        "New York, NY",
        "Newark, DE",
        "Odessa, TX",
        "Oklahoma City, OK",
        "Omaha, NE",
        "Orlando, FL",
        "Philadelphia, PA",
        "Phoenix, AZ",
        "Pittsburgh, PA",
        "Portland, ME",
        "Portland, OR",
        "Providence, RI",
        "Provo, UT",
        "Raleigh, NC",
        "Reno, NV",
        "Richmond, VA",
        "Riverside, CA",
        "Rochester, NY",
        "Sacramento, CA",
        "Salt Lake City, UT",
        "San Antonio, TX",
        "San Diego, CA",
        "San Francisco, CA",
        "San Jose, CA",
        "Sarasota, FL",
        "Savannah, GA",
        "Seattle, WA",
        "St Louis, MO",
        "Statesboro, GA",
        "Stony Brook, NY",
        "Tacoma, WA",
        "Tampa, FL",
        "Toledo, OH",
        "Traverse City, MI",
        "Tucson, AZ",
        "Virginia Beach, VA",
        "Washington, DC",
        "West Palm Beach, FL",
        "Worcester, MA"
      ],
      "prefill": "any",
      "title": "City",
      "type": "string"
    },
    "maxEmployers": {
      "default": 100,
      "description": "Maximum employer records to return (mode=employers).",
      "maximum": 50000,
      "minimum": 1,
      "prefill": 1,
      "title": "Max employers",
      "type": "integer"
    },
    "maxItems": {
      "default": 50,
      "description": "Maximum job records to return.",
      "maximum": 1000,
      "minimum": 1,
      "prefill": 1,
      "title": "Max jobs",
      "type": "integer"
    },
    "maxReviewsPerEmployer": {
      "default": 5,
      "description": "Maximum recent public reviews to keep per employer profile (mode=employers, includeReviews=true).",
      "maximum": 100,
      "minimum": 1,
      "prefill": 1,
      "title": "Max reviews per employer",
      "type": "integer"
    },
    "minSalary": {
      "description": "Keep jobs whose published maximum pay is at least this amount. Compare with the pay period selected below.",
      "maximum": 1000000,
      "minimum": 0,
      "title": "Minimum salary",
      "type": "integer"
    },
    "mode": {
      "default": "searchJobs",
      "description": "What to scrape.",
      "editor": "select",
      "enum": [
        "searchJobs",
        "byJobUrls",
        "bySearchUrls",
        "bySitemap",
        "employers",
        "internships",
        "companyListings"
      ],
      "enumTitles": [
        "Search public jobs",
        "Look up job URLs or IDs",
        "Scrape find-jobs search URLs",
        "Scan the public jobs sitemap",
        "Scrape employer showcase",
        "Legacy: internships (maps to searchJobs + internshipsOnly)",
        "Legacy: company listings (maps to employers)"
      ],
      "prefill": "searchJobs",
      "title": "Mode",
      "type": "string"
    },
    "onlyNewJobs": {
      "default": false,
      "description": "Return only job IDs not seen in previous runs (mode=searchJobs/bySearchUrls/bySitemap).",
      "prefill": false,
      "title": "Only new jobs",
      "type": "boolean"
    },
    "postedWithinDays": {
      "description": "Keep jobs posted in the last N days (1-365). Leave empty for any date.",
      "maximum": 365,
      "minimum": 1,
      "title": "Posted within days",
      "type": "integer"
    },
    "resetMonitoringState": {
      "default": false,
      "description": "Clear the saved seen-job list before this run.",
      "prefill": false,
      "title": "Reset seen-job state",
      "type": "boolean"
    },
    "salaryPeriod": {
      "default": "any",
      "description": "Restrict to jobs with pay published per year, month or hour.",
      "editor": "select",
      "enum": [
        "any",
        "year",
        "month",
        "hour"
      ],
      "enumTitles": [
        "Any pay period",
        "Per year",
        "Per month",
        "Per hour"
      ],
      "prefill": "any",
      "title": "Pay period",
      "type": "string"
    },
    "searchQuery": {
      "default": "",
      "description": "Words matched against job titles and descriptions (mode=searchJobs/bySearchUrls). Leave empty to browse.",
      "editor": "textfield",
      "prefill": "",
      "title": "Keyword",
      "type": "string"
    },
    "searchUrls": {
      "default": [],
      "description": "Public joinhandshake.com/find-jobs/ or /internships/ listing URLs (mode=bySearchUrls).",
      "editor": "requestListSources",
      "items": {
        "properties": {
          "url": {
            "description": "Public URL",
            "title": "URL",
            "type": "string"
          }
        },
        "type": "object"
      },
      "prefill": [],
      "title": "Search URLs",
      "type": "array"
    },
    "workplace": {
      "default": "any",
      "description": "Remote, hybrid or on-site filter.",
      "editor": "select",
      "enum": [
        "any",
        "remote",
        "hybrid",
        "on-site"
      ],
      "enumTitles": [
        "Any workplace",
        "Remote only",
        "Hybrid only",
        "On-site only"
      ],
      "prefill": "any",
      "title": "Workplace",
      "type": "string"
    }
  },
  "required": [
    "mode"
  ],
  "schemaVersion": 1,
  "title": "Handshake Campus Jobs & Employer Showcase Input",
  "type": "object"
}

Output schema

Published result links and storage locations. This schema is not an exhaustive contract for every field in a dataset record.

FieldTypeRequiredDescription
jobsstringoptionalDataset containing all scraped public Handshake job listings.
employersstringoptionalDataset containing all scraped public Handshake employer profiles.

Download the published output schema

View complete JSON
{
  "actorOutputSchemaVersion": 1,
  "description": "Public Handshake job listings with structured pay, locations, dates and descriptions, plus public employer profiles with industry, size and reviews.",
  "properties": {
    "employers": {
      "description": "Dataset containing all scraped public Handshake employer profiles.",
      "template": "{{links.apiDefaultDatasetUrl}}/items",
      "title": "Handshake employers",
      "type": "string"
    },
    "jobs": {
      "description": "Dataset containing all scraped public Handshake job listings.",
      "template": "{{links.apiDefaultDatasetUrl}}/items",
      "title": "Handshake jobs",
      "type": "string"
    }
  },
  "title": "Handshake Campus Jobs & Employer Showcase Extractor Output"
}

Dataset schema

Published dataset views and any declared field definitions. A view can select only a subset of the returned record fields.

Download the published dataset schema

View complete JSON
{
  "actorSpecification": 1,
  "views": {
    "employers": {
      "display": {
        "component": "table",
        "properties": {}
      },
      "title": "Employers",
      "transformation": {
        "fields": [
          "name",
          "industry",
          "companySize",
          "website",
          "reviewCount",
          "profileUrl"
        ]
      }
    },
    "jobs": {
      "display": {
        "component": "table",
        "properties": {}
      },
      "title": "Jobs",
      "transformation": {
        "fields": [
          "title",
          "company",
          "location",
          "employmentType",
          "salary",
          "postedDate",
          "jobUrl"
        ]
      }
    }
  }
}

Key-value schema

Published key-value store definitions, when provided by this build.

This definition is not present in the default published build. See the published README for available documentation.

Published README

Read the full published documentation

Handshake Campus Jobs & Employer Showcase Extractor

Scrape Handshake — the early-career network used by universities and employers — without a student account. This actor reads Handshake's public job pages and employer showcase: search jobs by keyword, role, city or direct URL, then export title, employer, structured pay, locations, dates, full descriptions and employer profiles. It also builds an employer list from Handshake's public directory, including industry, company size, website and recent reviews.

What this actor does

  • Five modes: searchJobs, byJobUrls, bySearchUrls, bySitemap, employers.
  • Public job catalog: 62 role categories, 94 city pages and 720 published city+role combinations, plus a separate /internships/ family (189 pages, 5,883 internship IDs, 24 internship roles, 27 city pages + remote). The sitemap mode scans the 156,110-URL public jobs sitemap newest-first for listings outside the SEO index.
  • Full job detail: structured pay with a pay period, employment type, remote/hybrid/on-site, all locations, dates and the complete description.
  • Employer showcase: 40,000+ public employer profiles with about, industry, size, ownership, address, website, logo and recent reviews (paginated up to your limit).
  • Direct lookups: paste public Handshake job URLs or numeric job IDs when you already know what you need.
  • Incremental runs: onlyNewJobs returns only IDs not seen in previous scheduled runs, with a reset toggle.
  • Empty fields are omitted from each record rather than returned as null or blank.

Output per job

  • jobId, title, jobUrl — Handshake identity and canonical public page.
  • company, employerId, employerWebsite, employerLogoUrl, employerDescription, employerProfileUrl — employer identity and public links.
  • location, locations[], remote, workplace — primary location, every published site, and remote/hybrid/on-site.
  • employmentType, postingType, jobType — full-time/part-time, Job/Internship, and the normalized legacy type.
  • salary, salaryMin, salaryMax, salaryCurrency, paySchedule, salaryType — pay as published, plus the structured range and period.
  • postedDate, applicationDeadline, isExpired — posting date, expiry and expiry status.
  • descriptionHtml, description — full description (when descriptions are enabled).
  • industry, roleGroups[] — employer industry and role groups when Handshake publishes them.
  • sourceSearchUrl, recordType, scrapedAt — provenance and metadata.

Output per employer

  • name, employerId, profileUrl, companyUrl — employer identity and public profile.
  • website, logoUrl — the employer's own site and logo.
  • description — the public “About” text.
  • industry, companySize, ownershipType, address — public overview fields (ownership is not published for every employer).
  • reviewCount, questionCount, reviews[] — public review/Q&A counts (0 when the profile shows none) and review cards with title, date, location, text, pros, cons and advice.
  • recordType, scrapedAt.

Input

Field Type Default Description
mode string searchJobs searchJobs, byJobUrls, bySearchUrls, bySitemap or employers. Legacy internships and companyListings are accepted and mapped.
searchQuery string – Words matched against job titles and descriptions.
jobRole string any One of 62 published find-jobs role categories.
internshipRole string any One of 24 internship role categories; selecting one implies internshipsOnly.
location string any One of 94 published city pages.
workplace string any any, remote, hybrid or on-site.
employmentType string any any, full-time or part-time.
internshipsOnly boolean false Keep internships and co-ops.
postedWithinDays integer – Keep jobs posted in the last 1–365 days.
companyFilter string – Keep jobs whose employer name contains this text.
minSalary integer – Keep jobs whose published maximum pay is at least this amount.
salaryPeriod string any any, year, month or hour.
jobIds array [] Numeric Handshake job IDs (mode=byJobUrls).
jobUrls array [] Public job or share-preview URLs (mode=byJobUrls).
searchUrls array [] Public joinhandshake.com/find-jobs/... URLs (mode=bySearchUrls).
employerQuery string – Employer-name filter (mode=employers).
includeProfiles boolean true Fetch full employer profiles (mode=employers).
includeReviews boolean true Add recent review cards to employer records.
includeDescriptions boolean true Add descriptionHtml and description to job records.
maxItems integer 50 Maximum job records (1–1000).
maxEmployers integer 100 Maximum employer records (1–50,000).
maxReviewsPerEmployer integer 5 Maximum recent reviews per employer (1–100).
onlyNewJobs boolean false Return only job IDs not seen in previous runs (searchJobs/bySearchUrls/bySitemap).
resetMonitoringState boolean false Clear the saved seen-job list before this run.

Example: software engineering jobs

{
  "mode": "searchJobs",
  "jobRole": "software-engineering",
  "workplace": "remote",
  "postedWithinDays": 14,
  "maxItems": 50
}

Example: finance internships in Boston

{
  "mode": "searchJobs",
  "internshipRole": "finance",
  "location": "boston-ma",
  "maxItems": 50
}

Example: nursing jobs in Boston

{
  "mode": "searchJobs",
  "jobRole": "nursing",
  "location": "boston-ma",
  "employmentType": "full-time",
  "maxItems": 100
}

Example: direct job URLs

{
  "mode": "byJobUrls",
  "jobUrls": [
    { "url": "https://app.joinhandshake.com/public/jobs/11693959" },
    { "url": "https://app.joinhandshake.com/public/jobs/11693995" }
  ],
  "includeDescriptions": true
}

Example: public search pages

{
  "mode": "bySearchUrls",
  "searchUrls": [
    { "url": "https://joinhandshake.com/find-jobs/remote/software-engineering/" }
  ],
  "maxItems": 100
}

Example: employer showcase

{
  "mode": "employers",
  "employerQuery": "engineering",
  "includeProfiles": true,
  "includeReviews": true,
  "maxReviewsPerEmployer": 10,
  "maxEmployers": 50
}

Example: sitemap scan and incremental monitoring

{
  "mode": "bySitemap",
  "searchQuery": "nurse",
  "onlyNewJobs": true,
  "maxItems": 100
}

Use cases

  • Campus recruiting — see which employers are hiring students and recent graduates by city and role.
  • Salary benchmarking — compare published pay ranges and periods across roles, cities and employers.
  • Employer research — build a shortlist with industry, size, website and employee reviews.
  • Job-board aggregation — feed public early-career listings into your own board or newsletter.
  • Labor-market analysis — track posting volume, locations and hiring dates over time.

FAQ

Do I need a Handshake student account?

No. The actor reads Handshake's public job pages, public search pages and public employer directory. It never asks for a login, cookies or a student account, and it does not access applications or student profiles.

How many jobs can it discover?

Handshake's public find-jobs index exposes 29,506 active job IDs across 929 pages, and the separate /internships/ family adds 5,883 internship IDs (5,763 not in the find-jobs union). Together that is 35,269 SEO-discoverable IDs. The site reports 52,897 active public jobs, so use bySitemap to scan the public 156,110-URL jobs sitemap newest-first (up to maxItems), or jobUrls/jobIds for a known listing. A full 156,110-URL sweep is possible but takes hours and many requests; bounded sitemap runs are the recommended path.

Are salaries always present?

No. Employers publish pay for most, but not all, listings. When pay is missing, salary fields are omitted. When present, salaryMin and salaryMax are in the listing's currency and paySchedule tells you whether the amount is per year, month or hour.

Why is roleGroups missing on some rows?

Role groups are only published on the 15 rich cards that Handshake renders per search page. The actor harvests them from both find-jobs and internship cards (combined card union: 10,479 IDs). Rows discovered from the other IDs on a page carry every other field but may omit role groups.

Why is employer ownership or size missing?

Handshake's employer profile publishes size and industry for every profile, but ownership (Public, Private, Nonprofit, Government) is optional and is omitted when the employer does not provide it. Review and Q&A counts are 0 when the public profile shows none.

How do I search internships?

Use internshipsOnly: true for the full /internships/ family, or pick an internshipRole (e.g. computer-science, data-science, cybersecurity, finance). The actor reads the public internship city, role and city+role pages; workplace: "remote" uses Handshake's remote internship page. Legacy mode: "internships" maps to this behavior. bySearchUrls also accepts /internships/ URLs.

How does onlyNewJobs work?

The actor saves the IDs it has already returned in its key-value store. On the next scheduled run, onlyNewJobs skips those IDs, so you only receive postings you have not seen. Set resetMonitoringState for a one-off full refresh. Direct byJobUrls lookups and employer records are always returned.

Do I need a proxy?

No. The actor connects to Handshake automatically and only uses its built-in fallback when a request is blocked. Just fill in the input and run it.

Is the data live?

Jobs and employer profiles are read from Handshake's public pages at run time. The public search index is cached by Handshake, so newly posted jobs can take a few days to appear in keyword/role/city discovery; direct job URLs return the current public record.

Is this affiliated with Handshake?

No. This is an independent third-party actor that reads publicly accessible pages. It is not affiliated with, endorsed by or operated by Handshake.

Limitations

  • Public SEO discovery covers 29,506 of 52,897 active public jobs; bySitemap scans the 156,110-URL sitemap newest-first up to maxItems, and direct URLs/IDs cover known listings. A full sitemap sweep is not run automatically because it takes hours.
  • Role groups are available only when a job appears in the 15 cards on a search page.
  • Salary, ownership and Q&A counts are conditional on what Handshake publishes.
  • Student-only, personalized and application data is out of scope.
  • The actor does not enrich employer emails, phone numbers or social profiles.

Python quickstart

Use a schema-derived input and the Python standard library to start a run. An Apify account and token are required for execution.

Open the step-by-step Python guide →

Source build 829lEIaY4rOz0tA3Z. Documentation is regenerated from the default published build; private drafts are not included.