{
  "openapi": "3.0.1",
  "info": {
    "title": "1111.com.tw Jobs Scraper | Taiwan Jobs, Salaries & Alerts",
    "description": "Scrape 1111.com.tw (1111人力銀行), Taiwan's #2 job board: 42 fields per job incl. parsed TWD pay, county & district, industry, experience, education, applicant band and full description. Filter by location, industry, job type, pay, remote and date. Incremental monitoring + Telegram/Slack alerts.",
    "version": "0.1",
    "x-build-id": "luW79J8N7jgsdK1Io"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/corvuslab~taiwan1111-jobs-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-corvuslab-taiwan1111-jobs-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/corvuslab~taiwan1111-jobs-scraper/runs": {
      "post": {
        "operationId": "runs-sync-corvuslab-taiwan1111-jobs-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/corvuslab~taiwan1111-jobs-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-corvuslab-taiwan1111-jobs-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "properties": {
          "query": {
            "title": "🔑 Search keywords",
            "type": "string",
            "description": "Job title, skill or company name — Chinese gives the widest coverage (e.g. 工程師, 會計, 護理師, 半導體), English works for tech roles. Separate several searches with commas; each runs on its own and results are merged and de-duplicated. Max 50 characters per keyword."
          },
          "startUrls": {
            "title": "📋 Start URLs",
            "type": "array",
            "description": "Optional. Paste 1111.com.tw search result links (your filters are kept), company pages (/corp/…) to get all of a company's open jobs, or single job links (/job/…).",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "maxResults": {
            "title": "🔢 Max results",
            "minimum": 0,
            "type": "integer",
            "description": "Maximum number of jobs to return across all searches. Set 0 for no limit — the site shows at most 4,500 jobs per search (usually around 3,500 unique ones when a search has more matches than that), so narrow with filters or add more keywords to go wider.",
            "default": 25
          },
          "locations": {
            "title": "📍 Locations",
            "type": "array",
            "description": "Cities and counties where the job is based. Pick several to widen the search.",
            "items": {
              "type": "string",
              "enum": [
                "taipei",
                "new-taipei",
                "keelung",
                "yilan",
                "taoyuan",
                "hsinchu-city",
                "hsinchu-county",
                "miaoli",
                "taichung",
                "nantou",
                "changhua",
                "yunlin",
                "chiayi-city",
                "chiayi-county",
                "tainan",
                "kaohsiung",
                "pingtung",
                "hualien",
                "taitung",
                "penghu",
                "kinmen",
                "lienchiang",
                "china",
                "asia",
                "americas",
                "europe",
                "africa",
                "oceania"
              ],
              "enumTitles": [
                "台北市 Taipei",
                "新北市 New Taipei",
                "基隆市 Keelung",
                "宜蘭縣 Yilan",
                "桃園市 Taoyuan",
                "新竹市 Hsinchu City",
                "新竹縣 Hsinchu County",
                "苗栗縣 Miaoli",
                "台中市 Taichung",
                "南投縣 Nantou",
                "彰化縣 Changhua",
                "雲林縣 Yunlin",
                "嘉義市 Chiayi City",
                "嘉義縣 Chiayi County",
                "台南市 Tainan",
                "高雄市 Kaohsiung",
                "屏東縣 Pingtung",
                "花蓮縣 Hualien",
                "台東縣 Taitung",
                "澎湖縣 Penghu",
                "金門縣 Kinmen",
                "連江縣 Lienchiang (Matsu)",
                "中國 China",
                "亞洲 Asia (other)",
                "美洲 Americas",
                "歐洲 Europe",
                "非洲 Africa",
                "大洋洲 Oceania"
              ]
            }
          },
          "industries": {
            "title": "🏭 Industries",
            "type": "array",
            "description": "The employer's industry.",
            "items": {
              "type": "string",
              "enum": [
                "tech",
                "manufacturing",
                "mining-energy",
                "public-social",
                "finance-insurance",
                "professional-services",
                "logistics-trade",
                "construction-real-estate",
                "healthcare",
                "agriculture-utilities",
                "general-services",
                "travel-leisure",
                "food-hospitality",
                "media",
                "education-arts",
                "wholesale-retail"
              ],
              "enumTitles": [
                "電子科技／資訊／軟體／半導體 Tech, IT & semiconductors",
                "一般傳統製造 Manufacturing",
                "礦業／土石能源 Mining & energy",
                "政治／宗教／社福 Public sector & social services",
                "金融投顧／保險 Finance & insurance",
                "法律／會計／顧問／研發／設計 Professional services",
                "運輸物流／倉儲／貿易 Logistics & trade",
                "建築營造／不動產 Construction & real estate",
                "醫療照護／環境衛生 Healthcare",
                "農林漁牧／水電資源 Agriculture & utilities",
                "一般服務業 General services",
                "旅遊／休閒／運動 Travel, leisure & sport",
                "餐飲／住宿服務 Food & hospitality",
                "大眾傳播 Media",
                "教育／出版／藝文 Education, publishing & arts",
                "批發／零售 Wholesale & retail"
              ]
            }
          },
          "jobTypes": {
            "title": "🕒 Job type",
            "type": "array",
            "description": "Employment type.",
            "items": {
              "type": "string",
              "enum": [
                "full-time",
                "part-time",
                "casual",
                "senior"
              ],
              "enumTitles": [
                "全職 Full-time",
                "兼職 Part-time",
                "工讀 Casual / student part-time",
                "中高階 Senior / management"
              ]
            }
          },
          "experience": {
            "title": "🧑‍💼 Experience",
            "enum": [
              "none",
              "under-1",
              "1-3",
              "3-5",
              "5-10",
              "10-plus"
            ],
            "type": "string",
            "description": "Required work experience."
          },
          "education": {
            "title": "🎓 Education",
            "type": "array",
            "description": "Only jobs that accept this education level. Pick several to widen the search.",
            "items": {
              "type": "string",
              "enum": [
                "junior-high",
                "high-school",
                "associate",
                "bachelor",
                "master",
                "phd"
              ],
              "enumTitles": [
                "國中以下 Junior high or below",
                "高中／高職 High school",
                "專科 Associate",
                "大學 Bachelor",
                "碩士 Master",
                "博士 PhD"
              ]
            }
          },
          "postedWithinDays": {
            "title": "🗓️ Updated within",
            "enum": [
              "1",
              "3",
              "7",
              "14"
            ],
            "type": "string",
            "description": "Only jobs posted or refreshed recently."
          },
          "salaryType": {
            "title": "💰 Pay period",
            "enum": [
              "monthly",
              "daily",
              "hourly",
              "yearly",
              "per-piece"
            ],
            "type": "string",
            "description": "Pay period for the minimum-pay filter. Defaults to monthly when you set a minimum."
          },
          "minSalary": {
            "title": "💵 Minimum pay (TWD)",
            "minimum": 0,
            "type": "integer",
            "description": "Only jobs whose pay can reach at least this much for the pay period above, e.g. 50000 monthly or 200 hourly. 1111 matches on the top of the advertised range, so a 30,000–50,000 job passes a 50,000 minimum."
          },
          "excludeNegotiableSalary": {
            "title": "🚫 Skip 'negotiable' pay",
            "type": "boolean",
            "description": "Leave out jobs that list pay as negotiable (面議) instead of a range.",
            "default": false
          },
          "remoteOnly": {
            "title": "🏠 Remote jobs only",
            "type": "boolean",
            "description": "Only jobs that can be done remotely.",
            "default": false
          },
          "titleOnly": {
            "title": "🎯 Match keyword in title only",
            "type": "boolean",
            "description": "Match your keywords against the job title only, not the description — fewer, more precise results.",
            "default": false
          },
          "sortBy": {
            "title": "↕️ Sort by",
            "enum": [
              "relevance",
              "newest",
              "salary-high",
              "salary-low",
              "experience-low"
            ],
            "type": "string",
            "description": "Order of results. Newest first is used when you search without a keyword. When a run collects every match (Max results 0, or more than the search has), jobs after the first page come in pay order so none are skipped."
          },
          "language": {
            "title": "🌐 Location & industry language",
            "enum": [
              "zh",
              "en"
            ],
            "type": "string",
            "description": "Language for the location and industry names the site returns."
          },
          "descriptionMaxLength": {
            "title": "✂️ Max description length",
            "minimum": 0,
            "type": "integer",
            "description": "Optional. Cut each description to this many characters to keep records small. Empty = full text."
          },
          "compact": {
            "title": "📦 Compact records",
            "type": "boolean",
            "description": "Emit only the core fields (title, company, pay, location, dates). Ideal for AI agents and MCP clients.",
            "default": false
          },
          "excludeEmptyFields": {
            "title": "🧹 Drop empty fields",
            "type": "boolean",
            "description": "Remove null, empty-string and empty-array fields from each record.",
            "default": false
          },
          "incrementalMode": {
            "title": "♻️ Incremental mode",
            "type": "boolean",
            "description": "Track state between runs and tag every record with a changeType (NEW / UPDATED / UNCHANGED / EXPIRED).",
            "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": "Emit records for items present last run but gone now.",
            "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": "Apify Proxy keeps large runs flowing: when an address gets slowed down, the scraper switches to a fresh one automatically. The default works for most runs.",
            "default": {
              "useApifyProxy": true
            }
          },
          "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 start URLs that are not 1111.com.tw job, company or search links instead of failing the 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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}