{
  "openapi": "3.0.1",
  "info": {
    "title": "Ofertas de Emprego Jobs Scraper: Empregos em Portugal e Filtros",
    "description": "Extract public Portugal job listings from Ofertas de Emprego (ofertasdeemprego.pt) with filters for area, contract, work model, city, experience and languages. Get exact dates, requirements, benefits and company profiles, plus a monitor for new, changed and removed jobs. No login or key.",
    "version": "1.0",
    "x-build-id": "fNSbLIluvAl9I6dH2"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/getascraper~ofertas-de-emprego-jobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-getascraper-ofertas-de-emprego-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~ofertas-de-emprego-jobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-getascraper-ofertas-de-emprego-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~ofertas-de-emprego-jobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-getascraper-ofertas-de-emprego-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": {
          "searchQueries": {
            "title": "Search words",
            "type": "array",
            "description": "Job titles or words to search on the site, for example \"enfermeiro\" or \"python\". Each word is a separate search and the results are merged without duplicates. Leave empty to read the newest jobs.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "startUrls": {
            "title": "Pages to read",
            "type": "array",
            "description": "Optional ofertasdeemprego.pt pages: a search, area, zone, contract type, work model, tag or company page, or a single job page. When set, these replace the search words and the filters below that choose the page.",
            "items": {
              "type": "object",
              "properties": {
                "url": {
                  "title": "Page URL",
                  "description": "A public HTTPS ofertasdeemprego.pt page.",
                  "type": "string"
                }
              },
              "required": [
                "url"
              ]
            },
            "default": []
          },
          "categories": {
            "title": "Areas",
            "type": "array",
            "description": "Only jobs in these areas of work. Leave empty for all areas.",
            "items": {
              "type": "string",
              "enum": [
                "agricultura-florestas-pescas",
                "arquitetura-design",
                "artes-entretenimento-media",
                "banca-servicos-financeiros",
                "beleza-moda",
                "biotecnologia-farmacia",
                "call-center-help-desk",
                "comercial-servicos",
                "comunicacao-social",
                "conservacao-manutencao-tecnica",
                "construcao-civil",
                "contabilidade-financas",
                "desporto",
                "direito-justica",
                "economia",
                "educacao-ensino",
                "engenharias",
                "gestao-administracao-secretariado",
                "hotelaria-turismo",
                "imobiliario",
                "industria-producao",
                "informatica",
                "limpezas-domestico",
                "outros",
                "portadores-de-deficiencia",
                "publicidade-marketing",
                "recursos-humanos",
                "relacoes-publicas",
                "restauracao-bares",
                "saude-medicina-enfermagem",
                "seguranca-vigilancia",
                "seguros",
                "servicos-sociais",
                "telecomunicacoes",
                "transportes-logistica"
              ],
              "enumTitles": [
                "Agricultura / Florestas / Pescas",
                "Arquitetura / Design",
                "Artes / Entretenimento / Media",
                "Banca / Serviços Financeiros",
                "Beleza / Moda",
                "Biotecnologia / Farmácia",
                "Call Center / Help Desk",
                "Comercial / Serviços",
                "Comunicação Social",
                "Conservação / Manutenção / Técnica",
                "Construção Civil",
                "Contabilidade / Finanças",
                "Desporto",
                "Direito / Justiça",
                "Economia",
                "Educação / Ensino",
                "Engenharias",
                "Gestão / Administração / Secretariado",
                "Hotelaria / Turismo",
                "Imobiliário",
                "Indústria / Produção",
                "Informática",
                "Limpezas / Doméstico",
                "Outros",
                "Portadores de Deficiência",
                "Publicidade / Marketing",
                "Recursos Humanos",
                "Relações Públicas",
                "Restauração / Bares",
                "Saúde / Medicina / Enfermagem",
                "Segurança / Vigilância",
                "Seguros",
                "Serviços Sociais",
                "Telecomunicações",
                "Transportes / Logística"
              ]
            },
            "default": []
          },
          "contractTypes": {
            "title": "Contract types",
            "type": "array",
            "description": "Only jobs of these types: full time, part time, internship, freelance or temporary. Leave empty for all.",
            "items": {
              "type": "string",
              "enum": [
                "estagio",
                "freelance",
                "full-time",
                "part-time",
                "temporario"
              ],
              "enumTitles": [
                "Estágio",
                "Freelance",
                "Full Time",
                "Part Time",
                "Temporário"
              ]
            },
            "default": []
          },
          "workModels": {
            "title": "Work models",
            "type": "array",
            "description": "Only jobs with this work model: on-site, hybrid, remote in Portugal or remote worldwide. Reading the job page is used to check this when it cannot be done from the search.",
            "items": {
              "type": "string",
              "enum": [
                "presencial",
                "hibrido",
                "remoto-pt",
                "remoto-global"
              ],
              "enumTitles": [
                "Presencial",
                "Híbrido",
                "Remoto (Portugal)",
                "Remoto (Global)"
              ]
            },
            "default": []
          },
          "locations": {
            "title": "Locations",
            "type": "array",
            "description": "Cities, municipalities or regions as written on the site, for example \"Porto\", \"Vila Nova de Gaia\" or \"Madeira\". Each location is a separate search. A name the site does not know returns no jobs.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "experienceLevels": {
            "title": "Experience levels",
            "type": "array",
            "description": "Only jobs asking for this level of experience. Needs the job page, so it is read automatically.",
            "items": {
              "type": "string",
              "enum": [
                "sem-experiencia",
                "junior",
                "intermedio",
                "senior"
              ],
              "enumTitles": [
                "No experience",
                "Junior (0-2 years)",
                "Intermediate (2-5 years)",
                "Senior (5+ years)"
              ]
            },
            "default": []
          },
          "languages": {
            "title": "Required languages",
            "type": "array",
            "description": "Only jobs that list all of these languages, for example \"Inglês\" or \"Francês\". Needs the job page, so it is read automatically.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "includeKeywords": {
            "title": "Must mention (any)",
            "type": "array",
            "description": "Keep jobs whose title, company or description contains at least one of these words. Accents and capital letters are ignored.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "excludeKeywords": {
            "title": "Must not mention",
            "type": "array",
            "description": "Drop jobs whose title, company or description contains any of these words, for example \"estágio\" or \"call center\".",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "companies": {
            "title": "Only these companies",
            "type": "array",
            "description": "Keep jobs from companies whose name contains one of these names.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "excludeCompanies": {
            "title": "Skip these companies",
            "type": "array",
            "description": "Drop jobs from companies whose name contains one of these names, for example recruitment agencies.",
            "items": {
              "type": "string"
            },
            "default": []
          },
          "postedWithinDays": {
            "title": "Posted within (days)",
            "minimum": 1,
            "maximum": 365,
            "type": "integer",
            "description": "Only jobs published in the last N days. Leave empty for no limit. The site shows ages rounded down, such as \"há 2 semanas\"."
          },
          "onlyWithSalary": {
            "title": "Only jobs that show pay",
            "type": "boolean",
            "description": "Keep jobs that state a salary range or mention an amount in euros in the ad. Needs the job page, so it is read automatically.",
            "default": false
          },
          "maxPerCompany": {
            "title": "Maximum jobs per company",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "Cap how many jobs one company can add, so large employers with many branches do not fill the result. Leave empty for no cap."
          },
          "dedupeSimilar": {
            "title": "Remove look-alike postings",
            "type": "boolean",
            "description": "Drop repeated postings with the same title, company and location, which the site often lists once per store or branch.",
            "default": false
          },
          "maxItems": {
            "title": "Maximum jobs",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Total jobs to save. Free-plan runs are capped at 25 jobs.",
            "default": 10
          },
          "maxPages": {
            "title": "Maximum pages per search",
            "minimum": 1,
            "maximum": 250,
            "type": "integer",
            "description": "Result pages read for each search or page. The site shows 8 jobs per page. Reading stops earlier once the maximum jobs is reached.",
            "default": 5
          },
          "sortBy": {
            "title": "Sort results",
            "enum": [
              "site",
              "newest",
              "oldest",
              "company"
            ],
            "type": "string",
            "description": "Order of the saved jobs. Sorting applies to the jobs collected in this run: when you sort, the run reads up to three times the maximum before keeping the best.",
            "default": "site"
          },
          "includeDetails": {
            "title": "Read each job page",
            "type": "boolean",
            "description": "Open every job page for the exact publish and expiry dates, work model, experience, education, languages, benefits, weekly hours, skills and the company link. One extra request per job.",
            "default": false
          },
          "includeCompanyProfile": {
            "title": "Add company profile",
            "type": "boolean",
            "description": "Add the company's public profile (about text, website, address, open jobs) when the job links to one. Reads each company page once.",
            "default": false
          },
          "includeHtml": {
            "title": "Keep description HTML",
            "type": "boolean",
            "description": "Also save the ad description as HTML next to the plain text.",
            "default": false
          },
          "monitorMode": {
            "title": "Monitor mode",
            "enum": [
              "off",
              "changes",
              "all"
            ],
            "type": "string",
            "description": "Off returns every match. Changes returns only new, changed and removed jobs since the last run with the same monitor name. All returns every match labelled new, changed or unchanged, plus removed jobs.",
            "default": "off"
          },
          "monitorName": {
            "title": "Monitor name",
            "type": "string",
            "description": "Name of the saved list of jobs. Use a different name for each search you schedule.",
            "default": "default"
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Direct requests are used first. If the site starts refusing them, the Actor switches to Apify datacenter proxy by itself. 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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}