104.com.tw Taiwan Jobs Scraper
Pricing
from $1.50 / 1,000 results
104.com.tw Taiwan Jobs Scraper
Scrape Taiwan's #1 job board 104.com.tw: 100,000+ listings with salary (TWD), GPS, company size, skills. No proxy required.
Pricing
from $1.50 / 1,000 results
Rating
0.0
(0)
Developer
Unfenced Group
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 hours ago
Last modified
Categories
Share
Scrapes job listings from 104.com.tw, Taiwan's largest job board (~50k+ active listings). Uses 104's internal JSON REST APIs — no Playwright, no HTML parsing, no CSS selectors.
Architecture
Two REST API layers:
| Layer | Endpoint | Purpose |
|---|---|---|
| Search API | /jobs/search/api/jobs | Paginated listing with filters, 30 results/page |
| Detail API | /job/ajax/content/{hash} | Rich per-job record — welfare, skills, contact, etc. |
The detail API is optional (enrichDetails: true). When disabled the scraper runs search-only mode, which is fast and cheap.
Input
| Field | Type | Default | Description |
|---|---|---|---|
keywords | string[] | ["software","engineer","manager"] | Keywords in Chinese or English |
area | string | "" | Area code for location filter. 6001001000 = Taipei. Empty = all Taiwan |
remoteWork | boolean | false | Filter to remote-friendly positions |
maxResults | integer | 200 | Max jobs to collect (0 = unlimited) |
enrichDetails | boolean | false | Enrich each job via the Detail API — see new fields below |
Area codes (examples)
| Code | Area |
|---|---|
6001001000 | Taipei City |
6001002000 | New Taipei City |
6001006000 | Hsinchu City |
6001008000 | Taichung City |
6001014000 | Tainan City |
6001016000 | Kaohsiung City |
Output fields
Always present (search API)
| Field | Type | Description |
|---|---|---|
id | string | 104 internal job number |
url | string | Job detail page URL |
companyUrl | string|null | Company profile URL |
title | string | Job title |
description | string|null | Job description text |
companyName | string | Employer name |
companyId | string | 104 company ID |
industry | string|null | Industry category (Chinese) |
companySize | number|null | Employee count code |
address | string|null | Job location address |
district | string|null | City/district name |
latitude | number|null | Latitude |
longitude | number|null | Longitude |
nearestMrt | string|null | Nearest MRT/metro station |
salaryMin | number|null | Minimum salary (TWD/month) |
salaryMax | number|null | Maximum salary (TWD/month) |
salaryCurrency | string | Always "TWD" |
salaryNegotiable | boolean | True when salary is 面議 (negotiable) |
jobCategories | string[] | Job category tags |
educationReq | array | Education requirement codes |
majorReq | string[] | Required university majors |
skillsReq | string[] | Required skills (names, from search API) |
languageReq | array | Language requirements |
yearsExperience | number|null | 104 experience tier code |
jobType | number|null | 1=full-time, 2=part-time, … |
period | number|null | Contract period |
remoteWorkType | number | 0=office, 1=fully remote, 2=hybrid |
applicationCount | number | Number of applicants |
publishDate | string|null | Posted date (YYYY-MM-DD) |
searchKeyword | string | Keyword that surfaced this job |
source | string | Always "104.com.tw" |
scrapedAt | string | ISO 8601 scrape timestamp |
Only when enrichDetails: true (Detail REST API)
| Field | Type | Description |
|---|---|---|
closeDate | string|null | Application deadline (YYYY-MM-DD) |
postalCode | string|null | Company postal code |
logoUrl | string|null | Company logo image URL |
employeeCountText | string|null | Employee count as text (e.g. "65人") |
educationText | string|null | Education requirement as text (e.g. "大學以上") |
workExpText | string|null | Work experience requirement (e.g. "3年以上", "不拘") |
welfareTags | string[] | Welfare/benefit tags (e.g. ["年終獎金","健身器材"]) |
welfareText | string|null | Full welfare description |
legalTags | string[] | Labor law compliance tags (e.g. ["勞保","健保"]) |
skillsDetail | {code,name}[] | Skills with canonical 104 codes (enables cross-job matching) |
languageDetail | {language,listening,speaking,reading,writing}[] | Language requirements with four-axis proficiency levels |
certificateReq | string[] | Certificate/license requirements |
driverLicenseReq | string[] | Driver license requirements |
contactHr | string|null | HR contact name |
contactEmail | string|null | HR contact email |
Note: When
enrichDetails: false(default), all Detail API fields are present asnull.
Filters
| Input | API param | Notes |
|---|---|---|
keywords | keyword | One search per keyword; results deduped by job ID |
area | area | 10-digit 104 area code |
remoteWork=true | wf=4 | Remote-friendly jobs |
Pricing guide
| Mode | ~CU / 100 jobs | Notes |
|---|---|---|
| Search-only | ~0.005 CU | 1 req per 30 jobs |
| Enriched | ~0.03 CU | 1 search + 1 detail req per job |
Notes
- Results sorted newest-first (
order=15, asc=0) - Page size capped at 30 (API max)
- Max 1,000 pages per keyword (30,000 results) due to 104 pagination limit
- Detail API concurrency: 5 parallel requests per page batch
- 104.com.tw requires
zh-TWlocale headers; English User-Agent returns 403