{
  "openapi": "3.0.1",
  "info": {
    "title": "Research & Academic Jobs Scraper — 10 Sources",
    "description": "Every researcher-relevant job source behind one endpoint: LinkedIn, EURAXESS, jobs.ac.uk, UN Careers, ReliefWeb, Impactpool, Ikerbasque, Devex, University of Copenhagen and Universitat de Barcelona. One run returns a merged, deduped dataset of live research, academic, policy and NGO roles.",
    "version": "0.1",
    "x-build-id": "fm7HDgo1oJPOCOJgd"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/nomad-agent~researcher-bundle/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-nomad-agent-researcher-bundle",
        "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/nomad-agent~researcher-bundle/runs": {
      "post": {
        "operationId": "runs-sync-nomad-agent-researcher-bundle",
        "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/nomad-agent~researcher-bundle/run-sync": {
      "post": {
        "operationId": "run-sync-nomad-agent-researcher-bundle",
        "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": "Sources",
            "type": "array",
            "description": "Which boards to include. Leave empty to run the full default set. Each enabled source starts its own child actor — $0.05 per source, plus that child's own per-result fee — on top of this bundle's fees, so fewer sources means lower cost. 'Devex' and 'UB doctoral' also need the Anthropic or Mistral API key below (either one); without either they're skipped and a warning row explaining why is added to the results.",
            "items": {
              "type": "string",
              "enum": [
                "linkedin",
                "euraxess",
                "jobs_ac_uk",
                "un_careers",
                "reliefweb",
                "impactpool",
                "ikerbasque",
                "devex",
                "math_ku_phd",
                "ub_doctoral"
              ]
            },
            "default": [
              "linkedin",
              "euraxess",
              "jobs_ac_uk",
              "un_careers",
              "reliefweb",
              "impactpool",
              "ikerbasque",
              "devex",
              "math_ku_phd",
              "ub_doctoral"
            ]
          },
          "keyword": {
            "title": "Keyword",
            "type": "string",
            "description": "Optional free-text filter forwarded to children that support it (others ignore it)."
          },
          "anthropicApiKey": {
            "title": "Anthropic API key (needed for 2 of 10 sources)",
            "type": "string",
            "description": "Required (together with mistralApiKey, below — either one is enough) only by 'Devex' and 'UB doctoral' — they read listings that sit behind extra rendering and use an AI provider to extract them. Without either key those two sources are skipped (you are not charged for them) and a warning row is added to the output explaining why; the other 8 sources run normally either way. Usage is billed separately by Anthropic, not by this Actor."
          },
          "mistralApiKey": {
            "title": "Mistral API key (alternative to Anthropic, for 2 of 10 sources)",
            "type": "string",
            "description": "Alternative to anthropicApiKey for 'Devex' and 'UB doctoral' — pass this instead if you'd rather bring a Mistral key than an Anthropic one (either key is enough; anthropicApiKey is preferred when both are set). Without either key those two sources are skipped and a warning row is added explaining why. Usage is billed separately by Mistral, not by this Actor."
          },
          "mistralModel": {
            "title": "Mistral model (only used when mistralApiKey is the key in effect)",
            "enum": [
              "mistral-small-latest",
              "mistral-medium-latest",
              "mistral-large-latest"
            ],
            "type": "string",
            "description": "Mistral model forwarded to 'Devex' and 'UB doctoral' when they run on mistralApiKey (no anthropicApiKey supplied). Small is the default — matches larger Mistral models on this task at a fraction of the cost.",
            "default": "mistral-small-latest"
          },
          "maxItemsPerSource": {
            "title": "Max items per source",
            "minimum": 1,
            "type": "integer",
            "description": "Cap on items fetched from EACH child board before merging. Cost driver: every item a child returns is billed by that child (its own per-result fee) as well as by this bundle once it survives deduping — raise with that in mind.",
            "default": 36
          },
          "maxItems": {
            "title": "Max items (total)",
            "minimum": 0,
            "type": "integer",
            "description": "Hard cap on the merged, deduped output. Default (360) is sources × 'Max items per source' — the natural zero-config ceiling. A default no-key run touches 8 runnable sources: up to ~288 items, about $2.75 all-in. With an Anthropic key all 10 sources run: up to ~360 items, about $3.43 all-in. Set 0 to remove the cap — cost then scales with every source's raw output.",
            "default": 360
          },
          "cacheTtlSeconds": {
            "title": "Cache time (seconds)",
            "minimum": 0,
            "type": "integer",
            "description": "How long to reuse results already fetched from a source instead of fetching again. Set 0 to always fetch fresh data.",
            "default": 1800
          },
          "concurrency": {
            "title": "Concurrency",
            "minimum": 1,
            "maximum": 12,
            "type": "integer",
            "description": "How many source boards to fetch at the same time.",
            "default": 6
          },
          "runTimeoutSecs": {
            "title": "Per-source timeout (seconds)",
            "minimum": 30,
            "type": "integer",
            "description": "How long to wait for each source before giving up on it.",
            "default": 120
          },
          "apifyToken": {
            "title": "Apify API token",
            "type": "string",
            "description": "Leave empty — injected automatically when this Actor runs on the Apify platform. Only set this when running the code outside the platform, e.g. on your own machine."
          },
          "actorOwner": {
            "title": "Actor owner",
            "type": "string",
            "description": "Which Apify account's child actors this bundle calls, e.g. 'nomad-agent'. Leave empty to use the published sources this bundle ships with — only set this if you run your own fork of the child actors under a different Apify account.",
            "default": ""
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}