104.com.tw Taiwan Jobs Scraper
Pricing
from $1.20 / 1,000 results
104.com.tw Taiwan Jobs Scraper
Scrape Taiwan's #1 job board 104.com.tw: job listings with full descriptions, salary in TWD, GPS coordinates, company size and industry. No API key required.
Pricing
from $1.20 / 1,000 results
Rating
0.0
(0)
Developer
Unfenced Group
Maintained by CommunityActor stats
1
Bookmarked
41
Total users
5
Monthly active users
9 days ago
Last modified
Categories
Share

Extract job listings from 104.com.tw at scale, in a clean, consistent structure ready for analysis, job boards, recruiting tools and market research. No API key required.
Why this scraper?
🎯 Built for Taiwan
A dedicated Taiwanese scraper, not a global tool with a country dropdown. Search, locations and currency (TWD) are tuned for 104.com.tw.
📄 Complete job data
Full job title and the complete job description on every record, plus the direct listing URL and publish date. No detail-page option to enable and no surcharge for descriptions.
💶 Salary data
Salary information parsed from the listing where the employer publishes it, in TWD. Missing salaries are returned as null, never guessed.
🏢 Company details
Hiring company name, profile URL, industry and headcount, plus how many people have applied so far.
📍 Precise location
City, district, street address and latitude/longitude for mapping and radius analysis, plus the nearest metro station where the employer lists one.
Input parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
searchQuery | array | (empty) | One or more job keywords in Chinese or English. Each keyword triggers a separate search. |
area | string | (empty) | Filter results to a specific region in Taiwan. |
remoteWork | boolean | false | Limit results to remote-friendly positions. |
maxResults | integer | 200 | Maximum total jobs to collect across all keywords. Set to 0 for unlimited. |
Full job descriptions are included on every record, so there is no detail-page option to switch on and nothing extra to pay for them.
Output schema
Every field below is present on every record. Fields the source does not publish for a given job are returned as null (or an empty array), never omitted and never guessed.
Job
| Field | Type | Description |
|---|---|---|
id | string | 104's own job number. Stable across runs. |
url | string | Job detail page URL. |
applyUrl | string | null | Direct application URL for the listing. |
title | string | null | Job title, as published. |
searchKeyword | string | The keyword from your input that surfaced this job. |
Company
| Field | Type | Description |
|---|---|---|
company | string | null | Hiring company name. |
companyUrl | string | null | Company profile page on 104. |
industryDesc | string | null | Industry the company is classified under (Traditional Chinese). |
employeeCount | integer | null | Company headcount as published on the profile. |
applyCount | integer | null | Number of applications received so far. A demand signal. |
Location
| Field | Type | Description |
|---|---|---|
location | string | null | City and district, e.g. "高雄市小港區". |
address | string | null | Street address where published. |
area | integer | null | 104's numeric area code, matching the area input values. |
latitude | number | null | Latitude of the workplace. |
longitude | number | null | Longitude of the workplace. |
nearestMrt | string | null | Nearest metro station where the employer lists one. |
isRemote | boolean | True when the employer flags the role as remote or hybrid. |
Requirements
| Field | Type | Description |
|---|---|---|
workType | string | null | FULL_TIME, PART_TIME, HIGH_LEVEL, DISPATCHED, FREELANCE or INTERNSHIP. |
workTypeCode | integer | null | 104's own employment-type code behind workType. |
experienceYears | integer | null | Years of experience required. 0 means no requirement. |
education | string[] | Accepted education levels, e.g. ["高中職","專科","大學"]. Empty when unspecified. |
educationCodes | integer[] | 104's own education codes behind education. |
majors | string[] | Preferred fields of study. Empty when unspecified. |
languages | array | Language requirements as published. Empty when unspecified. |
skills | string[] | Named skills the employer lists. Empty on listings where the employer describes requirements in prose instead. |
tags | string[] | Listing badges such as listed-company or welfare markers. |
Salary
| Field | Type | Description |
|---|---|---|
salaryMin | integer | null | Monthly minimum in TWD. null when the employer does not publish a figure. |
salaryMax | integer | null | Monthly maximum in TWD. null when open-ended or unpublished. |
salaryCurrency | string | null | "TWD" when a figure is published, otherwise null. |
salaryUnit | string | null | "MONTH" when a figure is published, otherwise null. |
salaryNegotiable | boolean | True for listings marked 面議 (negotiable) or with no published figure. |
salaryText | string | null | The salary line as the employer wrote it, e.g. "依公司規定". |
Description
| Field | Type | Description |
|---|---|---|
descriptionText | string | null | Full job description in plain text. Included on every record — no detail fetch, no extra cost. |
descriptionHtml | null | Always null. The source publishes descriptions as plain text only. |
descriptionMarkdown | string | null | Same content as descriptionText; provided for pipelines that expect markdown. |
Dates and provenance
| Field | Type | Description |
|---|---|---|
publishDate | string | null | Date the listing appeared, YYYY-MM-DD. |
publishDateISO | string | null | Same date as an ISO 8601 timestamp. |
appearDate | string | null | The raw YYYYMMDD value as the source returns it. |
contentHash | string | 16-character hash of id, title and salary. Changes when the listing is edited, so you can detect updates between runs. |
source | string | Always "104.com.tw". |
scrapedAt | string | ISO 8601 timestamp of the scrape. |
Example record
{"id": "14053958","url": "https://www.104.com.tw/job/8d83q","applyUrl": "https://www.104.com.tw/jobs/apply/analysis/8d83q?channel=104rpt","title": "電機/電子維修技術員【B04】","company": "唐榮鐵工廠股份有限公司","companyUrl": "https://www.104.com.tw/company/ynyxsi0","location": "高雄市小港區","address": "沿海二路4號","area": 6001016010,"latitude": 22.5451291,"longitude": 120.3703748,"nearestMrt": null,"isRemote": false,"workType": "FULL_TIME","workTypeCode": 1,"experienceYears": 0,"education": ["高中職", "專科", "大學"],"educationCodes": [2, 3, 4],"majors": ["電機電子工程相關"],"languages": [],"skills": [],"tags": ["上市上櫃"],"salaryMin": 35500,"salaryMax": 35500,"salaryCurrency": "TWD","salaryUnit": "MONTH","salaryNegotiable": false,"salaryText": "依公司規定","descriptionText": "▍工作內容 ▍\n執行軋鋼廠或煉鋼廠產線電控設備維修保養、工程監工等作業之執行\n\n▍基本學歷 ▍\n高中(職)以上電機、電子科、冷凍空調科或機電整合等相關科系畢業","descriptionHtml": null,"descriptionMarkdown": "▍工作內容 ▍\n執行軋鋼廠或煉鋼廠產線電控設備維修保養、工程監工等作業之執行\n\n▍基本學歷 ▍\n高中(職)以上電機、電子科、冷凍空調科或機電整合等相關科系畢業","industryDesc": "其他金屬相關製造業","employeeCount": 609,"applyCount": 0,"publishDate": "2026-09-03","publishDateISO": "2026-09-03T00:00:00.000Z","appearDate": "20260903","contentHash": "b31f0c8ad4e27a19","source": "104.com.tw","scrapedAt": "2026-09-10T05:05:42.000Z","searchKeyword": "工程師"}
Examples
Software engineering roles across Taiwan:
{"searchQuery": ["軟體工程師"],"maxResults": 200}
Two keywords at once, limited to Taipei City:
{"searchQuery": ["軟體工程師", "backend engineer"],"area": "6001001000","maxResults": 500}
Remote-friendly roles only:
{"searchQuery": ["developer"],"remoteWork": true,"maxResults": 200}
Daily feed (run on a schedule):
{"searchQuery": ["軟體工程師", "資料工程師", "產品經理"],"maxResults": 1000}
Results are sorted newest-first, so a scheduled daily run with a maxResults cap keeps an always-fresh feed of the latest listings. Schedule it in the Apify Scheduler, for example daily at 07:00.
💰 Pricing
$1.5 per 1,000 results — you only pay for successfully retrieved listings. Failed retries are never charged.
| Results | Cost |
|---|---|
| 100 | ~$0.15 |
| 1,000 | ~$1.5 |
| 10,000 | ~$15 |
| 100,000 | ~$150 |
Flat-rate alternatives typically charge $29–$49/month regardless of usage.
Subscription tiers lower the rate further, down to $0.9 per 1,000 at the highest tier. Use the Max results cap in the input to control your spend exactly.
Performance
| Run size | Typical time |
|---|---|
| 100 results | under 1 minute |
| 1,000 results | 2–4 minutes |
| 10,000 results | 20–35 minutes |
Known limitations
- Salary is only returned when the employer publishes it. Many Taiwanese listings are marked 面議 (negotiable) and carry
nullsalary figures withsalaryNegotiable: true. skills,languages,majorsandtagsare only populated when the employer fills in those structured fields. Roughly half of listings describe requirements in the description prose instead, so expect these arrays to be empty on a share of records.- Most text is Traditional Chinese, because that is how the source publishes it. Nothing is machine-translated.
- Very large result sets are bounded by the source's own paging limits.
- Listings can be removed by the source at any time, so a small share of URLs may expire shortly after scraping.
Technical details
- Source: 104.com.tw — Taiwan job listings
- Coverage: everything the public search exposes, filterable via the input parameters above
- Retry: automatic retry on network errors with exponential backoff
Rate this actor
If this scraper does its job, a short review on the Reviews tab helps other users find it. Something not working? Open an issue on the Issues tab instead — issues get fixed.
Need a custom scraper?
Unfenced Group builds Apify actors for any website — for free.
If the site you need isn't in our portfolio yet, just ask. We scope, build, and publish it at no cost to you. You only pay for results — we absorb the compute and proxy costs ourselves. Same pay-per-result pricing, same quality, same standards as every actor in this portfolio.
Get in touch: www.unfencedgroup.nl