{
  "openapi": "3.0.1",
  "info": {
    "title": "CharityJob Scraper",
    "description": "Scrape UK charity and non-profit jobs from CharityJob. Search by keyword, location and radius, filter by cause, contract type, workplace and salary, and get the employer, salary range, cause categories, posting and closing dates and the full advert. Export to CSV, JSON or Excel.",
    "version": "1.0",
    "x-build-id": "3aueKLkSmtUtOqrhh"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/boncross~charityjob-jobs/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-boncross-charityjob-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/boncross~charityjob-jobs/runs": {
      "post": {
        "operationId": "runs-sync-boncross-charityjob-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/boncross~charityjob-jobs/run-sync": {
      "post": {
        "operationId": "run-sync-boncross-charityjob-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 title or keyword",
            "type": "string",
            "description": "What to search for, for example \"fundraising manager\" or \"administrator\". Leave empty to take everything the other filters allow."
          },
          "location": {
            "title": "Location",
            "type": "string",
            "description": "A town, city or postcode, for example \"London\" or \"M1\". Combined with the search radius below."
          },
          "searches": {
            "title": "Searches",
            "type": "array",
            "description": "Several searches in one run. Each entry is either a keyword string, or an object with \"keyword\" and \"location\". Entries without a location use the Location field above.",
            "default": []
          },
          "startUrls": {
            "title": "Start URLs",
            "type": "array",
            "description": "Paste CharityJob search URLs, or point at a file or Google Sheet holding many. Used as-is, so any filters already in the URL are kept.",
            "default": [],
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "maxItemsPerSearch": {
            "title": "Max jobs per search",
            "minimum": 0,
            "type": "integer",
            "description": "Row limit for each individual search. 0 means no limit.",
            "default": 200
          },
          "maxItems": {
            "title": "Max jobs for the whole run",
            "minimum": 0,
            "type": "integer",
            "description": "Row ceiling across every search in the run, on top of the per-search limit. 0 means no limit.",
            "default": 0
          },
          "distance": {
            "title": "Search radius (miles)",
            "minimum": 0,
            "maximum": 100,
            "type": "integer",
            "description": "How far from the location to search. CharityJob offers 10 to 100 miles.",
            "default": 10
          },
          "contractTypes": {
            "title": "Contract types",
            "type": "array",
            "description": "Keep only these contract types. Leave empty for all.",
            "items": {
              "type": "string",
              "enum": [
                "full-time",
                "part-time",
                "permanent",
                "contract",
                "temporary",
                "internship"
              ],
              "enumTitles": [
                "Full-time",
                "Part-time",
                "Permanent",
                "Contract",
                "Temporary",
                "Internship"
              ]
            },
            "default": []
          },
          "workplaces": {
            "title": "Workplace",
            "type": "array",
            "description": "Keep only jobs with these working arrangements. Leave empty for all.",
            "items": {
              "type": "string",
              "enum": [
                "on-site",
                "hybrid",
                "remote"
              ],
              "enumTitles": [
                "On-site",
                "Hybrid",
                "Remote"
              ]
            },
            "default": []
          },
          "causes": {
            "title": "Causes",
            "type": "array",
            "description": "Keep only jobs in these charitable causes. Leave empty for all.",
            "items": {
              "type": "string",
              "enum": [
                "animal",
                "arts-culture-heritage",
                "charity-support",
                "community",
                "disability",
                "dei",
                "education",
                "elderly",
                "environment",
                "faith-based",
                "health",
                "housing-and-homelessness",
                "human-rights",
                "international-development",
                "justice",
                "membership",
                "mental-health",
                "research",
                "social-welfare",
                "sport",
                "youth-and-children"
              ],
              "enumTitles": [
                "Animal",
                "Arts, Culture and Heritage",
                "Charity Support",
                "Community Development",
                "Disability",
                "Diversity and Inclusion",
                "Education",
                "Elderly",
                "Environment",
                "Faith-based",
                "Health",
                "Housing and Homelessness",
                "Human Rights",
                "International Development",
                "Justice",
                "Membership Organisations",
                "Mental Health",
                "Research",
                "Social Welfare",
                "Sport",
                "Youth and Children"
              ]
            },
            "default": []
          },
          "quickApplyOnly": {
            "title": "Quick apply only",
            "type": "boolean",
            "description": "Keep only jobs you can apply for on CharityJob itself with the quick-apply form (shown as isQuickApply on each row).",
            "default": false
          },
          "minSalary": {
            "title": "Minimum salary",
            "minimum": 0,
            "type": "integer",
            "description": "Lowest advertised salary to accept, in GBP per year. 0 means no minimum.",
            "default": 0
          },
          "maxSalary": {
            "title": "Maximum salary",
            "minimum": 0,
            "type": "integer",
            "description": "Highest advertised salary to accept, in GBP per year. 0 means no maximum.",
            "default": 0
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "newest",
              "closing"
            ],
            "type": "string",
            "description": "Order CharityJob returns results in.",
            "default": "newest"
          },
          "maxDaysOld": {
            "title": "Posted within (days)",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only jobs posted in the last N days, using the posting date on each advert. 0 keeps everything. Needs \"Fetch full job details\" on, because the posting date comes from the advert.",
            "default": 0
          },
          "titleIncludes": {
            "title": "Title must contain",
            "type": "array",
            "description": "Keep a job only if its title contains at least one of these words. Case-insensitive.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "titleExcludes": {
            "title": "Title must not contain",
            "type": "array",
            "description": "Drop a job if its title contains any of these words. Case-insensitive.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "companyExcludes": {
            "title": "Exclude employers",
            "type": "array",
            "description": "Drop a job if the employer name contains any of these words. Case-insensitive.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "fetchDetails": {
            "title": "Fetch full job details",
            "type": "boolean",
            "description": "Open each advert for the description, salary range, cause categories, employment types and closing date. Turn off for a fast, cheap listing-only scan.",
            "default": true
          },
          "includeDescription": {
            "title": "Include description",
            "type": "boolean",
            "description": "Include the advert text as plain text. Needs \"Fetch full job details\".",
            "default": true
          },
          "includeDescriptionHtml": {
            "title": "Include description HTML",
            "type": "boolean",
            "description": "Also include the advert's original HTML. Makes rows considerably larger.",
            "default": false
          },
          "onlyNew": {
            "title": "Only jobs not seen before",
            "type": "boolean",
            "description": "Skip jobs returned by an earlier run that used the same store name below.",
            "default": false
          },
          "dedupStoreName": {
            "title": "Store name for seen jobs",
            "type": "string",
            "description": "Named key-value store that remembers job ids between runs. Leave empty to remember nothing.",
            "default": ""
          },
          "maxConcurrency": {
            "title": "Parallel requests",
            "minimum": 1,
            "maximum": 32,
            "type": "integer",
            "description": "How many requests run at once across the whole run. The default is the fastest level measured clean; lower it only if a run reports refusals or errors.",
            "default": 16
          },
          "delayMs": {
            "title": "Delay between requests (ms)",
            "minimum": 0,
            "maximum": 2000,
            "type": "integer",
            "description": "Optional pause before each call, in milliseconds, up to 2,000. 0 (the default) runs as fast as the parallel limit allows.",
            "default": 0
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}