# 1111.com.tw Job Scraper — Taiwan Jobs, Salaries & Companies (`youfuxu/taiwan-1111-job-scraper`) Actor

Scrape jobs from 1111.com.tw, Taiwan's second-largest job board. Titles, companies, parsed TWD salary ranges, locations, experience, education, benefits and descriptions as clean JSON.

- **URL**: https://apify.com/youfuxu/taiwan-1111-job-scraper.md
- **Developed by:** [Youfu Xu](https://apify.com/youfuxu) (community)
- **Categories:** Jobs, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## 1111.com.tw Job Scraper — Taiwan jobs, salary ranges & hiring companies

Get clean, structured job data from **[1111人力銀行 (1111.com.tw)](https://www.1111.com.tw)** — Taiwan's second-largest job board with roughly 275,000 live openings, strong in manufacturing, retail, food service, healthcare, logistics and SMEs that never post on LinkedIn. Search any keyword in Chinese or English and download the results as JSON, CSV or Excel. No login, no browser, no proxy setup.

### What you get

Run it with the default input and results look like this:

```json
{
  "url": "https://www.1111.com.tw/job/130249925/",
  "jobId": 130249925,
  "title": "(兼職工讀) Python 課程講師",
  "companyName": "藝派科技股份有限公司",
  "companyId": 71626494,
  "companyUrl": "https://www.1111.com.tw/corp/71626494/",
  "location": "台中市西區",
  "industry": "其他教育服務業",
  "salaryText": "時薪 650元以上",
  "salaryMin": 650,
  "salaryMax": null,
  "salaryCurrency": "TWD",
  "salaryPeriod": "hour",
  "salaryNegotiable": false,
  "employmentType": "part-time (student)",
  "experienceYears": 0,
  "experienceText": "Not required",
  "education": ["Bachelor", "Master", "PhD"],
  "benefits": [],
  "applicantsText": "1 ~ 5 人應徵",
  "description": "進行Python程式語言授課，對象為國高中生。須於正式授課前接受公司培訓，確認教學技巧與教材之正確使用。",
  "postedAt": "2026-08-21T00:10:00+08:00",
  "views": 112,
  "scrapedAt": "2026-08-21T07:12:17.229Z"
}
```

**34 fields per job**, including the job description, the hiring company with a link to its 1111 profile, city/district, industry, required years of experience, accepted education levels, highlighted benefits, applicant count band, view count and the last-updated timestamp.

#### Salary is parsed for you

1111 publishes pay as Chinese text. This Actor keeps the original in `salaryText` and adds machine-readable numbers:

| 1111 text | salaryMin | salaryMax | salaryPeriod | salaryNegotiable |
|---|---|---|---|---|
| `月薪 33,000元~40,000元` | 33000 | 40000 | month | false |
| `時薪 196元以上` | 196 | null | hour | false |
| `年薪 100萬元以上` | 1000000 | null | year | false |
| `論件計酬 27,000元~40,000元` | 27000 | 40000 | piece | false |
| `面議（經常性薪資達4萬元或以上）` | 40000 | null | month | true |

Taiwanese law requires employers to state a figure when regular pay is below TWD 40,000, so "negotiable" (`面議`) listings are guaranteed to pay at least 40,000/month — the Actor records that floor instead of leaving the field empty.

### Who uses this

- **Recruiters & staffing agencies** — see which Taiwanese companies are hiring for which roles, at what pay, updated to the minute
- **Salary benchmarking & HR analytics** — thousands of listings with numeric `salaryMin` / `salaryMax` / `salaryPeriod`, ready for a pivot table
- **B2B lead generation** — every row names the hiring company, its industry and district, with a link to its profile; companies that are hiring are companies that are spending
- **Job boards & alert bots** — poll a keyword on a schedule and diff against yesterday's dataset using `jobId`
- **Labour-market research** — measure demand for semiconductor, nursing, logistics or AI roles across Taiwan by city and industry

### How to use

1. Enter a **keyword** — `python`, `會計`, `半導體`, `護理師`, `台積電` all work (Chinese gives the widest coverage)
2. Set **Max jobs** (default 50; 1111 serves 30 per page, up to 4,500 per search)
3. Run, then download from the **Dataset** tab as JSON / CSV / Excel, or pull it through the Apify API

#### Example input

```json
{
  "keyword": "半導體",
  "maxItems": 500
}
```

### Fields

| Field | Description |
|---|---|
| `url` | Job page on 1111.com.tw |
| `jobId` | 1111's numeric job ID — stable, use it to de-duplicate between runs |
| `title` | Job title |
| `companyName`, `companyId`, `companyUrl` | Hiring company and its 1111 profile |
| `location`, `locationCode` | City + district (e.g. `新竹市東區`) and 1111's area code |
| `industry`, `industryCode` | Company industry |
| `salaryText` | Pay exactly as 1111 shows it |
| `salaryMin`, `salaryMax`, `salaryCurrency`, `salaryPeriod`, `salaryNegotiable` | Parsed pay (TWD; `month` / `hour` / `day` / `year` / `piece`) |
| `employmentType`, `employmentTypeCode` | `full-time` / `part-time` / `part-time (student)` |
| `experienceYears`, `experienceText` | Minimum years of experience (`0` = not required) |
| `education`, `educationCodes` | Accepted education levels, `["Any"]` when unrestricted |
| `majorCodes` | 1111 major codes, when the employer restricts by field of study |
| `benefits`, `benefitCodes` | Highlighted benefits (year-end bonus, meals, insurance…) |
| `applicantsText` | Applicant band such as `1 ~ 5 人應徵` |
| `description` | Job description as plain text (HTML entities decoded) |
| `postedAt`, `postedAtText` | Last-updated time, ISO-8601 in Asia/Taipei and the original text |
| `views` | View count on 1111 |
| `isTop`, `hasCompanyLogo`, `replyInDays` | Listing metadata |
| `scrapedAt` | When this row was collected |

### Limitations

- One search returns at most **4,500 jobs** (150 pages × 30). Use several narrower keywords to cover a large category
- `description` is the summary 1111 shows in search results (up to a few hundred characters); the job's full detail page sits behind 1111's bot check and is not fetched
- 1111 protects its site with an application firewall. The Actor paces itself at one page every 1.5 seconds and backs off on HTTP 403, but very large runs may be cut short — the run still succeeds with the jobs collected so far, and you can re-run later
- Location and industry names are in Traditional Chinese as published by 1111

### Legal

This Actor only collects publicly available job postings. You are responsible for using the data in compliance with 1111.com.tw's terms of service and applicable laws.

# Actor input Schema

## `keyword` (type: `string`):

What to search for — a job title, skill or company name, e.g. <code>python</code>, <code>會計</code>, <code>半導體</code>, <code>台積電</code>. Chinese gives the widest coverage; English works for tech roles.

## `maxItems` (type: `integer`):

Maximum number of jobs to return. 1111 serves 30 per page and at most 150 pages (4,500 jobs) per search — narrow the keyword if you need more than that.

## Actor input object example

```json
{
  "keyword": "python",
  "maxItems": 50
}
```

# Actor output Schema

## `datasetItemsJson` (type: `string`):

All scraped records as a JSON array.

## `datasetItemsCsv` (type: `string`):

All scraped records as a CSV file.

## `datasetItemsXlsx` (type: `string`):

All scraped records as an Excel workbook.

## `dataset` (type: `string`):

The default dataset of this run in Apify Console.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "keyword": "python",
    "maxItems": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("youfuxu/taiwan-1111-job-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "keyword": "python",
    "maxItems": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("youfuxu/taiwan-1111-job-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "keyword": "python",
  "maxItems": 50
}' |
apify call youfuxu/taiwan-1111-job-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,youfuxu/taiwan-1111-job-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/5O2JhLZihc5yLXbfX/builds/hSD0thb8XD1fxYIOu/openapi.json
