{
  "openapi": "3.0.1",
  "info": {
    "title": "Workday Jobs Scraper - Company Careers & Job Listings",
    "description": "Scrape job postings from any Workday-hosted careers site on Myworkdayjobs.com. Paste careers-page or job URLs and get structured job data, including title, full description, locations, time type, posting dates, employer, apply URL, country, and geo data.",
    "version": "1.0",
    "x-build-id": "fHPh6JlatpuWdLOwO"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/abotapi~myworkdayjobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-abotapi-myworkdayjobs-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/abotapi~myworkdayjobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-abotapi-myworkdayjobs-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/abotapi~myworkdayjobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-abotapi-myworkdayjobs-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",
        "required": [
          "mode"
        ],
        "properties": {
          "mode": {
            "title": "Start mode",
            "enum": [
              "search",
              "url"
            ],
            "type": "string",
            "description": "How to choose jobs. 'Search by keyword' runs a keyword/facet search inside one or more company careers sites you provide. 'Scrape URLs directly' takes any Workday careers or job URLs and scrapes them exactly as given.",
            "default": "search"
          },
          "companyUrls": {
            "title": "Company careers sites",
            "type": "array",
            "description": "Search mode only. One or more company careers-site URLs or hosts to search within, e.g. https://nvidia.wd5.myworkdayjobs.com/en-US/NVIDIAExternalCareerSite (the scheme is optional). The keyword and filters below are applied to each site. Find a company's careers URL on its 'Careers' page.",
            "default": [
              "https://nvidia.wd5.myworkdayjobs.com/en-US/NVIDIAExternalCareerSite"
            ],
            "items": {
              "type": "string"
            }
          },
          "keyword": {
            "title": "Keyword",
            "type": "string",
            "description": "Search mode only. Free-text keyword applied as the Workday search-box query, e.g. 'engineer' or 'data scientist'. Leave empty to list all jobs on the site."
          },
          "jobCategory": {
            "title": "Job category",
            "type": "string",
            "description": "Search mode only. Filter by Workday 'Job Category' (Job Family Group), e.g. Engineering. Matched against the live facet list for each careers site. Leave empty for all categories."
          },
          "jobType": {
            "title": "Job type",
            "type": "string",
            "description": "Search mode only. Filter by Workday 'Job Type' (worker sub type), e.g. Regular or Intern. Matched against the live facet list. Leave empty for all."
          },
          "timeType": {
            "title": "Time type",
            "type": "string",
            "description": "Search mode only. Filter by Workday 'Time Type', e.g. Full time or Part time. Matched against the live facet list. Leave empty for all."
          },
          "location": {
            "title": "Location",
            "type": "string",
            "description": "Search mode only. Filter by Workday location facet, e.g. United States of America or a region. Matched against the live facet list. Leave empty for all locations."
          },
          "jobCategories": {
            "title": "🗂️ Job categories (multi-select)",
            "type": "array",
            "description": "Search mode only. Several job category names; each is matched to the site's live facet list. Combined with the single Job category field.",
            "items": {
              "type": "string"
            }
          },
          "jobTypes": {
            "title": "💼 Job types (multi-select)",
            "type": "array",
            "description": "Search mode only. Several worker sub types; each is matched to the live facet list.",
            "items": {
              "type": "string"
            }
          },
          "timeTypes": {
            "title": "⏱️ Time types (multi-select)",
            "type": "array",
            "description": "Search mode only. Several time types (e.g. Full time, Part time); each is matched to the live facet list.",
            "items": {
              "type": "string"
            }
          },
          "locations": {
            "title": "📍 Locations (multi-select)",
            "type": "array",
            "description": "Search mode only. Several locations, partial match; each is matched to the site's live location facet list. Combined with the single Location field.",
            "items": {
              "type": "string"
            }
          },
          "postedAt": {
            "title": "🕒 Posted since",
            "type": "string",
            "description": "Keep only jobs posted on or after this date. Absolute YYYY-MM-DD or relative such as 7 days, 2 weeks, 1 month, 1 year. Workday lists postings as relative text, so this is applied to the listing after it is fetched; with it set, incremental mode never marks missing jobs EXPIRED."
          },
          "startAt": {
            "title": "📅 Start date from",
            "type": "string",
            "description": "Keep only jobs whose start date is on or after this date (absolute YYYY-MM-DD or relative such as 2 weeks). Needs job details on. Applied after the detail page is read; dropped jobs are not emitted or charged. While it is set (with details on), incremental mode does not mark missing jobs EXPIRED."
          },
          "pagination": {
            "title": "📄 Pages per query",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Maximum result pages (20 jobs each) to read per careers URL. 0 = no page limit (Max jobs still applies). While a page limit is set and reached, incremental mode does not mark missing jobs EXPIRED.",
            "default": 0
          },
          "stats": {
            "title": "📊 Add listing stats",
            "type": "boolean",
            "description": "Fill the stats field with the job's position in the result list, the result total and the page. Workday exposes no view or apply counters.",
            "default": false
          },
          "urls": {
            "title": "Workday URLs",
            "type": "array",
            "description": "URL mode only. Paste any Workday URLs to scrape as-is. Each can be a careers/search page (e.g. https://company.wd5.myworkdayjobs.com/en-US/SiteName) a direct job URL, a job's /apply form (resolved to the job itself), or the Workday JSON search and job addresses under /wday/cxs/. Careers pages are paginated automatically; direct job URLs are fetched as single jobs. Filters carried on the URL are honored: both the keyword (?q=engineer) and the careers site's own filter links, so you can apply a filter on the site, click 'View Jobs', and paste the address bar here. A filter the site does not actually offer is dropped with a warning in the run log instead of being ignored silently. The search-mode keyword/filters above are ignored in this mode. Also accepts shared-host links like https://wd3.myworkdaysite.com/en-US/recruiting/tenant/Site. A company name alone cannot be resolved; paste its careers URL. Left untouched, this field scrapes one example of each URL shape.",
            "default": [
              "https://nvidia.wd5.myworkdayjobs.com/en-US/NVIDIAExternalCareerSite",
              "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite",
              "https://nvidia.wd5.myworkdayjobs.com/en-US/NVIDIAExternalCareerSite?q=engineer",
              "https://nvidia.wd5.myworkdayjobs.com/en-US/NVIDIAExternalCareerSite?timeType=5509c0b5959810ac0029943377d47364",
              "https://nvidia.wd5.myworkdayjobs.com/en-US/NVIDIAExternalCareerSite/job/US-CA-Santa-Clara/ASIC-Design-Engineer---Clocks-IP_JR2025580",
              "https://nvidia.wd5.myworkdayjobs.com/en-US/NVIDIAExternalCareerSite/jobs",
              "https://nvidia.wd5.myworkdayjobs.com/NVIDIAExternalCareerSite/job/Vietnam-Hanoi/Director--Engineering---Software-Engineering_JR2021061",
              "https://nvidia.wd5.myworkdayjobs.com/en-US/NVIDIAExternalCareerSite/job/Poland-Remote/Senior-System-Engineer--Solution-Engineering_JR2026094/apply",
              "https://nvidia.wd5.myworkdayjobs.com/wday/cxs/nvidia/NVIDIAExternalCareerSite/jobs",
              "https://nvidia.wd5.myworkdayjobs.com/wday/cxs/nvidia/NVIDIAExternalCareerSite/job/Poland-Remote/Senior-System-Engineer--Solution-Engineering_JR2026094"
            ],
            "items": {
              "type": "string"
            }
          },
          "fetchDetails": {
            "title": "Fetch full job details",
            "type": "boolean",
            "description": "When enabled (default), each job's detail page is fetched for the full description, structured country/geo, employer details, questionnaire id, and similar jobs. Disable for a faster, lighter run that returns only the fields available on the listing.",
            "default": true
          },
          "details": {
            "title": "Details (alias)",
            "type": "boolean",
            "description": "Alias of Fetch full job details, for users coming from other Workday scrapers. Only used when Fetch full job details is not set explicitly."
          },
          "maxItems": {
            "title": "Max jobs",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum number of job rows to emit per company site / careers URL. This is the single result cap. Set to 0 for unlimited (walk every page until the site is exhausted; Workday returns at most ~2000 per search).",
            "default": 20
          },
          "proxy": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Choose your proxy. The default is the cheapest option; if it is not available on your plan, the run moves to a backup connection. Residential is only needed for the rare company that geo-restricts its careers content; country rotation and a bandwidth cap are available below.",
            "default": {
              "useApifyProxy": true
            }
          },
          "residentialCountries": {
            "title": "Residential country rotation",
            "type": "array",
            "description": "When the run falls back to residential proxies, exit countries are rotated through this list to improve reliability and recover from a flagged IP. Defaults cover major regions.",
            "default": [
              "US",
              "GB",
              "DE",
              "CA",
              "AU",
              "FR",
              "NL",
              "SG"
            ],
            "items": {
              "type": "string"
            }
          },
          "residentialBudgetGb": {
            "title": "Residential traffic budget (GB)",
            "type": "string",
            "description": "Hard cap on residential bandwidth for the run. When exceeded, the actor stops using residential bandwidth. Set to 0 to disable residential entirely. Leave empty for no cap."
          },
          "resumeFromRunId": {
            "title": "Resume from a previous run",
            "type": "string",
            "description": "Paste a previous run ID or dataset ID to continue a large job pull without returning or charging for jobs already collected there. Use this after an interrupted run, or to keep extending one walk-all pull across separate runs. For recurring daily monitoring of the same search, use Incremental mode below instead."
          },
          "incrementalMode": {
            "title": "Incremental changes for scheduled runs",
            "type": "boolean",
            "description": "Turn this on for daily or recurring monitoring. The first run returns all matching jobs as NEW. Later runs normally return only NEW, UPDATED, and REAPPEARED jobs. A job is UPDATED when any output field other than the volatile ones changes (title, location, description, apply details and so on); the volatile fields postedOn (relative text such as \"Posted 3 Days Ago\"), similarJobs (rotating recommendations), source.searchUrl and scrapedAt are still returned but never trigger UPDATED. The alias and derived fields id, url, jobDescription, metadata, originUrl, videoInfo, page and stats are also never compared (their source fields jobReqId, jobUrl, description, jobPostingId, jobPostingSiteId, postingInternalId, questionnaireId and includeResumeParsing are compared instead); they are still returned too. Add more with \"Ignore fields when detecting changes\" below. Turn on \"Emit unchanged\" or \"Emit expired\" only when you also want those jobs returned (and billed). State is kept separately per mode + company site/URL/filter configuration; use State key when you want to name or deliberately share a monitoring campaign. To continue one specific interrupted run instead, use Resume from a previous run above.",
            "default": false
          },
          "stateKey": {
            "title": "State key (optional, incremental mode only)",
            "type": "string",
            "description": "Optional. Name this monitoring campaign to keep its state stable, or to deliberately share state across differently-configured runs. Leave empty to let the actor derive a key automatically from the mode + company site/URL/filter settings — different searches then never mix state with each other."
          },
          "emitUnchanged": {
            "title": "Emit unchanged jobs (incremental mode only)",
            "type": "boolean",
            "description": "Off by default. Turn on to also return jobs that have not changed since the last run, marked UNCHANGED. This returns — and bills — extra rows you already have, so leave it off unless you specifically want the full snapshot every run.",
            "default": false
          },
          "emitExpired": {
            "title": "Emit expired jobs (incremental mode only)",
            "type": "boolean",
            "description": "Off by default. Turn on to also return jobs that were present in a previous run but are no longer found, marked EXPIRED. Only produced once a run has fully scanned the tracked search — not when Max jobs capped it or when Resume was used. This returns — and bills — extra synthetic rows, so leave it off unless you need expiry tracking.",
            "default": false
          },
          "ignoreFieldsForChanges": {
            "title": "Ignore fields when detecting changes (incremental mode only)",
            "type": "array",
            "description": "Extra output fields that must NOT make a job count as UPDATED in incremental mode, for example \"salary\" or \"location.additional\" (dotted paths reach nested fields; a path through a list applies to every element). The fields are still returned in the output. postedOn, similarJobs, source.searchUrl and scrapedAt are always ignored, as are the alias and derived fields id, url, jobDescription, metadata, originUrl, videoInfo, page and stats (their source fields are compared instead). Changing this list never causes a wave of UPDATED rows: stored jobs are compared again using the current list.",
            "items": {
              "type": "string"
            }
          },
          "mcpConnectors": {
            "title": "Pipe results into your apps (optional)",
            "type": "array",
            "description": "Optionally send the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize a connector once under Apify → Settings → Integrations, then select it here. The connector receives a condensed, human-readable summary per item (title + key fields), not the full JSON — the complete record stays in the dataset. Leave empty to skip. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com)."
          },
          "notionParentPageUrl": {
            "title": "Notion parent page (Notion connector only)",
            "type": "string",
            "description": "URL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors."
          },
          "maxNotifyListings": {
            "title": "Max items to export per connector",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Cap on items written to each connector per run. Does not affect the dataset.",
            "default": 50
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}