{
  "openapi": "3.0.1",
  "info": {
    "title": "CV-Library Jobs Scraper",
    "description": "[💰 $4.0 / 1K] Extract UK job postings from CV-Library at scale — title, company, location, salary (parsed min/max), job type, remote flag, posted date, full description, and apply link. Search by keyword, location, and radius with job-type, salary, date, and remote filters, or paste search URLs.",
    "version": "1.0",
    "x-build-id": "0zjYBgSyKK3Yiadbw"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/solidcode~cv-library-co-uk-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-solidcode-cv-library-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/solidcode~cv-library-co-uk-scraper/runs": {
      "post": {
        "operationId": "runs-sync-solidcode-cv-library-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/solidcode~cv-library-co-uk-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-solidcode-cv-library-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",
        "properties": {
          "keywords": {
            "title": "Search Keywords",
            "type": "array",
            "description": "Job titles, skills, or keywords to search for, such as 'software engineer', 'registered nurse', or 'HGV driver'. Each keyword runs its own search. Leave empty if you only want to use the URLs below.",
            "items": {
              "type": "string"
            }
          },
          "location": {
            "title": "Location",
            "type": "string",
            "description": "Town, city, county, or postcode to search around, such as 'London', 'Manchester', or 'M1 4BT'. Matches what you would type into CV-Library's location box. Applied to every keyword search above."
          },
          "distance": {
            "title": "Search Radius",
            "enum": [
              "0",
              "5",
              "10",
              "15",
              "20",
              "30",
              "50",
              "100"
            ],
            "type": "string",
            "description": "How far around the location to search, in miles.",
            "default": "15"
          },
          "startUrls": {
            "title": "CV-Library Search URLs",
            "type": "array",
            "description": "Optional. Paste full CV-Library search or job URLs (e.g. https://www.cv-library.co.uk/software-engineer-jobs). Any filters already applied on the site are respected. Useful for advanced searches the fields above don't cover. You can mix URLs with the keyword search.",
            "items": {
              "type": "string"
            }
          },
          "jobType": {
            "title": "Job Type",
            "uniqueItems": true,
            "type": "array",
            "description": "Keep only jobs of these employment types. This filter is applied to the results after they are collected (CV-Library does not narrow the search by type on these pages), so on a thin market up to 8 extra pages may be scanned to find matches before the run stops. Leave empty for all types.",
            "items": {
              "type": "string",
              "enum": [
                "permanent",
                "contract",
                "temporary",
                "part-time"
              ],
              "enumTitles": [
                "Permanent",
                "Contract",
                "Temporary",
                "Part-Time"
              ]
            },
            "default": []
          },
          "salaryMin": {
            "title": "Minimum Salary",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only jobs offering at least this annual salary, in GBP. Applied to the results after collection (filtered from results, not sent to CV-Library), using each job's parsed salary. Jobs with no stated salary are kept. Leave empty for no lower bound."
          },
          "salaryMax": {
            "title": "Maximum Salary",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only jobs offering up to this annual salary, in GBP. Applied to the results after collection (filtered from results, not sent to CV-Library), using each job's parsed salary. Jobs with no stated salary are kept. Leave empty for no upper bound."
          },
          "postedSince": {
            "title": "Date Posted",
            "enum": [
              "",
              "1",
              "3",
              "7",
              "14"
            ],
            "type": "string",
            "description": "Only return jobs posted within this time window. Leave on 'Any time' to include all jobs.",
            "default": ""
          },
          "remoteOnly": {
            "title": "Remote Jobs Only",
            "type": "boolean",
            "description": "Keep only jobs that read as remote or work-from-home. Applied to the results after collection (filtered from results, not sent to CV-Library) by checking each job's title, location, and description for remote / hybrid / work-from-home wording. On searches with few remote roles, up to 8 extra pages are scanned before the run stops.",
            "default": false
          },
          "includeDescription": {
            "title": "Fetch Full Job Descriptions",
            "type": "boolean",
            "description": "Off by default for fast results. Each job card already includes the title, company, location, salary, job type, posted date, and link. Turn this on to also fetch the full job description, the apply link, and the exact posted date from each job's own page — this is slower, because every job needs an extra page visit, so expect longer runs (and a higher per-run cost) on large searches.",
            "default": false
          },
          "onlyUniqueJobs": {
            "title": "Only Unique Jobs",
            "type": "boolean",
            "description": "When on, each job is returned once even if CV-Library lists it across several pages or searches. Deduplicates by the job's ID. Turn off to keep every copy.",
            "default": true
          },
          "maxResults": {
            "title": "Maximum Results",
            "minimum": 0,
            "type": "integer",
            "description": "Cap on the total number of jobs returned across all searches and URLs. Defaults to 50 for a quick first run; raise it for larger pulls. Use 0 for unlimited (the run keeps paging until CV-Library returns no more jobs). Results are fetched a page at a time, so a small cap can return up to a full page more than you asked for.",
            "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}