{
  "openapi": "3.0.1",
  "info": {
    "title": "EURAXESS Scraper",
    "description": "Scrape job offers from EURAXESS, the EU researcher job portal. Returns title, employer, location, deadline, research fields, career stage, contract type, start date, contact e-mail, apply URL and full description. Pay per event: $0.001 per run, $0.003 per search result, $0.005 per job with details.",
    "version": "0.1",
    "x-build-id": "TylUrlXHJKJzAZDNz"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/santamaria-automations~euraxess-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-santamaria-automations-euraxess-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/santamaria-automations~euraxess-scraper/runs": {
      "post": {
        "operationId": "runs-sync-santamaria-automations-euraxess-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/santamaria-automations~euraxess-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-santamaria-automations-euraxess-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": {
          "searchQueries": {
            "title": "Search keywords",
            "type": "array",
            "description": "Optional keywords, one search per keyword (server-side EURAXESS keyword facet). Leave empty to list all jobs matching the filters below. Rows are tagged with the keyword that found them and de-duplicated across keywords.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "countries": {
            "title": "Countries",
            "type": "array",
            "description": "Only jobs located in these countries (server-side facet, several countries are OR-combined). Leave empty for all countries. Names as on EURAXESS.",
            "items": {
              "type": "string",
              "enum": [
                "Austria",
                "Belgium",
                "Bulgaria",
                "Croatia",
                "Cyprus",
                "Czech Republic",
                "Denmark",
                "Estonia",
                "Finland",
                "France",
                "Germany",
                "Greece",
                "Hungary",
                "Iceland",
                "Ireland",
                "Israel",
                "Italy",
                "Latvia",
                "Lithuania",
                "Luxembourg",
                "Malta",
                "Netherlands",
                "Norway",
                "Poland",
                "Portugal",
                "Romania",
                "Serbia",
                "Slovakia",
                "Slovenia",
                "Spain",
                "Sweden",
                "Switzerland",
                "Tunisia",
                "Türkiye",
                "United Kingdom",
                "Argentina",
                "Australia",
                "Bangladesh",
                "Brazil",
                "Canada",
                "China",
                "Egypt",
                "Europe",
                "French Guiana",
                "Hong Kong",
                "India",
                "Indonesia",
                "Japan",
                "Kazakhstan",
                "Korea",
                "Macao",
                "Malaysia",
                "Mexico",
                "Morocco",
                "New Zealand",
                "Nigeria",
                "Oman",
                "Papua New Guinea",
                "Qatar",
                "Saudi Arabia",
                "Singapore",
                "Taiwan",
                "Ukraine",
                "United Arab Emirates",
                "United States",
                "Uzbekistan",
                "Vietnam"
              ]
            },
            "default": []
          },
          "location": {
            "title": "Location",
            "type": "string",
            "description": "Optional. A country name is applied server-side like `countries`; any other text (for example a city such as Zurich) is matched client-side against the location shown on each result card."
          },
          "researcherProfiles": {
            "title": "Researcher profile",
            "type": "array",
            "description": "Career stage (server-side, OR-combined). R1 first stage / PhD, R2 recognised researcher / postdoc, R3 established, R4 leading, Other profession (technicians, administration).",
            "items": {
              "type": "string",
              "enum": [
                "R1",
                "R2",
                "R3",
                "R4",
                "other"
              ],
              "enumTitles": [
                "First Stage Researcher (R1)",
                "Recognised Researcher (R2)",
                "Established Researcher (R3)",
                "Leading Researcher (R4)",
                "Other Profession"
              ]
            },
            "default": []
          },
          "positionTypes": {
            "title": "Position type",
            "type": "array",
            "description": "Type of position offered (server-side, OR-combined).",
            "items": {
              "type": "string",
              "enum": [
                "phd",
                "postdoc",
                "master",
                "bachelor",
                "undergraduate",
                "research_support",
                "other"
              ],
              "enumTitles": [
                "PhD positions",
                "Postdoc positions",
                "Master positions",
                "Bachelor positions",
                "Undergraduate positions",
                "Research support positions",
                "Other positions"
              ]
            },
            "default": []
          },
          "organisationTypes": {
            "title": "Organisation type",
            "type": "array",
            "description": "Type of the hiring organisation (server-side, OR-combined).",
            "items": {
              "type": "string",
              "enum": [
                "higher_education",
                "intergovernmental",
                "large_enterprise",
                "private_public_mission",
                "public_research_institution",
                "research_laboratory",
                "sme_startup",
                "other"
              ],
              "enumTitles": [
                "Higher Education Institution",
                "Intergovernmental Organisation",
                "Large Enterprise",
                "Private with public mission",
                "Public Research Institution",
                "Research Laboratory",
                "Small Medium Enterprise & Start-up",
                "Other"
              ]
            },
            "default": []
          },
          "euFunding": {
            "title": "EU funding programme",
            "type": "array",
            "description": "Only jobs funded through these EU programmes (server-side, OR-combined). Choose `not_eu_funded` for jobs without EU funding.",
            "items": {
              "type": "string",
              "enum": [
                "horizon_europe",
                "horizon_europe_erc",
                "horizon_europe_msca",
                "horizon_europe_cofund",
                "horizon_europe_eic",
                "horizon_europe_other",
                "horizon_2020",
                "erasmus_plus",
                "digital_europe",
                "eu_next_generation",
                "nextgenerationeu",
                "interreg",
                "life_programme",
                "other_eu_programme",
                "not_eu_funded"
              ],
              "enumTitles": [
                "Horizon Europe",
                "Horizon Europe - ERC",
                "Horizon Europe - MSCA",
                "Horizon Europe - COFUND",
                "Horizon Europe - EIC",
                "Horizon Europe (other)",
                "Horizon 2020",
                "Erasmus+",
                "Digital Europe",
                "European Union / Next Generation EU",
                "NextGenerationEU",
                "Interreg",
                "LIFE Programme",
                "Other EU programme",
                "Not funded by a EU programme"
              ]
            },
            "default": []
          },
          "researchFields": {
            "title": "Research fields",
            "type": "array",
            "description": "EURAXESS research field names or numeric ids (server-side, OR-combined). A top-level field such as `Engineering` also matches its sub-fields. Names that exist under several parents (for example `Other`) must be given as numeric id.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "newest",
              "relevance",
              "deadline"
            ],
            "type": "string",
            "description": "newest = posting date, newest first (server-side, enables stop-early with postedWithinDays / maxAgeHours). relevance = the site's default order. deadline = application deadline, soonest first.",
            "default": "newest"
          },
          "postedWithinDays": {
            "title": "Posted within days",
            "minimum": 0,
            "type": "integer",
            "description": "Only jobs posted within the last N days. EURAXESS publishes the posting day only (no time), so the window is day-granular. With sortBy newest the crawl stops at the first older job. 0 = off.",
            "default": 0
          },
          "maxAgeHours": {
            "title": "Max age (hours)",
            "minimum": 0,
            "type": "integer",
            "description": "Alternative to postedWithinDays, in hours. Day-granular on this site: a job is kept when any part of its posting day is inside the window. 0 = off.",
            "default": 0
          },
          "titleFilter": {
            "title": "Title filter",
            "type": "string",
            "description": "Comma-separated terms, case-insensitive substring OR-match against the job title. Applied before detail pages are fetched, so filtered-out jobs are not charged."
          },
          "maxResults": {
            "title": "Max results (total)",
            "minimum": 1,
            "maximum": 20000,
            "type": "integer",
            "description": "Total cap across all keywords. Default 50.",
            "default": 50
          },
          "maxResultsPerQuery": {
            "title": "Max results per keyword",
            "minimum": 1,
            "maximum": 20000,
            "type": "integer",
            "description": "Cap per keyword / search URL. Empty = same as maxResults. If maxResults is smaller than per-keyword cap x number of keywords, later keywords get fewer or no results."
          },
          "includeJobDetails": {
            "title": "Include job details",
            "type": "boolean",
            "description": "Open every job page for the full description, requirements, contact e-mail/phone, apply URL, employer, locations and start date. Off = search-result data only (billed as a cheaper event).",
            "default": true
          },
          "searchUrls": {
            "title": "Search URLs",
            "type": "array",
            "description": "Ready-made EURAXESS search URLs (https://euraxess.ec.europa.eu/jobs/search?...). Filters and sort in the URL are honoured; paging is added by the actor.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "directUrls": {
            "title": "Direct job URLs",
            "type": "array",
            "description": "EURAXESS job page URLs (https://euraxess.ec.europa.eu/jobs/<id>) to scrape directly, skipping search.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "startUrls": {
            "title": "Start URLs (mixed)",
            "type": "array",
            "description": "Mixed list: search URLs go to the search crawler, job URLs to the direct scraper.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 4,
            "type": "integer",
            "description": "Parallel detail-page fetches (1-4, default 2). All requests share one pacer because EURAXESS rate-limits bursts.",
            "default": 2
          },
          "searchQuery": {
            "title": "[DEPRECATED] Search keyword (single)",
            "type": "string",
            "description": "DEPRECATED alias for searchQueries with one keyword. Kept so saved tasks keep working."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}