{
  "openapi": "3.0.1",
  "info": {
    "title": "Remote Jobs Aggregator: Jobicy & We Work Remotely",
    "description": "Remote jobs from Jobicy and We Work Remotely in one deduplicated feed with salary ranges, location eligibility, seniority and categories. New-jobs monitor mode, pay only per job returned.",
    "version": "1.0",
    "x-build-id": "GL0C73Ie0qPwXNwrB"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/openfeeds~remote-jobs-feed-aggregator/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-openfeeds-remote-jobs-feed-aggregator",
        "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/openfeeds~remote-jobs-feed-aggregator/runs": {
      "post": {
        "operationId": "runs-sync-openfeeds-remote-jobs-feed-aggregator",
        "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/openfeeds~remote-jobs-feed-aggregator/run-sync": {
      "post": {
        "operationId": "run-sync-openfeeds-remote-jobs-feed-aggregator",
        "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": {
          "sources": {
            "title": "Job boards",
            "minItems": 1,
            "uniqueItems": true,
            "type": "array",
            "description": "Boards to read: Jobicy (public Jobs API) and We Work Remotely (public RSS feeds). Each row credits its board in the attribution, sourceName and sourceUrl fields. If one board fails, the other still delivers.",
            "items": {
              "type": "string",
              "enum": [
                "jobicy",
                "weworkremotely"
              ],
              "enumTitles": [
                "Jobicy",
                "We Work Remotely"
              ]
            },
            "default": [
              "jobicy",
              "weworkremotely"
            ]
          },
          "maxItems": {
            "title": "Max jobs",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Maximum number of deduplicated remote jobs returned after your filters, newest first. A full pull from both boards is about 1,100 jobs. Free-plan users get full rows (no truncation).",
            "default": 1000
          },
          "keywords": {
            "title": "Keywords",
            "maxItems": 100,
            "type": "array",
            "description": "Keep jobs whose title, company, category or tags contain any of these words or phrases as whole words (case- and accent-insensitive; a plural s also matches, so engineer finds Engineers, but ai does not match Chainguard). End a keyword with * to match word beginnings, e.g. develop* finds developer and development. Leave empty to keep all jobs.",
            "items": {
              "type": "string",
              "maxLength": 100
            },
            "default": []
          },
          "searchInDescription": {
            "title": "Also search keywords in the description",
            "type": "boolean",
            "description": "Also match the keywords (whole words, as above) in the full job description, not only in title, company, category and tags.",
            "default": false
          },
          "excludeKeywords": {
            "title": "Exclude keywords",
            "maxItems": 100,
            "type": "array",
            "description": "Drop jobs whose title or company contains any of these words or phrases as whole words (case- and accent-insensitive; a plural s also matches, so intern drops Intern and Interns but keeps International). End a keyword with * to match word beginnings.",
            "items": {
              "type": "string",
              "maxLength": 100
            },
            "default": []
          },
          "categories": {
            "title": "Categories",
            "uniqueItems": true,
            "type": "array",
            "description": "Keep jobs in these normalized categories (the same category list for both boards). Leave empty for all categories.",
            "items": {
              "type": "string",
              "enum": [
                "software-development",
                "devops-sysadmin",
                "design",
                "product",
                "customer-support",
                "sales-marketing",
                "management-finance",
                "data",
                "security",
                "qa-testing",
                "writing-content",
                "hr-recruiting",
                "legal-compliance",
                "education",
                "healthcare",
                "admin-assistant",
                "other"
              ],
              "enumTitles": [
                "Software development",
                "DevOps & sysadmin",
                "Design",
                "Product & project management",
                "Customer support",
                "Sales & marketing",
                "Management & finance",
                "Data & analytics",
                "Security",
                "QA & testing",
                "Writing & content",
                "HR & recruiting",
                "Legal & compliance",
                "Education",
                "Healthcare",
                "Admin & assistant",
                "Other"
              ]
            },
            "default": []
          },
          "employmentTypes": {
            "title": "Employment types",
            "uniqueItems": true,
            "type": "array",
            "description": "Keep jobs with these employment types. Leave empty for all.",
            "items": {
              "type": "string",
              "enum": [
                "FULL_TIME",
                "PART_TIME",
                "CONTRACT",
                "TEMPORARY",
                "INTERNSHIP",
                "OTHER"
              ],
              "enumTitles": [
                "Full-time",
                "Part-time",
                "Contract",
                "Temporary",
                "Internship",
                "Other"
              ]
            },
            "default": []
          },
          "seniority": {
            "title": "Seniority",
            "uniqueItems": true,
            "type": "array",
            "description": "Keep jobs at these levels. When set, jobs without a known level are dropped. Jobicy gives a level; for We Work Remotely it is read from title words (junior, senior, lead, director …).",
            "items": {
              "type": "string",
              "enum": [
                "ENTRY",
                "MID",
                "SENIOR",
                "DIRECTOR"
              ],
              "enumTitles": [
                "Entry / junior",
                "Mid-level",
                "Senior / lead",
                "Director / head / VP"
              ]
            },
            "default": []
          },
          "countries": {
            "title": "Candidate countries",
            "maxItems": 100,
            "type": "array",
            "description": "Location eligibility: keep jobs a candidate in one of these countries can apply for, as ISO 3166-1 alpha-2 codes (US, GB, DE …). A job matches when it lists the country, a region containing it (DE is in EUROPE and EMEA) or is open worldwide.",
            "items": {
              "type": "string",
              "pattern": "^[A-Za-z]{2}$"
            },
            "default": []
          },
          "regions": {
            "title": "Regions",
            "uniqueItems": true,
            "type": "array",
            "description": "Location eligibility: keep jobs open to these regions, to a country inside them, or worldwide. Countries and regions are alternatives (a job matching either is kept).",
            "items": {
              "type": "string",
              "enum": [
                "NORTH_AMERICA",
                "LATAM",
                "AMERICAS",
                "EUROPE",
                "EMEA",
                "APAC"
              ],
              "enumTitles": [
                "North America",
                "Latin America",
                "Americas",
                "Europe",
                "EMEA",
                "Asia-Pacific"
              ]
            },
            "default": []
          },
          "includeUnknownLocation": {
            "title": "Keep jobs without reliable location",
            "type": "boolean",
            "description": "With a country or region filter set, also keep jobs whose board gives no reliable location eligibility. Most We Work Remotely jobs say \"Anywhere in the World\", which is the board default and not a guarantee (isWorldwide is null for them).",
            "default": true
          },
          "requireSalary": {
            "title": "Only jobs with a salary range",
            "type": "boolean",
            "description": "Keep only jobs with a salary range (structured on Jobicy, parsed from the description on We Work Remotely).",
            "default": false
          },
          "minYearlySalary": {
            "title": "Minimum yearly salary",
            "minimum": 0,
            "maximum": 100000000,
            "type": "integer",
            "description": "Keep only yearly salary ranges in the currency below whose maximum (or minimum when no maximum is given) is at least this value. No currency conversion. 0 = no minimum.",
            "default": 0
          },
          "minYearlySalaryCurrency": {
            "title": "Salary currency",
            "pattern": "^[A-Za-z]{3}$",
            "type": "string",
            "description": "3-letter ISO currency code used by the minimum yearly salary filter, e.g. USD, EUR, GBP.",
            "default": "USD"
          },
          "postedWithinDays": {
            "title": "Posted within (days)",
            "minimum": 0,
            "maximum": 365,
            "type": "integer",
            "description": "Keep jobs published in the last N days. Jobicy itself covers about the last 7 days. 0 = no age limit.",
            "default": 0
          },
          "onlyNew": {
            "title": "Only new jobs (new-jobs monitor)",
            "type": "boolean",
            "description": "Return only remote jobs that earlier runs with the same state store name have not returned yet, and charge only for those. The first run returns every current match up to Max jobs. A job that moves to the other board does not alert again.",
            "default": false
          },
          "stateStoreName": {
            "title": "State store name",
            "pattern": "^[a-zA-Z0-9-]{1,63}$",
            "type": "string",
            "description": "Named key-value store in your account that remembers which jobs were already returned. Use one name per monitor (for example one per saved search).",
            "default": "remote-jobs-feed-aggregator-monitor"
          },
          "jobicyGeo": {
            "title": "Jobicy location",
            "enum": [
              "",
              "anywhere",
              "apac",
              "emea",
              "latam",
              "argentina",
              "australia",
              "austria",
              "belgium",
              "brazil",
              "bulgaria",
              "canada",
              "china",
              "costa-rica",
              "croatia",
              "cyprus",
              "czechia",
              "denmark",
              "estonia",
              "europe",
              "finland",
              "france",
              "germany",
              "greece",
              "hong-kong",
              "hungary",
              "ireland",
              "israel",
              "italy",
              "japan",
              "latvia",
              "lithuania",
              "malaysia",
              "mexico",
              "netherlands",
              "new-zealand",
              "norway",
              "philippines",
              "poland",
              "portugal",
              "romania",
              "serbia",
              "singapore",
              "slovakia",
              "slovenia",
              "south-korea",
              "spain",
              "sweden",
              "switzerland",
              "thailand",
              "turkiye",
              "united-arab-emirates",
              "uk",
              "ukraine",
              "usa",
              "vietnam"
            ],
            "type": "string",
            "description": "Jobicy server-side location filter. Jobicy allows one new pass per hour per user; the three Jobicy options form that pass, so changing them within the hour skips Jobicy until the next hour (the other board still runs).",
            "default": ""
          },
          "jobicyIndustry": {
            "title": "Jobicy category",
            "enum": [
              "",
              "admin-support",
              "business",
              "copywriting",
              "design-multimedia",
              "supporting",
              "cybersecurity",
              "data-science",
              "admin",
              "education",
              "accounting-finance",
              "healthcare",
              "hr",
              "legal",
              "marketing",
              "management",
              "project-management",
              "qa-testing",
              "seller",
              "seo",
              "engineering",
              "technical-support",
              "web-app-design"
            ],
            "type": "string",
            "description": "Jobicy server-side category filter (part of the hourly Jobicy pass, see Jobicy location).",
            "default": ""
          },
          "jobicyTag": {
            "title": "Jobicy keyword",
            "maxLength": 60,
            "type": "string",
            "description": "Jobicy server-side keyword search (part of the hourly Jobicy pass, see Jobicy location). For most uses the general Keywords filter is better.",
            "default": ""
          },
          "wwrCategories": {
            "title": "We Work Remotely categories",
            "uniqueItems": true,
            "type": "array",
            "description": "We Work Remotely category feeds to read. Leave empty to read all 11 categories.",
            "items": {
              "type": "string",
              "enum": [
                "remote-full-stack-programming-jobs",
                "remote-back-end-programming-jobs",
                "remote-front-end-programming-jobs",
                "remote-programming-jobs",
                "remote-devops-sysadmin-jobs",
                "remote-design-jobs",
                "remote-customer-support-jobs",
                "remote-sales-and-marketing-jobs",
                "remote-management-and-finance-jobs",
                "remote-product-jobs",
                "all-other-remote-jobs"
              ],
              "enumTitles": [
                "Full-Stack Programming",
                "Back-End Programming",
                "Front-End Programming",
                "Programming (all programming jobs)",
                "DevOps and Sysadmin",
                "Design",
                "Customer Support",
                "Sales and Marketing",
                "Management and Finance",
                "Product",
                "All Other Remote"
              ]
            },
            "default": []
          },
          "descriptionFormat": {
            "title": "Description format",
            "enum": [
              "markdown",
              "html",
              "both",
              "none"
            ],
            "type": "string",
            "description": "Which description fields to include: Markdown, clean HTML, both, or none (smallest output). Emails, phone numbers and personal profile links are removed in every format (best effort).",
            "default": "markdown"
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}