{
  "openapi": "3.0.1",
  "info": {
    "title": "Workday Jobs Scraper: myworkdayjobs careers, filters, new jobs",
    "description": "Open jobs from myworkdayjobs career sites, narrowed by each site's own filters (country, job family, time or remote type). Options: up to 10 public sites per company; only jobs not yet returned. A name or domain is charged only when the site ties to that company. $0.001 per job; misses free.",
    "version": "1.0",
    "x-build-id": "gCfBnxr31FpkibmZa"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/siftsmith~workday-jobs/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-siftsmith-workday-jobs",
        "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/siftsmith~workday-jobs/runs": {
      "post": {
        "operationId": "runs-sync-siftsmith-workday-jobs",
        "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/siftsmith~workday-jobs/run-sync": {
      "post": {
        "operationId": "run-sync-siftsmith-workday-jobs",
        "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": "Workday career site URLs",
            "type": "array",
            "description": "Workday career sites to read: https://{company}.wdN.myworkdayjobs.com/{site} (a locale such as /en-US/ is fine, and a job posting URL reads its site) or https://wdN.myworkdaysite.com/recruiting/{company}/{site}. Any other URL gets one free status row and no request; a board on Greenhouse, Lever, Ashby and other ATSes is read by Company Jobs. A site the employer's robots.txt asks automated tools not to read is free and not read.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "companies": {
            "title": "Company names or domains",
            "type": "array",
            "description": "One per line: a company name (Target), a domain (target.com) or a pasted row. Each is looked up on Workday only; its jobs are returned and charged only when the postings tie to that employer. A name with no Workday career site gets one free status row (Company Jobs also looks names up on Greenhouse, Lever, Workable, Breezy HR and Personio, and reads Ashby and Rippling boards by URL).",
            "items": {
              "type": "string"
            }
          },
          "workdayFilters": {
            "title": "Workday filters",
            "type": "object",
            "description": "Filters Workday applies itself before any job is returned, by the names the career site shows: {\"countries\": [\"Germany\"], \"jobFamilies\": [\"Engineering\"], \"timeTypes\": [\"Full time\"], \"remoteTypes\": [\"Remote\"]}. A name must equal a value the site lists, apart from case and punctuation: \"full-time\" matches \"Full time\", but \"Fulltime\" does not, and \"Mexico\" does not match \"México\". In a list, the names the site has are applied and the rest are listed in its status row. A site that can't apply a filter exactly (it has no such filter, has none of the names, or has them under two of its filters) gives one free status row and no jobs. Filter parameters in a career site URL are checked against the site the same way; when both are given, a job must match both. Only jobs that pass every filter are returned and charged."
          },
          "allSites": {
            "title": "All public career sites per company (up to 10)",
            "type": "boolean",
            "description": "Read the company's other Workday career sites too, not just the one in the URL or the largest one found by name (for example Prudential's Careers and PGIM_Careers). Sites come from the career host's robots.txt, up to 10: the one in the URL or found by name first, then others with external, career or jobs in the name. They are read in alphabetical order. Sites robots.txt asks automated tools not to read and sites whose name looks private (internal, alumni, contractor and similar) are skipped, even the one in the URL; so are any beyond those 10. Skipped sites are listed in the status row. If there is no robots.txt, or it names no other site, only that one site is read. If robots.txt can't be read, no site is read and nothing is charged. 'Max jobs per company' counts all of a company's sites together. A job posted on several of the company's sites is returned and charged once, from the first site in alphabetical order that returns it, with that site's link. Copies are matched by requisition ID. A job with no requisition ID is returned only from the first site; on the others it is dropped and not charged. Workday filters are checked on each site separately; a site that can't apply them returns no jobs and gives its reason in the status row.",
            "default": false
          },
          "minMatchConfidence": {
            "title": "Minimum match confidence",
            "enum": [
              "medium",
              "high"
            ],
            "type": "string",
            "description": "How sure the match from a company name or domain to a Workday career site must be before its jobs are returned and charged: 'medium' (default) or 'high'. 'high' needs the company's domain: its own site links the career site, or at least 2 sampled postings give the domain, so a name alone is never charged. Sites below the bar return no jobs and cost nothing; the free status row (type 'company') says why and gives the site URL to paste instead. Career site URLs you give need no match. Low-confidence matches are never charged.",
            "default": "medium"
          },
          "titleKeywords": {
            "title": "Title keywords",
            "type": "array",
            "description": "Keep jobs whose title contains any of these as whole words (case-insensitive): 'ML' keeps 'ML Engineer', not 'HTML Developer'. End a keyword with * and its last word also matches longer words: 'engineer*' also keeps 'Engineering Manager'. Empty = all.",
            "items": {
              "type": "string"
            }
          },
          "locationKeywords": {
            "title": "Location keywords",
            "type": "array",
            "description": "Keep jobs whose location contains any of these (case-insensitive), in the city or country names the site uses, e.g. 'London'. A job with no known place is dropped and not charged.",
            "items": {
              "type": "string"
            }
          },
          "remoteOnly": {
            "title": "Remote only",
            "type": "boolean",
            "description": "Keep only remote jobs. On Workday, a remote type that says remote counts, and one that says hybrid, not remote, on-site, office or field doesn't. With no remote type, or another one such as Flex, the job's place decides ('Remote - US'), and a place that says hybrid doesn't count.",
            "default": false
          },
          "onlyNewJobs": {
            "title": "Skip jobs an earlier run returned",
            "type": "boolean",
            "description": "For scheduled runs: return (and charge) only jobs that an earlier run with the same state key hasn't already returned. The first run returns every job as usual. Job IDs are kept in a key-value store named 'workday-jobs-state' in your own Apify account. Jobs cut by a cap, the charge limit or the timeout are offered again next time, so 'new' means not returned before, not recently posted: with a cap smaller than a board, later runs return jobs that were already on it. Once a run returns a board in full (no jobsTruncated on its status row), later runs return only jobs added since. To get there, set 'Max jobs per company' above your largest board (this form starts at 10) and allow enough charge limit and timeout; Workday career sites over 1,000 jobs are never read in full.",
            "default": false
          },
          "stateKey": {
            "title": "State key",
            "type": "string",
            "description": "With 'Skip jobs an earlier run returned': which saved state to use. Give each schedule or employer list its own key so they don't share what counts as already returned. Letters, digits and - _ . only.",
            "default": "default"
          },
          "maxJobsPerCompany": {
            "title": "Max jobs per company",
            "minimum": 1,
            "type": "integer",
            "description": "Jobs past this cap are not returned and not charged. With 'All public career sites' on, it counts all of a company's sites together. The company's free status row still reports how many jobs the site lists (on some sites Workday's count stops at 2,000). This form starts at 10 so a first run is quick; raise it or clear it for more (up to 1,000 per company when left empty)."
          },
          "maxItems": {
            "title": "Max jobs in total",
            "minimum": 0,
            "type": "integer",
            "description": "Cap on job rows (and so on spend) for the whole run. Empty = no cap beyond the run's maximum charge."
          },
          "includeDescription": {
            "title": "Include description",
            "type": "boolean",
            "description": "Adds each job's description text, read from the job's own Workday page, one job at a time per employer. Email addresses, phone numbers and labelled recruiter or contact lines are removed automatically. The scrub matches patterns, so a contact written an unusual way, such as a name inside a sentence, can remain. Off keeps rows small for spreadsheets.",
            "default": false
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "How many companies to process in parallel.",
            "default": 5
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}