{
  "openapi": "3.0.1",
  "info": {
    "title": "Handshake Jobs Scraper: Internships, Salaries & Job Deadlines",
    "description": "Scrape public Handshake jobs and internships by keyword, role, city or link. Get salary ranges, application deadlines, employer careers links, industry and full descriptions. Filter by remote, employment type and date, or schedule daily runs for new postings only. No login needed.",
    "version": "1.2",
    "x-build-id": "fpGHIbmmapk2ugRg9"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/getascraper~handshake-jobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-getascraper-handshake-jobs-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/getascraper~handshake-jobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-getascraper-handshake-jobs-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/getascraper~handshake-jobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-getascraper-handshake-jobs-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "startUrls": {
            "title": "Handshake page links",
            "type": "array",
            "description": "Optional links to public Handshake job pages (app.joinhandshake.com/public/jobs/123) or public listing pages (joinhandshake.com/find-jobs/... or joinhandshake.com/internships/...). Job links are always read in full.",
            "default": [],
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "jobKind": {
            "title": "Jobs or internships",
            "enum": [
              "any",
              "internship",
              "job"
            ],
            "type": "string",
            "description": "Collect internships, regular jobs, or both.",
            "default": "any"
          },
          "keywords": {
            "title": "Keywords",
            "type": "array",
            "description": "Words to look for, such as \"nurse\", \"software engineer\" or \"data analyst boston\". A city in the keyword narrows the search to that city. Matched against title, employer, role category and description. Leave empty for no keyword filter.",
            "items": {
              "type": "string",
              "minLength": 1
            },
            "default": []
          },
          "roles": {
            "title": "Role Categories",
            "maxItems": 10,
            "type": "array",
            "description": "Handshake role-category slugs such as \"accounting\", \"nursing\" or \"software-engineering\". Each maps to a public role page. Up to 10 roles.",
            "items": {
              "type": "string",
              "minLength": 1
            },
            "default": []
          },
          "locations": {
            "title": "Locations",
            "maxItems": 10,
            "type": "array",
            "description": "Cities such as \"new-york-ny\", \"Austin, TX\", or \"remote\". Combined with roles, the city and role page is used when Handshake has one. Up to 10 locations.",
            "items": {
              "type": "string",
              "minLength": 1
            },
            "default": []
          },
          "employerNames": {
            "title": "Employer Names",
            "type": "array",
            "description": "Keep only jobs whose employer name contains one of these words (case-insensitive).",
            "items": {
              "type": "string",
              "minLength": 1
            },
            "default": []
          },
          "countries": {
            "title": "Countries",
            "type": "array",
            "description": "Keep only jobs located in these countries, such as \"United States\" or \"Canada\". Needs job details, which are read automatically.",
            "items": {
              "type": "string",
              "minLength": 1
            },
            "default": []
          },
          "employmentTypes": {
            "title": "Employment Type",
            "type": "array",
            "description": "Keep only listings with these employment types. Internship postings carry the INTERN type on Handshake; both names work. Needs job details, which are read automatically.",
            "items": {
              "type": "string",
              "enum": [
                "FULL_TIME",
                "PART_TIME",
                "INTERNSHIP",
                "TEMPORARY",
                "CONTRACTOR",
                "VOLUNTEER"
              ]
            },
            "default": []
          },
          "workplaceTypes": {
            "title": "Workplace Status",
            "type": "array",
            "description": "Keep only listings matching this workplace status. Only jobs with a source-confirmed remote/on-site flag are labeled; leave empty to keep all (including unlabeled).",
            "items": {
              "type": "string",
              "enum": [
                "remote",
                "on_site"
              ]
            },
            "default": []
          },
          "postedWithinDays": {
            "title": "Posted within (days)",
            "minimum": 1,
            "maximum": 365,
            "type": "integer",
            "description": "Keep only jobs first posted in the last N days, from 1 to 365. Leave empty for any date."
          },
          "datePostedAfter": {
            "title": "Posted After",
            "type": "string",
            "description": "Optional ISO date. Keep jobs first posted on or after this date.",
            "default": ""
          },
          "datePostedBefore": {
            "title": "Posted Before",
            "type": "string",
            "description": "Optional ISO date. Keep jobs first posted on or before this date.",
            "default": ""
          },
          "minCompensation": {
            "title": "Minimum Compensation",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only jobs whose published salary (in its own pay-schedule unit, e.g. per hour or per year) is at least this amount. Jobs without a published salary are excluded when this is set.",
            "default": 0
          },
          "maxCompensation": {
            "title": "Maximum Compensation",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only jobs whose published salary is at most this amount. Leave at 0 for no upper bound.",
            "default": 0
          },
          "maxItems": {
            "title": "Maximum Jobs",
            "minimum": 1,
            "maximum": 20000,
            "type": "integer",
            "description": "Maximum number of job listings to return across all sources.",
            "default": 25
          },
          "fetchJobDetails": {
            "title": "Read full job details",
            "type": "boolean",
            "description": "Open each posting to add the full description, employment types, application deadline, industry, employer careers link and exact salary. Without it, only the 15 postings shown on each listing page are returned, with less detail.",
            "default": true
          },
          "onlyNewJobs": {
            "title": "Only new jobs",
            "type": "boolean",
            "description": "Return only postings not seen in earlier runs with the same search, for a daily new-jobs feed. The first run returns everything.",
            "default": false
          },
          "deepScan": {
            "title": "Scan the newest postings",
            "type": "boolean",
            "description": "Go beyond the 200 postings behind each listing page by reading the newest postings from Handshake's public job index, newest first. Slower; every posting is opened.",
            "default": false
          },
          "scanLimit": {
            "title": "Postings to inspect",
            "minimum": 1,
            "maximum": 20000,
            "type": "integer",
            "description": "Upper limit of postings opened during a scan of the newest postings.",
            "default": 500
          },
          "proxyConfiguration": {
            "title": "Proxy Configuration",
            "type": "object",
            "description": "Used only if direct requests are refused. Datacenter proxy is enough for Handshake's public pages.",
            "default": {
              "useApifyProxy": true
            }
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}