{
  "openapi": "3.0.1",
  "info": {
    "title": "InfoJobs Spain Job Scraper | All Filters, Salaries & Alerts",
    "description": "Scrape InfoJobs.net jobs across Spain with real dropdown filters: 52 provinces, category, contract, working day, remote work, education, posting date. Get salary band, company, city and full description, plus an incremental change feed, job-count facets and alerts.",
    "version": "0.1",
    "x-build-id": "6xVVeemzAhKBS6Ds4"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/corvuslab~infojobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-corvuslab-infojobs-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/corvuslab~infojobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-corvuslab-infojobs-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/corvuslab~infojobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-corvuslab-infojobs-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": {
          "query": {
            "title": "🔑 Search keywords",
            "type": "string",
            "description": "Job title, skill or company, e.g. \"enfermera\" or \"desarrollador python\". Separate several searches with commas — each runs on its own and results are merged and de-duplicated. Leave empty for all jobs."
          },
          "startUrls": {
            "title": "📋 InfoJobs search URLs",
            "type": "array",
            "description": "Paste any InfoJobs search or listing URL with your filters already applied (e.g. https://www.infojobs.net/jobsearch/search-results/list.xhtml?keyword=camarero&provinceIds=33). Filters inside the URL are kept as they are; the filter dropdowns below apply to keyword searches only.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "maxResults": {
            "title": "🔢 Max results (whole run, shared across searches)",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum number of jobs for the whole run. With several keywords or URLs the limit is split evenly — 3 keywords and 30 results give about 10 each — and a search that runs out of jobs passes its unused share to the others. Set 0 for no limit (every matching job).",
            "default": 25
          },
          "provinces": {
            "title": "📍 Provinces",
            "type": "array",
            "description": "Only jobs in these Spanish provinces. Pick several to widen the search.",
            "items": {
              "type": "string",
              "enum": [
                "28",
                "2",
                "3",
                "4",
                "5",
                "6",
                "7",
                "8",
                "9",
                "10",
                "11",
                "12",
                "13",
                "14",
                "15",
                "16",
                "17",
                "18",
                "19",
                "21",
                "22",
                "23",
                "24",
                "25",
                "26",
                "27",
                "29",
                "20",
                "30",
                "31",
                "32",
                "33",
                "34",
                "35",
                "36",
                "37",
                "38",
                "39",
                "40",
                "41",
                "46",
                "42",
                "43",
                "44",
                "45",
                "47",
                "48",
                "49",
                "50",
                "51",
                "52",
                "53"
              ],
              "enumTitles": [
                "A Coruña",
                "Álava/Araba",
                "Albacete",
                "Alicante/Alacant",
                "Almería",
                "Asturias",
                "Ávila",
                "Badajoz",
                "Barcelona",
                "Burgos",
                "Cáceres",
                "Cádiz",
                "Cantabria",
                "Castellón/Castelló",
                "Ceuta",
                "Ciudad Real",
                "Córdoba",
                "Cuenca",
                "Girona",
                "Granada",
                "Guadalajara",
                "Guipúzcoa/Gipuzkoa",
                "Huelva",
                "Huesca",
                "Islas Baleares/Illes Balears",
                "Jaén",
                "La Rioja",
                "Las Palmas",
                "León",
                "Lleida",
                "Lugo",
                "Madrid",
                "Málaga",
                "Melilla",
                "Murcia",
                "Navarra",
                "Ourense",
                "Palencia",
                "Pontevedra",
                "Salamanca",
                "Santa Cruz de Tenerife",
                "Segovia",
                "Sevilla",
                "Soria",
                "Tarragona",
                "Teruel",
                "Toledo",
                "Valencia/València",
                "Valladolid",
                "Vizcaya/Bizkaia",
                "Zamora",
                "Zaragoza"
              ]
            }
          },
          "categories": {
            "title": "🗂️ Job categories",
            "type": "array",
            "description": "Only jobs in these InfoJobs categories.",
            "items": {
              "type": "string",
              "enum": [
                "10",
                "20",
                "170",
                "30",
                "190",
                "40",
                "50",
                "60",
                "70",
                "150",
                "80",
                "90",
                "100",
                "110",
                "120",
                "130",
                "140",
                "210",
                "160",
                "200",
                "180"
              ],
              "enumTitles": [
                "Administración de empresas",
                "Administración Pública",
                "Atención a clientes",
                "Calidad, producción e I+D",
                "Comercial y ventas",
                "Compras, logística y almacén",
                "Diseño y artes gráficas",
                "Educación y formación",
                "Finanzas y banca",
                "Informática y telecomunicaciones",
                "Ingenieros y técnicos",
                "Inmobiliario y construcción",
                "Legal",
                "Marketing y comunicación",
                "Profesiones, artes y oficios",
                "Recursos humanos",
                "Sanidad y salud",
                "Sector Farmacéutico",
                "Turismo y restauración",
                "Ventas al detalle",
                "Otros"
              ]
            }
          },
          "contractTypes": {
            "title": "📄 Contract type",
            "type": "array",
            "description": "Only jobs with these contract types.",
            "items": {
              "type": "string",
              "enum": [
                "1",
                "8",
                "9",
                "4",
                "6",
                "3",
                "10",
                "5"
              ],
              "enumTitles": [
                "Permanent (Indefinido)",
                "Fixed-term (De duración determinada)",
                "Seasonal permanent (Fijo discontinuo)",
                "Part-time contract (A tiempo parcial)",
                "Relief contract (De relevo)",
                "Training contract (Formativo)",
                "Freelance (Autónomo)",
                "Other contracts (Otros contratos)"
              ]
            }
          },
          "workdays": {
            "title": "⏰ Working day",
            "type": "array",
            "description": "Full-time, part-time or intensive schedules.",
            "items": {
              "type": "string",
              "enum": [
                "1",
                "10",
                "5",
                "2",
                "3",
                "4",
                "9",
                "6",
                "7",
                "8"
              ],
              "enumTitles": [
                "Full-time (Completa)",
                "Any (Indiferente)",
                "Part-time — any (Parcial - Indiferente)",
                "Part-time — morning (Parcial - Mañana)",
                "Part-time — afternoon (Parcial - Tarde)",
                "Part-time — night (Parcial - Noche)",
                "Intensive — any (Intensiva - Indiferente)",
                "Intensive — morning (Intensiva - Mañana)",
                "Intensive — afternoon (Intensiva - Tarde)",
                "Intensive — night (Intensiva - Noche)"
              ]
            }
          },
          "remoteWork": {
            "title": "🏠 Remote work",
            "type": "array",
            "description": "On-site, hybrid or fully remote jobs.",
            "items": {
              "type": "string",
              "enum": [
                "1",
                "3",
                "2",
                "4"
              ],
              "enumTitles": [
                "🏢 On-site (Presencial)",
                "🔀 Hybrid (Híbrido)",
                "🏠 Fully remote (Solo teletrabajo)",
                "❔ Not specified (Sin especificar)"
              ]
            }
          },
          "education": {
            "title": "🎓 Minimum education",
            "type": "array",
            "description": "Only jobs asking for these education levels.",
            "items": {
              "type": "string",
              "enum": [
                "10",
                "20",
                "50",
                "30",
                "55",
                "35",
                "60",
                "23",
                "27",
                "110",
                "120",
                "125",
                "130",
                "140",
                "143",
                "147",
                "150",
                "160",
                "170"
              ],
              "enumTitles": [
                "Sin estudios",
                "Educación Secundaria Obligatoria",
                "Bachillerato",
                "Formación Profesional Grado Medio",
                "Formación Profesional Grado Superior",
                "Ciclo Formativo Grado Medio",
                "Ciclo Formativo Grado Superior",
                "Enseñanzas artísticas (regladas)",
                "Enseñanzas deportivas (regladas)",
                "Diplomatura",
                "Ingeniería Técnica",
                "Grado",
                "Ingeniería Superior",
                "Licenciatura",
                "Postgrado",
                "Máster",
                "Doctorado",
                "Otros títulos, certificaciones y carnés",
                "Otros cursos y formación no reglada"
              ]
            }
          },
          "postedWithin": {
            "title": "📅 Posted within",
            "enum": [
              "ANY",
              "_24_HOURS",
              "_7_DAYS",
              "_15_DAYS"
            ],
            "type": "string",
            "description": "Only jobs published in this time window.",
            "default": "ANY"
          },
          "sortBy": {
            "title": "↕️ Sort by",
            "enum": [
              "PUBLICATION_DATE",
              "RELEVANCE"
            ],
            "type": "string",
            "description": "Newest first is best for monitoring and is required to report expired jobs. Relevance ranks keyword matches first.",
            "default": "PUBLICATION_DATE"
          },
          "onlyWithSalary": {
            "title": "💶 Only jobs with a published salary",
            "type": "boolean",
            "description": "Skip jobs that don't publish a salary. Skipped jobs are not charged.",
            "default": false
          },
          "compact": {
            "title": "📦 Compact records",
            "type": "boolean",
            "description": "Emit only the core fields (title, company, city, salary, contract, remote work, date, URL). Ideal for AI agents and MCP clients.",
            "default": false
          },
          "descriptionMaxLength": {
            "title": "✂️ Max description length",
            "minimum": 0,
            "type": "integer",
            "description": "Cut each job description to this many characters. Leave empty for the full text."
          },
          "excludeEmptyFields": {
            "title": "🧹 Drop empty fields",
            "type": "boolean",
            "description": "Remove null and empty fields from each record.",
            "default": false
          },
          "incrementalMode": {
            "title": "♻️ Incremental mode",
            "type": "boolean",
            "description": "Track jobs between runs and return only what changed. Every job is tagged NEW / UPDATED / REAPPEARED (or UNCHANGED / EXPIRED when enabled below). Unchanged jobs are skipped and cost nothing — the cheap way to poll a search on a schedule.",
            "default": false
          },
          "stateKey": {
            "title": "🗝️ State key",
            "type": "string",
            "description": "Stable name for the tracked search. Leave empty to derive one automatically from your search settings."
          },
          "emitUnchanged": {
            "title": "🔁 Include unchanged records",
            "type": "boolean",
            "description": "Also emit records that have not changed since the previous run.",
            "default": false
          },
          "emitExpired": {
            "title": "🗑️ Include expired records",
            "type": "boolean",
            "description": "Also emit jobs that were present last run but are gone now (needs Sort by: newest first and Max results 0).",
            "default": false
          },
          "telegramToken": {
            "title": "💬 Telegram bot token",
            "type": "string",
            "description": "Bot token from @BotFather."
          },
          "telegramChatId": {
            "title": "🆔 Telegram chat ID",
            "type": "string",
            "description": "Chat or channel ID, e.g. \"-100123456789\" or \"@yourchannel\"."
          },
          "slackWebhookUrl": {
            "title": "💼 Slack webhook URL",
            "type": "string",
            "description": "Slack incoming-webhook URL."
          },
          "discordWebhookUrl": {
            "title": "🎮 Discord webhook URL",
            "type": "string",
            "description": "Discord incoming-webhook URL."
          },
          "webhookUrl": {
            "title": "🪝 Webhook URL",
            "type": "string",
            "description": "Any HTTPS endpoint. Receives a JSON POST with the matched records — works with n8n, Make and Zapier."
          },
          "webhookHeaders": {
            "title": "🧾 Webhook headers",
            "type": "object",
            "description": "Extra headers for the webhook request, e.g. {\"Authorization\": \"Bearer xyz\"}."
          },
          "notificationLimit": {
            "title": "🔢 Records per notification",
            "minimum": 1,
            "maximum": 20,
            "type": "integer",
            "description": "How many records to include in each notification message.",
            "default": 5
          },
          "proxyConfiguration": {
            "title": "🌐 Proxy configuration",
            "type": "object",
            "description": "Keep Apify Proxy on (the default). Without it, InfoJobs stops answering after a couple of hundred jobs.",
            "default": {
              "useApifyProxy": true
            }
          },
          "maxConcurrency": {
            "title": "⚡ Parallel page loads",
            "minimum": 1,
            "maximum": 8,
            "type": "integer",
            "description": "How many result pages to load at once. Higher is faster.",
            "default": 3
          },
          "maxRequestRetries": {
            "title": "🔄 Max request retries",
            "minimum": 0,
            "maximum": 10,
            "type": "integer",
            "description": "How many times to retry a failed request before giving up on it.",
            "default": 3
          },
          "ignoreUrlFailures": {
            "title": "⏭️ Ignore URL failures",
            "type": "boolean",
            "description": "Skip URLs that cannot be interpreted instead of failing the whole run.",
            "default": 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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}