{
  "data": {
    "id": "GlALe8LJK6Pfmj3Te",
    "actId": "tKgUBufy4olHGAYVB",
    "userId": "zq8lKbpLzTjGDayPC",
    "startedAt": "2026-10-18T04:56:35.438Z",
    "finishedAt": "2026-10-18T04:56:51.106Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "CLI"
    },
    "stats": {
      "durationMillis": 15552,
      "runTimeSecs": 15.552,
      "computeUnits": 0.01728,
      "imageSizeBytes": 354249728
    },
    "options": {
      "useCache": true,
      "betaPackages": false,
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "createdByOrganizationMemberUserId": "GK9YjZRyQZVzOdoH5",
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"SimplyHired Job Search & Salary Parser Input\",\n  \"description\": \"Search SimplyHired (US or any of 23 country sites) by keyword and location or run your own search URLs, and get parsed salary ranges, full descriptions, coordinates and benefits for every job.\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"properties\": {\n    \"mode\": {\n      \"title\": \"Mode\",\n      \"type\": \"string\",\n      \"description\": \"What to fetch: search jobs on SimplyHired, or scrape specific SimplyHired URLs you already have.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"search\",\n        \"byUrl\"\n      ],\n      \"enumTitles\": [\n        \"Search jobs (keyword, location, filters)\",\n        \"Scrape specific URLs (searches or jobs)\"\n      ],\n      \"default\": \"search\",\n      \"prefill\": \"search\"\n    },\n    \"searchQueries\": {\n      \"title\": \"Search queries (mode=search)\",\n      \"type\": \"array\",\n      \"description\": \"One or more job titles, skills, or keywords. Each entry runs as its own search, e.g. `registered nurse` or `python developer, remote`. Ignored when Search URLs are provided.\",\n      \"editor\": \"stringList\",\n      \"default\": [],\n      \"prefill\": [\n        \"software engineer\"\n      ]\n    },\n    \"searchUrls\": {\n      \"title\": \"SimplyHired search URLs (mode=search)\",\n      \"type\": \"array\",\n      \"description\": \"Full SimplyHired search URLs, including any filters and a country domain (e.g. https://www.simplyhired.co.uk/search?q=nurse&l=London). When provided, these are used instead of the query, location and filter fields.\",\n      \"editor\": \"stringList\",\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"jobUrls\": {\n      \"title\": \"Specific URLs (mode=byUrl)\",\n      \"type\": \"array\",\n      \"description\": \"SimplyHired job URLs (https://www.simplyhired.com/job/...) or search URLs to scrape directly. Job IDs may also be pasted on their own.\",\n      \"editor\": \"stringList\",\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"location\": {\n      \"title\": \"Location\",\n      \"type\": \"string\",\n      \"description\": \"City, state, ZIP code, or `remote`. Leave empty to search nationwide (mode=search).\",\n      \"editor\": \"textfield\",\n      \"default\": \"\",\n      \"prefill\": \"New York\"\n    },\n    \"country\": {\n      \"title\": \"Country\",\n      \"type\": \"string\",\n      \"description\": \"Which SimplyHired site to search (mode=search). Choose the country that matches your location.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"united-states\",\n        \"canada\",\n        \"united-kingdom\",\n        \"ireland\",\n        \"germany\",\n        \"france\",\n        \"spain\",\n        \"italy\",\n        \"netherlands\",\n        \"belgium\",\n        \"austria\",\n        \"switzerland\",\n        \"portugal\",\n        \"sweden\",\n        \"india\",\n        \"japan\",\n        \"south-korea\",\n        \"china\",\n        \"brazil\",\n        \"mexico\",\n        \"australia\",\n        \"argentina\",\n        \"south-africa\"\n      ],\n      \"enumTitles\": [\n        \"United States (simplyhired.com)\",\n        \"Canada (simplyhired.ca)\",\n        \"United Kingdom (simplyhired.co.uk)\",\n        \"Ireland (simplyhired.ie)\",\n        \"Germany (simplyhired.de)\",\n        \"France (simplyhired.fr)\",\n        \"Spain (simplyhired.es)\",\n        \"Italy (simplyhired.it)\",\n        \"Netherlands (simplyhired.nl)\",\n        \"Belgium (simplyhired.be)\",\n        \"Austria (simplyhired.at)\",\n        \"Switzerland (simplyhired.ch)\",\n        \"Portugal (simplyhired.pt)\",\n        \"Sweden (simplyhired.se)\",\n        \"India (simplyhired.co.in)\",\n        \"Japan (simplyhired.jp)\",\n        \"South Korea (simplyhired.kr)\",\n        \"China (simplyhired.cn)\",\n        \"Brazil (simplyhired.com.br)\",\n        \"Mexico (simplyhired.mx)\",\n        \"Australia (simplyhired.com.au)\",\n        \"Argentina (simplyhired.com.ar)\",\n        \"South Africa (za.simplyhired.com)\"\n      ],\n      \"default\": \"united-states\",\n      \"prefill\": \"united-states\"\n    },\n    \"radius\": {\n      \"title\": \"Search radius\",\n      \"type\": \"string\",\n      \"description\": \"Distance around the location (mode=search). Only applies when a location is set.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"\",\n        \"exact\",\n        \"5\",\n        \"10\",\n        \"15\",\n        \"25\",\n        \"50\",\n        \"100\"\n      ],\n      \"enumTitles\": [\n        \"Site default (25 miles)\",\n        \"Exact location only\",\n        \"5 miles\",\n        \"10 miles\",\n        \"15 miles\",\n        \"25 miles\",\n        \"50 miles\",\n        \"100 miles\"\n      ],\n      \"default\": \"\",\n      \"prefill\": \"\"\n    },\n    \"sortBy\": {\n      \"title\": \"Sort results by\",\n      \"type\": \"string\",\n      \"description\": \"Order of the search results (mode=search).\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"relevance\",\n        \"date\",\n        \"distance\"\n      ],\n      \"enumTitles\": [\n        \"Relevance\",\n        \"Newest first\",\n        \"Nearest first\"\n      ],\n      \"default\": \"relevance\",\n      \"prefill\": \"relevance\"\n    },\n    \"datePosted\": {\n      \"title\": \"Date posted\",\n      \"type\": \"string\",\n      \"description\": \"Only include jobs added within this window (mode=search).\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"\",\n        \"1\",\n        \"3\",\n        \"7\",\n        \"14\",\n        \"30\"\n      ],\n      \"enumTitles\": [\n        \"Any time\",\n        \"Past 24 hours\",\n        \"Past 3 days\",\n        \"Past week\",\n        \"Past 2 weeks\",\n        \"Past month\"\n      ],\n      \"default\": \"\",\n      \"prefill\": \"\"\n    },\n    \"employmentType\": {\n      \"title\": \"Employment type\",\n      \"type\": \"string\",\n      \"description\": \"Filter by employment type (mode=search).\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"\",\n        \"CF3CP\",\n        \"NJXCK\",\n        \"75GKK\",\n        \"4HKF7\",\n        \"5QWDV\",\n        \"VDTG7\",\n        \"7SBAT\",\n        \"ZG59D\"\n      ],\n      \"enumTitles\": [\n        \"Any\",\n        \"Full-time\",\n        \"Contract\",\n        \"Part-time\",\n        \"Temporary\",\n        \"Permanent\",\n        \"Internship\",\n        \"Temp-to-hire\",\n        \"Freelance\"\n      ],\n      \"default\": \"\",\n      \"prefill\": \"\"\n    },\n    \"minSalary\": {\n      \"title\": \"Minimum salary\",\n      \"type\": \"integer\",\n      \"description\": \"Only jobs with pay at or above this amount, in the local currency of the selected country (e.g. 100000 = $100,000 a year on the US site). Leave 0 for no filter.\",\n      \"minimum\": 0,\n      \"maximum\": 1000000,\n      \"default\": 0,\n      \"prefill\": 0\n    },\n    \"remoteType\": {\n      \"title\": \"Remote work\",\n      \"type\": \"string\",\n      \"description\": \"Filter by remote work arrangement (mode=search).\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"\",\n        \"Remote\",\n        \"Hybrid work\"\n      ],\n      \"enumTitles\": [\n        \"Any\",\n        \"Remote only\",\n        \"Hybrid\"\n      ],\n      \"default\": \"\",\n      \"prefill\": \"\"\n    },\n    \"developerSkill\": {\n      \"title\": \"Developer skill\",\n      \"type\": \"string\",\n      \"description\": \"Only jobs tagged with this software skill (mode=search). Applies mainly to tech roles; combine several skills with Developer skills below.\",\n      \"editor\": \"select\",\n      \"enum\": [\n        \"\",\n        \"JB2WC\",\n        \"X62BT\",\n        \"84K74\",\n        \"WD7PP\",\n        \"FGY89\",\n        \"EVPJU\",\n        \"AP3T4\",\n        \"6XQ9P\",\n        \"6ETQT\",\n        \"GJUK3\",\n        \"NGEEK\",\n        \"U5AXZ\",\n        \"6M28R\",\n        \"EHNJH\",\n        \"XH9RQ\",\n        \"FQMG4\",\n        \"AGW49\",\n        \"JQ94N\",\n        \"GKAXA\",\n        \"KTEH7\",\n        \"5FG4F\"\n      ],\n      \"enumTitles\": [\n        \"Any\",\n        \"JavaScript\",\n        \"Python\",\n        \"React\",\n        \"TypeScript\",\n        \"SQL\",\n        \"Java\",\n        \"C#\",\n        \"CSS\",\n        \"Go\",\n        \"C++\",\n        \"Angular\",\n        \"Swift\",\n        \"Node.js\",\n        \".NET\",\n        \"Spring framework\",\n        \"PHP\",\n        \".NET Core\",\n        \"Scala\",\n        \"Flutter\",\n        \"Perl\",\n        \"Dart\"\n      ],\n      \"default\": \"\",\n      \"prefill\": \"\"\n    },\n    \"developerSkills\": {\n      \"title\": \"Developer skills (extra, combined with AND)\",\n      \"type\": \"array\",\n      \"description\": \"Additional software skills to require together with the Developer skill above (mode=search). Use skill names such as `Python`, `SQL`, `React` (or their codes). Jobs must match every listed skill.\",\n      \"editor\": \"stringList\",\n      \"default\": [],\n      \"prefill\": []\n    },\n    \"fetchJobDetails\": {\n      \"title\": \"Fetch full job details\",\n      \"type\": \"boolean\",\n      \"description\": \"Fetch each job's detail payload for the full description, parsed salary, coordinates, qualifications and employer rating. Adds one fast request per job. Turn off for search-card fields only.\",\n      \"default\": true,\n      \"prefill\": true\n    },\n    \"enrichCompanyPages\": {\n      \"title\": \"Enrich employer company pages\",\n      \"type\": \"boolean\",\n      \"description\": \"Look up each employer's SimplyHired company page (once per employer) and add its address, size, revenue band and industry when the page's company name matches the listing. Off by default.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"maximizeCoverage\": {\n      \"title\": \"Maximize coverage (slower)\",\n      \"type\": \"boolean\",\n      \"description\": \"When a search hits SimplyHired's per-search result limit, continue with extra facet searches (job types and developer skills) and merge the unique jobs. Slower and uses more requests, but returns more of the matching jobs.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"maxItems\": {\n      \"title\": \"Max items\",\n      \"type\": \"integer\",\n      \"description\": \"Hard cap on the number of job records returned.\",\n      \"minimum\": 1,\n      \"maximum\": 5000,\n      \"default\": 20,\n      \"prefill\": 3\n    }\n  },\n  \"required\": [\n    \"mode\"\n  ]\n}",
    "readme": "# SimplyHired Job Search & Salary Parser\n\nSimplyHired gathers job postings from employer career sites, staffing agencies, and niche job boards across 23 country markets. This actor turns those postings into structured records: it can run keyword and location searches (or replay search URLs you paste in), or fetch individual job postings you already have, and it returns each listing with its salary parsed into numbers, the full description, coordinates, and application details.\n\n## What this actor does\n\n- **Search any SimplyHired market:** 23 country sites (United States, Canada, United Kingdom, Germany, France, India, Japan, Australia, Brazil, and more), each with keyword, location, and radius search.\n- **Filter server-side:** date posted, employment type, minimum pay, remote/hybrid, sort order, and developer skills (one or several) are applied by SimplyHired itself, so the result count matches the site.\n- **Enrich every job, not just the first one:** each record is completed from the posting's own detail data — full description, salary numbers, qualifications, coordinates, employer rating, and application link.\n- **Parse salaries in local formats:** display text like `$140,000 - $180,000 a year`, `£45,000 - £55,000 a year`, `80.000 € – 120.000 € pro Jahr`, or `時給 4,000円` becomes numeric `salaryMin` / `salaryMax` with the right currency and pay period.\n- **Maximize coverage on big searches:** SimplyHired serves roughly 900–1,000 results per search. With `maximizeCoverage` the actor keeps going with extra facet searches (job types, developer skills) and merges the unique postings — 2–2.5x more jobs than a single search in testing.\n- **Optional employer company pages:** with `enrichCompanyPages` the actor looks up each employer's SimplyHired company page (once per employer) and adds its address, headcount band, revenue band, and industry — only when the page's own company name matches the listing.\n- **Feed URLs as well as forms:** paste SimplyHired search URLs or job URLs (or bare job IDs) and let the actor do the pagination.\n- **Fields a listing doesn't provide are left out of that record** — no empty placeholders.\n\n## Output per job\n\n| Field | Description |\n|---|---|\n| `jobId` | Unique SimplyHired job key. |\n| `title`, `normalizedTitle` | Job title as published and its normalized form. |\n| `company` | Employer name. |\n| `location` | Location string as shown on the listing. |\n| `city`, `state` | City and state/region parsed from the listing. |\n| `latitude`, `longitude` | Coordinates of the posting location. |\n| `remoteType` | Remote or hybrid arrangement, when stated. |\n| `employmentType` | Primary employment type (Full-time, Contract, Part-time, …). |\n| `employmentTypes` | Every employment type on the posting, including the listing's localized labels when provided. |\n| `salary` | Salary text exactly as displayed on the listing. |\n| `salaryMin`, `salaryMax` | Parsed pay bounds in full local-currency units. |\n| `salaryCurrency` | ISO currency code (e.g. `USD`, `GBP`, `EUR`, `JPY`). |\n| `salaryPeriod` | `annual`, `monthly`, `weekly`, `daily`, or `hourly`. |\n| `description` | Full job description with HTML tags stripped. |\n| `benefits` | Benefits listed on the posting. |\n| `qualifications` | Qualifications extracted by SimplyHired. |\n| `requirements` | Requirement tags shown on the search card. |\n| `datePosted` | ISO 8601 UTC timestamp of the posting date. |\n| `expirationDate` | Listing expiration date, when stated. |\n| `jobUrl` | SimplyHired listing URL. |\n| `applicationUrl` | SimplyHired apply/redirect link for the posting. |\n| `companyPageUrl` | Employer's SimplyHired company page (from the source, or verified by `enrichCompanyPages`). |\n| `companyAddress`, `companyEmployeeCount`, `companyRevenue`, `companyIndustry` | Employer profile details from the company page (only with `enrichCompanyPages`, and only when the page matches the listing's employer). |\n| `companyRating` | Employer rating, when SimplyHired shows one. |\n| `sponsored` | Whether the listing is a sponsored placement. |\n| `indeedApply` | Whether the posting uses the Indeed application flow. |\n| `snippet` | Short preview text from the search card. |\n| `logoUrl` | Employer logo image, when available. |\n| `sourceDomain` | Which SimplyHired site the record came from (e.g. `www.simplyhired.co.uk`). |\n| `searchUrl`, `searchQuery` | The search that produced the record. |\n| `country` | Country market value (e.g. `united-kingdom`). |\n| `sourceUrl` | URL the record was scraped from. |\n| `recordType` | Always `\"job\"`. |\n| `scrapedAt` | ISO 8601 UTC timestamp of when this actor fetched the record. |\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `mode` | String (select) | `search` | `search` (form-driven searches) or `byUrl` (scrape specific URLs). |\n| `searchQueries` | Array of strings | – | Job titles, skills, or keywords. Each entry runs its own search. Used when `mode` is `search` and no search URLs are given. |\n| `searchUrls` | Array of strings | – | Full SimplyHired search URLs (with any filters). They take precedence over the query/location/filter fields. |\n| `jobUrls` | Array of strings | – | Job URLs, job IDs, or search URLs to scrape directly. Used when `mode` is `byUrl`. |\n| `location` | String | – | City, state, ZIP, or `remote`. Leave empty for a nationwide search. |\n| `country` | String (select) | `united-states` | Which SimplyHired site to search. Pick the country that matches your location. |\n| `radius` | String (select) | site default (25 mi) | Distance around the location: exact, 5, 10, 15, 25, 50, or 100 miles. |\n| `sortBy` | String (select) | `relevance` | `relevance`, `date` (newest first), or `distance` (nearest first). |\n| `datePosted` | String (select) | any time | Past 24 hours, 3 days, week, 2 weeks, or month. |\n| `employmentType` | String (select) | any | Full-time, Contract, Part-time, Temporary, Permanent, Internship, Temp-to-hire, or Freelance. |\n| `minSalary` | Integer | `0` | Minimum pay in the country's local currency (e.g. `100000` on the US site = $100,000/year). |\n| `remoteType` | String (select) | any | `Remote` or `Hybrid work`. |\n| `developerSkill` | String (select) | any | One software skill such as Python, Java, React, SQL, Go, or Swift. |\n| `developerSkills` | Array of strings | – | Extra skills to require together with the single skill above (AND). Accepts names (`Python`, `SQL`) or codes. |\n| `fetchJobDetails` | Boolean | `true` | Fetch each posting's detail data (description, parsed salary, coordinates, qualifications). Adds one fast request per job. |\n| `enrichCompanyPages` | Boolean | `false` | Look up each employer's SimplyHired company page (one request per employer, cached) for address, headcount band, revenue band, and industry. Only matched employers are filled. |\n| `maximizeCoverage` | Boolean | `false` | Keep collecting past SimplyHired's per-search result limit using extra facet searches, merged and deduplicated. Slower. |\n| `maxItems` | Integer | `20` | Hard cap on returned records (1–5000). |\n\n## Examples\n\n### Keyword search with filters\n\n```json\n{\n    \"mode\": \"search\",\n    \"searchQueries\": [\"registered nurse\"],\n    \"location\": \"Houston, TX\",\n    \"country\": \"united-states\",\n    \"datePosted\": \"7\",\n    \"employmentType\": \"CF3CP\",\n    \"maxItems\": 100\n}\n```\n\n### Remote jobs in Canada above a pay floor\n\n```json\n{\n    \"mode\": \"search\",\n    \"searchQueries\": [\"customer success manager\"],\n    \"location\": \"remote\",\n    \"country\": \"canada\",\n    \"remoteType\": \"Remote\",\n    \"minSalary\": 80000,\n    \"sortBy\": \"date\",\n    \"maxItems\": 150\n}\n```\n\n### Run prepared search URLs (any country)\n\n```json\n{\n    \"mode\": \"search\",\n    \"searchUrls\": [\n        \"https://www.simplyhired.co.uk/search?q=software+engineer&l=London&t=7\",\n        \"https://www.simplyhired.de/search?q=entwickler&l=Berlin\"\n    ],\n    \"maxItems\": 200\n}\n```\n\n### Scrape specific job URLs\n\n```json\n{\n    \"mode\": \"byUrl\",\n    \"jobUrls\": [\n        \"https://www.simplyhired.com/job/pR885UfXXEquRuih1PVGw9Ujl7fkq-RglEg5fxkaZzhQn1D46UaJzQ\",\n        \"https://www.simplyhired.ca/job/MebGsOvO4rbcC1COSt7eX0Ii5i-RX6ItIdOtA-OMQGDW5w024IZ81g\"\n    ],\n    \"maxItems\": 2\n}\n```\n\n## Use cases\n\n- **Pay benchmarking:** aggregate `salaryMin` / `salaryMax` by role, city, and employment type within one currency.\n- **Cross-market hiring research:** compare supply for the same role across the 23 SimplyHired markets in separate runs.\n- **Recruiting pipelines:** monitor which employers are posting for a role, with coordinates and company ratings attached.\n- **Job alerting and feeds:** schedule a run per keyword and forward new `jobId`s to your CRM, sheet, or webhook.\n- **Skills analysis:** use `developerSkill` filters and `qualifications` to track technology demand over time.\n- **Posting refresh:** feed previously collected `jobUrl` values back through `mode: \"byUrl\"` to re-check status and pay.\n\n## FAQ\n\n### Where does this data come from?\n\nEvery record comes from SimplyHired's public job pages and the site's own page data, without any login. This actor is an independent tool and is not affiliated with or endorsed by SimplyHired.\n\n### Which countries are supported?\n\nThe United States, Canada, the United Kingdom, Ireland, Germany, France, Spain, Italy, the Netherlands, Belgium, Austria, Switzerland, Portugal, Sweden, India, Japan, South Korea, China, Brazil, Mexico, Australia, Argentina, and South Africa. Choose the country in the input, or use a search URL from the market you want.\n\n### Why are some salary fields missing?\n\nSimplyHired only shows pay when the employer discloses it. When a listing has no pay information, the salary fields are omitted from that record rather than guessed. `salary` keeps the exact text; `salaryMin` / `salaryMax` are parsed from it (or from SimplyHired's structured pay data on the US site) in the local currency.\n\n### What's the difference between `salary` and `salaryMin` / `salaryMax`?\n\n`salary` is the display text exactly as shown (e.g. `£45,000 - £55,000 a year`). `salaryMin` / `salaryMax` / `salaryCurrency` / `salaryPeriod` are the same value parsed into numbers, a currency code, and a pay period for filtering and aggregation. Use `salaryCurrency` before comparing values across countries.\n\n### How many results can one search return?\n\nThe actor keeps paging until your `maxItems` cap or the end of the result set. SimplyHired serves roughly 900–1,000 listings per search, even when it reports a larger match count. For more than that, turn on `maximizeCoverage`: the actor splits the search into facet sub-searches (employment types and developer skills), merges them and removes duplicates — in testing this returned 2.3x more unique jobs than a single search. You can also split by date window, radius, pay floor, or nearby locations yourself and combine the runs.\n\n### What do the link fields point to?\n\n`applicationUrl` is SimplyHired's own apply link for the posting — the same link the Apply button on the listing page uses. Open it from the job listing (or with an active SimplyHired session); it is not a direct employer URL, and the employer's own application page is reached by following that button in your browser. `companyPageUrl` is present only when SimplyHired includes an employer page for the posting: turn on `enrichCompanyPages` to look the employer up by name instead, and the actor adds the link (plus the employer's address, size, revenue band and industry) only when the page's own company name matches the listing's employer — mismatches and missing pages are omitted.\n\n### Why is `employmentType` in English while the listing is in another language?\n\n`employmentType` reports SimplyHired's own employment-type taxonomy (Full-time, Permanent, Contract, …), which the site uses across all its markets. `employmentTypes` also includes the listing's localized labels (for example \"Festanstellung\" or \"CDI\") when the posting provides them.\n\n### Can I mix several keywords or countries in one run?\n\nYes. Add multiple `searchQueries`, or pass several `searchUrls` from different country markets — each is walked separately and results are deduplicated by `jobId`.\n\n### Do I need an account, cookies, or a proxy?\n\nNo. The actor reads public pages only and connects on its own. Fill in the input and run it.\n\n### How fresh is the data?\n\nEach run queries SimplyHired live, so the records reflect the state of the site at run time. Schedule the actor if you want recurring snapshots.\n",
    "actorDefinition": {
      "actorSpecification": 1,
      "name": "simplyhired-job-search-and-salary-parser",
      "title": "SimplyHired Job Search & Salary Parser",
      "description": "Search SimplyHired in 23 countries by keyword, location, pay, job type, remote work and skills — with parsed salaries, full descriptions, coordinates and company details for every job.",
      "version": "1.0",
      "buildTag": "latest",
      "dockerfile": "./Dockerfile",
      "readme": "# SimplyHired Job Search & Salary Parser\n\nSimplyHired gathers job postings from employer career sites, staffing agencies, and niche job boards across 23 country markets. This actor turns those postings into structured records: it can run keyword and location searches (or replay search URLs you paste in), or fetch individual job postings you already have, and it returns each listing with its salary parsed into numbers, the full description, coordinates, and application details.\n\n## What this actor does\n\n- **Search any SimplyHired market:** 23 country sites (United States, Canada, United Kingdom, Germany, France, India, Japan, Australia, Brazil, and more), each with keyword, location, and radius search.\n- **Filter server-side:** date posted, employment type, minimum pay, remote/hybrid, sort order, and developer skills (one or several) are applied by SimplyHired itself, so the result count matches the site.\n- **Enrich every job, not just the first one:** each record is completed from the posting's own detail data — full description, salary numbers, qualifications, coordinates, employer rating, and application link.\n- **Parse salaries in local formats:** display text like `$140,000 - $180,000 a year`, `£45,000 - £55,000 a year`, `80.000 € – 120.000 € pro Jahr`, or `時給 4,000円` becomes numeric `salaryMin` / `salaryMax` with the right currency and pay period.\n- **Maximize coverage on big searches:** SimplyHired serves roughly 900–1,000 results per search. With `maximizeCoverage` the actor keeps going with extra facet searches (job types, developer skills) and merges the unique postings — 2–2.5x more jobs than a single search in testing.\n- **Optional employer company pages:** with `enrichCompanyPages` the actor looks up each employer's SimplyHired company page (once per employer) and adds its address, headcount band, revenue band, and industry — only when the page's own company name matches the listing.\n- **Feed URLs as well as forms:** paste SimplyHired search URLs or job URLs (or bare job IDs) and let the actor do the pagination.\n- **Fields a listing doesn't provide are left out of that record** — no empty placeholders.\n\n## Output per job\n\n| Field | Description |\n|---|---|\n| `jobId` | Unique SimplyHired job key. |\n| `title`, `normalizedTitle` | Job title as published and its normalized form. |\n| `company` | Employer name. |\n| `location` | Location string as shown on the listing. |\n| `city`, `state` | City and state/region parsed from the listing. |\n| `latitude`, `longitude` | Coordinates of the posting location. |\n| `remoteType` | Remote or hybrid arrangement, when stated. |\n| `employmentType` | Primary employment type (Full-time, Contract, Part-time, …). |\n| `employmentTypes` | Every employment type on the posting, including the listing's localized labels when provided. |\n| `salary` | Salary text exactly as displayed on the listing. |\n| `salaryMin`, `salaryMax` | Parsed pay bounds in full local-currency units. |\n| `salaryCurrency` | ISO currency code (e.g. `USD`, `GBP`, `EUR`, `JPY`). |\n| `salaryPeriod` | `annual`, `monthly`, `weekly`, `daily`, or `hourly`. |\n| `description` | Full job description with HTML tags stripped. |\n| `benefits` | Benefits listed on the posting. |\n| `qualifications` | Qualifications extracted by SimplyHired. |\n| `requirements` | Requirement tags shown on the search card. |\n| `datePosted` | ISO 8601 UTC timestamp of the posting date. |\n| `expirationDate` | Listing expiration date, when stated. |\n| `jobUrl` | SimplyHired listing URL. |\n| `applicationUrl` | SimplyHired apply/redirect link for the posting. |\n| `companyPageUrl` | Employer's SimplyHired company page (from the source, or verified by `enrichCompanyPages`). |\n| `companyAddress`, `companyEmployeeCount`, `companyRevenue`, `companyIndustry` | Employer profile details from the company page (only with `enrichCompanyPages`, and only when the page matches the listing's employer). |\n| `companyRating` | Employer rating, when SimplyHired shows one. |\n| `sponsored` | Whether the listing is a sponsored placement. |\n| `indeedApply` | Whether the posting uses the Indeed application flow. |\n| `snippet` | Short preview text from the search card. |\n| `logoUrl` | Employer logo image, when available. |\n| `sourceDomain` | Which SimplyHired site the record came from (e.g. `www.simplyhired.co.uk`). |\n| `searchUrl`, `searchQuery` | The search that produced the record. |\n| `country` | Country market value (e.g. `united-kingdom`). |\n| `sourceUrl` | URL the record was scraped from. |\n| `recordType` | Always `\"job\"`. |\n| `scrapedAt` | ISO 8601 UTC timestamp of when this actor fetched the record. |\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `mode` | String (select) | `search` | `search` (form-driven searches) or `byUrl` (scrape specific URLs). |\n| `searchQueries` | Array of strings | – | Job titles, skills, or keywords. Each entry runs its own search. Used when `mode` is `search` and no search URLs are given. |\n| `searchUrls` | Array of strings | – | Full SimplyHired search URLs (with any filters). They take precedence over the query/location/filter fields. |\n| `jobUrls` | Array of strings | – | Job URLs, job IDs, or search URLs to scrape directly. Used when `mode` is `byUrl`. |\n| `location` | String | – | City, state, ZIP, or `remote`. Leave empty for a nationwide search. |\n| `country` | String (select) | `united-states` | Which SimplyHired site to search. Pick the country that matches your location. |\n| `radius` | String (select) | site default (25 mi) | Distance around the location: exact, 5, 10, 15, 25, 50, or 100 miles. |\n| `sortBy` | String (select) | `relevance` | `relevance`, `date` (newest first), or `distance` (nearest first). |\n| `datePosted` | String (select) | any time | Past 24 hours, 3 days, week, 2 weeks, or month. |\n| `employmentType` | String (select) | any | Full-time, Contract, Part-time, Temporary, Permanent, Internship, Temp-to-hire, or Freelance. |\n| `minSalary` | Integer | `0` | Minimum pay in the country's local currency (e.g. `100000` on the US site = $100,000/year). |\n| `remoteType` | String (select) | any | `Remote` or `Hybrid work`. |\n| `developerSkill` | String (select) | any | One software skill such as Python, Java, React, SQL, Go, or Swift. |\n| `developerSkills` | Array of strings | – | Extra skills to require together with the single skill above (AND). Accepts names (`Python`, `SQL`) or codes. |\n| `fetchJobDetails` | Boolean | `true` | Fetch each posting's detail data (description, parsed salary, coordinates, qualifications). Adds one fast request per job. |\n| `enrichCompanyPages` | Boolean | `false` | Look up each employer's SimplyHired company page (one request per employer, cached) for address, headcount band, revenue band, and industry. Only matched employers are filled. |\n| `maximizeCoverage` | Boolean | `false` | Keep collecting past SimplyHired's per-search result limit using extra facet searches, merged and deduplicated. Slower. |\n| `maxItems` | Integer | `20` | Hard cap on returned records (1–5000). |\n\n## Examples\n\n### Keyword search with filters\n\n```json\n{\n    \"mode\": \"search\",\n    \"searchQueries\": [\"registered nurse\"],\n    \"location\": \"Houston, TX\",\n    \"country\": \"united-states\",\n    \"datePosted\": \"7\",\n    \"employmentType\": \"CF3CP\",\n    \"maxItems\": 100\n}\n```\n\n### Remote jobs in Canada above a pay floor\n\n```json\n{\n    \"mode\": \"search\",\n    \"searchQueries\": [\"customer success manager\"],\n    \"location\": \"remote\",\n    \"country\": \"canada\",\n    \"remoteType\": \"Remote\",\n    \"minSalary\": 80000,\n    \"sortBy\": \"date\",\n    \"maxItems\": 150\n}\n```\n\n### Run prepared search URLs (any country)\n\n```json\n{\n    \"mode\": \"search\",\n    \"searchUrls\": [\n        \"https://www.simplyhired.co.uk/search?q=software+engineer&l=London&t=7\",\n        \"https://www.simplyhired.de/search?q=entwickler&l=Berlin\"\n    ],\n    \"maxItems\": 200\n}\n```\n\n### Scrape specific job URLs\n\n```json\n{\n    \"mode\": \"byUrl\",\n    \"jobUrls\": [\n        \"https://www.simplyhired.com/job/pR885UfXXEquRuih1PVGw9Ujl7fkq-RglEg5fxkaZzhQn1D46UaJzQ\",\n        \"https://www.simplyhired.ca/job/MebGsOvO4rbcC1COSt7eX0Ii5i-RX6ItIdOtA-OMQGDW5w024IZ81g\"\n    ],\n    \"maxItems\": 2\n}\n```\n\n## Use cases\n\n- **Pay benchmarking:** aggregate `salaryMin` / `salaryMax` by role, city, and employment type within one currency.\n- **Cross-market hiring research:** compare supply for the same role across the 23 SimplyHired markets in separate runs.\n- **Recruiting pipelines:** monitor which employers are posting for a role, with coordinates and company ratings attached.\n- **Job alerting and feeds:** schedule a run per keyword and forward new `jobId`s to your CRM, sheet, or webhook.\n- **Skills analysis:** use `developerSkill` filters and `qualifications` to track technology demand over time.\n- **Posting refresh:** feed previously collected `jobUrl` values back through `mode: \"byUrl\"` to re-check status and pay.\n\n## FAQ\n\n### Where does this data come from?\n\nEvery record comes from SimplyHired's public job pages and the site's own page data, without any login. This actor is an independent tool and is not affiliated with or endorsed by SimplyHired.\n\n### Which countries are supported?\n\nThe United States, Canada, the United Kingdom, Ireland, Germany, France, Spain, Italy, the Netherlands, Belgium, Austria, Switzerland, Portugal, Sweden, India, Japan, South Korea, China, Brazil, Mexico, Australia, Argentina, and South Africa. Choose the country in the input, or use a search URL from the market you want.\n\n### Why are some salary fields missing?\n\nSimplyHired only shows pay when the employer discloses it. When a listing has no pay information, the salary fields are omitted from that record rather than guessed. `salary` keeps the exact text; `salaryMin` / `salaryMax` are parsed from it (or from SimplyHired's structured pay data on the US site) in the local currency.\n\n### What's the difference between `salary` and `salaryMin` / `salaryMax`?\n\n`salary` is the display text exactly as shown (e.g. `£45,000 - £55,000 a year`). `salaryMin` / `salaryMax` / `salaryCurrency` / `salaryPeriod` are the same value parsed into numbers, a currency code, and a pay period for filtering and aggregation. Use `salaryCurrency` before comparing values across countries.\n\n### How many results can one search return?\n\nThe actor keeps paging until your `maxItems` cap or the end of the result set. SimplyHired serves roughly 900–1,000 listings per search, even when it reports a larger match count. For more than that, turn on `maximizeCoverage`: the actor splits the search into facet sub-searches (employment types and developer skills), merges them and removes duplicates — in testing this returned 2.3x more unique jobs than a single search. You can also split by date window, radius, pay floor, or nearby locations yourself and combine the runs.\n\n### What do the link fields point to?\n\n`applicationUrl` is SimplyHired's own apply link for the posting — the same link the Apply button on the listing page uses. Open it from the job listing (or with an active SimplyHired session); it is not a direct employer URL, and the employer's own application page is reached by following that button in your browser. `companyPageUrl` is present only when SimplyHired includes an employer page for the posting: turn on `enrichCompanyPages` to look the employer up by name instead, and the actor adds the link (plus the employer's address, size, revenue band and industry) only when the page's own company name matches the listing's employer — mismatches and missing pages are omitted.\n\n### Why is `employmentType` in English while the listing is in another language?\n\n`employmentType` reports SimplyHired's own employment-type taxonomy (Full-time, Permanent, Contract, …), which the site uses across all its markets. `employmentTypes` also includes the listing's localized labels (for example \"Festanstellung\" or \"CDI\") when the posting provides them.\n\n### Can I mix several keywords or countries in one run?\n\nYes. Add multiple `searchQueries`, or pass several `searchUrls` from different country markets — each is walked separately and results are deduplicated by `jobId`.\n\n### Do I need an account, cookies, or a proxy?\n\nNo. The actor reads public pages only and connects on its own. Fill in the input and run it.\n\n### How fresh is the data?\n\nEach run queries SimplyHired live, so the records reflect the state of the site at run time. Schedule the actor if you want recurring snapshots.\n",
      "input": {
        "title": "SimplyHired Job Search & Salary Parser Input",
        "description": "Search SimplyHired (US or any of 23 country sites) by keyword and location or run your own search URLs, and get parsed salary ranges, full descriptions, coordinates and benefits for every job.",
        "type": "object",
        "schemaVersion": 1,
        "properties": {
          "mode": {
            "title": "Mode",
            "type": "string",
            "description": "What to fetch: search jobs on SimplyHired, or scrape specific SimplyHired URLs you already have.",
            "editor": "select",
            "enum": [
              "search",
              "byUrl"
            ],
            "enumTitles": [
              "Search jobs (keyword, location, filters)",
              "Scrape specific URLs (searches or jobs)"
            ],
            "default": "search",
            "prefill": "search"
          },
          "searchQueries": {
            "title": "Search queries (mode=search)",
            "type": "array",
            "description": "One or more job titles, skills, or keywords. Each entry runs as its own search, e.g. `registered nurse` or `python developer, remote`. Ignored when Search URLs are provided.",
            "editor": "stringList",
            "default": [],
            "prefill": [
              "software engineer"
            ]
          },
          "searchUrls": {
            "title": "SimplyHired search URLs (mode=search)",
            "type": "array",
            "description": "Full SimplyHired search URLs, including any filters and a country domain (e.g. https://www.simplyhired.co.uk/search?q=nurse&l=London). When provided, these are used instead of the query, location and filter fields.",
            "editor": "stringList",
            "default": [],
            "prefill": []
          },
          "jobUrls": {
            "title": "Specific URLs (mode=byUrl)",
            "type": "array",
            "description": "SimplyHired job URLs (https://www.simplyhired.com/job/...) or search URLs to scrape directly. Job IDs may also be pasted on their own.",
            "editor": "stringList",
            "default": [],
            "prefill": []
          },
          "location": {
            "title": "Location",
            "type": "string",
            "description": "City, state, ZIP code, or `remote`. Leave empty to search nationwide (mode=search).",
            "editor": "textfield",
            "default": "",
            "prefill": "New York"
          },
          "country": {
            "title": "Country",
            "type": "string",
            "description": "Which SimplyHired site to search (mode=search). Choose the country that matches your location.",
            "editor": "select",
            "enum": [
              "united-states",
              "canada",
              "united-kingdom",
              "ireland",
              "germany",
              "france",
              "spain",
              "italy",
              "netherlands",
              "belgium",
              "austria",
              "switzerland",
              "portugal",
              "sweden",
              "india",
              "japan",
              "south-korea",
              "china",
              "brazil",
              "mexico",
              "australia",
              "argentina",
              "south-africa"
            ],
            "enumTitles": [
              "United States (simplyhired.com)",
              "Canada (simplyhired.ca)",
              "United Kingdom (simplyhired.co.uk)",
              "Ireland (simplyhired.ie)",
              "Germany (simplyhired.de)",
              "France (simplyhired.fr)",
              "Spain (simplyhired.es)",
              "Italy (simplyhired.it)",
              "Netherlands (simplyhired.nl)",
              "Belgium (simplyhired.be)",
              "Austria (simplyhired.at)",
              "Switzerland (simplyhired.ch)",
              "Portugal (simplyhired.pt)",
              "Sweden (simplyhired.se)",
              "India (simplyhired.co.in)",
              "Japan (simplyhired.jp)",
              "South Korea (simplyhired.kr)",
              "China (simplyhired.cn)",
              "Brazil (simplyhired.com.br)",
              "Mexico (simplyhired.mx)",
              "Australia (simplyhired.com.au)",
              "Argentina (simplyhired.com.ar)",
              "South Africa (za.simplyhired.com)"
            ],
            "default": "united-states",
            "prefill": "united-states"
          },
          "radius": {
            "title": "Search radius",
            "type": "string",
            "description": "Distance around the location (mode=search). Only applies when a location is set.",
            "editor": "select",
            "enum": [
              "",
              "exact",
              "5",
              "10",
              "15",
              "25",
              "50",
              "100"
            ],
            "enumTitles": [
              "Site default (25 miles)",
              "Exact location only",
              "5 miles",
              "10 miles",
              "15 miles",
              "25 miles",
              "50 miles",
              "100 miles"
            ],
            "default": "",
            "prefill": ""
          },
          "sortBy": {
            "title": "Sort results by",
            "type": "string",
            "description": "Order of the search results (mode=search).",
            "editor": "select",
            "enum": [
              "relevance",
              "date",
              "distance"
            ],
            "enumTitles": [
              "Relevance",
              "Newest first",
              "Nearest first"
            ],
            "default": "relevance",
            "prefill": "relevance"
          },
          "datePosted": {
            "title": "Date posted",
            "type": "string",
            "description": "Only include jobs added within this window (mode=search).",
            "editor": "select",
            "enum": [
              "",
              "1",
              "3",
              "7",
              "14",
              "30"
            ],
            "enumTitles": [
              "Any time",
              "Past 24 hours",
              "Past 3 days",
              "Past week",
              "Past 2 weeks",
              "Past month"
            ],
            "default": "",
            "prefill": ""
          },
          "employmentType": {
            "title": "Employment type",
            "type": "string",
            "description": "Filter by employment type (mode=search).",
            "editor": "select",
            "enum": [
              "",
              "CF3CP",
              "NJXCK",
              "75GKK",
              "4HKF7",
              "5QWDV",
              "VDTG7",
              "7SBAT",
              "ZG59D"
            ],
            "enumTitles": [
              "Any",
              "Full-time",
              "Contract",
              "Part-time",
              "Temporary",
              "Permanent",
              "Internship",
              "Temp-to-hire",
              "Freelance"
            ],
            "default": "",
            "prefill": ""
          },
          "minSalary": {
            "title": "Minimum salary",
            "type": "integer",
            "description": "Only jobs with pay at or above this amount, in the local currency of the selected country (e.g. 100000 = $100,000 a year on the US site). Leave 0 for no filter.",
            "minimum": 0,
            "maximum": 1000000,
            "default": 0,
            "prefill": 0
          },
          "remoteType": {
            "title": "Remote work",
            "type": "string",
            "description": "Filter by remote work arrangement (mode=search).",
            "editor": "select",
            "enum": [
              "",
              "Remote",
              "Hybrid work"
            ],
            "enumTitles": [
              "Any",
              "Remote only",
              "Hybrid"
            ],
            "default": "",
            "prefill": ""
          },
          "developerSkill": {
            "title": "Developer skill",
            "type": "string",
            "description": "Only jobs tagged with this software skill (mode=search). Applies mainly to tech roles; combine several skills with Developer skills below.",
            "editor": "select",
            "enum": [
              "",
              "JB2WC",
              "X62BT",
              "84K74",
              "WD7PP",
              "FGY89",
              "EVPJU",
              "AP3T4",
              "6XQ9P",
              "6ETQT",
              "GJUK3",
              "NGEEK",
              "U5AXZ",
              "6M28R",
              "EHNJH",
              "XH9RQ",
              "FQMG4",
              "AGW49",
              "JQ94N",
              "GKAXA",
              "KTEH7",
              "5FG4F"
            ],
            "enumTitles": [
              "Any",
              "JavaScript",
              "Python",
              "React",
              "TypeScript",
              "SQL",
              "Java",
              "C#",
              "CSS",
              "Go",
              "C++",
              "Angular",
              "Swift",
              "Node.js",
              ".NET",
              "Spring framework",
              "PHP",
              ".NET Core",
              "Scala",
              "Flutter",
              "Perl",
              "Dart"
            ],
            "default": "",
            "prefill": ""
          },
          "developerSkills": {
            "title": "Developer skills (extra, combined with AND)",
            "type": "array",
            "description": "Additional software skills to require together with the Developer skill above (mode=search). Use skill names such as `Python`, `SQL`, `React` (or their codes). Jobs must match every listed skill.",
            "editor": "stringList",
            "default": [],
            "prefill": []
          },
          "fetchJobDetails": {
            "title": "Fetch full job details",
            "type": "boolean",
            "description": "Fetch each job's detail payload for the full description, parsed salary, coordinates, qualifications and employer rating. Adds one fast request per job. Turn off for search-card fields only.",
            "default": true,
            "prefill": true
          },
          "enrichCompanyPages": {
            "title": "Enrich employer company pages",
            "type": "boolean",
            "description": "Look up each employer's SimplyHired company page (once per employer) and add its address, size, revenue band and industry when the page's company name matches the listing. Off by default.",
            "default": false,
            "prefill": false
          },
          "maximizeCoverage": {
            "title": "Maximize coverage (slower)",
            "type": "boolean",
            "description": "When a search hits SimplyHired's per-search result limit, continue with extra facet searches (job types and developer skills) and merge the unique jobs. Slower and uses more requests, but returns more of the matching jobs.",
            "default": false,
            "prefill": false
          },
          "maxItems": {
            "title": "Max items",
            "type": "integer",
            "description": "Hard cap on the number of job records returned.",
            "minimum": 1,
            "maximum": 5000,
            "default": 20,
            "prefill": 3
          }
        },
        "required": [
          "mode"
        ]
      },
      "output": {
        "actorOutputSchemaVersion": 1,
        "title": "SimplyHired Job Search & Salary Parser Output",
        "description": "SimplyHired job records from 23 country sites with parsed salary ranges, employment types, remote-work status, coordinates, full descriptions and application links.",
        "properties": {
          "jobs": {
            "type": "string",
            "title": "SimplyHired job records",
            "description": "Dataset containing all scraped SimplyHired job records.",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          }
        }
      },
      "defaultRunOptions": {
        "build": "latest",
        "timeoutSecs": 1800,
        "memoryMbytes": 512
      },
      "storages": {
        "dataset": {
          "actorSpecification": 1,
          "views": {
            "overview": {
              "title": "Jobs",
              "transformation": {
                "fields": [
                  "title",
                  "company",
                  "location",
                  "salary",
                  "salaryMin",
                  "salaryMax",
                  "salaryCurrency",
                  "employmentType",
                  "remoteType",
                  "datePosted",
                  "jobUrl"
                ]
              },
              "display": {
                "component": "table",
                "properties": {}
              }
            }
          }
        }
      },
      "environmentVariables": {}
    },
    "buildNumber": "1.0.2",
    "imageDigest": "5ec926158ca66804e01cb30a51a37c6188fd90b0b98085353b86db9ca2b20125",
    "actVersion": {
      "sourceType": "SOURCE_FILES",
      "buildTag": "latest",
      "versionNumber": "1.0"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.01728
    }
  }
}