{
  "openapi": "3.0.1",
  "info": {
    "title": "Eurofirms Portugal Jobs Scraper: Ofertas de Emprego Change Feed",
    "description": "Scrape public Eurofirms Portugal job offers (ofertas de emprego) by function, district, town, hours, offer type and posting date. Add vacancies, requirements, languages and printed salary, and monitor a saved search for new, changed and withdrawn offers. No login needed.",
    "version": "0.2",
    "x-build-id": "3ymGa1My0lDMr6hCV"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/getascraper~eurofirms-portugal-jobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-getascraper-eurofirms-portugal-jobs-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/getascraper~eurofirms-portugal-jobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-getascraper-eurofirms-portugal-jobs-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/getascraper~eurofirms-portugal-jobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-getascraper-eurofirms-portugal-jobs-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": {
          "searchQuery": {
            "title": "Search words",
            "type": "string",
            "description": "Words searched by the Eurofirms site itself (for example motorista or soldador). Leave empty to browse every open offer.",
            "default": ""
          },
          "jobFunctions": {
            "title": "Job functions",
            "type": "array",
            "description": "Eurofirms job functions such as Operador/a de armazém, Soldador/a or Motorista de camião. A partial name like motorista expands to every matching function. Up to 12 entries.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "provinces": {
            "title": "Districts (distritos)",
            "type": "array",
            "description": "Only offers in these districts. Leave empty for the whole of Portugal.",
            "items": {
              "type": "string",
              "enum": [
                "aveiro",
                "beja",
                "braga",
                "braganca",
                "castelo-branco",
                "coimbra",
                "evora",
                "faro",
                "guarda",
                "leiria",
                "lisboa",
                "portalegre",
                "porto",
                "santarem",
                "setubal",
                "viana-do-castelo",
                "viseu",
                "ilha-da-madeira",
                "ilha-de-sao-miguel",
                "ilha-do-faial"
              ],
              "enumTitles": [
                "Aveiro",
                "Beja",
                "Braga",
                "Bragança",
                "Castelo Branco",
                "Coimbra",
                "Évora",
                "Faro",
                "Guarda",
                "Leiria",
                "Lisboa",
                "Portalegre",
                "Porto",
                "Santarém",
                "Setúbal",
                "Viana do Castelo",
                "Viseu",
                "Ilha da Madeira",
                "Ilha de São Miguel",
                "Ilha do Faial"
              ]
            },
            "default": []
          },
          "towns": {
            "title": "Towns and municipalities",
            "type": "array",
            "description": "Towns the board lists offers for, for example Mem Martins, Leiria or Funchal. Combine with a district to limit the match. Up to 12 entries.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "offerType": {
            "title": "Offer type",
            "enum": [
              "any",
              "selection",
              "foundation"
            ],
            "type": "string",
            "description": "Direct hire (Seleção) offers hire you straight into the client company. Eurofirms Foundation offers are for people with a disability certificate.",
            "default": "any"
          },
          "workingHours": {
            "title": "Working hours",
            "enum": [
              "any",
              "full-time",
              "part-time"
            ],
            "type": "string",
            "description": "Full-time or part-time schedule, as classified by the site.",
            "default": "any"
          },
          "workMode": {
            "title": "On-site or remote",
            "enum": [
              "any",
              "on-site",
              "remote"
            ],
            "type": "string",
            "description": "Remote returns only offers flagged as teleworking, which is often an empty list.",
            "default": "any"
          },
          "postedWithin": {
            "title": "Posted within",
            "enum": [
              "any",
              "1",
              "7",
              "15"
            ],
            "type": "string",
            "description": "Only offers published inside this window. The site supports 24 hours, 7 days and 15 days.",
            "default": "any"
          },
          "noExperienceRequired": {
            "title": "No experience required",
            "type": "boolean",
            "description": "Only offers the site flags as open to candidates without experience.",
            "default": false
          },
          "noEducationRequired": {
            "title": "No formal education required",
            "type": "boolean",
            "description": "Only offers the site flags as open to candidates without formal education (sem estudos).",
            "default": false
          },
          "vehicle": {
            "title": "Own vehicle",
            "enum": [
              "any",
              "required",
              "not-required"
            ],
            "type": "string",
            "description": "Required keeps offers that need your own vehicle, not required keeps those that do not.",
            "default": "any"
          },
          "includeKeywords": {
            "title": "Must mention any of",
            "type": "array",
            "description": "Keep an offer only when its title, summary or full text contains at least one of these words (accents ignored). Needs the offer page, so it is fetched automatically for each candidate.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "excludeKeywords": {
            "title": "Must not mention",
            "type": "array",
            "description": "Drop an offer when its title, summary or text contains any of these words, for example noturno or estágio.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "clientSectors": {
            "title": "Client sector",
            "type": "array",
            "description": "Keep offers whose ad names one of these client sectors, for example Automóvel, Logística or Restauração. Only offers that state a sector can match.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "languages": {
            "title": "Required languages",
            "type": "array",
            "description": "Keep offers whose language requirements mention one of these, for example Inglês or Espanhol.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "onlyWithSalary": {
            "title": "Only offers with a salary",
            "type": "boolean",
            "description": "Most Eurofirms offers say salary to be defined. Turn this on to keep only the offers that print a figure.",
            "default": false
          },
          "minMonthlySalary": {
            "title": "Minimum monthly salary (EUR)",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Keep offers whose printed salary reaches this monthly amount (yearly salaries are divided by 12). Offers without a printed salary are dropped. 0 turns the filter off.",
            "default": 0
          },
          "minVacancies": {
            "title": "Minimum open vacancies",
            "minimum": 1,
            "maximum": 10000,
            "type": "integer",
            "description": "Keep offers that hire at least this many people at once, useful for finding bulk hiring. 1 turns the filter off.",
            "default": 1
          },
          "sortBy": {
            "title": "Sort results",
            "enum": [
              "site",
              "newest",
              "oldest",
              "salary-high",
              "title"
            ],
            "type": "string",
            "description": "Applied to the results collected in this run. The site order is newest first.",
            "default": "site"
          },
          "maxItems": {
            "title": "Maximum offers",
            "minimum": 1,
            "maximum": 1500,
            "type": "integer",
            "description": "Stop after this many offers. The whole board holds about 1,300 open offers.",
            "default": 20
          },
          "maxPages": {
            "title": "Maximum result pages per search",
            "minimum": 1,
            "maximum": 70,
            "type": "integer",
            "description": "Each page holds 20 offers. Raise it together with Maximum offers, or when refine filters reject many offers.",
            "default": 5
          },
          "includeDetails": {
            "title": "Add full offer details",
            "type": "boolean",
            "description": "Opens every offer page to add the full description, requirements, education, languages, vacancies, weekly hours, applicant count, closing date and client sector. One extra request per offer.",
            "default": false
          },
          "monitorName": {
            "title": "Monitor name",
            "type": "string",
            "description": "Give a stable name to track this search between runs. Each offer is then labelled NEW or UPDATED, and withdrawn offers are reported as REMOVED. Letters, numbers, underscores and hyphens only. Leave empty for a plain run.",
            "default": ""
          },
          "includeUnchanged": {
            "title": "Also output unchanged offers",
            "type": "boolean",
            "description": "With a monitor name set, unchanged offers are skipped by default. Turn this on to receive every offer with its change status.",
            "default": false
          },
          "startUrls": {
            "title": "Eurofirms URLs",
            "type": "array",
            "description": "Optional. Paste Eurofirms Portugal search pages or single offer pages (https://jobs.eurofirms.com/pt/pt/...). When used, the search and site filters above are ignored and only the refine filters apply.",
            "default": [],
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Leave as is: the Actor connects directly and automatically falls back to Apify datacenter and then residential proxy if the site refuses a request. Set a proxy here only to force one.",
            "default": {
              "useApifyProxy": false
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}