{
  "data": {
    "id": "829lEIaY4rOz0tA3Z",
    "actId": "matudr5BfHfTMG3Ec",
    "userId": "zq8lKbpLzTjGDayPC",
    "startedAt": "2026-10-21T01:30:59.082Z",
    "finishedAt": "2026-10-21T01:31:13.019Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "CLI"
    },
    "stats": {
      "durationMillis": 13819,
      "runTimeSecs": 13.819,
      "computeUnits": 0.015354444444444445,
      "imageSizeBytes": 358842368
    },
    "options": {
      "useCache": true,
      "betaPackages": false,
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "createdByOrganizationMemberUserId": "GK9YjZRyQZVzOdoH5",
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"Handshake Campus Jobs & Employer Showcase Input\",\n  \"description\": \"Scrape public Handshake jobs by keyword, role, city, or URL, plus public employer profiles with industry, size and reviews.\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"properties\": {\n    \"mode\": {\n      \"title\": \"Mode\",\n      \"type\": \"string\",\n      \"description\": \"What to scrape.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"searchJobs\",\n        \"byJobUrls\",\n        \"bySearchUrls\",\n        \"bySitemap\",\n        \"employers\",\n        \"internships\",\n        \"companyListings\"\n      ],\n      \"enumTitles\": [\n        \"Search public jobs\",\n        \"Look up job URLs or IDs\",\n        \"Scrape find-jobs search URLs\",\n        \"Scan the public jobs sitemap\",\n        \"Scrape employer showcase\",\n        \"Legacy: internships (maps to searchJobs + internshipsOnly)\",\n        \"Legacy: company listings (maps to employers)\"\n      ],\n      \"default\": \"searchJobs\",\n      \"prefill\": \"searchJobs\"\n    },\n    \"searchQuery\": {\n      \"title\": \"Keyword\",\n      \"type\": \"string\",\n      \"description\": \"Words matched against job titles and descriptions (mode=searchJobs/bySearchUrls). Leave empty to browse.\",\n      \"editor\": \"textfield\",\n      \"default\": \"\",\n      \"prefill\": \"\"\n    },\n    \"jobRole\": {\n      \"title\": \"Role\",\n      \"type\": \"string\",\n      \"description\": \"Handshake role category used for discovery (mode=searchJobs/bySearchUrls).\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"any\",\n        \"accounting\",\n        \"administrative-support\",\n        \"business-consulting\",\n        \"childcare\",\n        \"civil-engineering\",\n        \"clinical-research-coordinator\",\n        \"construction-management\",\n        \"customer-service\",\n        \"customer-success\",\n        \"data-analytics\",\n        \"early-career-programs\",\n        \"education-administration\",\n        \"electrical-engineering\",\n        \"engineering\",\n        \"facilities-maintenance\",\n        \"finance\",\n        \"food-service\",\n        \"graphic-design\",\n        \"healthcare-management\",\n        \"higher-education-faculty\",\n        \"home-health\",\n        \"human-resources\",\n        \"insurance\",\n        \"legal\",\n        \"marketing\",\n        \"mechanical-engineering\",\n        \"medical\",\n        \"medical-assistant\",\n        \"medical-lab\",\n        \"medical-scribe\",\n        \"mental-health-counseling\",\n        \"nurse-practitioner\",\n        \"nursing\",\n        \"operations\",\n        \"pharmacist\",\n        \"pharmacy\",\n        \"physician\",\n        \"physician-assistant\",\n        \"product-management\",\n        \"psychiatric-technician\",\n        \"public-health\",\n        \"public-policy\",\n        \"real-estate\",\n        \"registered-nurse\",\n        \"religious-work\",\n        \"retail\",\n        \"sales\",\n        \"science-research\",\n        \"security-public-safety\",\n        \"social-work\",\n        \"software-engineering\",\n        \"special-education\",\n        \"sports-recreation\",\n        \"student-research\",\n        \"supply-chain\",\n        \"teaching\",\n        \"teaching-assistants\",\n        \"therapy-rehab\",\n        \"translation\",\n        \"travel\",\n        \"tutoring\",\n        \"web-it\"\n      ],\n      \"enumTitles\": [\n        \"Any role\",\n        \"Accounting\",\n        \"Administrative Support\",\n        \"Business and Consulting\",\n        \"Childcare\",\n        \"Civil Engineering\",\n        \"Clinical Research Coordinator\",\n        \"Construction Management\",\n        \"Customer Service\",\n        \"Customer Success\",\n        \"Data Analytics\",\n        \"Early Career Programs\",\n        \"Education Administration and Student Support\",\n        \"Electrical Engineering\",\n        \"Engineering\",\n        \"Facilities and Maintenance\",\n        \"Finance\",\n        \"Food Service\",\n        \"Graphic Design\",\n        \"Healthcare Management\",\n        \"Higher Education Faculty\",\n        \"Home Health\",\n        \"Human Resources\",\n        \"Insurance\",\n        \"Legal\",\n        \"Marketing\",\n        \"Mechanical Engineering\",\n        \"Medical\",\n        \"Medical Assistant\",\n        \"Medical Lab and Diagnostics\",\n        \"Medical Scribe\",\n        \"Mental Health and Counseling\",\n        \"Nurse Practitioner\",\n        \"Nursing\",\n        \"Operations\",\n        \"Pharmacist\",\n        \"Pharmacy\",\n        \"Physician\",\n        \"Physician Assistant\",\n        \"Product Management\",\n        \"Psychiatric Technician\",\n        \"Public Health\",\n        \"Public Policy\",\n        \"Real Estate\",\n        \"Registered Nurse\",\n        \"Religious Work\",\n        \"Retail\",\n        \"Sales\",\n        \"Science Research\",\n        \"Security and Public Safety\",\n        \"Social Work\",\n        \"Software Engineering\",\n        \"Special Education\",\n        \"Sports and Recreation\",\n        \"Research Assistant and Student Research\",\n        \"Supply Chain\",\n        \"Teaching\",\n        \"Teaching Assistants\",\n        \"Therapy and Rehabilitation\",\n        \"Translation and Interpretation\",\n        \"Travel\",\n        \"Tutoring\",\n        \"Web and IT\"\n      ],\n      \"default\": \"any\",\n      \"prefill\": \"software-engineering\"\n    },\n    \"internshipRole\": {\n      \"title\": \"Internship role\",\n      \"type\": \"string\",\n      \"description\": \"Internship role category from the public /internships/ pages (implies internshipsOnly; mode=searchJobs).\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"any\",\n        \"accounting\",\n        \"architecture\",\n        \"business\",\n        \"computer-science\",\n        \"construction-management\",\n        \"consulting\",\n        \"cybersecurity\",\n        \"data-science\",\n        \"electrical-engineering\",\n        \"engineering\",\n        \"finance\",\n        \"graphic-design\",\n        \"human-resources\",\n        \"information-technology\",\n        \"interior-design\",\n        \"legal\",\n        \"marketing\",\n        \"mechanical-engineering\",\n        \"project-management\",\n        \"psychology\",\n        \"public-health\",\n        \"real-estate\",\n        \"sports\",\n        \"supply-chain\"\n      ],\n      \"enumTitles\": [\n        \"Any internship role\",\n        \"Accounting\",\n        \"Architecture\",\n        \"Business\",\n        \"Computer Science\",\n        \"Construction Management\",\n        \"Consulting\",\n        \"Cybersecurity\",\n        \"Data Science\",\n        \"Electrical Engineering\",\n        \"Engineering\",\n        \"Finance\",\n        \"Graphic Design\",\n        \"HR\",\n        \"IT\",\n        \"Interior Design\",\n        \"Legal\",\n        \"Marketing\",\n        \"Mechanical Engineering\",\n        \"Project Management\",\n        \"Psychology\",\n        \"Public Health\",\n        \"Real Estate\",\n        \"Sports\",\n        \"Supply Chain\"\n      ],\n      \"default\": \"any\",\n      \"prefill\": \"any\"\n    },\n    \"location\": {\n      \"title\": \"City\",\n      \"type\": \"string\",\n      \"description\": \"City with a published Handshake jobs page (mode=searchJobs/bySearchUrls).\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"any\",\n        \"akron-oh\",\n        \"albany-ny\",\n        \"anchorage-ak\",\n        \"atlanta-ga\",\n        \"augusta-ga\",\n        \"austin-tx\",\n        \"bakersfield-ca\",\n        \"baltimore-md\",\n        \"baton-rouge-la\",\n        \"bend-or\",\n        \"birmingham-al\",\n        \"boise-id\",\n        \"boston-ma\",\n        \"buffalo-ny\",\n        \"chapel-hill-nc\",\n        \"charleston-sc\",\n        \"charlotte-nc\",\n        \"chattanooga-tn\",\n        \"chicago-il\",\n        \"cincinnati-oh\",\n        \"cleveland-oh\",\n        \"colorado-springs-co\",\n        \"columbus-oh\",\n        \"corvallis-or\",\n        \"dallas-tx\",\n        \"dayton-oh\",\n        \"denver-co\",\n        \"detroit-mi\",\n        \"fairbanks-ak\",\n        \"fort-worth-tx\",\n        \"fresno-ca\",\n        \"grand-rapids-mi\",\n        \"green-bay-wi\",\n        \"greenville-sc\",\n        \"greenwood-sc\",\n        \"harrisburg-pa\",\n        \"hartford-ct\",\n        \"houston-tx\",\n        \"indianapolis-in\",\n        \"irvine-ca\",\n        \"jacksonville-fl\",\n        \"kansas-city-mo\",\n        \"killeen-tx\",\n        \"knoxville-tn\",\n        \"las-vegas-nv\",\n        \"los-angeles-ca\",\n        \"louisville-ky\",\n        \"memphis-tn\",\n        \"miami-fl\",\n        \"milwaukee-wi\",\n        \"minneapolis-mn\",\n        \"monterey-ca\",\n        \"naperville-il\",\n        \"nashville-tn\",\n        \"new-orleans-la\",\n        \"new-york-ny\",\n        \"newark-de\",\n        \"odessa-tx\",\n        \"oklahoma-city-ok\",\n        \"omaha-ne\",\n        \"orlando-fl\",\n        \"philadelphia-pa\",\n        \"phoenix-az\",\n        \"pittsburgh-pa\",\n        \"portland-me\",\n        \"portland-or\",\n        \"providence-ri\",\n        \"provo-ut\",\n        \"raleigh-nc\",\n        \"reno-nv\",\n        \"richmond-va\",\n        \"riverside-ca\",\n        \"rochester-ny\",\n        \"sacramento-ca\",\n        \"salt-lake-city-ut\",\n        \"san-antonio-tx\",\n        \"san-diego-ca\",\n        \"san-francisco-ca\",\n        \"san-jose-ca\",\n        \"sarasota-fl\",\n        \"savannah-ga\",\n        \"seattle-wa\",\n        \"st-louis-mo\",\n        \"statesboro-ga\",\n        \"stony-brook-ny\",\n        \"tacoma-wa\",\n        \"tampa-fl\",\n        \"toledo-oh\",\n        \"traverse-city-mi\",\n        \"tucson-az\",\n        \"virginia-beach-va\",\n        \"washington-dc\",\n        \"west-palm-beach-fl\",\n        \"worcester-ma\"\n      ],\n      \"enumTitles\": [\n        \"Any city\",\n        \"Akron, OH\",\n        \"Albany, NY\",\n        \"Anchorage, AK\",\n        \"Atlanta, GA\",\n        \"Augusta, GA\",\n        \"Austin, TX\",\n        \"Bakersfield, CA\",\n        \"Baltimore, MD\",\n        \"Baton Rouge, LA\",\n        \"Bend, OR\",\n        \"Birmingham, AL\",\n        \"Boise, ID\",\n        \"Boston, MA\",\n        \"Buffalo, NY\",\n        \"Chapel Hill, NC\",\n        \"Charleston, SC\",\n        \"Charlotte, NC\",\n        \"Chattanooga, TN\",\n        \"Chicago, IL\",\n        \"Cincinnati, OH\",\n        \"Cleveland, OH\",\n        \"Colorado Springs, CO\",\n        \"Columbus, OH\",\n        \"Corvallis, OR\",\n        \"Dallas, TX\",\n        \"Dayton, OH\",\n        \"Denver, CO\",\n        \"Detroit, MI\",\n        \"Fairbanks, AK\",\n        \"Fort Worth, TX\",\n        \"Fresno, CA\",\n        \"Grand Rapids, MI\",\n        \"Green Bay, WI\",\n        \"Greenville, SC\",\n        \"Greenwood, SC\",\n        \"Harrisburg, PA\",\n        \"Hartford, CT\",\n        \"Houston, TX\",\n        \"Indianapolis, IN\",\n        \"Irvine, CA\",\n        \"Jacksonville, FL\",\n        \"Kansas City, MO\",\n        \"Killeen, TX\",\n        \"Knoxville, TN\",\n        \"Las Vegas, NV\",\n        \"Los Angeles, CA\",\n        \"Louisville, KY\",\n        \"Memphis, TN\",\n        \"Miami, FL\",\n        \"Milwaukee, WI\",\n        \"Minneapolis, MN\",\n        \"Monterey, CA\",\n        \"Naperville, IL\",\n        \"Nashville, TN\",\n        \"New Orleans, LA\",\n        \"New York, NY\",\n        \"Newark, DE\",\n        \"Odessa, TX\",\n        \"Oklahoma City, OK\",\n        \"Omaha, NE\",\n        \"Orlando, FL\",\n        \"Philadelphia, PA\",\n        \"Phoenix, AZ\",\n        \"Pittsburgh, PA\",\n        \"Portland, ME\",\n        \"Portland, OR\",\n        \"Providence, RI\",\n        \"Provo, UT\",\n        \"Raleigh, NC\",\n        \"Reno, NV\",\n        \"Richmond, VA\",\n        \"Riverside, CA\",\n        \"Rochester, NY\",\n        \"Sacramento, CA\",\n        \"Salt Lake City, UT\",\n        \"San Antonio, TX\",\n        \"San Diego, CA\",\n        \"San Francisco, CA\",\n        \"San Jose, CA\",\n        \"Sarasota, FL\",\n        \"Savannah, GA\",\n        \"Seattle, WA\",\n        \"St Louis, MO\",\n        \"Statesboro, GA\",\n        \"Stony Brook, NY\",\n        \"Tacoma, WA\",\n        \"Tampa, FL\",\n        \"Toledo, OH\",\n        \"Traverse City, MI\",\n        \"Tucson, AZ\",\n        \"Virginia Beach, VA\",\n        \"Washington, DC\",\n        \"West Palm Beach, FL\",\n        \"Worcester, MA\"\n      ],\n      \"default\": \"any\",\n      \"prefill\": \"any\"\n    },\n    \"workplace\": {\n      \"title\": \"Workplace\",\n      \"type\": \"string\",\n      \"description\": \"Remote, hybrid or on-site filter.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"any\",\n        \"remote\",\n        \"hybrid\",\n        \"on-site\"\n      ],\n      \"enumTitles\": [\n        \"Any workplace\",\n        \"Remote only\",\n        \"Hybrid only\",\n        \"On-site only\"\n      ],\n      \"default\": \"any\",\n      \"prefill\": \"any\"\n    },\n    \"employmentType\": {\n      \"title\": \"Employment type\",\n      \"type\": \"string\",\n      \"description\": \"Full-time or part-time filter.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"any\",\n        \"full-time\",\n        \"part-time\"\n      ],\n      \"enumTitles\": [\n        \"Any employment type\",\n        \"Full-time\",\n        \"Part-time\"\n      ],\n      \"default\": \"any\",\n      \"prefill\": \"any\"\n    },\n    \"internshipsOnly\": {\n      \"title\": \"Internships & co-ops only\",\n      \"type\": \"boolean\",\n      \"description\": \"Keep jobs whose title or description mentions an internship or co-op.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"postedWithinDays\": {\n      \"title\": \"Posted within days\",\n      \"type\": \"integer\",\n      \"description\": \"Keep jobs posted in the last N days (1-365). Leave empty for any date.\",\n      \"minimum\": 1,\n      \"maximum\": 365\n    },\n    \"companyFilter\": {\n      \"title\": \"Company contains\",\n      \"type\": \"string\",\n      \"description\": \"Keep jobs whose employer name contains this text.\",\n      \"editor\": \"textfield\",\n      \"default\": \"\",\n      \"prefill\": \"\"\n    },\n    \"minSalary\": {\n      \"title\": \"Minimum salary\",\n      \"type\": \"integer\",\n      \"description\": \"Keep jobs whose published maximum pay is at least this amount. Compare with the pay period selected below.\",\n      \"minimum\": 0,\n      \"maximum\": 1000000\n    },\n    \"salaryPeriod\": {\n      \"title\": \"Pay period\",\n      \"type\": \"string\",\n      \"description\": \"Restrict to jobs with pay published per year, month or hour.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"any\",\n        \"year\",\n        \"month\",\n        \"hour\"\n      ],\n      \"enumTitles\": [\n        \"Any pay period\",\n        \"Per year\",\n        \"Per month\",\n        \"Per hour\"\n      ],\n      \"default\": \"any\",\n      \"prefill\": \"any\"\n    },\n    \"jobIds\": {\n      \"title\": \"Job IDs\",\n      \"type\": \"array\",\n      \"description\": \"Handshake numeric job IDs (mode=byJobUrls).\",\n      \"editor\": \"stringList\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"jobUrls\": {\n      \"title\": \"Job URLs\",\n      \"type\": \"array\",\n      \"description\": \"Public Handshake job or share-preview URLs (mode=byJobUrls).\",\n      \"editor\": \"requestListSources\",\n      \"items\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"url\": {\n            \"type\": \"string\",\n            \"title\": \"URL\",\n            \"description\": \"Public URL\"\n          }\n        }\n      },\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"searchUrls\": {\n      \"title\": \"Search URLs\",\n      \"type\": \"array\",\n      \"description\": \"Public joinhandshake.com/find-jobs/ or /internships/ listing URLs (mode=bySearchUrls).\",\n      \"editor\": \"requestListSources\",\n      \"items\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"url\": {\n            \"type\": \"string\",\n            \"title\": \"URL\",\n            \"description\": \"Public URL\"\n          }\n        }\n      },\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"employerQuery\": {\n      \"title\": \"Employer contains\",\n      \"type\": \"string\",\n      \"description\": \"Keep employers whose name contains this text (mode=employers).\",\n      \"editor\": \"textfield\",\n      \"default\": \"\",\n      \"prefill\": \"\"\n    },\n    \"includeProfiles\": {\n      \"title\": \"Include employer profiles\",\n      \"type\": \"boolean\",\n      \"description\": \"Fetch about, industry, size, ownership, address and reviews for each employer (mode=employers).\",\n      \"default\": true,\n      \"prefill\": true\n    },\n    \"includeReviews\": {\n      \"title\": \"Include employer reviews\",\n      \"type\": \"boolean\",\n      \"description\": \"Add recent public review cards to employer profiles (mode=employers).\",\n      \"default\": true,\n      \"prefill\": true\n    },\n    \"includeDescriptions\": {\n      \"title\": \"Include job descriptions\",\n      \"type\": \"boolean\",\n      \"description\": \"Add the full job description as HTML and plain text.\",\n      \"default\": true,\n      \"prefill\": false\n    },\n    \"maxItems\": {\n      \"title\": \"Max jobs\",\n      \"type\": \"integer\",\n      \"description\": \"Maximum job records to return.\",\n      \"minimum\": 1,\n      \"maximum\": 1000,\n      \"default\": 50,\n      \"prefill\": 1\n    },\n    \"onlyNewJobs\": {\n      \"title\": \"Only new jobs\",\n      \"type\": \"boolean\",\n      \"description\": \"Return only job IDs not seen in previous runs (mode=searchJobs/bySearchUrls/bySitemap).\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"resetMonitoringState\": {\n      \"title\": \"Reset seen-job state\",\n      \"type\": \"boolean\",\n      \"description\": \"Clear the saved seen-job list before this run.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"maxEmployers\": {\n      \"title\": \"Max employers\",\n      \"type\": \"integer\",\n      \"description\": \"Maximum employer records to return (mode=employers).\",\n      \"minimum\": 1,\n      \"maximum\": 50000,\n      \"default\": 100,\n      \"prefill\": 1\n    },\n    \"maxReviewsPerEmployer\": {\n      \"title\": \"Max reviews per employer\",\n      \"type\": \"integer\",\n      \"description\": \"Maximum recent public reviews to keep per employer profile (mode=employers, includeReviews=true).\",\n      \"minimum\": 1,\n      \"maximum\": 100,\n      \"default\": 5,\n      \"prefill\": 1\n    }\n  },\n  \"required\": [\n    \"mode\"\n  ]\n}",
    "readme": "# Handshake Campus Jobs & Employer Showcase Extractor\n\nScrape **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.\n\n## What this actor does\n\n- **Five modes:** `searchJobs`, `byJobUrls`, `bySearchUrls`, `bySitemap`, `employers`.\n- **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.\n- **Full job detail:** structured pay with a pay period, employment type, remote/hybrid/on-site, all locations, dates and the complete description.\n- **Employer showcase:** 40,000+ public employer profiles with about, industry, size, ownership, address, website, logo and recent reviews (paginated up to your limit).\n- **Direct lookups:** paste public Handshake job URLs or numeric job IDs when you already know what you need.\n- **Incremental runs:** `onlyNewJobs` returns only IDs not seen in previous scheduled runs, with a reset toggle.\n- **Empty fields are omitted** from each record rather than returned as null or blank.\n\n## Output per job\n\n- `jobId`, `title`, `jobUrl` — Handshake identity and canonical public page.\n- `company`, `employerId`, `employerWebsite`, `employerLogoUrl`, `employerDescription`, `employerProfileUrl` — employer identity and public links.\n- `location`, `locations[]`, `remote`, `workplace` — primary location, every published site, and remote/hybrid/on-site.\n- `employmentType`, `postingType`, `jobType` — full-time/part-time, Job/Internship, and the normalized legacy type.\n- `salary`, `salaryMin`, `salaryMax`, `salaryCurrency`, `paySchedule`, `salaryType` — pay as published, plus the structured range and period.\n- `postedDate`, `applicationDeadline`, `isExpired` — posting date, expiry and expiry status.\n- `descriptionHtml`, `description` — full description (when descriptions are enabled).\n- `industry`, `roleGroups[]` — employer industry and role groups when Handshake publishes them.\n- `sourceSearchUrl`, `recordType`, `scrapedAt` — provenance and metadata.\n\n## Output per employer\n\n- `name`, `employerId`, `profileUrl`, `companyUrl` — employer identity and public profile.\n- `website`, `logoUrl` — the employer's own site and logo.\n- `description` — the public “About” text.\n- `industry`, `companySize`, `ownershipType`, `address` — public overview fields (ownership is not published for every employer).\n- `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.\n- `recordType`, `scrapedAt`.\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `mode` | string | `searchJobs` | `searchJobs`, `byJobUrls`, `bySearchUrls`, `bySitemap` or `employers`. Legacy `internships` and `companyListings` are accepted and mapped. |\n| `searchQuery` | string | – | Words matched against job titles and descriptions. |\n| `jobRole` | string | `any` | One of 62 published find-jobs role categories. |\n| `internshipRole` | string | `any` | One of 24 internship role categories; selecting one implies `internshipsOnly`. |\n| `location` | string | `any` | One of 94 published city pages. |\n| `workplace` | string | `any` | `any`, `remote`, `hybrid` or `on-site`. |\n| `employmentType` | string | `any` | `any`, `full-time` or `part-time`. |\n| `internshipsOnly` | boolean | false | Keep internships and co-ops. |\n| `postedWithinDays` | integer | – | Keep jobs posted in the last 1–365 days. |\n| `companyFilter` | string | – | Keep jobs whose employer name contains this text. |\n| `minSalary` | integer | – | Keep jobs whose published maximum pay is at least this amount. |\n| `salaryPeriod` | string | `any` | `any`, `year`, `month` or `hour`. |\n| `jobIds` | array | `[]` | Numeric Handshake job IDs (`mode=byJobUrls`). |\n| `jobUrls` | array | `[]` | Public job or share-preview URLs (`mode=byJobUrls`). |\n| `searchUrls` | array | `[]` | Public `joinhandshake.com/find-jobs/...` URLs (`mode=bySearchUrls`). |\n| `employerQuery` | string | – | Employer-name filter (`mode=employers`). |\n| `includeProfiles` | boolean | true | Fetch full employer profiles (`mode=employers`). |\n| `includeReviews` | boolean | true | Add recent review cards to employer records. |\n| `includeDescriptions` | boolean | true | Add `descriptionHtml` and `description` to job records. |\n| `maxItems` | integer | 50 | Maximum job records (1–1000). |\n| `maxEmployers` | integer | 100 | Maximum employer records (1–50,000). |\n| `maxReviewsPerEmployer` | integer | 5 | Maximum recent reviews per employer (1–100). |\n| `onlyNewJobs` | boolean | false | Return only job IDs not seen in previous runs (`searchJobs`/`bySearchUrls`/`bySitemap`). |\n| `resetMonitoringState` | boolean | false | Clear the saved seen-job list before this run. |\n\n### Example: software engineering jobs\n\n```json\n{\n  \"mode\": \"searchJobs\",\n  \"jobRole\": \"software-engineering\",\n  \"workplace\": \"remote\",\n  \"postedWithinDays\": 14,\n  \"maxItems\": 50\n}\n```\n\n### Example: finance internships in Boston\n\n```json\n{\n  \"mode\": \"searchJobs\",\n  \"internshipRole\": \"finance\",\n  \"location\": \"boston-ma\",\n  \"maxItems\": 50\n}\n```\n\n### Example: nursing jobs in Boston\n\n```json\n{\n  \"mode\": \"searchJobs\",\n  \"jobRole\": \"nursing\",\n  \"location\": \"boston-ma\",\n  \"employmentType\": \"full-time\",\n  \"maxItems\": 100\n}\n```\n\n### Example: direct job URLs\n\n```json\n{\n  \"mode\": \"byJobUrls\",\n  \"jobUrls\": [\n    { \"url\": \"https://app.joinhandshake.com/public/jobs/11693959\" },\n    { \"url\": \"https://app.joinhandshake.com/public/jobs/11693995\" }\n  ],\n  \"includeDescriptions\": true\n}\n```\n\n### Example: public search pages\n\n```json\n{\n  \"mode\": \"bySearchUrls\",\n  \"searchUrls\": [\n    { \"url\": \"https://joinhandshake.com/find-jobs/remote/software-engineering/\" }\n  ],\n  \"maxItems\": 100\n}\n```\n\n### Example: employer showcase\n\n```json\n{\n  \"mode\": \"employers\",\n  \"employerQuery\": \"engineering\",\n  \"includeProfiles\": true,\n  \"includeReviews\": true,\n  \"maxReviewsPerEmployer\": 10,\n  \"maxEmployers\": 50\n}\n```\n\n### Example: sitemap scan and incremental monitoring\n\n```json\n{\n  \"mode\": \"bySitemap\",\n  \"searchQuery\": \"nurse\",\n  \"onlyNewJobs\": true,\n  \"maxItems\": 100\n}\n```\n\n## Use cases\n\n- **Campus recruiting** — see which employers are hiring students and recent graduates by city and role.\n- **Salary benchmarking** — compare published pay ranges and periods across roles, cities and employers.\n- **Employer research** — build a shortlist with industry, size, website and employee reviews.\n- **Job-board aggregation** — feed public early-career listings into your own board or newsletter.\n- **Labor-market analysis** — track posting volume, locations and hiring dates over time.\n\n## FAQ\n\n### Do I need a Handshake student account?\n\nNo. 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.\n\n### How many jobs can it discover?\n\nHandshake'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.\n\n### Are salaries always present?\n\nNo. 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.\n\n### Why is `roleGroups` missing on some rows?\n\nRole 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.\n\n### Why is employer ownership or size missing?\n\nHandshake'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.\n\n### How do I search internships?\n\nUse `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.\n\n### How does `onlyNewJobs` work?\n\nThe 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.\n\n### Do I need a proxy?\n\nNo. 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.\n\n### Is the data live?\n\nJobs 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.\n\n### Is this affiliated with Handshake?\n\nNo. This is an independent third-party actor that reads publicly accessible pages. It is not affiliated with, endorsed by or operated by Handshake.\n\n## Limitations\n\n- 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.\n- Role groups are available only when a job appears in the 15 cards on a search page.\n- Salary, ownership and Q&A counts are conditional on what Handshake publishes.\n- Student-only, personalized and application data is out of scope.\n- The actor does not enrich employer emails, phone numbers or social profiles.\n",
    "actorDefinition": {
      "actorSpecification": 1,
      "name": "handshake-campus-jobs-and-employer-showcase",
      "title": "Handshake Campus Jobs & Employer Showcase Extractor",
      "description": "Scrape public Handshake jobs by keyword, role, city or URL, plus 40,000+ employer profiles with industry, size, website and reviews. Structured pay, locations, dates and full descriptions. No login.",
      "version": "1.1",
      "buildTag": "latest",
      "defaultMemoryMbytes": 1024,
      "dockerfile": "./Dockerfile",
      "readme": "# Handshake Campus Jobs & Employer Showcase Extractor\n\nScrape **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.\n\n## What this actor does\n\n- **Five modes:** `searchJobs`, `byJobUrls`, `bySearchUrls`, `bySitemap`, `employers`.\n- **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.\n- **Full job detail:** structured pay with a pay period, employment type, remote/hybrid/on-site, all locations, dates and the complete description.\n- **Employer showcase:** 40,000+ public employer profiles with about, industry, size, ownership, address, website, logo and recent reviews (paginated up to your limit).\n- **Direct lookups:** paste public Handshake job URLs or numeric job IDs when you already know what you need.\n- **Incremental runs:** `onlyNewJobs` returns only IDs not seen in previous scheduled runs, with a reset toggle.\n- **Empty fields are omitted** from each record rather than returned as null or blank.\n\n## Output per job\n\n- `jobId`, `title`, `jobUrl` — Handshake identity and canonical public page.\n- `company`, `employerId`, `employerWebsite`, `employerLogoUrl`, `employerDescription`, `employerProfileUrl` — employer identity and public links.\n- `location`, `locations[]`, `remote`, `workplace` — primary location, every published site, and remote/hybrid/on-site.\n- `employmentType`, `postingType`, `jobType` — full-time/part-time, Job/Internship, and the normalized legacy type.\n- `salary`, `salaryMin`, `salaryMax`, `salaryCurrency`, `paySchedule`, `salaryType` — pay as published, plus the structured range and period.\n- `postedDate`, `applicationDeadline`, `isExpired` — posting date, expiry and expiry status.\n- `descriptionHtml`, `description` — full description (when descriptions are enabled).\n- `industry`, `roleGroups[]` — employer industry and role groups when Handshake publishes them.\n- `sourceSearchUrl`, `recordType`, `scrapedAt` — provenance and metadata.\n\n## Output per employer\n\n- `name`, `employerId`, `profileUrl`, `companyUrl` — employer identity and public profile.\n- `website`, `logoUrl` — the employer's own site and logo.\n- `description` — the public “About” text.\n- `industry`, `companySize`, `ownershipType`, `address` — public overview fields (ownership is not published for every employer).\n- `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.\n- `recordType`, `scrapedAt`.\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `mode` | string | `searchJobs` | `searchJobs`, `byJobUrls`, `bySearchUrls`, `bySitemap` or `employers`. Legacy `internships` and `companyListings` are accepted and mapped. |\n| `searchQuery` | string | – | Words matched against job titles and descriptions. |\n| `jobRole` | string | `any` | One of 62 published find-jobs role categories. |\n| `internshipRole` | string | `any` | One of 24 internship role categories; selecting one implies `internshipsOnly`. |\n| `location` | string | `any` | One of 94 published city pages. |\n| `workplace` | string | `any` | `any`, `remote`, `hybrid` or `on-site`. |\n| `employmentType` | string | `any` | `any`, `full-time` or `part-time`. |\n| `internshipsOnly` | boolean | false | Keep internships and co-ops. |\n| `postedWithinDays` | integer | – | Keep jobs posted in the last 1–365 days. |\n| `companyFilter` | string | – | Keep jobs whose employer name contains this text. |\n| `minSalary` | integer | – | Keep jobs whose published maximum pay is at least this amount. |\n| `salaryPeriod` | string | `any` | `any`, `year`, `month` or `hour`. |\n| `jobIds` | array | `[]` | Numeric Handshake job IDs (`mode=byJobUrls`). |\n| `jobUrls` | array | `[]` | Public job or share-preview URLs (`mode=byJobUrls`). |\n| `searchUrls` | array | `[]` | Public `joinhandshake.com/find-jobs/...` URLs (`mode=bySearchUrls`). |\n| `employerQuery` | string | – | Employer-name filter (`mode=employers`). |\n| `includeProfiles` | boolean | true | Fetch full employer profiles (`mode=employers`). |\n| `includeReviews` | boolean | true | Add recent review cards to employer records. |\n| `includeDescriptions` | boolean | true | Add `descriptionHtml` and `description` to job records. |\n| `maxItems` | integer | 50 | Maximum job records (1–1000). |\n| `maxEmployers` | integer | 100 | Maximum employer records (1–50,000). |\n| `maxReviewsPerEmployer` | integer | 5 | Maximum recent reviews per employer (1–100). |\n| `onlyNewJobs` | boolean | false | Return only job IDs not seen in previous runs (`searchJobs`/`bySearchUrls`/`bySitemap`). |\n| `resetMonitoringState` | boolean | false | Clear the saved seen-job list before this run. |\n\n### Example: software engineering jobs\n\n```json\n{\n  \"mode\": \"searchJobs\",\n  \"jobRole\": \"software-engineering\",\n  \"workplace\": \"remote\",\n  \"postedWithinDays\": 14,\n  \"maxItems\": 50\n}\n```\n\n### Example: finance internships in Boston\n\n```json\n{\n  \"mode\": \"searchJobs\",\n  \"internshipRole\": \"finance\",\n  \"location\": \"boston-ma\",\n  \"maxItems\": 50\n}\n```\n\n### Example: nursing jobs in Boston\n\n```json\n{\n  \"mode\": \"searchJobs\",\n  \"jobRole\": \"nursing\",\n  \"location\": \"boston-ma\",\n  \"employmentType\": \"full-time\",\n  \"maxItems\": 100\n}\n```\n\n### Example: direct job URLs\n\n```json\n{\n  \"mode\": \"byJobUrls\",\n  \"jobUrls\": [\n    { \"url\": \"https://app.joinhandshake.com/public/jobs/11693959\" },\n    { \"url\": \"https://app.joinhandshake.com/public/jobs/11693995\" }\n  ],\n  \"includeDescriptions\": true\n}\n```\n\n### Example: public search pages\n\n```json\n{\n  \"mode\": \"bySearchUrls\",\n  \"searchUrls\": [\n    { \"url\": \"https://joinhandshake.com/find-jobs/remote/software-engineering/\" }\n  ],\n  \"maxItems\": 100\n}\n```\n\n### Example: employer showcase\n\n```json\n{\n  \"mode\": \"employers\",\n  \"employerQuery\": \"engineering\",\n  \"includeProfiles\": true,\n  \"includeReviews\": true,\n  \"maxReviewsPerEmployer\": 10,\n  \"maxEmployers\": 50\n}\n```\n\n### Example: sitemap scan and incremental monitoring\n\n```json\n{\n  \"mode\": \"bySitemap\",\n  \"searchQuery\": \"nurse\",\n  \"onlyNewJobs\": true,\n  \"maxItems\": 100\n}\n```\n\n## Use cases\n\n- **Campus recruiting** — see which employers are hiring students and recent graduates by city and role.\n- **Salary benchmarking** — compare published pay ranges and periods across roles, cities and employers.\n- **Employer research** — build a shortlist with industry, size, website and employee reviews.\n- **Job-board aggregation** — feed public early-career listings into your own board or newsletter.\n- **Labor-market analysis** — track posting volume, locations and hiring dates over time.\n\n## FAQ\n\n### Do I need a Handshake student account?\n\nNo. 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.\n\n### How many jobs can it discover?\n\nHandshake'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.\n\n### Are salaries always present?\n\nNo. 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.\n\n### Why is `roleGroups` missing on some rows?\n\nRole 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.\n\n### Why is employer ownership or size missing?\n\nHandshake'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.\n\n### How do I search internships?\n\nUse `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.\n\n### How does `onlyNewJobs` work?\n\nThe 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.\n\n### Do I need a proxy?\n\nNo. 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.\n\n### Is the data live?\n\nJobs 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.\n\n### Is this affiliated with Handshake?\n\nNo. This is an independent third-party actor that reads publicly accessible pages. It is not affiliated with, endorsed by or operated by Handshake.\n\n## Limitations\n\n- 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.\n- Role groups are available only when a job appears in the 15 cards on a search page.\n- Salary, ownership and Q&A counts are conditional on what Handshake publishes.\n- Student-only, personalized and application data is out of scope.\n- The actor does not enrich employer emails, phone numbers or social profiles.\n",
      "input": {
        "title": "Handshake Campus Jobs & Employer Showcase Input",
        "description": "Scrape public Handshake jobs by keyword, role, city, or URL, plus public employer profiles with industry, size and reviews.",
        "type": "object",
        "schemaVersion": 1,
        "properties": {
          "mode": {
            "title": "Mode",
            "type": "string",
            "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)"
            ],
            "default": "searchJobs",
            "prefill": "searchJobs"
          },
          "searchQuery": {
            "title": "Keyword",
            "type": "string",
            "description": "Words matched against job titles and descriptions (mode=searchJobs/bySearchUrls). Leave empty to browse.",
            "editor": "textfield",
            "default": "",
            "prefill": ""
          },
          "jobRole": {
            "title": "Role",
            "type": "string",
            "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"
            ],
            "default": "any",
            "prefill": "software-engineering"
          },
          "internshipRole": {
            "title": "Internship role",
            "type": "string",
            "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"
            ],
            "default": "any",
            "prefill": "any"
          },
          "location": {
            "title": "City",
            "type": "string",
            "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"
            ],
            "default": "any",
            "prefill": "any"
          },
          "workplace": {
            "title": "Workplace",
            "type": "string",
            "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"
            ],
            "default": "any",
            "prefill": "any"
          },
          "employmentType": {
            "title": "Employment type",
            "type": "string",
            "description": "Full-time or part-time filter.",
            "editor": "select",
            "enum": [
              "any",
              "full-time",
              "part-time"
            ],
            "enumTitles": [
              "Any employment type",
              "Full-time",
              "Part-time"
            ],
            "default": "any",
            "prefill": "any"
          },
          "internshipsOnly": {
            "title": "Internships & co-ops only",
            "type": "boolean",
            "description": "Keep jobs whose title or description mentions an internship or co-op.",
            "default": false,
            "prefill": false
          },
          "postedWithinDays": {
            "title": "Posted within days",
            "type": "integer",
            "description": "Keep jobs posted in the last N days (1-365). Leave empty for any date.",
            "minimum": 1,
            "maximum": 365
          },
          "companyFilter": {
            "title": "Company contains",
            "type": "string",
            "description": "Keep jobs whose employer name contains this text.",
            "editor": "textfield",
            "default": "",
            "prefill": ""
          },
          "minSalary": {
            "title": "Minimum salary",
            "type": "integer",
            "description": "Keep jobs whose published maximum pay is at least this amount. Compare with the pay period selected below.",
            "minimum": 0,
            "maximum": 1000000
          },
          "salaryPeriod": {
            "title": "Pay period",
            "type": "string",
            "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"
            ],
            "default": "any",
            "prefill": "any"
          },
          "jobIds": {
            "title": "Job IDs",
            "type": "array",
            "description": "Handshake numeric job IDs (mode=byJobUrls).",
            "editor": "stringList",
            "items": {
              "type": "string"
            },
            "default": [],
            "prefill": []
          },
          "jobUrls": {
            "title": "Job URLs",
            "type": "array",
            "description": "Public Handshake job or share-preview URLs (mode=byJobUrls).",
            "editor": "requestListSources",
            "items": {
              "type": "object",
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL",
                  "description": "Public URL"
                }
              }
            },
            "default": [],
            "prefill": []
          },
          "searchUrls": {
            "title": "Search URLs",
            "type": "array",
            "description": "Public joinhandshake.com/find-jobs/ or /internships/ listing URLs (mode=bySearchUrls).",
            "editor": "requestListSources",
            "items": {
              "type": "object",
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL",
                  "description": "Public URL"
                }
              }
            },
            "default": [],
            "prefill": []
          },
          "employerQuery": {
            "title": "Employer contains",
            "type": "string",
            "description": "Keep employers whose name contains this text (mode=employers).",
            "editor": "textfield",
            "default": "",
            "prefill": ""
          },
          "includeProfiles": {
            "title": "Include employer profiles",
            "type": "boolean",
            "description": "Fetch about, industry, size, ownership, address and reviews for each employer (mode=employers).",
            "default": true,
            "prefill": true
          },
          "includeReviews": {
            "title": "Include employer reviews",
            "type": "boolean",
            "description": "Add recent public review cards to employer profiles (mode=employers).",
            "default": true,
            "prefill": true
          },
          "includeDescriptions": {
            "title": "Include job descriptions",
            "type": "boolean",
            "description": "Add the full job description as HTML and plain text.",
            "default": true,
            "prefill": false
          },
          "maxItems": {
            "title": "Max jobs",
            "type": "integer",
            "description": "Maximum job records to return.",
            "minimum": 1,
            "maximum": 1000,
            "default": 50,
            "prefill": 1
          },
          "onlyNewJobs": {
            "title": "Only new jobs",
            "type": "boolean",
            "description": "Return only job IDs not seen in previous runs (mode=searchJobs/bySearchUrls/bySitemap).",
            "default": false,
            "prefill": false
          },
          "resetMonitoringState": {
            "title": "Reset seen-job state",
            "type": "boolean",
            "description": "Clear the saved seen-job list before this run.",
            "default": false,
            "prefill": false
          },
          "maxEmployers": {
            "title": "Max employers",
            "type": "integer",
            "description": "Maximum employer records to return (mode=employers).",
            "minimum": 1,
            "maximum": 50000,
            "default": 100,
            "prefill": 1
          },
          "maxReviewsPerEmployer": {
            "title": "Max reviews per employer",
            "type": "integer",
            "description": "Maximum recent public reviews to keep per employer profile (mode=employers, includeReviews=true).",
            "minimum": 1,
            "maximum": 100,
            "default": 5,
            "prefill": 1
          }
        },
        "required": [
          "mode"
        ]
      },
      "output": {
        "actorOutputSchemaVersion": 1,
        "title": "Handshake Campus Jobs & Employer Showcase Extractor Output",
        "description": "Public Handshake job listings with structured pay, locations, dates and descriptions, plus public employer profiles with industry, size and reviews.",
        "properties": {
          "jobs": {
            "type": "string",
            "title": "Handshake jobs",
            "description": "Dataset containing all scraped public Handshake job listings.",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          },
          "employers": {
            "type": "string",
            "title": "Handshake employers",
            "description": "Dataset containing all scraped public Handshake employer profiles.",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          }
        }
      },
      "storages": {
        "dataset": {
          "actorSpecification": 1,
          "views": {
            "jobs": {
              "title": "Jobs",
              "transformation": {
                "fields": [
                  "title",
                  "company",
                  "location",
                  "employmentType",
                  "salary",
                  "postedDate",
                  "jobUrl"
                ]
              },
              "display": {
                "component": "table",
                "properties": {}
              }
            },
            "employers": {
              "title": "Employers",
              "transformation": {
                "fields": [
                  "name",
                  "industry",
                  "companySize",
                  "website",
                  "reviewCount",
                  "profileUrl"
                ]
              },
              "display": {
                "component": "table",
                "properties": {}
              }
            }
          }
        }
      },
      "environmentVariables": {}
    },
    "buildNumber": "1.1.1",
    "imageDigest": "8ef928edf9939e32a3418f2f1619404b979fa798bb88a33ad141015fa30bb1a8",
    "actVersion": {
      "sourceType": "SOURCE_FILES",
      "buildTag": "latest",
      "versionNumber": "1.1"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.015354444444444445
    }
  }
}