Com API104.com.tw ↗
Search and retrieve job listings from 104.com.tw, Taiwan's largest job board. Get job titles, salaries, skills, company info, and full posting details.
What is the Com API?
The 104.com.tw API provides access to Taiwan's largest job board through 2 endpoints, returning structured job data including titles, salary ranges, required skills, location, and full job descriptions. The search_jobs endpoint lets you query thousands of listings by keyword with area and sort filters, while get_job_detail retrieves complete posting data — education requirements, welfare details, and company profile URLs — for any individual listing.
curl -X GET 'https://api.parse.bot/scraper/2239d284-b000-4fe7-9d64-196aa368149e/search_jobs?area=6001001000&page=1&order=15&keyword=Python' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace 104-com-tw-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: 104.com.tw Job Search SDK — search Taiwan's largest job board."""
from parse_apis.job104 import Job104, Sort, JobNotFound
client = Job104()
# Search for Python jobs sorted by date, cap at 5 results
for job in client.jobsummaries.search(keyword="Python", sort=Sort.DATE, limit=5):
print(job.job_name, job.company_name, job.salary_low, job.salary_high)
# Drill into the first result's full details
summary = client.jobsummaries.search(keyword="資料工程師", limit=1).first()
if summary:
detail = summary.details()
print(detail.job_name, detail.salary, detail.work_experience)
print(detail.education, detail.welfare_description[:100])
# Fetch a job directly by ID
try:
job = client.jobs.get(job_id="8ttan")
print(job.job_name, job.company_name, job.address_region)
except JobNotFound as exc:
print(f"Job not found: {exc.job_id}")
print("exercised: jobsummaries.search / summary.details / jobs.get / JobNotFound error handling")
Search for jobs by keyword with optional filters. Returns paginated job listings with basic info including title, company, salary, location, skills, and more. Results are paginated with up to 32 jobs per page and a maximum of 100 pages. Sort order controls relevance vs recency ranking.
| Param | Type | Description |
|---|---|---|
| area | string | Area code filter (e.g., '6001001000' for Taipei city) |
| page | integer | Page number for pagination (1-100) |
| order | string | Sort order for results |
| keywordrequired | string | Search keyword (e.g., '軟體工程師', 'Python', '行銷') |
{
"type": "object",
"fields": {
"jobs": "array of job objects with fields: job_id, job_no, job_name, company_name, company_no, industry, description, salary_low, salary_high, job_address, area, lat, lon, job_type, appear_date, apply_count, link, company_link, tags, job_categories, education, remote_work_type, employee_count, work_period, skills, language_requirements",
"page": "integer - current page number",
"count": "integer - number of jobs on this page",
"total_count": "integer - total number of matching jobs",
"total_pages": "integer - total number of pages"
}
}About the Com API
Search Jobs
The search_jobs endpoint accepts a required keyword parameter (supporting Chinese and English terms such as 軟體工程師, Python, or 行銷) alongside optional filters: area for geographic targeting using region codes (e.g., 6001001000 for Taipei City), page for pagination (1–100), and order to sort by relevance (15) or posting date (1). Each response includes up to 32 job objects per page, along with total_count and total_pages to support full result traversal. Individual job objects carry job_id, job_no, job_name, company_name, company_no, industry, a short description, and salary_low/salary_hi values.
Job Detail
Passing a job_id from search results to get_job_detail returns the complete posting record. This includes structured salary fields (salary_min, salary_max, and a human-readable salary string), education requirements, an array of skills, specialty items, appear_date, and a company_url pointing to the employer's profile. If a listing has expired or been removed, the endpoint returns a stale_input indicator rather than erroring silently.
Coverage and Data Shape
104.com.tw is the dominant job platform in Taiwan and lists roles across industries including technology, finance, manufacturing, and hospitality. Salary data is returned both as a descriptive string and as integer min/max values where the employer provides a range. Listings are in Traditional Chinese; keyword searches work in both Chinese and romanized terms. Pagination caps at 100 pages (up to 3,200 results per query), so narrow searches with specific keywords or area codes yield the most targeted results.
The Com API is a managed, monitored endpoint for 104.com.tw — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when 104.com.tw changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official 104.com.tw API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Aggregate software engineering job listings in Taipei using the
areafilter and軟體工程師keyword to track hiring demand - Monitor salary ranges for specific roles by collecting
salary_minandsalary_maxfromget_job_detailover time - Build a job recommendation engine that maps candidate skills against the
skillsarray returned in job detail responses - Track which industries are posting the most roles by aggregating the
industryfield acrosssearch_jobsresults - Detect newly posted listings by sorting with
order=1(date) and comparingappear_datevalues fromget_job_detail - Compile company hiring profiles by collecting all job postings sharing a
company_noacross paginated search results - Feed a research dataset of Taiwanese labor market activity using
total_counttrends across keyword queries
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does 104.com.tw have an official developer API?+
What does `get_job_detail` return that `search_jobs` does not?+
search_jobs returns summary-level fields: job_name, company_name, industry, salary_low, salary_hi, and a short description. get_job_detail adds structured salary_min/salary_max integers, a skills array, specialty items, education requirements, appear_date, and company_url. It also returns a stale_input signal for listings that have been removed or expired.How does pagination work in `search_jobs`, and are there limits?+
page parameter accepts values from 1 to 100, capping retrievable results at 3,200 per query. The response includes total_count and total_pages so you can determine whether additional pages exist. If a query matches more than 3,200 listings, refining by keyword or area is the only way to access the remaining results.