{
  "openapi": "3.0.1",
  "info": {
    "title": "Net-Empregos Portugal Jobs Scraper: Vagas de Emprego, No Login",
    "description": "Extract Portuguese job listings from net-empregos.com by district, category, or keyword. Get title, company, location, posting date, and optional full offer detail with expiry date, with correct Portuguese diacritics. Plain HTTP, no login, no JavaScript. Pay only per result, flat PPE pricing.",
    "version": "1.2",
    "x-build-id": "jcK0gLIaHQbuubYg4"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/getascraper~net-empregos-jobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-getascraper-net-empregos-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~net-empregos-jobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-getascraper-net-empregos-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~net-empregos-jobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-getascraper-net-empregos-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": {
          "mode": {
            "title": "What to collect",
            "enum": [
              "jobs",
              "marketSnapshot"
            ],
            "type": "string",
            "description": "Job offers returns one row per offer. Market snapshot returns the number of open offers per district, category and job type, with the change since your previous snapshot, which is useful for tracking the Portuguese job market over time.",
            "default": "jobs"
          },
          "keywords": {
            "title": "Keywords",
            "type": "string",
            "description": "Words the offer must mention, for example a job title or a skill. Leave empty to browse everything that matches the filters below.",
            "default": ""
          },
          "excludeKeywords": {
            "title": "Exclude words",
            "type": "array",
            "description": "Drop offers whose title (or full description, when details are on) contains any of these words. Case and accents are ignored. Example: estágio, comissões.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "districts": {
            "title": "Districts and regions",
            "type": "array",
            "description": "Only offers in these places. Includes the Portuguese districts, the islands and the foreign locations the site lists. Leave empty for the whole country. Each choice runs as its own search.",
            "items": {
              "type": "string",
              "enum": [
                "1",
                "2",
                "3",
                "4",
                "5",
                "6",
                "7",
                "8",
                "9",
                "10",
                "11",
                "12",
                "13",
                "14",
                "15",
                "16",
                "17",
                "18",
                "20",
                "21",
                "22",
                "23",
                "24",
                "25",
                "26",
                "27",
                "28",
                "29"
              ],
              "enumTitles": [
                "Lisboa",
                "Porto",
                "Braga",
                "Aveiro",
                "Bragança",
                "Vila Real",
                "Guarda",
                "Viseu",
                "Coimbra",
                "Castelo Branco",
                "Leiria",
                "Santarém",
                "Setúbal",
                "Évora",
                "Beja",
                "Portalegre",
                "Faro",
                "Brasil",
                "Angola",
                "Moçambique",
                "Guiné-Bissau",
                "São Tomé e Príncipe",
                "Cabo Verde",
                "Açores",
                "Madeira",
                "Timor-Leste",
                "Viana do Castelo",
                "Estrangeiro"
              ]
            },
            "default": []
          },
          "categories": {
            "title": "Job categories",
            "type": "array",
            "description": "Only offers in these professional categories. Leave empty for all categories.",
            "items": {
              "type": "string",
              "enum": [
                "1",
                "5",
                "6",
                "8",
                "9",
                "11",
                "12",
                "14",
                "15",
                "16",
                "18",
                "19",
                "22",
                "23",
                "24",
                "26",
                "28",
                "29",
                "30",
                "32",
                "34",
                "35",
                "36",
                "37",
                "38",
                "39",
                "40",
                "41",
                "42",
                "43",
                "44",
                "45",
                "46",
                "47",
                "49",
                "50",
                "51",
                "52",
                "53",
                "54",
                "55",
                "56",
                "57",
                "58"
              ],
              "enumTitles": [
                "Telecomunicações",
                "Informática / Programação",
                "Indústria / Produção",
                "Comunicação social",
                "Hotelaria / Turismo",
                "Educação / Formação",
                "Imobiliário",
                "Saúde / Medicina / Enfermagem",
                "Contabilidade / Finanças",
                "Banca / Seguros / Serviços financeiros",
                "Relações públicas",
                "Publicidade / Marketing",
                "Arquitectura / Design",
                "Construção civil",
                "Engenharia mecânica",
                "Gestão de empresas / Economia",
                "Desporto",
                "Secretariado / Administração",
                "Lojas / Comércio / Balcão",
                "Recursos humanos",
                "Informática / Formação",
                "Informática / Internet",
                "Multimédia",
                "Informática / Redes",
                "Informática / Análise de sistemas",
                "Agricultura / Florestas / Pescas",
                "Artes / Entretenimento / Media",
                "Biotecnologia / Farmácia",
                "Restauração / Bares / Pastelarias",
                "Transportes / Logística",
                "Direito / Justiça",
                "Engenharia civil",
                "Engenharia eletrotécnica",
                "Beleza / Moda",
                "Informática / Hardware",
                "Engenharia química",
                "Conservação / Manutenção técnica",
                "Serviços técnicos",
                "Comercial / Vendas",
                "Engenharia do ambiente",
                "Serviços sociais",
                "Informática / Comercial",
                "Call center / Help desk",
                "Limpezas domésticas"
              ]
            },
            "default": []
          },
          "jobTypes": {
            "title": "Job types",
            "type": "array",
            "description": "Contract type as listed by the site. Remote work returns the offers the site marks as teletrabalho. Leave empty for all types.",
            "items": {
              "type": "string",
              "enum": [
                "1",
                "2",
                "3",
                "4"
              ],
              "enumTitles": [
                "Full-time (Tempo inteiro)",
                "Part-time (Part-time)",
                "Internship (Estágio)",
                "Remote work (Teletrabalho)"
              ]
            },
            "default": []
          },
          "postedWithinDays": {
            "title": "Posted within (days)",
            "minimum": 0,
            "maximum": 365,
            "type": "integer",
            "description": "Only offers published in the last N days, counting today as day 1. Use 1 for today's offers. 0 means no age limit. The run stops reading as soon as results get older than this.",
            "default": 0
          },
          "excludeCompanies": {
            "title": "Exclude companies",
            "type": "array",
            "description": "Drop offers from companies whose name contains any of these words, for example recruitment agencies. Case and accents are ignored.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "onlyNewOffers": {
            "title": "Only new offers since the last run",
            "type": "boolean",
            "description": "Return only offers this monitor has not returned before, so a daily or hourly schedule gives you a clean feed of new jobs. The first run returns everything that matches, up to the result limit, and records it as the baseline.",
            "default": false
          },
          "monitorName": {
            "title": "Monitor name",
            "type": "string",
            "description": "A label for the list of offers already seen. Use one name per saved search, so a Lisbon IT feed and a Porto sales feed do not share memory. Changing the name starts a fresh baseline.",
            "default": "default"
          },
          "includeDetails": {
            "title": "Include full description and details",
            "type": "boolean",
            "description": "Open each offer to add the full description, exact posting time, expiry date, industry, and facts read from the text: remote or hybrid, experience, education, languages and salary when stated. Slower, because every offer is one more request.",
            "default": false
          },
          "maxItems": {
            "title": "Maximum results",
            "minimum": 1,
            "maximum": 5000,
            "type": "integer",
            "description": "Stop after this many offers across all searches. Market snapshot always returns every row, up to 77.",
            "default": 20
          },
          "maxConcurrency": {
            "title": "Parallel requests",
            "minimum": 1,
            "maximum": 6,
            "type": "integer",
            "description": "How many pages or offers are fetched at the same time. The site slows down clients that send bursts, so keep this low unless you need maximum speed.",
            "default": 3
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Apify datacenter proxies work for this site and rotate the exit address on every request, which avoids the site's rate limit.",
            "default": {
              "useApifyProxy": true
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}