{
  "openapi": "3.0.1",
  "info": {
    "title": "We Work Remotely Jobs Scraper",
    "description": "Scrape every remote job on We Work Remotely: title, company, salary band and real salary, region and countries, skills, full description, badges. Filters, monitoring of new and closed jobs. Export to JSON, CSV or Excel.",
    "version": "0.0",
    "x-build-id": "q58AHW9PW7O4yIx7S"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/nice_dev~weworkremotely-jobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-nice_dev-weworkremotely-jobs-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/nice_dev~weworkremotely-jobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-nice_dev-weworkremotely-jobs-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/nice_dev~weworkremotely-jobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-nice_dev-weworkremotely-jobs-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "startUrls": {
            "title": "Start URLs",
            "maxItems": 1000,
            "type": "array",
            "description": "We Work Remotely URLs: category pages (`https://weworkremotely.com/categories/remote-design-jobs`) or their RSS feed (`…/remote-design-jobs.rss`), search pages (`https://weworkremotely.com/remote-jobs/search?term=python`), the full-time / contract pages, company pages (`https://weworkremotely.com/company/zapier`) or single job pages (`https://weworkremotely.com/remote-jobs/...`). When this list is not empty, **Categories** is ignored; keywords, filters, caps and monitoring still apply. Max 1 000 URLs.",
            "default": [],
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "categories": {
            "title": "Categories",
            "uniqueItems": true,
            "type": "array",
            "description": "Job categories to read. Empty = all categories (the whole site, a few hundred jobs, read in about 25 requests).",
            "items": {
              "type": "string",
              "enum": [
                "remote-full-stack-programming-jobs",
                "remote-front-end-programming-jobs",
                "remote-back-end-programming-jobs",
                "remote-design-jobs",
                "remote-product-design-jobs",
                "remote-ux-ui-design-jobs",
                "remote-devops-sysadmin-jobs",
                "remote-management-and-finance-jobs",
                "remote-product-jobs",
                "remote-customer-support-jobs",
                "remote-sales-and-marketing-jobs",
                "all-other-remote-jobs"
              ],
              "enumTitles": [
                "Full-Stack Programming",
                "Front-End Programming",
                "Back-End Programming",
                "Design",
                "Product Design",
                "UX/UI Design",
                "DevOps and Sysadmin",
                "Management and Finance",
                "Product",
                "Customer Support",
                "Sales and Marketing",
                "All Other Remote"
              ]
            },
            "default": []
          },
          "query": {
            "title": "Search keyword",
            "maxLength": 200,
            "type": "string",
            "description": "Keep only the jobs whose title, company, skills or description contain this word or phrase (case and accents ignored), e.g. `python` or `customer success`. Empty = every job."
          },
          "searchQueries": {
            "title": "More search keywords",
            "maxItems": 100,
            "uniqueItems": true,
            "type": "array",
            "description": "Several keywords in one run: a job matching ANY of them is kept (once, even if it matches several). Added to **Search keyword**.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "location": {
            "title": "Location",
            "maxLength": 200,
            "type": "string",
            "description": "Keep only the jobs open to this place: matched against the job's region (`USA Only`, `Europe`, `EMEA`…), its countries and the company headquarters, e.g. `Germany`, `Europe`, `United States`. Jobs open to anyone (`Anywhere in the World`) are kept too unless you untick **Include worldwide jobs**. A job limited to a wider area whose countries the listing does not give (`Europe`, `EMEA`) is kept for any place, unless **Extract job page details** reads its exact countries. Empty = everywhere."
          },
          "locations": {
            "title": "More locations",
            "maxItems": 100,
            "uniqueItems": true,
            "type": "array",
            "description": "Several places in one run: a job open to ANY of them is kept. Added to **Location**.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "includeWorldwide": {
            "title": "Include worldwide jobs",
            "type": "boolean",
            "description": "With a location filter, also keep the jobs open to anyone in the world. Untick to keep only the jobs that name your place.",
            "default": true
          },
          "worldwideOnly": {
            "title": "Worldwide jobs only",
            "type": "boolean",
            "description": "Keep only the jobs open to applicants anywhere in the world (`Anywhere in the World`, no country restriction). Drops every job limited to a region or a list of countries.",
            "default": false
          },
          "maxItems": {
            "title": "Max jobs",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Maximum number of jobs to save for the whole run (after deduplication and filters). 0 = no limit.",
            "default": 100
          },
          "maxItemsPerQuery": {
            "title": "Max jobs per category / URL",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Cap for EACH category or start URL, so that the first one cannot use up the whole **Max jobs** budget. 0 = no per-category cap.",
            "default": 0
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "newest",
              "oldest",
              "salary"
            ],
            "type": "string",
            "description": "Order of the jobs in the dataset, and so which ones **Max jobs** keeps: newest first, oldest first, or highest salary first (ranked in US dollars: the band shown on the site or an amount in USD; a salary in another currency without a band is ranked with the jobs without any salary, last). The order is made inside each category or start URL, not across them; with **Extract job page details** the rows are saved as the pages arrive, so the order inside the dataset is not fixed (the jobs kept are).",
            "default": "newest"
          },
          "extractDetails": {
            "title": "Extract job page details",
            "type": "boolean",
            "description": "Open each job page (1 extra request per job) for: the exact list of countries allowed, the salary the employer entered, the apply link, the company website and address, the number of jobs the company posted, the deadline. Charged as a job with details (see Pricing).",
            "default": false
          },
          "includeCompanyProfile": {
            "title": "Add the company profile",
            "type": "boolean",
            "description": "Open each company's We Work Remotely profile once per run (1 extra request per company) for its website, headquarters, Top 100 status, number of open jobs, description, remote / DEI policy links, benefits and hiring process. Charged per company profile added (see Pricing).",
            "default": false
          },
          "includeApplyEmail": {
            "title": "Add the apply e-mail",
            "type": "boolean",
            "description": "With **Extract job page details**: when the employer gives an application e-mail address on the job page (a few jobs only), decode it and add it to `applyEmail`. Charged per e-mail found (see Pricing).",
            "default": false
          },
          "enrichEmails": {
            "title": "Email from the company website",
            "type": "boolean",
            "description": "Visit the company's own website (home, contact and legal pages, 3 pages max, once per company per run) to find its email addresses, phone numbers and social links. Needs **Extract job page details** or **Add the company profile** (the website comes from them). Charged as a separate event, once per company where an email is found (see Pricing); the phone numbers and social links found on the same pages come with it, and a company where no email is found costs nothing.",
            "default": false
          },
          "descriptionMaxLength": {
            "title": "Max description length",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Cut the plain-text `description` to this many characters (ending with `…`) to keep the dataset light; `descriptionHtml` is left whole. 0 = the full text (up to 32,000 characters).",
            "default": 0
          },
          "jobTypes": {
            "title": "Job types",
            "uniqueItems": true,
            "type": "array",
            "description": "Keep only these types of job. Empty = all.",
            "items": {
              "type": "string",
              "enum": [
                "Full-Time",
                "Contract"
              ],
              "enumTitles": [
                "Full-time",
                "Contract"
              ]
            },
            "default": []
          },
          "salaryRanges": {
            "title": "Salary ranges",
            "uniqueItems": true,
            "type": "array",
            "description": "Keep only the jobs in these yearly salary bands, as shown on the site. Empty = all.",
            "items": {
              "type": "string",
              "enum": [
                "$10,000 - $25,000 USD",
                "$25,000 - $48,999 USD",
                "$50,000 - $74,999 USD",
                "$75,000 - $99,999 USD",
                "$100,000 or more USD"
              ],
              "enumTitles": [
                "$10k – $25k",
                "$25k – $49k",
                "$50k – $75k",
                "$75k – $100k",
                "$100k or more"
              ]
            },
            "default": []
          },
          "minSalary": {
            "title": "Minimum yearly salary (USD)",
            "minimum": 0,
            "maximum": 10000000,
            "type": "integer",
            "description": "Keep only the jobs whose yearly salary can reach this amount in US dollars: the top of the band shown on the site, or the amount written in the description when there is one. Jobs without any salary are kept only if **Include jobs without salary** is ticked. 0 = no minimum.",
            "default": 0
          },
          "includeNoSalary": {
            "title": "Include jobs without salary",
            "type": "boolean",
            "description": "With a salary filter, also keep the jobs that show no salary at all. A job paid in another currency than US dollars and shown without a salary band of the site counts as a job without salary here.",
            "default": true
          },
          "maxSalary": {
            "title": "Maximum yearly salary (USD)",
            "minimum": 0,
            "maximum": 10000000,
            "type": "integer",
            "description": "Keep only the jobs whose yearly salary starts at or below this amount in US dollars (bottom of the band shown on the site, or the amount written in the description). Jobs without any salary follow **Include jobs without salary**. 0 = no maximum.",
            "default": 0
          },
          "onlyWithSalary": {
            "title": "Jobs with a salary only",
            "type": "boolean",
            "description": "Keep only the jobs that show a salary: a band on the site, the employer's figure or an amount written in the description.",
            "default": false
          },
          "seniority": {
            "title": "Seniority",
            "uniqueItems": true,
            "type": "array",
            "description": "Keep only the jobs of these levels, read from the job title (see the `seniority` output field). Jobs whose title names no level are dropped when this list is not empty. Empty = all.",
            "items": {
              "type": "string",
              "enum": [
                "intern",
                "junior",
                "mid",
                "senior",
                "lead",
                "manager",
                "director",
                "executive"
              ],
              "enumTitles": [
                "Intern",
                "Junior",
                "Mid-level",
                "Senior",
                "Lead / Staff",
                "Manager",
                "Director",
                "Executive"
              ]
            },
            "default": []
          },
          "titleKeywords": {
            "title": "Title keywords",
            "maxItems": 50,
            "uniqueItems": true,
            "type": "array",
            "description": "Keep only the jobs whose TITLE contains one of these words (case and accents ignored), e.g. `engineer`, `designer`. Unlike **Search keyword**, the description is not searched.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "skills": {
            "title": "Skills",
            "maxItems": 50,
            "uniqueItems": true,
            "type": "array",
            "description": "Keep only the jobs that list one of these skills (matched against the job's skills, then its title and description), e.g. `React`, `SEO`, `Salesforce`.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "includeCompanies": {
            "title": "Only these companies",
            "maxItems": 200,
            "uniqueItems": true,
            "type": "array",
            "description": "Keep only the jobs of these companies (name or We Work Remotely company page slug, case ignored).",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "excludeCompanies": {
            "title": "Exclude companies",
            "maxItems": 200,
            "uniqueItems": true,
            "type": "array",
            "description": "Drop the jobs of these companies (name or company page slug, case ignored), e.g. recruiting agencies.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "onlyFeatured": {
            "title": "Featured jobs only",
            "type": "boolean",
            "description": "Keep only the jobs the employer paid to feature.",
            "default": false
          },
          "onlyTop100": {
            "title": "Top 100 companies only",
            "type": "boolean",
            "description": "Keep only the jobs of the companies We Work Remotely lists in its Top 100 remote companies.",
            "default": false
          },
          "onlyHot": {
            "title": "Hot jobs only",
            "type": "boolean",
            "description": "Keep only the jobs the site marks as `Hot job`.",
            "default": false
          },
          "postedAfter": {
            "title": "Posted after",
            "type": "string",
            "description": "Only jobs posted on or after this date (the posting date of the job feed): `2026-09-01`, or a period before now such as `7 days`, `2 weeks`, `1 month` (API: `24 hours` and full ISO date-times work too). Jobs without a posting date are dropped."
          },
          "postedBefore": {
            "title": "Posted before",
            "type": "string",
            "description": "Only jobs posted on or before this date (the whole day is included), or older than a period such as `30 days`."
          },
          "excludeKeywords": {
            "title": "Exclude keywords",
            "maxItems": 50,
            "uniqueItems": true,
            "type": "array",
            "description": "Drop the jobs whose title contains one of these words (case and accents ignored), e.g. `senior`, `intern`.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "onlyNew": {
            "title": "Only new jobs",
            "type": "boolean",
            "description": "Skip the jobs that a previous run (same **Memory key**) already delivered: they are not saved and not charged, and their page is not even opened. First run = everything is new.",
            "default": false
          },
          "includeClosedJobs": {
            "title": "Report jobs taken down",
            "type": "boolean",
            "description": "With **Only new jobs**: also save, once, each job delivered by a previous run (same **Memory key**, with this box ticked) that is no longer on its category page, with `status` = `closed` and the date it disappeared. Each one is charged as a closed job, not as a job. Nothing is reported by a run that stops early, or for a category the run could not read. Works with categories, not with search or company pages.",
            "default": false
          },
          "stateKey": {
            "title": "Memory key",
            "pattern": "^[a-zA-Z0-9_-]{1,64}$",
            "maxLength": 64,
            "type": "string",
            "description": "Name of the memory used by **Only new jobs**. Give each schedule / task its own key (e.g. `design-europe`) so that they do not share their memory. Letters, digits, `-` and `_`.",
            "default": "default"
          },
          "resetState": {
            "title": "Reset the memory",
            "type": "boolean",
            "description": "Forget everything remembered under this **Memory key** before the run: this run returns (and charges) every job again. Untick it afterwards.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify Proxy or your own proxies. Keep the default: it is included in the price. The residential Apify proxy is not available in this Actor.",
            "default": {
              "useApifyProxy": true
            }
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 50,
            "type": "integer",
            "description": "Maximum number of requests processed in parallel.",
            "default": 5
          },
          "maxRequestsPerMinute": {
            "title": "Max requests per minute",
            "minimum": 10,
            "maximum": 2000,
            "type": "integer",
            "description": "Most requests to the site in any 60 seconds, all of them counted: category pages, feeds, job pages and company profiles. A budget, not an even pace: up to this many can leave at once when the minute starts (spread them with the minimum delay below). Lower it if the site answers HTTP 429 / 403 in the log.",
            "default": 240
          },
          "minRequestIntervalMs": {
            "title": "Min delay between requests",
            "minimum": 0,
            "maximum": 60000,
            "type": "integer",
            "description": "Smallest gap between two requests, in milliseconds. Unlike the per-minute rate, this spreads the requests evenly instead of letting them go out in a burst. 0 = no gap.",
            "default": 0
          },
          "maxRequestRetries": {
            "title": "Max request retries",
            "minimum": 0,
            "maximum": 20,
            "type": "integer",
            "description": "Retries per request before it is marked as failed. Behind a proxy, a request the site turns away is also retried on a new proxy session up to 10 times without using up these retries.",
            "default": 5
          },
          "debugLog": {
            "title": "Debug log",
            "type": "boolean",
            "description": "Include debug messages in the run log.",
            "default": false
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}