{
  "openapi": "3.0.1",
  "info": {
    "title": "Tecnoempleo Scraper",
    "description": "Scrape tecnoempleo.com for structured Spanish IT job data: titles, companies, salaries, technologies & descriptions. 40,000+ listings across all Spanish provinces. Deduplication, repost detection & daysOld filtering included.",
    "version": "0.0",
    "x-build-id": "Y1gyvmjGTgHqMGQZm"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/unfenced-group~tecnoempleo-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-unfenced-group-tecnoempleo-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/unfenced-group~tecnoempleo-scraper/runs": {
      "post": {
        "operationId": "runs-sync-unfenced-group-tecnoempleo-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/unfenced-group~tecnoempleo-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-unfenced-group-tecnoempleo-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": {
          "searchQuery": {
            "title": "Search keywords",
            "type": "string",
            "description": "Job title, technology or keyword to search for, for example 'python', 'sap' or 'kubernetes'. Combine terms with OR / AND / AND NOT, and wrap exact phrases in double quotes. Leave blank to collect all jobs matching the filters below.",
            "default": ""
          },
          "provinces": {
            "title": "Provinces",
            "type": "array",
            "description": "Only return jobs in these Spanish provinces. Leave empty to search the whole country. Example: [\"263\"] for Madrid.",
            "items": {
              "type": "string",
              "enum": [
                "231",
                "232",
                "233",
                "234",
                "235",
                "236",
                "237",
                "238",
                "239",
                "240",
                "241",
                "242",
                "243",
                "244",
                "245",
                "246",
                "247",
                "248",
                "249",
                "250",
                "251",
                "252",
                "253",
                "254",
                "255",
                "256",
                "257",
                "258",
                "259",
                "260",
                "261",
                "262",
                "263",
                "264",
                "265",
                "266",
                "267",
                "268",
                "269",
                "270",
                "271",
                "272",
                "273",
                "274",
                "275",
                "276",
                "277",
                "278",
                "279",
                "280",
                "281",
                "282"
              ],
              "enumTitles": [
                "A Coruña",
                "Álava",
                "Albacete",
                "Alicante",
                "Almería",
                "Asturias",
                "Ávila",
                "Badajoz",
                "Baleares",
                "Barcelona",
                "Bizkaia",
                "Burgos",
                "Cáceres",
                "Cádiz",
                "Cantabria",
                "Castellón",
                "Ceuta",
                "Ciudad Real",
                "Córdoba",
                "Cuenca",
                "Gipuzkoa",
                "Girona",
                "Granada",
                "Guadalajara",
                "Huelva",
                "Huesca",
                "Jaén",
                "La Rioja",
                "Las Palmas",
                "León",
                "Lugo",
                "Lleida",
                "Madrid",
                "Málaga",
                "Melilla",
                "Murcia",
                "Navarra",
                "Ourense",
                "Palencia",
                "Pontevedra",
                "Salamanca",
                "Sta. Cruz de Tenerife",
                "Segovia",
                "Sevilla",
                "Soria",
                "Tarragona",
                "Teruel",
                "Toledo",
                "Valencia",
                "Valladolid",
                "Zamora",
                "Zaragoza"
              ]
            },
            "default": []
          },
          "workModality": {
            "title": "Work arrangement",
            "type": "array",
            "description": "Only return jobs with these work arrangements. Leave empty to include any. Example: [\"1\"] for fully remote roles.",
            "items": {
              "type": "string",
              "enum": [
                "1",
                "3",
                "2",
                "4"
              ],
              "enumTitles": [
                "100% remote",
                "Hybrid",
                "On-site",
                "Unspecified"
              ]
            },
            "default": []
          },
          "jobCategories": {
            "title": "Job categories",
            "type": "array",
            "description": "Only return jobs in these role categories, as classified by the employer. Leave empty to include all categories. Example: [\"12\"] for Programmer / Developer.",
            "items": {
              "type": "string",
              "enum": [
                "12",
                "37",
                "32",
                "27",
                "7",
                "34",
                "40",
                "1",
                "53",
                "51",
                "25",
                "20",
                "10",
                "28",
                "43",
                "39",
                "41",
                "44",
                "8",
                "19",
                "45",
                "46",
                "30",
                "2",
                "3",
                "4",
                "9",
                "42",
                "21",
                "29",
                "15",
                "48",
                "24",
                "18",
                "47",
                "49",
                "50",
                "52"
              ],
              "enumTitles": [
                "Programmer / Developer",
                "Analyst-Programmer",
                "Analyst",
                "Web Developer",
                "Mobile Developer",
                "DevOps",
                "Cybersecurity",
                "Big Data",
                "AI / Machine Learning",
                "IT Architect",
                "Project Manager",
                "Team Lead",
                "Product Manager",
                "Consultant",
                "Systems Technician",
                "Networks",
                "Database / DBA",
                "Tester / QA",
                "Technical Support",
                "Helpdesk",
                "Administrator",
                "Operator",
                "Auditor",
                "Software Technician",
                "Hardware Technician",
                "Electronics",
                "Quality Systems",
                "Maintenance Technician",
                "Trainer",
                "Sales",
                "Marketing",
                "SEO / Web Positioning",
                "Graphic Design",
                "R&D",
                "Recruiter",
                "Management Technician",
                "Administrative",
                "Engineers / Industry"
              ]
            },
            "default": []
          },
          "contractType": {
            "title": "Contract type",
            "type": "array",
            "description": "Only return jobs with these employment types. Leave empty to include any. Example: [\"1\"] for permanent contracts.",
            "items": {
              "type": "string",
              "enum": [
                "1",
                "3",
                "5",
                "2",
                "4",
                "6"
              ],
              "enumTitles": [
                "Permanent (Indefinido)",
                "Temporary (Temporal)",
                "Internship (Prácticas)",
                "Work/service (Obra/servicio)",
                "Freelance / self-employed",
                "To be determined"
              ]
            },
            "default": []
          },
          "workday": {
            "title": "Work schedule",
            "type": "array",
            "description": "Only return jobs with these work schedules. Leave empty to include any. Example: [\"1\"] for full-time roles.",
            "items": {
              "type": "string",
              "enum": [
                "1",
                "2",
                "3",
                "4",
                "5",
                "6"
              ],
              "enumTitles": [
                "Full-time (Completa)",
                "Half-day (Media jornada)",
                "By the hour",
                "Mornings",
                "Afternoons",
                "Rotating shift"
              ]
            },
            "default": []
          },
          "experience": {
            "title": "Experience required",
            "type": "array",
            "description": "Only return jobs asking for these experience levels. Leave empty to include any. Example: [\"1\",\"2\"] for entry-level roles.",
            "items": {
              "type": "string",
              "enum": [
                "1",
                "2",
                "3",
                "4",
                "5",
                "6",
                "7",
                "8"
              ],
              "enumTitles": [
                "No experience",
                "Less than 1 year",
                "1 year",
                "2 years",
                "3 years",
                "3-5 years",
                "More than 5 years",
                "More than 10 years"
              ]
            },
            "default": []
          },
          "education": {
            "title": "Minimum education",
            "type": "array",
            "description": "Only return jobs requiring these minimum education levels. Leave empty to include any. Example: [\"15\"] for a Bologna-track degree.",
            "items": {
              "type": "string",
              "enum": [
                "18",
                "14",
                "4",
                "3",
                "6",
                "5",
                "13",
                "9",
                "7",
                "2",
                "15",
                "16",
                "8",
                "1",
                "10",
                "17"
              ],
              "enumTitles": [
                "No formal education",
                "ESO (secondary)",
                "Bachillerato / COU",
                "FP1 (vocational, level 1)",
                "FP2 / Higher vocational",
                "Grado Medio",
                "Professional certificate",
                "Other IT training",
                "Diplomado",
                "Ingeniero Técnico",
                "Grado EEES (Bologna)",
                "Postgraduate / Master (EEES)",
                "Licenciado",
                "Ingeniero Superior",
                "Doctorate",
                "Other qualifications"
              ]
            },
            "default": []
          },
          "postedSince": {
            "title": "Date posted",
            "enum": [
              "any",
              "24h"
            ],
            "type": "string",
            "description": "Limit results to jobs posted in the last 24 hours. Useful for daily scheduled runs that pick up only new postings. Set to 'any' to include all jobs.",
            "default": "any"
          },
          "urgentOnly": {
            "title": "Urgent jobs only",
            "type": "boolean",
            "description": "Only return jobs the employer has flagged as urgent. Off by default.",
            "default": false
          },
          "province": {
            "title": "Province (legacy, single)",
            "type": "string",
            "description": "Deprecated — use the Provinces list above. Accepts a single province name such as 'Madrid'. Kept for backwards compatibility with existing runs.",
            "default": ""
          },
          "fetchDetails": {
            "title": "Include full job details",
            "type": "boolean",
            "description": "ON: fetches the full job description, structured salary and employment type from each job page. OFF: returns listing data only, which is faster and cheaper.",
            "default": false
          },
          "daysOld": {
            "title": "Max age (days)",
            "minimum": 1,
            "type": "integer",
            "description": "Only return jobs published within this many days. Leave blank for no age limit. Example: 7."
          },
          "skipReposts": {
            "title": "Skip reposts",
            "type": "boolean",
            "description": "Skip jobs already returned by a previous run of this actor. Combine with 'Max age (days)' for a clean daily feed of new postings only.",
            "default": false
          },
          "startUrls": {
            "title": "Start URLs",
            "type": "array",
            "description": "Optional. Paste tecnoempleo.com search URLs (scraped with pagination) or individual job offer URLs. When set, the search filters above are ignored.",
            "default": [],
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "maxItems": {
            "title": "Max results",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum number of jobs to return across all searches and URLs. Set to 0 for no limit. The site holds roughly 2,500 active listings.",
            "default": 100
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}