{
  "openapi": "3.0.1",
  "info": {
    "title": "InfoJobs Scraper - Spain Jobs, Salaries & Company Data API",
    "description": "Scrape public InfoJobs job offers across all 52 Spanish provinces. Full job descriptions, structured salary ranges, contract type, working hours and remote-work flag. No API key.",
    "version": "0.1",
    "x-build-id": "3MHns5QEHntMmB7Nm"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/parseforge~infojobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-parseforge-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/parseforge~infojobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-parseforge-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/parseforge~infojobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-parseforge-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": {
          "keyword": {
            "title": "Search keyword",
            "type": "string",
            "description": "What to search for, exactly as you would type it into the InfoJobs search box — a role, a skill or a company name. Leave empty to list every open offer.",
            "default": ""
          },
          "keywords": {
            "title": "Search keywords (one per line)",
            "type": "array",
            "description": "Run one search per keyword and merge the results into a single deduplicated dataset. Every filter below applies to all of them. Each keyword is charged as one search query.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "province": {
            "title": "Province",
            "enum": [
              "",
              "A Coruña",
              "Albacete",
              "Alicante/Alacant",
              "Almería",
              "Asturias",
              "Badajoz",
              "Barcelona",
              "Burgos",
              "Cantabria",
              "Castellón/Castelló",
              "Ceuta",
              "Ciudad Real",
              "Cuenca",
              "Cáceres",
              "Cádiz",
              "Córdoba",
              "Girona",
              "Granada",
              "Guadalajara",
              "Guipúzcoa/Gipuzkoa",
              "Huelva",
              "Huesca",
              "Islas Baleares/Illes Balears",
              "Jaén",
              "La Rioja",
              "Las Palmas",
              "León",
              "Lleida",
              "Lugo",
              "Madrid",
              "Melilla",
              "Murcia",
              "Málaga",
              "Navarra",
              "Ourense",
              "Palencia",
              "Pontevedra",
              "Salamanca",
              "Santa Cruz de Tenerife",
              "Segovia",
              "Sevilla",
              "Soria",
              "Tarragona",
              "Teruel",
              "Toledo",
              "Valencia/València",
              "Valladolid",
              "Vizcaya/Bizkaia",
              "Zamora",
              "Zaragoza",
              "Álava/Araba",
              "Ávila"
            ],
            "type": "string",
            "description": "Restrict the search to one of Spain's 52 provinces. Leave as Any to search the whole country.",
            "default": ""
          },
          "city": {
            "title": "City",
            "type": "string",
            "description": "Restrict the search to one city, using InfoJobs' own spelling — Madrid, Barcelona, Santa Cruz de Tenerife. Accents and capitals do not matter, but an unknown city returns zero offers, so the run fails with the list of cities that search actually has.",
            "default": ""
          },
          "country": {
            "title": "Country",
            "enum": [
              "",
              "España",
              "Alemania",
              "Andorra",
              "Argentina",
              "Austria",
              "Brasil",
              "Bulgaria",
              "Bélgica",
              "Cuba",
              "Dinamarca",
              "Emiratos Árabes Unidos",
              "Estados Unidos",
              "Francia",
              "Holanda",
              "Irlanda",
              "Italia",
              "Jamaica",
              "Marruecos",
              "México",
              "Namibia",
              "Polonia",
              "Portugal",
              "Reino Unido",
              "Republica Dominicana",
              "República Checa",
              "Suiza",
              "Venezuela",
              "Otro"
            ],
            "type": "string",
            "description": "Country the offer is based in. InfoJobs is a Spanish board, so almost everything is Spain — measured: 57,255 offers total, 4 in Belgium. Use this to isolate its foreign postings."
          },
          "category": {
            "title": "Sector",
            "enum": [
              "",
              "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",
              "Otros",
              "Profesiones, artes y oficios",
              "Recursos humanos",
              "Sanidad y salud",
              "Sector Farmacéutico",
              "Turismo y restauración",
              "Ventas al detalle"
            ],
            "type": "string",
            "description": "Restrict the search to one InfoJobs sector.",
            "default": ""
          },
          "contractType": {
            "title": "Contract type",
            "enum": [
              "",
              "A tiempo parcial",
              "Autónomo",
              "De duración determinada",
              "De relevo",
              "Fijo discontinuo",
              "Formativo",
              "Indefinido",
              "Otros contratos"
            ],
            "type": "string",
            "description": "Restrict the search to one contract type.",
            "default": ""
          },
          "workday": {
            "title": "Working hours",
            "enum": [
              "",
              "Completa",
              "Indiferente",
              "Intensiva - Indiferente",
              "Intensiva - Mañana",
              "Intensiva - Noche",
              "Intensiva - Tarde",
              "Parcial - Indiferente",
              "Parcial - Mañana",
              "Parcial - Noche",
              "Parcial - Tarde"
            ],
            "type": "string",
            "description": "Restrict the search to one working-hours arrangement.",
            "default": ""
          },
          "teleworking": {
            "title": "Remote work",
            "enum": [
              "",
              "Híbrido",
              "Presencial",
              "Sin especificar",
              "Solo teletrabajo"
            ],
            "type": "string",
            "description": "Restrict the search by how remote the job is.",
            "default": ""
          },
          "education": {
            "title": "Education level",
            "enum": [
              "",
              "Bachillerato",
              "Ciclo Formativo Grado Medio",
              "Ciclo Formativo Grado Superior",
              "Diplomatura",
              "Doctorado",
              "Educación Secundaria Obligatoria",
              "Enseñanzas artísticas (regladas)",
              "Enseñanzas deportivas (regladas)",
              "Formación Profesional Grado Medio",
              "Formación Profesional Grado Superior",
              "Grado",
              "Ingeniería Superior",
              "Ingeniería Técnica",
              "Licenciatura",
              "Máster",
              "Otros cursos y formación no reglada",
              "Otros títulos, certificaciones y carnés",
              "Postgrado",
              "Sin estudios"
            ],
            "type": "string",
            "description": "Restrict the search to offers asking for one education level.",
            "default": ""
          },
          "segment": {
            "title": "Segment",
            "enum": [
              "",
              "Executive"
            ],
            "type": "string",
            "description": "Restrict the search to a special InfoJobs segment. Executive lists only management-level offers.",
            "default": ""
          },
          "sinceDate": {
            "title": "Published within",
            "enum": [
              "ANY",
              "_24_HOURS",
              "_7_DAYS",
              "_15_DAYS"
            ],
            "type": "string",
            "description": "Only return offers published inside this window.",
            "default": "ANY"
          },
          "minSalary": {
            "title": "Minimum salary (€/year)",
            "minimum": 0,
            "type": "integer",
            "description": "Only keep offers whose published range reaches this gross yearly figure. Monthly ranges are annualised by 12. InfoJobs itself cannot filter by salary — this is applied on the structured range, so offers that publish no salary never match."
          },
          "maxSalary": {
            "title": "Maximum salary (€/year)",
            "minimum": 0,
            "type": "integer",
            "description": "Only keep offers whose published range starts below this gross yearly figure."
          },
          "sortBy": {
            "title": "Sort by",
            "enum": [
              "RELEVANCE",
              "PUBLICATION_DATE"
            ],
            "type": "string",
            "description": "InfoJobs offers exactly two orderings. Newest first is the one you want for monitoring; relevance is better for a one-off search.",
            "default": "PUBLICATION_DATE"
          },
          "searchUrl": {
            "title": "InfoJobs search URL",
            "type": "string",
            "description": "Paste a full InfoJobs search URL straight from your browser. When set, it overrides every filter above — useful for a search you already built on the site.",
            "default": ""
          },
          "searchUrls": {
            "title": "InfoJobs search URLs (one per line)",
            "type": "array",
            "description": "Paste several full InfoJobs search URLs. When set, they replace every filter above, and each URL is charged as one search query.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "onlyForeignCountry": {
            "title": "Only jobs outside Spain",
            "type": "boolean",
            "description": "Return only offers located outside Spain.",
            "default": false
          },
          "includeDescription": {
            "title": "Include the full job description",
            "type": "boolean",
            "description": "InfoJobs ships the complete job description inside the listing page, so this costs no extra requests. Turn it off to keep the dataset small.",
            "default": true
          },
          "includeDetails": {
            "title": "Open each offer page for extra fields",
            "type": "boolean",
            "description": "Adds applicants, vacancies, required skills, minimum experience and studies, seniority, industry, the normalised job title and the company rating. This costs one extra request per offer and is charged as result-details, so it is off by default.",
            "default": false
          },
          "maxItems": {
            "title": "Maximum offers",
            "minimum": 1,
            "maximum": 50000,
            "type": "integer",
            "description": "Stop after this many offers. Free-plan runs return up to 100 as a preview.",
            "default": 100
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "InfoJobs rate-limits by IP — a single unproxied IP was measured returning HTTP 403 after about 250 requests in half an hour. Apify Proxy with the default datacenter group is enough for normal runs, and it matters most with includeDetails, which turns every offer into its own request.",
            "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
                  }
                }
              },
              "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}