{
  "openapi": "3.0.1",
  "info": {
    "title": "InfoJobs Spain Job Offers & Salary Scraper",
    "description": "[💰 $0.9 / 1K] Extract job offers from InfoJobs, Spain's largest job board. Get titles, companies, cities, contract types, remote status and salary ranges with the pay period attached. Filter by province, category, contract type, education level and more. Export to JSON, CSV or Excel.",
    "version": "1.0",
    "x-build-id": "tYUxi0XPKc7RlPnRA"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/solidcode~infojobs-net-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-solidcode-infojobs-net-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/solidcode~infojobs-net-scraper/runs": {
      "post": {
        "operationId": "runs-sync-solidcode-infojobs-net-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/solidcode~infojobs-net-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-solidcode-infojobs-net-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": {
          "searchUrls": {
            "title": "Search URLs",
            "type": "array",
            "description": "InfoJobs search result URLs. Set your filters on infojobs.net, then paste the address bar URL here. Both forms work and each is followed in its own form, so the filters you can see in the URL are the filters you get: the friendly form (infojobs.net/ofertas-trabajo/madrid, or infojobs.net/ofertas-trabajo/informatica-telecomunicaciones/madrid) and the filtered form (infojobs.net/ofertas-trabajo?provinceIds=33). A page number already in the URL is ignored -- every search starts at the first page. Paste a search results page, not a single job offer; offer URLs are skipped with a note in the log. Overrides the individual filters below when provided.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "keyword": {
            "title": "Search keyword",
            "type": "string",
            "description": "Free-text search over job titles and descriptions. Measured live: 'python' narrows 61,763 offers to 402. Multi-word searches are joined with a hyphen ('desarrollador web' is sent as 'desarrollador-web'), which InfoJobs resolves to the same normalised job title but matches more broadly (1,702 offers vs 148).",
            "default": ""
          },
          "province": {
            "title": "Province",
            "enum": [
              "",
              "33",
              "9",
              "49",
              "26",
              "34",
              "53",
              "43",
              "4",
              "28",
              "51",
              "19",
              "20",
              "36",
              "45",
              "46",
              "40",
              "37",
              "23",
              "6",
              "50",
              "31",
              "48",
              "12",
              "14",
              "2",
              "13",
              "10",
              "17",
              "29",
              "30",
              "22",
              "21",
              "5",
              "8",
              "41",
              "25",
              "32",
              "3",
              "24",
              "16",
              "27",
              "11",
              "38",
              "39",
              "42",
              "18",
              "47",
              "52",
              "7",
              "44",
              "35",
              "15"
            ],
            "type": "string",
            "description": "Spanish province the job is located in. All 52 provinces, taken from InfoJobs' own province list with its exact spelling (including the bilingual forms it uses, e.g. Valencia/Valencia). Measured live: Madrid returns 12,455 offers, Ceuta 43.",
            "default": ""
          },
          "category": {
            "title": "Job category",
            "enum": [
              "",
              "120",
              "190",
              "40",
              "160",
              "80",
              "180",
              "10",
              "140",
              "200",
              "30",
              "170",
              "90",
              "150",
              "130",
              "60",
              "110",
              "70",
              "100",
              "20",
              "50",
              "210"
            ],
            "type": "string",
            "description": "InfoJobs' own 21 top-level job categories. Measured live: IT & telecommunications returns 2,425 offers, Pharmaceutical 102.",
            "default": ""
          },
          "contract_type": {
            "title": "Contract type",
            "enum": [
              "",
              "1",
              "8",
              "9",
              "5",
              "10",
              "4",
              "6",
              "3"
            ],
            "type": "string",
            "description": "Measured live: Permanent returns 38,304 offers, Apprenticeship 421. Every returned row carries the contract type you asked for.",
            "default": ""
          },
          "workday": {
            "title": "Working hours",
            "enum": [
              "",
              "1",
              "10",
              "5",
              "2",
              "6",
              "3",
              "9",
              "7",
              "8",
              "4"
            ],
            "type": "string",
            "description": "Full time, part time or compressed shift, with the time of day InfoJobs records for each. Measured live: Full time returns 47,427 offers, Compressed nights 135.",
            "default": ""
          },
          "workplace": {
            "title": "Workplace type",
            "enum": [
              "",
              "1",
              "3",
              "4",
              "2"
            ],
            "type": "string",
            "description": "On site, hybrid or fully remote. Measured live: fully remote returns 889 offers and every row on page 1 came back tagged Solo teletrabajo.",
            "default": ""
          },
          "education": {
            "title": "Minimum education",
            "enum": [
              "",
              "20",
              "35",
              "10",
              "60",
              "125",
              "50",
              "160",
              "30",
              "120",
              "140",
              "55",
              "110",
              "147",
              "130",
              "170",
              "143",
              "27",
              "23",
              "150"
            ],
            "type": "string",
            "description": "The minimum qualification the employer asks for, on InfoJobs' own 19-level Spanish scale. Measured live: Bachelor's degree returns 7,517 offers, Doctorate 13.",
            "default": ""
          },
          "segment": {
            "title": "Seniority",
            "enum": [
              "",
              "31"
            ],
            "type": "string",
            "description": "InfoJobs flags a small set of senior postings as Executive. Measured live: 890 offers, and all 22 rows on page 1 came back with executive = true.",
            "default": ""
          },
          "abroad_only": {
            "title": "Jobs outside Spain only",
            "enum": [
              "false",
              "true"
            ],
            "type": "string",
            "description": "InfoJobs also lists jobs based outside Spain. Measured live: 171 offers, and page 1 came back with cities in Munich, Zwolle, Buenos Aires, Arnhem and Bern. Shipped as a two-value choice rather than a checkbox because the generator sends the literal text through to the URL.",
            "default": "false"
          },
          "since_date": {
            "title": "Posted within",
            "enum": [
              "ANY",
              "_24_HOURS",
              "_7_DAYS",
              "_15_DAYS"
            ],
            "type": "string",
            "description": "How recently the offer was published. Measured live: last 24 hours 914 offers, last 7 days 25,100, last 15 days 36,880, any date 61,763. InfoJobs offers no wider window -- _30_DAYS and LAST_MONTH both return HTTP 500 -- so those are not listed.",
            "default": "ANY"
          },
          "sort_by": {
            "title": "Sort results by",
            "enum": [
              "PUBLICATION_DATE",
              "RELEVANCE"
            ],
            "type": "string",
            "description": "Newest first, or best keyword match first. IMPORTANT: relevance sorting only applies when Search keyword is set -- on an unfiltered browse InfoJobs silently falls back to publication date. Measured on keyword 'comercial' (9,557 offers): the two orderings share 0 of the 22 offers on page 1.",
            "default": "PUBLICATION_DATE"
          },
          "maxItems": {
            "title": "Max results",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum job offers per search URL (0 = collect everything each search returns). Infojobs.net pages through at most 59,980 job offers per search, so use several narrower searches to collect more.",
            "default": 100
          },
          "enrichDetails": {
            "title": "Include full details",
            "type": "boolean",
            "description": "Add 21 extra fields per job offer. Adds one request per job offer and is billed at the higher rate.",
            "default": false
          },
          "concurrency": {
            "title": "Concurrency",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "How many requests to run in parallel. Lower this if you see failures.",
            "default": 8
          },
          "proxyConfiguration": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Proxy settings for the run.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}