# 1111.com.tw Jobs Scraper | Taiwan Jobs, Salaries & Alerts (`corvuslab/taiwan1111-jobs-scraper`) Actor

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.

- **URL**: https://apify.com/corvuslab/taiwan1111-jobs-scraper.md
- **Developed by:** [Corvuslab](https://apify.com/corvuslab) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### What does 1111.com.tw Jobs Scraper do?

**1111.com.tw Jobs Scraper** pulls job listings from **1111人力銀行 (1111 Job Bank)**, Taiwan's second-largest job board with roughly **270,000 open jobs**. Every job comes back as a clean record with **43 structured fields**, including parsed TWD pay, county and district, exact applicant count and the **full job description**. It is the only 1111 scraper with **real site-side filters** plus **incremental monitoring with alerts**. No code, and the output goes to JSON, CSV, Excel, the API or straight into an AI agent.

Give it one or more keywords (Chinese such as `工程師` or `會計`, or English for tech roles) and pick your filters. You can also paste 1111.com.tw search links, company pages or single job links. Leave everything empty and click Start to get the newest jobs across Taiwan.

> New to Apify? Sign up free and use the included monthly platform credit to try this Actor. No credit card needed.

***

### What data can you extract from 1111.com.tw?

Every record carries **43 fields**, grouped like this:

| Group | Fields |
|---|---|
| **Job** | `id`, `url`, `title`, `jobType` (full-time / part-time / casual / senior) + `jobTypeCode`, `updatedAt` (Taiwan time, ISO 8601), `isPromoted`, `searchKeyword`, `source`, `scrapedAt` |
| **Pay** | `salaryText` plus parsed `salaryMin`, `salaryMax`, `salaryPeriod` (month / day / hour / year / piece), `salaryCurrency` and `salaryNegotiable` for 面議 listings |
| **Location & industry** | `location`, `locationCode`, `county`, `countyEn`, `district`, `industry`, `industryCode`, `industryGroup` (the top-level group) |
| **Requirements & description** | `experienceYearsMin`, `educationAccepted`, `educationMin`, `benefits`, and the full `description` as plain text |
| **Company & demand** | `companyName`, `companyId`, `companyUrl`, `companyLogo`, `companyBadges` (Top 100 / Top 500 service / Top 1000 enterprise, foreign company), `applicantCount`, `applicantVolumeLabel`, `viewCount`, `replyWithinDays` |
| **Monitoring** | `changeType`, `contentHash`, and repost detection: `isRepost`, `repostOfId`, `repostDetectedAt` |

***

### Key features

- 🎚️ **Real filters, not just keywords**: 28 locations (all 22 Taiwan counties and cities plus overseas regions), 16 industries, job type, experience, education, updated within 1 / 3 / 7 / 14 days, minimum pay, skip negotiable pay, remote only, title-only matching and 5 sort orders. 1111 applies every one itself, so you never pay for rows you would filter out afterwards.
- 🔎 **Search, company or URL scraping**: run several keywords at once, or paste 1111.com.tw search results (your filters are kept), company pages (`/corp/…`) for all of an employer's open jobs, or single job links (`/job/…`).
- 🧾 **Parsed Taiwan salaries**: pay text like `時薪 700元~1,000元` becomes numbers plus a period and currency, ready for salary benchmarking.
- 🗺️ **Decoded location & industry**: county and district split out, English county names, the top-level industry group next to the detailed industry, and education levels as readable labels. Switch location and industry names to English with one setting.
- 📈 **Demand signals**: exact applicant count, view count, company badges and the employer's typical reply time, so you can see which roles are crowded and which employers respond.
- ⚡ **Fast & low-cost**: each results page brings back 30 complete jobs with the full description, so there are no extra per-job page visits.
- ♻️ **Incremental monitoring & alerts**: schedule it and get only what changed, with repost detection, pushed to Telegram, Slack, Discord or any webhook.
- 🤖 **AI-ready**: compact mode, drop-empty mode and a description-length cap keep payloads small for LLMs and MCP clients.

***

### 🚀 How to scrape 1111.com.tw

1. Open the Actor and enter one or more **search keywords** (e.g. `工程師`, `會計, 護理師`), then pick filters. Or paste a 1111.com.tw link.
2. Set **Max results** (0 = no limit).
3. (Optional) Turn on **incremental mode** and a **notification** channel, then **Schedule** it.
4. Click **Start**. Results stream into the Output tab, ready to download as JSON, CSV or Excel.

No login, no cookies, no setup.

#### Quick-start example input

```json
{
  "query": "工程師",
  "locations": ["hsinchu-city", "hsinchu-county"],
  "industries": ["tech"],
  "jobTypes": ["full-time"],
  "minSalary": 50000,
  "sortBy": "salary-high",
  "maxResults": 200
}
```

This finds up to 200 full-time engineering jobs at tech and semiconductor employers in Hsinchu that pay at least 50,000 TWD a month, best-paid first. It's a ready-made salary benchmark for Taiwan's science-park corridor.

***

### Input

Configure it in the visual editor with no code, or pass JSON through the API. **33 inputs** are available, grouped as they appear in the editor.

#### 🔎 Search

| Field | Type | What it does |
|---|---|---|
| `query` | string | Job title, skill or company name. Separate several keywords with commas; each runs as its own search and results are merged and de-duplicated. |
| `startUrls` | array | 1111.com.tw search links, company pages (`/corp/…`) or single job links (`/job/…`). |
| `maxResults` | integer | Cap on jobs across all searches (default 25, 0 = no limit). |

#### 🎚️ Filters

Several values inside one filter widen the search (OR). Different filters narrow it (AND).

| Field | Type | What it does |
|---|---|---|
| `locations` | array | 22 Taiwan counties and cities (`taipei`, `new-taipei`, `taoyuan`, `hsinchu-city`, `taichung`, `tainan`, `kaohsiung`…) plus `china`, `asia`, `americas`, `europe`, `africa`, `oceania`. |
| `industries` | array | 16 industry groups: `tech`, `manufacturing`, `finance-insurance`, `healthcare`, `wholesale-retail`, `food-hospitality`, `logistics-trade`, `construction-real-estate`, `education-arts` and more. |
| `jobTypes` | array | `full-time`, `part-time`, `casual` (student part-time), `senior` (management). |
| `experience` | enum | `none`, `under-1`, `1-3`, `3-5`, `5-10`, `10-plus` years. |
| `education` | array | `junior-high`, `high-school`, `associate`, `bachelor`, `master`, `phd`. |
| `postedWithinDays` | enum | Jobs posted or refreshed in the last `1`, `3`, `7` or `14` days. |
| `salaryType` | enum | Pay period for the minimum: `monthly`, `daily`, `hourly`, `yearly`, `per-piece`. |
| `minSalary` | integer | Minimum pay in TWD for that period, e.g. `40000` 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` | boolean | Leave out jobs that list pay as negotiable (面議). |
| `remoteOnly` | boolean | Only jobs that can be done remotely. |
| `titleOnly` | boolean | Match keywords against the job title only, for fewer and more precise results. |
| `sortBy` | enum | `relevance`, `newest`, `salary-high`, `salary-low`, `experience-low`. |

#### 📄 Output

| Field | Type | What it does |
|---|---|---|
| `language` | enum | `zh` (Traditional Chinese) or `en` for location and industry names. |
| `descriptionMaxLength` | integer | Cut each description to this many characters. Empty = full text. |
| `compact` | boolean | Core fields only (title, company, pay, location, dates). |
| `excludeEmptyFields` | boolean | Drop null, empty-string and empty-array fields. |

#### ♻️ Incremental monitoring and 🔔 notifications

`incrementalMode`, `stateKey`, `emitUnchanged` and `emitExpired` are explained under **How to monitor 1111.com.tw with incremental mode** below. The Telegram, Slack, Discord and webhook inputs are covered under **How to set up 1111.com.tw alerts**.

#### ⚙️ Advanced

| Field | Type | What it does |
|---|---|---|
| `proxyConfiguration` | object | Connection settings. The default works for most runs. |
| `maxRequestRetries` | integer | Retries per failed request (0–10, default 3). |
| `ignoreUrlFailures` | boolean | Skip start URLs that aren't 1111.com.tw job, company or search links instead of failing. |

#### More example inputs

Remote-friendly part-time jobs in Taipei, refreshed this week:

```json
{
  "locations": ["taipei", "new-taipei"],
  "jobTypes": ["part-time", "casual"],
  "remoteOnly": true,
  "postedWithinDays": "7",
  "sortBy": "newest",
  "maxResults": 0
}
```

Every open job at one employer, with English location and industry names:

```json
{
  "startUrls": [{ "url": "https://www.1111.com.tw/corp/71626494" }],
  "language": "en",
  "maxResults": 0
}
```

***

### Output

Each dataset item is one job. A real record:

```json
{
  "id": "98591252",
  "url": "https://www.1111.com.tw/job/98591252",
  "title": "(兼職工讀) Python 課程講師",
  "companyName": "藝派科技股份有限公司",
  "companyId": "71626494",
  "companyUrl": "https://www.1111.com.tw/corp/71626494",
  "salaryText": "時薪 700元~1,000元",
  "salaryMin": 700.0,
  "salaryMax": 1000.0,
  "salaryPeriod": "HOUR",
  "salaryCurrency": "TWD",
  "salaryNegotiable": false,
  "location": "新竹市東區",
  "county": "新竹市",
  "countyEn": "Hsinchu City",
  "district": "東區",
  "industry": "其他教育服務業",
  "industryGroup": "教育╱出版╱藝文相關",
  "jobType": "Part-time",
  "experienceYearsMin": 0,
  "educationAccepted": ["Bachelor", "Master", "PhD"],
  "educationMin": "Bachelor",
  "description": "利用公司提供之教學內容與教材進行Python程式語言授課。須於正式授課前接受公司培訓，確認教學技巧與教材之正確使用。…",
  "applicantCount": 1,
  "applicantVolumeLabel": "1 ~ 5 人應徵",
  "viewCount": 104,
  "replyWithinDays": 3,
  "isPromoted": false,
  "updatedAt": "2026-09-22T00:10:00+08:00",
  "source": "1111.com.tw",
  "searchKeyword": "python",
  "scrapedAt": "2026-09-24T22:07:34.774623+00:00"
}
```

Every field is present in standard mode (missing values are `null`); the monitoring fields are added in incremental mode. **Compact mode** returns the core fields only, and **`excludeEmptyFields`** drops empties entirely. The Output tab ships two ready-made views: **Overview** (title, company, pay, location, job type, industry, updated, link) and **Pay** (min / max TWD, period, negotiable, county, industry group).

***

### ♻️ How to monitor 1111.com.tw with incremental mode

Schedule the Actor with **incremental mode** on and it becomes a change feed. The first run saves every matching job as a baseline. Each later run compares against the previous one and emits only **NEW** jobs, **UPDATED** jobs (pay, description or other content changed) and, if you turn on `emitExpired`, **EXPIRED** jobs that have closed. Unchanged jobs are recognised and skipped, so you don't pay for them again. After the baseline, your cost follows how much the search changes, not how many jobs you watch: if 5% of 1,000 tracked jobs change in a day, you pay for 50 records.

**Repost detection**: employers on 1111 sometimes close a job and re-list it under a new ID. Incremental mode flags these with `isRepost: true` and links the earlier listing in `repostOfId`, so a re-listed job doesn't look like new hiring demand.

This works for company pages too: schedule a rival's `/corp/…` page and every role they open shows up as NEW, every role they close as EXPIRED.

#### Setting up scheduled monitoring

1. Configure your keywords and filters, and turn on **Incremental mode**.
2. Run it once. This saves the baseline.
3. Open the **Schedules** tab and set a recurring run (e.g. hourly or daily).
4. Add a notification channel (next section).

Each tracked search keeps its own state, named after your search settings. Set `stateKey` to name it yourself, and `emitUnchanged` to also get jobs that haven't changed.

***

### 🔔 How to set up 1111.com.tw alerts

Get a message as soon as a matching job appears on 1111. Fill in only the channels you want:

| Channel | What to configure |
|---|---|
| ✈️ **Telegram** | `telegramToken` (from @BotFather) + `telegramChatId` |
| 💬 **Slack** | `slackWebhookUrl` (Incoming Webhook URL) |
| 🎮 **Discord** | `discordWebhookUrl` (channel webhook URL) |
| 🪝 **Webhook** | `webhookUrl` (+ optional `webhookHeaders`) receives structured JSON, ideal for n8n / Make / Zapier |

Each message lists the job title, company, pay, location and link, up to `notificationLimit` jobs (1–20, default 5). Tokens and webhook URLs are secret inputs: encrypted, masked in the UI and never written to the run log. Channels fire independently, so a broken channel can't stop the scrape or the others. Pair alerts with incremental mode and you hear only about genuinely new or changed jobs.

***

### 💡 What can you do with 1111.com.tw data?

#### Salary benchmarking in Taiwan

Parsed `salaryMin` / `salaryMax` with a pay period let you compare monthly, hourly and yearly pay by county, industry group and experience level. Sort by pay and filter by minimum pay to map the top of the market in minutes.

#### Recruitment and talent sourcing

Agencies and in-house recruiters can track which employers are hiring for which roles, and where. Company badges and reply times show who is a large, responsive employer.

#### Job alerts for candidates

Set a keyword, a county and a minimum pay, schedule it, and get new matches on Telegram or Slack before most applicants see them. The applicant count shows how crowded a posting already is.

#### Labour-market research

Count openings by industry, county, education level and job type over time. With roughly 270,000 open jobs, 1111 is one of the best public signals of Taiwan's hiring demand.

#### Competitor hiring intelligence

Watch a rival's company page on a schedule to spot expansion, new product lines or cuts as they happen.

#### Feed AI agents and LLM pipelines

Send compact JSON straight into an LLM context, an MCP tool or a vector store, with the description capped to keep token costs low.

***

### 💰 How much does it cost to scrape 1111.com.tw?

This Actor uses Apify's **pay-per-event** model: a small fee when a run starts, plus a fee per job returned. See the Actor's **Pricing** tab for the current numbers. They're shown live, so this page never goes out of date.

Two things keep your bill down: **site-side filters** (jobs you filter out are never collected or billed) and **incremental mode** (after the baseline you pay only for what changed).

***

### 🔌 Integrations, export & API

Export to **JSON, CSV, Excel** or an HTML table, run it on a **schedule**, connect it to **Google Sheets, Slack, Make, Zapier and n8n**, or use it as an **MCP tool** for AI agents. From your own code, use the REST API or the JavaScript / Python clients:

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")

run_input = {
    "query": "工程師, 半導體",
    "locations": ["hsinchu-city", "taipei"],
    "minSalary": 50000,
    "maxResults": 100,
}

run = client.actor("corvuslab/taiwan1111-jobs-scraper").call(run_input=run_input)

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["title"], item["companyName"], item["salaryMin"], item["county"])
```

***

### ❓ FAQ

**Do I need a 1111.com.tw account or login?** No. It collects public job listings only and works without an account, cookies or setup.

**How many jobs can I get from one search?** 1111.com.tw shows at most **4,500 jobs per search**. When a search has fewer matches than that and you collect them all, you get every one; the jobs after the first page come in pay order (highest first), the only order in which 1111 pages through a full list without skipping jobs. On a broader search, your sort order is kept, but 1111 reshuffles results between pages, so a no-limit run typically returns around 3,500 unique jobs. To go wider, split the search by county, industry or job type so each part stays under 4,500 matches, or add more keywords separated by commas.

**Should I search in Chinese or English?** Chinese keywords (`工程師`, `會計`, `業務`, `護理師`) give by far the widest coverage, because most listings on 1111 are written in Traditional Chinese. English works well for tech roles (`python`, `java`, `AI`). To get location and industry names back in English, set `language` to `en`.

**Is there a posting date?** 1111 doesn't reliably publish an original posting date, so the record carries `updatedAt`: the last time the employer posted or refreshed the job, in Taiwan time (`+08:00`). Use the **Updated within** filter to get only jobs refreshed today or in the last 3, 7 or 14 days.

**Why does a negotiable (面議) job still have a `salaryMin`?** Taiwan requires listings with negotiable pay to state a monthly floor (typically "40,000 or more"). The scraper keeps that floor in `salaryMin`, sets `salaryNegotiable: true` and leaves `salaryMax` empty. To skip these jobs completely, turn on **Skip 'negotiable' pay**.

**How many people have applied?** `applicantCount` gives the exact number of applicants so far. The site itself only shows a band (for example `1 ~ 5 人應徵`, which it also uses for jobs with no applicants yet), and that label is kept in `applicantVolumeLabel`.

**Does it return recruiter emails or phone numbers?** No. Candidates apply to 1111 jobs through the site, and listings almost never publish contact details. Each record gives you the company name, ID and company page link to research the employer further.

***

### ⚖️ Is it legal to scrape 1111.com.tw?

This Actor collects only **publicly available** job listings, the same information any visitor sees on 1111.com.tw. You're responsible for how you use it, especially any personal information, and for complying with the site's terms and applicable law, including Taiwan's Personal Data Protection Act and the GDPR where they apply. Not affiliated with, endorsed by or sponsored by 1111 Job Bank (1111人力銀行).

***

**Keywords:** 1111 scraper · 1111.com.tw scraper · 1111人力銀行 · 1111 job bank scraper · 1111 api · Taiwan job scraper · Taiwan jobs · 台灣職缺 · 找工作 · Taiwan salary data · TWD salary benchmarking · recruitment data · labour market research · job monitoring · job alerts · export to CSV · export to Excel · MCP tool for AI agents

# Changelog

This Actor's version history is a separate document: https://apify.com/corvuslab/taiwan1111-jobs-scraper/changelog.md

# Actor input Schema

## `query` (type: `string`):

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` (type: `array`):

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/…).

## `maxResults` (type: `integer`):

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.

## `locations` (type: `array`):

Cities and counties where the job is based. Pick several to widen the search.

## `industries` (type: `array`):

The employer's industry.

## `jobTypes` (type: `array`):

Employment type.

## `experience` (type: `string`):

Required work experience.

## `education` (type: `array`):

Only jobs that accept this education level. Pick several to widen the search.

## `postedWithinDays` (type: `string`):

Only jobs posted or refreshed recently.

## `salaryType` (type: `string`):

Pay period for the minimum-pay filter. Defaults to monthly when you set a minimum.

## `minSalary` (type: `integer`):

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` (type: `boolean`):

Leave out jobs that list pay as negotiable (面議) instead of a range.

## `remoteOnly` (type: `boolean`):

Only jobs that can be done remotely.

## `titleOnly` (type: `boolean`):

Match your keywords against the job title only, not the description — fewer, more precise results.

## `sortBy` (type: `string`):

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` (type: `string`):

Language for the location and industry names the site returns.

## `descriptionMaxLength` (type: `integer`):

Optional. Cut each description to this many characters to keep records small. Empty = full text.

## `compact` (type: `boolean`):

Emit only the core fields (title, company, pay, location, dates). Ideal for AI agents and MCP clients.

## `excludeEmptyFields` (type: `boolean`):

Remove null, empty-string and empty-array fields from each record.

## `incrementalMode` (type: `boolean`):

Track state between runs and tag every record with a changeType (NEW / UPDATED / UNCHANGED / EXPIRED).

## `stateKey` (type: `string`):

Stable name for the tracked search. Leave empty to derive one automatically from your search settings.

## `emitUnchanged` (type: `boolean`):

Also emit records that have not changed since the previous run.

## `emitExpired` (type: `boolean`):

Emit records for items present last run but gone now.

## `telegramToken` (type: `string`):

Bot token from @BotFather.

## `telegramChatId` (type: `string`):

Chat or channel ID, e.g. "-100123456789" or "@yourchannel".

## `slackWebhookUrl` (type: `string`):

Slack incoming-webhook URL.

## `discordWebhookUrl` (type: `string`):

Discord incoming-webhook URL.

## `webhookUrl` (type: `string`):

Any HTTPS endpoint. Receives a JSON POST with the matched records — works with n8n, Make and Zapier.

## `webhookHeaders` (type: `object`):

Extra headers for the webhook request, e.g. {"Authorization": "Bearer xyz"}.

## `notificationLimit` (type: `integer`):

How many records to include in each notification message.

## `proxyConfiguration` (type: `object`):

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.

## `maxRequestRetries` (type: `integer`):

How many times to retry a failed request before giving up on it.

## `ignoreUrlFailures` (type: `boolean`):

Skip start URLs that are not 1111.com.tw job, company or search links instead of failing the run.

## Actor input object example

```json
{
  "query": "工程師",
  "maxResults": 25,
  "excludeNegotiableSalary": false,
  "remoteOnly": false,
  "titleOnly": false,
  "compact": false,
  "excludeEmptyFields": false,
  "incrementalMode": false,
  "emitUnchanged": false,
  "emitExpired": false,
  "notificationLimit": 5,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "maxRequestRetries": 3,
  "ignoreUrlFailures": true
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

## `allItems` (type: `string`):

No description

## `salaries` (type: `string`):

No description

# 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 = {
    "query": "工程師",
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("corvuslab/taiwan1111-jobs-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 = {
    "query": "工程師",
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("corvuslab/taiwan1111-jobs-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 '{
  "query": "工程師",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call corvuslab/taiwan1111-jobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,corvuslab/taiwan1111-jobs-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/QMpagVfeo7jSPEUhO/builds/luW79J8N7jgsdK1Io/openapi.json
