{
  "openapi": "3.0.1",
  "info": {
    "title": "Reed.co.uk Scraper - Jobs, Companies, Courses & Reviews",
    "description": "Scrape Reed.co.uk jobs, companies, courses and reviews by keyword, location, filters or URL. Extract 80+ fields including salary, company, GPS, sector, contract type, skills, descriptions, postcodes, company profiles, courses and reviews.",
    "version": "1.0",
    "x-build-id": "0maiM48I2iVuMMRQ5"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/abotapi~reed-co-uk-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-abotapi-reed-co-uk-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~reed-co-uk-scraper/runs": {
      "post": {
        "operationId": "runs-sync-abotapi-reed-co-uk-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~reed-co-uk-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-abotapi-reed-co-uk-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": "What to scrape",
            "enum": [
              "jobs",
              "company",
              "course"
            ],
            "type": "string",
            "description": "Jobs = job listings (by filters or pasted URLs). Companies = company profiles. Courses = training courses and their reviews.",
            "default": "jobs"
          },
          "urls": {
            "title": "Job URLs (optional)",
            "type": "array",
            "description": "Reed job-search URLs (keyword, location, category, filtered, sorted or paginated) or direct job URLs (/jobs/<slug>/<id>). If set, these are scraped directly and the filters below are ignored. The pre-filled list is a sample of every supported URL shape: clear it and use the filters below to search by keywords and locations instead.",
            "default": [
              "https://www.reed.co.uk/jobs/data-engineer-jobs-in-london",
              "https://www.reed.co.uk/jobs/data-engineer-jobs-in-london?pageno=2",
              "https://www.reed.co.uk/jobs/data-engineer-jobs-in-london?proximity=20&salaryfrom=50000&salaryto=70000&fulltime=True&permanent=True",
              "https://www.reed.co.uk/jobs/data-engineer-jobs-in-london?sortby=DisplayDate&dateCreatedOffSet=lastthreedays",
              "https://www.reed.co.uk/jobs/jobs-in-london",
              "https://www.reed.co.uk/jobs/data-engineer-jobs?pageno=2",
              "https://www.reed.co.uk/jobs",
              "https://www.reed.co.uk/jobs?keywords=data+engineer&location=london&pageno=1",
              "https://www.reed.co.uk/jobs/it-jobs",
              "https://www.reed.co.uk/jobs/data-engineer/56212211"
            ],
            "items": {
              "type": "string"
            }
          },
          "keywords": {
            "title": "Keywords",
            "type": "string",
            "description": "Job search terms, e.g. 'data engineer'. Used only when no Job URLs are pasted. Leave empty to browse all jobs in the location."
          },
          "locations": {
            "title": "Locations",
            "type": "array",
            "description": "UK cities or regions, e.g. ['london', 'manchester']. One search per location. Leave empty for a UK-wide search.",
            "items": {
              "type": "string"
            }
          },
          "proximity": {
            "title": "Distance (miles)",
            "minimum": 0,
            "maximum": 50,
            "type": "integer",
            "description": "Search radius around the location, in miles. Allowed: 0, 1, 3, 5, 10, 15, 20, 30, 50 (other values are ignored). Default 10.",
            "default": 10
          },
          "salaryFrom": {
            "title": "Minimum salary (£)",
            "minimum": 0,
            "type": "integer",
            "description": "Only jobs with a salary at or above this amount (per annum)."
          },
          "salaryTo": {
            "title": "Maximum salary (£)",
            "minimum": 0,
            "type": "integer",
            "description": "Only jobs with a salary at or below this amount (per annum)."
          },
          "postedDate": {
            "title": "Posted within",
            "enum": [
              "anytime",
              "today",
              "last3days",
              "last7days",
              "last14days"
            ],
            "type": "string",
            "description": "Only jobs posted within this window.",
            "default": "anytime"
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "relevance",
              "date"
            ],
            "type": "string",
            "description": "Result ordering. 'relevance' is Reed's default; 'date' shows newest first.",
            "default": "relevance"
          },
          "fullTime": {
            "title": "Full-time only",
            "type": "boolean",
            "description": "Restrict to full-time roles.",
            "default": false
          },
          "partTime": {
            "title": "Part-time only",
            "type": "boolean",
            "description": "Restrict to part-time roles.",
            "default": false
          },
          "permanent": {
            "title": "Permanent only",
            "type": "boolean",
            "description": "Restrict to permanent roles.",
            "default": false
          },
          "temporary": {
            "title": "Temporary only",
            "type": "boolean",
            "description": "Restrict to temporary roles.",
            "default": false
          },
          "contract": {
            "title": "Contract only",
            "type": "boolean",
            "description": "Restrict to contract roles.",
            "default": false
          },
          "agency": {
            "title": "Posted by agency",
            "type": "boolean",
            "description": "Only jobs posted by recruitment agencies.",
            "default": false
          },
          "direct": {
            "title": "Posted by employer",
            "type": "boolean",
            "description": "Only jobs posted directly by the employer.",
            "default": false
          },
          "graduate": {
            "title": "Graduate roles",
            "type": "boolean",
            "description": "Only graduate-level roles.",
            "default": false
          },
          "easyApply": {
            "title": "Easy apply",
            "type": "boolean",
            "description": "Only jobs that support one-click apply.",
            "default": false
          },
          "visaSponsorship": {
            "title": "Visa sponsorship",
            "type": "boolean",
            "description": "Only jobs offering visa sponsorship.",
            "default": false
          },
          "earlyBird": {
            "title": "Early bird",
            "type": "boolean",
            "description": "Only newly posted 'early bird' jobs.",
            "default": false
          },
          "workFromHome": {
            "title": "Remote / work from home only",
            "type": "boolean",
            "description": "Only jobs Reed marks as remote (the site's Remote working-option filter).",
            "default": false
          },
          "fetchDetails": {
            "title": "Fetch full job details",
            "type": "boolean",
            "description": "Jobs mode only. When enabled, each job found by a search is enriched from its detail page: full HTML description, region/county/postcode, full salary breakdown, sector + parent sector, company profile, contract type, breadcrumbs, and screening questions. Adds one fetch and one detail charge per job. A pasted single-job URL is always fetched as a detail page and charged one detail unit per delivered job whatever this setting is.",
            "default": true
          },
          "companies": {
            "title": "Companies",
            "type": "array",
            "description": "Reed company-profile URLs (e.g. https://www.reed.co.uk/company-profile/Marshall-Wolfe-63256) or bare slugs (e.g. Marshall-Wolfe-63256). Slugs are case-sensitive.",
            "default": [
              "https://www.reed.co.uk/company-profile/Marshall-Wolfe-63256"
            ],
            "items": {
              "type": "string"
            }
          },
          "courseQueries": {
            "title": "Course search keywords",
            "type": "array",
            "description": "Keywords to search Reed Courses, e.g. ['python', 'project management']. One search per keyword; Max results caps the number of courses.",
            "default": [
              "python"
            ],
            "items": {
              "type": "string"
            }
          },
          "courseUrls": {
            "title": "Course URLs or IDs",
            "type": "array",
            "description": "Reed course search URLs (e.g. https://www.reed.co.uk/courses/python, optional ?page=N), course detail URLs (e.g. https://www.reed.co.uk/courses/python-course/271655 or /courses/c/271655) or bare course IDs (e.g. 271655). Combined with any search keywords above.",
            "default": [
              "https://www.reed.co.uk/courses/python",
              "https://www.reed.co.uk/courses/python?page=2",
              "https://www.reed.co.uk/courses/python-course/271655",
              "https://www.reed.co.uk/courses/c/537019"
            ],
            "items": {
              "type": "string"
            }
          },
          "fetchReviews": {
            "title": "Fetch course reviews",
            "type": "boolean",
            "description": "Courses mode only. When enabled, each course's reviews are returned as separate review records (rating breakdown, text, reviewer, provider response).",
            "default": true
          },
          "maxReviewsPerCourse": {
            "title": "Max reviews per course",
            "minimum": 0,
            "maximum": 1000,
            "type": "integer",
            "description": "Cap on reviews fetched per course. 0 = the maximum of 1000 reviews per course.",
            "default": 20
          },
          "reviewsSort": {
            "title": "Reviews sort order",
            "enum": [
              "MostRecent",
              "RatingDesc",
              "RatingAsc"
            ],
            "type": "string",
            "description": "Order in which course reviews are fetched.",
            "default": "MostRecent"
          },
          "maxListings": {
            "title": "Max results",
            "minimum": 0,
            "type": "integer",
            "description": "The single result cap, applied in every mode: max jobs, companies, or courses (course reviews are additional and not counted here). The run stops once this many are collected. Set 0 for unlimited (the run then walks the whole catalogue).",
            "default": 20
          },
          "maxPages": {
            "title": "Max pages per search",
            "minimum": 0,
            "type": "integer",
            "description": "Optional safety limit on result pages walked per search (Jobs and Courses). Leave at 0 to walk the whole catalogue: the run stops at Max results, the site's own last page, or a repeat-page guard, not an artificial page cap.",
            "default": 0
          },
          "maxResidentialRequests": {
            "title": "Residential request budget",
            "minimum": 0,
            "type": "integer",
            "description": "Optional cap on how many residential proxy exits the run may use (cost control). 0 = unlimited. Datacenter is used first regardless.",
            "default": 0
          },
          "proxy": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Proxy servers used by the scraper. Default is Apify datacenter (free-tier friendly).",
            "default": {
              "useApifyProxy": true
            }
          },
          "resumeFromRunId": {
            "title": "Resume from a previous run (delta)",
            "type": "string",
            "description": "Optional. ID of a previous run of this actor (or a dataset ID). Jobs already in that dataset are skipped, so this run returns only NEW jobs (a delta). Combine both runs' datasets for the full set. Max results then counts only the new jobs."
          },
          "incrementalMode": {
            "title": "Incremental changes for scheduled runs",
            "type": "boolean",
            "description": "Turn this on for daily or recurring monitoring of jobs, companies, courses and reviews. The first run returns everything matching as NEW. Later runs return only NEW, UPDATED and REAPPEARED records; unchanged records are not returned and not billed. Turn on \"Emit unchanged\" or \"Emit expired\" only when you also want those rows (they are billed as normal dataset items). State is kept separately for each mode, URL or filter setup; use State key to name or share a monitoring campaign. Detail-page enrichment is billed only for rows that are returned. To continue one specific interrupted run, 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, search/URL and filter settings -- different searches then never mix state with each other."
          },
          "emitUnchanged": {
            "title": "Emit unchanged records (incremental mode only)",
            "type": "boolean",
            "description": "Off by default. Turn on to also return records 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 records (incremental mode only)",
            "type": "boolean",
            "description": "Off by default. Turn on to also return records that were present in a previous run but are no longer found, marked EXPIRED. Only produced once a run has fully scanned every tracked search/URL -- not when Max listings 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": "Optional. Field names that must NOT make a record count as UPDATED, for example \"displaySalary\" (dotted paths reach nested fields). Ignored fields stay in the output and the saved baseline; they are only left out of the comparison and of changedFields. Leave empty to compare every field.",
            "items": {
              "type": "string"
            }
          },
          "mcpConnectors": {
            "title": "Pipe results into your apps (optional)",
            "type": "array",
            "description": "Optionally send results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize one under Apify, Settings, API & Integrations, then select it here. Notion gets a rich page-per-item export; other connectors get a best-effort write. 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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}