{
  "openapi": "3.0.1",
  "info": {
    "title": "Reed Jobs Scraper - UK Salaries, Remote & Expiry",
    "description": "Every job on Reed.co.uk with the salary as two numbers and its real period - per hour, per day or per annum, each confirmed against what the page shows, never guessed. Plus employer, county, remote option, posted and expiry dates. A search with no results says so and is never charged. Unofficial.",
    "version": "0.1",
    "x-build-id": "N8MugcnmwQ7fC0R5P"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/neverempty~reed-jobs/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-neverempty-reed-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/neverempty~reed-jobs/runs": {
      "post": {
        "operationId": "runs-sync-neverempty-reed-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/neverempty~reed-jobs/run-sync": {
      "post": {
        "operationId": "run-sync-neverempty-reed-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": {
          "keyword": {
            "title": "Job keyword",
            "type": "string",
            "description": "What to search for, for example `developer`, `software engineer`, `accountant`, `nurse`. Reed builds its listing from this, so a keyword it does not have returns a single no-results row rather than a silently unfiltered list.",
            "default": "developer"
          },
          "city": {
            "title": "City (optional)",
            "type": "string",
            "description": "Filter by city, for example `london`, `manchester`, `birmingham`, `milton keynes`. Measured on 2026-09-03: this narrows `developer` from 3,174 jobs to 1,159 and every returned location is in that city. Two other URL shapes Reed accepts (`/jobs/x-jobs/london` and `?location=`) answer HTTP 200 while ignoring the city completely - this Actor never uses them.",
            "default": ""
          },
          "remoteOnly": {
            "title": "Remote jobs only",
            "type": "boolean",
            "description": "Default: false. Measured: narrows `developer` from 3,174 to 493 jobs.",
            "default": false
          },
          "maxJobs": {
            "title": "Maximum jobs",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "How many jobs to return at most. One job = one row = one charged event. Reed returns 25 jobs per page; the same job appearing again on a later page is dropped, so you are never charged twice for it. Rows that carry no job (no results, or a page that could not be read) are returned too and are never charged.",
            "default": 25
          },
          "maxPages": {
            "title": "Maximum pages",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "Safety cap on how many listing pages to walk. 0 lets the Actor decide from Maximum jobs (25 jobs per page).",
            "default": 0
          },
          "keywords": {
            "title": "Keyword filter",
            "type": "array",
            "description": "Keep only jobs whose title, description, employer, category or location contains one of these words. Case is ignored. Leave empty to keep everything. Nothing extra is fetched from Reed - this narrows the jobs already read, and jobs that do not match are never charged.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "keywordMatch": {
            "title": "Keyword matching",
            "enum": [
              "any",
              "all"
            ],
            "type": "string",
            "description": "`any` keeps a job that contains at least one keyword. `all` keeps only jobs that contain every keyword.",
            "default": "any"
          },
          "excludeKeywords": {
            "title": "Exclude keywords",
            "type": "array",
            "description": "Drop any job containing one of these words - for example `apprentice`, `commission only`, or an agency you do not want. Applied after the keyword filter.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "companyNames": {
            "title": "Employers to include",
            "type": "array",
            "description": "Keep only jobs from employers whose name contains one of these (partial match, case ignored). Leave empty for all employers.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "minSalary": {
            "title": "Minimum salary",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only jobs paying at least this much, compared against the salary Reed publishes. A job with no published salary is **kept**, not dropped - an unknown salary is not a low one. Turn on `requireSalary` if you want those dropped too. Note the salary period differs per job (`salaryPeriod` is per hour, per day or per annum), so set this with the period you are searching in mind.",
            "default": 0
          },
          "requireSalary": {
            "title": "Only jobs that publish a salary",
            "type": "boolean",
            "description": "Default: false. Turn it on to drop jobs where the employer hid the salary.",
            "default": false
          },
          "postedWithinDays": {
            "title": "Posted within N days",
            "minimum": 0,
            "maximum": 3650,
            "type": "integer",
            "description": "Keep only jobs posted in the last N days. 0 means no limit. A job whose posted date cannot be read is **kept**, not dropped.",
            "default": 0
          },
          "monitoringMode": {
            "title": "Only new jobs since the last run",
            "type": "boolean",
            "description": "Default: false. Turn it on and schedule this Actor daily: each run returns only the jobs it has not returned before, so you pay for new postings instead of the same list again. The first run returns everything and remembers it. Jobs read but filtered out are remembered too, so they never come back as false 'new' ones.",
            "default": false
          },
          "resetMonitoringState": {
            "title": "Reset the monitoring memory (one-shot)",
            "type": "boolean",
            "description": "Default: false. Turn it on for a single run to forget which jobs were already returned and start monitoring again from scratch.",
            "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}