# 518 Job Scraper — Taiwan Service, Retail & Part-Time Jobs (`youfuxu/taiwan-518-jobs-scraper`) Actor

Scrape jobs from 518 熊班 (518.com.tw), Taiwan's biggest board for retail, food service, logistics, hourly and part-time work. Titles, employers, hourly/monthly pay parsed to numbers, city/district, experience, posted date and full descriptions as clean JSON.

- **URL**: https://apify.com/youfuxu/taiwan-518-jobs-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

## 518 Job Scraper — Taiwan service, retail, hourly & part-time jobs

Get clean, structured job data from **[518 熊班](https://www.518.com.tw)** (518.com.tw, formerly 518 人力銀行) — Taiwan's biggest job board for **retail, food service, convenience stores, logistics, cleaning, drivers, caregivers, factory and part-time work**. Where 104 and Cake cover office and tech hiring, 518 is where Taiwan's 20,000+ frontline and hourly jobs are posted every month. Search any Chinese keyword, filter by city and job type, and download the results as JSON, CSV or Excel. No login, no browser, no proxy.

### What you get

Run it with the default input (`門市` — retail store jobs) and results look like this:

```json
{
  "url": "https://www.518.com.tw/job-L1Qoe5.html",
  "jobId": "L1Qoe5",
  "title": "3C門市銷售人員",
  "companyName": "蒐機王數位工作室",
  "companyUrl": "https://www.518.com.tw/company-E6j8jO.html",
  "location": "台北市大安區",
  "city": "台北市",
  "district": "大安區",
  "salaryText": "月薪 35,000 元",
  "salaryMin": 35000,
  "salaryMax": 35000,
  "salaryCurrency": "TWD",
  "salaryPeriod": "month",
  "employmentType": "full_time",
  "employmentTypeSource": "inferred",
  "experience": "無",
  "education": "高中職",
  "postedAt": "2026-08-21",
  "postedAtRaw": "08/21",
  "description": "3C商品店門市銷售買賣業務人員，月休八天排班制（週日固定公休，其它四天排休），試用期三個月，起薪 32,000，試用期滿調升至35,000 元…",
  "tags": ["responds_quickly", "recommended"],
  "respondsQuickly": true,
  "companyVerified": false,
  "isUrgent": false,
  "scrapedAt": "2026-08-21T02:22:56.763Z"
}
```

**25 fields per job by default.** Pay is parsed from 518's Chinese text into numbers you can sort and average — `時薪 196 至 226 元` becomes `salaryMin: 196, salaryMax: 226, salaryPeriod: "hour"`, `月薪 33,000 至 35,000 元` becomes `33000 / 35000 / "month"`; daily, weekly, yearly and per-piece (論件計酬) pay are handled too. City and district are split out of the location string, the `MM/DD` posting date is resolved to a full ISO date, and 518's badges (responds within 7 days, verified company, urgent hire, near MRT) come back as booleans and tags.

Turn on **Include detail page data** and each job grows to **49 fields**: exact `datePosted` and `validThrough`, the employer-stated job type, full HTML and plain-text description, job category (職務類別), number of openings, work hours, days off, education requirement, management responsibility, business travel, pay method and pay day, contact person, industry, street address and postal code, company website and logo.

### Who uses this

- **Staffing agencies & HR platforms** — monitor which chains (7-Eleven, FamilyMart, 繼光香香雞, 全聯…) are hiring store staff in which districts, at what hourly rate
- **Wage benchmarking & labour research** — 518 is the reference market for Taiwan's hourly wage; pull thousands of `時薪` postings and compare against the statutory minimum by city and industry
- **Lead generation** — every row carries the hiring business, its 518 company page and, in detail mode, its website, logo, address and contact person; frontline hiring is a strong signal for POS, payroll, insurance and uniform vendors
- **Job aggregators & alert bots** — schedule a keyword per city, diff against yesterday's dataset, push new postings to your users
- **Market-entry & expansion research** — count open retail / F\&B roles per district to see where chains are expanding right now

### How to use

1. Enter a **keyword** — Chinese works best on 518: `門市` (store staff), `餐飲` (F\&B), `超商` (convenience store), `倉儲` (warehouse), `清潔`, `司機`, `照服員`, `作業員`, `工讀`
2. Optionally pick a **City / county** (all 22 Taiwanese cities and counties are listed)
3. Optionally pick a **Job type** — Full-time (全職), Part-time (兼職) or Casual / hourly (打工). When set, 518 filters server-side and every result is tagged with that type for certain
4. Choose **Sort by** relevance or newest first
5. Set **Max jobs** (default 50; 518 pages 32 at a time)
6. Optionally enable **Include detail page data**
7. Run, then download from the **Dataset** tab as JSON / CSV / Excel, or pull it through the Apify API

#### Example input

```json
{
  "keyword": "超商",
  "region": "3001002",
  "jobType": "2",
  "sortBy": "newest",
  "maxItems": 300,
  "includeDetails": false
}
```

This returns the 300 newest **part-time convenience-store jobs in New Taipei City**.

### Fields

| Field | Description |
| --- | --- |
| `url` | Job detail page on 518.com.tw |
| `jobId` | 518's short job id (e.g. `L1Qoe5`) |
| `title` | Job title, highlight markup removed |
| `companyName`, `companyUrl` | Hiring business and its 518 company page |
| `location`, `city`, `district` | `台北市大安區` plus the two parts split out |
| `salaryText` | Pay exactly as 518 shows it |
| `salaryMin`, `salaryMax` | Parsed numbers (TWD); `null` when the posting says 面議 (negotiable) |
| `salaryCurrency` | `TWD` when a number was parsed |
| `salaryPeriod` | `hour`, `day`, `week`, `month`, `year` or `piece` |
| `employmentType` | `full_time`, `part_time` or `casual` |
| `employmentTypeSource` | `filter` (you selected a job type — exact), `detail` (from the job page — exact) or `inferred` (from title / pay basis) |
| `experience`, `education` | Requirements as listed (e.g. `無`, `1年以上`, `高中職`, `不拘`) |
| `postedAt`, `postedAtRaw` | ISO date resolved from 518's `MM/DD` |
| `description` | Description excerpt shown in the list |
| `tags` | Any of `responds_quickly`, `company_verified`, `urgent`, `recommended`, `new`, `near_mrt_station`, `onboard_next_year` |
| `respondsQuickly`, `companyVerified`, `isUrgent` | The three most useful badges as booleans |
| `scrapedAt` | When this row was scraped (UTC) |

Detail mode adds `datePosted`, `validThrough`, `descriptionHtml`, `descriptionText`, `jobCategory`, `vacancies`, `availableFrom`, `workHours`, `daysOff`, `educationRequirement`, `experienceRequirement`, `managementResponsibility`, `businessTrip`, `paymentMethod`, `payDay`, `contactPerson`, `industry`, `skills`, `streetAddress`, `postalCode`, `addressLocality`, `companyWebsite`, `companyLogoUrl`, `sourceJobNumber`.

### Limitations

- Without a job-type filter or detail mode, `employmentType` is an inference from the title and pay basis (hourly pay → part-time, monthly → full-time, 工讀/打工 in the title → casual). Select a **Job type** or enable **Include detail page data** when you need it to be exact
- Email and phone numbers are only shown to logged-in 518 members and are not collected; `contactPerson` (a name such as 彭先生) is
- 518 re-surfaces "recommended" postings across pages; duplicates are removed by URL, so a page can yield slightly fewer than 32 rows
- A single keyword search tops out at what 518 itself will page through; for a very broad term split the run by city to go deeper

### Legal

This Actor collects only publicly visible job postings, sends one polite request per page or job with built-in delays, and stores no personal data beyond what 518 publishes to every visitor. You are responsible for complying with 518's terms and applicable law in how you use the data.

# Actor input Schema

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

What to search for, in Chinese or English — e.g. <code>門市</code> (retail store), <code>餐飲</code> (food service), <code>倉儲</code> (warehouse), <code>清潔</code>, <code>司機</code>, <code>python</code>. 518 is a blue-collar / service-industry board, so Chinese job words return far more results than tech keywords.

## `region` (type: `string`):

Limit results to one Taiwanese city or county. Leave as <b>All Taiwan</b> to search nationwide.

## `jobType` (type: `string`):

518's own job-nature filter. <b>Full-time</b> = 全職, <b>Part-time</b> = 兼職, <b>Casual / hourly</b> = 打工 (short shifts, students, seasonal). When a type is selected every result is tagged with it for sure; with <b>Any</b> the <code>employmentType</code> field is inferred from the title and pay basis.

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

How 518 should order the results before the scraper walks them.

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

Maximum number of jobs to return (518 pages 32 at a time). Keep it small for a quick test, raise it for a full export.

## `includeDetails` (type: `boolean`):

Visit each job page to add the exact posted date and expiry, the employer-stated job type, full HTML description, job category, number of openings, work hours, days off, education requirement, contact person, industry, company website and logo. One extra request per job (about 1.5 s each), so it is slower — the list already gives title, company, pay, location, experience and a description excerpt without it.

## Actor input object example

```json
{
  "keyword": "門市",
  "region": "",
  "jobType": "",
  "sortBy": "relevance",
  "maxItems": 50,
  "includeDetails": false
}
```

# 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": "門市",
    "maxItems": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("youfuxu/taiwan-518-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 = {
    "keyword": "門市",
    "maxItems": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("youfuxu/taiwan-518-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 '{
  "keyword": "門市",
  "maxItems": 50
}' |
apify call youfuxu/taiwan-518-jobs-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,youfuxu/taiwan-518-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/ssVAGDPwz8L0M5d3f/builds/4DxYB9aC8iQG7SCaX/openapi.json
