# Zhaopin Scraper (`solidcode/zhaopin-scraper`) Actor

\[💰 $1.7 / 1K] Scrape jobs from Zhaopin (智联招聘), one of China's largest recruitment platforms. Get title, company, city, salary, experience, education & posted date, plus optional full descriptions, company profiles & HR contacts. Filter by keyword, city, salary, experience & more.

- **URL**: https://apify.com/solidcode/zhaopin-scraper.md
- **Developed by:** [SolidCode](https://apify.com/solidcode) (community)
- **Categories:** Jobs, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.70 / 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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## Zhaopin Scraper

Pull job listings from Zhaopin (智联招聘), one of China's largest recruitment platforms, at scale — job titles, hiring companies, salary bands, required experience, education, skill tags, welfare benefits, GPS-mapped work addresses, and HR recruiter contacts across 24 major Chinese cities. Built for recruiters, China-market talent sourcers, and labor-market analysts who need clean, structured Zhaopin data in English-readable rows without copying job cards by hand.

### Why This Scraper?

- **24 major Chinese cities in one run** — Beijing, Shanghai, Shenzhen, Guangzhou, Hangzhou and 19 more, each a named dropdown choice; pick several and the actor searches every city and merges the results for you.
- **Five native Zhaopin search facets** — filter by monthly salary band (9 ranges from under ¥4,000 to over ¥50,000), years of experience (6 buckets), minimum education (from junior high to doctorate), and employment type (Full-time, Part-time, Internship, Campus recruitment).
- **GPS coordinates plus the full work address** — latitude, longitude, city, and district for every detail-enriched job, ready to plot on a map or match to a commute radius.
- **HR recruiter name and title** — the actual person handling each posting, straight from the job's own page, for direct outreach.
- **Skill tags and welfare/benefit labels** — the required skills and the perks each employer advertises (five-day week, meal allowance, stock options, and so on), captured as clean arrays.
- **Company profile on every detailed job** — company size, industry, and funding stage attached inline, no separate lookup.
- **Optional email and phone extraction** — pull contact emails and Chinese mobile/landline numbers straight out of job descriptions for lead generation.
- **Up to 1,000 results per search, uncapped across cities** — automatic per-city fan-out multiplies that ceiling so a nationwide keyword returns far more than a single search allows.
- **Simplified-Chinese descriptions in clean UTF-8** — full job descriptions extracted with no garbled characters, ready for translation or analysis.

### Use Cases

**Recruitment & Talent Sourcing**
- Build target-candidate maps of who is hiring for a given role in each city
- Reach hiring managers directly using the captured HR name and title
- Track which companies are actively recruiting for competing roles
- Assemble outreach lists with recruiter contacts and job links

**China Market Research**
- Measure hiring demand for a skill or role across 24 cities
- Spot which industries and funding stages are expanding headcount
- Compare full-time, internship, and campus-recruitment volumes by market
- Monitor posting freshness with the posted-date field

**Salary Benchmarking**
- Benchmark advertised salary ranges by role, city, and experience level
- Compare pay bands between Beijing, Shanghai, and second-tier cities
- Segment compensation by minimum education requirement
- Track how salary offers shift over repeated runs

**Lead Generation**
- Extract recruiter emails and phone numbers from job descriptions
- Target companies hiring at scale using the openings-per-posting count
- Build B2B prospect lists of firms expanding in specific industries
- Enrich CRM records with company size, industry, and funding stage

**Labor-Market Analytics**
- Feed structured job data into dashboards and BI tools
- Analyze skill demand from the per-job skill tags
- Map opportunity density with GPS-coordinate job locations
- Track welfare and benefit trends across employers

### Getting Started

#### Simple Keyword Search

Just a keyword — collects matching jobs nationwide:

```json
{
    "query": "python",
    "maxResults": 100
}
````

#### Filtered Multi-City Search

Narrow to specific cities, salary, experience, and education:

```json
{
    "query": "产品经理",
    "city": ["530", "538", "765"],
    "salary": "15001,25000",
    "experience": ["0305", "0510"],
    "education": ["4"],
    "maxResults": 500
}
```

#### Full Details with Contacts

Fetch full descriptions, company profiles, map coordinates, HR contacts, and extracted emails/phones:

```json
{
    "query": "java工程师",
    "city": ["530"],
    "employmentType": ["2"],
    "includeDetails": true,
    "extractContacts": true,
    "maxResults": 200
}
```

#### Using Zhaopin URLs

Paste search URLs you built on Zhaopin's own site — the keyword and filters above are ignored for these:

```json
{
    "startUrls": [
        "https://sou.zhaopin.com/?jl=530&kw=python"
    ],
    "maxResults": 100
}
```

### Input Reference

#### What to Scrape

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `query` | string | `"python"` | Job title, skill, or keyword. Works in Chinese or English (e.g. `销售`, `java工程师`, `产品经理`). Leave blank to collect all jobs matching the filters below. |
| `startUrls` | string\[] | `[]` | Advanced: paste Zhaopin search URLs (e.g. `https://sou.zhaopin.com/?jl=530&kw=python`). When provided, the keyword and filters are ignored for those URLs. |

#### Filters

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `city` | multi-select | `[]` | Restrict to specific cities. Choices: Beijing, Shanghai, Shenzhen, Guangzhou, Tianjin, Wuhan, Xi'an, Chengdu, Dalian, Changchun, Shenyang, Nanjing, Jinan, Qingdao, Hangzhou, Suzhou, Wuxi, Ningbo, Chongqing, Zhengzhou, Changsha, Fuzhou, Xiamen, Harbin. Empty = nationwide. |
| `salary` | select | `Any` | Monthly salary band in RMB: Any, Under ¥4,000, ¥4,000–¥6,000, ¥6,000–¥8,000, ¥8,000–¥10,000, ¥10,000–¥15,000, ¥15,000–¥25,000, ¥25,000–¥35,000, ¥35,000–¥50,000, or Over ¥50,000. |
| `experience` | multi-select | `[]` | Required experience: Experience unlimited, Under 1 year, 1–3 years, 3–5 years, 5–10 years, or Over 10 years. |
| `education` | multi-select | `[]` | Minimum education: Junior high & below (初中及以下), High school (高中), Vocational secondary (中专/中技), College / Associate (大专), Bachelor's (本科), Master's (硕士), MBA / EMBA, or Doctorate (博士). |
| `employmentType` | multi-select | `[]` | Employment type: Full-time (全职), Part-time (兼职/临时), Internship (实习), or Campus recruitment (校园招聘). |

#### Output Options

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `includeDetails` | boolean | `false` | Fetch each job's full page: description, company profile (size, industry, funding stage), benefit tags, exact address with map coordinates, and HR contact. Slower, but far richer data. |
| `extractContacts` | boolean | `false` | Scan each description for contact emails and phone numbers and add them as separate fields. Has no effect unless full details are on. |
| `maxResults` | integer | `100` | Cap on total jobs returned across all searches. Set to `0` to collect everything, up to a safety ceiling of 100,000 results. The actor stops requesting new pages once the cap is hit, keeping the full final page. |

### Output

Each job is one row. Here's a representative result with full details enabled:

```json
{
    "jobId": "CZ123456789",
    "number": "CC000000001J00000000001",
    "title": "Python 后端开发工程师",
    "company": "字节跳动",
    "companyId": "CZ123456789",
    "companyUrl": "https://company.zhaopin.com/CZ123456789.htm",
    "companySize": "10000人以上",
    "industry": "互联网/电子商务",
    "financingStage": "已上市",
    "city": "北京",
    "district": "海淀区",
    "address": "北京市海淀区中关村软件园",
    "latitude": 40.0512,
    "longitude": 116.2971,
    "salary": "2.5-4万",
    "salaryMin": 25000,
    "salaryMax": 40000,
    "experience": "3-5年",
    "education": "本科",
    "employmentType": "全职",
    "recruitCount": 5,
    "benefits": ["五险一金", "弹性工作", "股票期权", "免费班车"],
    "skills": ["Python", "Django", "MySQL", "Redis"],
    "description": "负责后端服务的设计与开发，参与核心系统架构...",
    "hrName": "王女士",
    "hrTitle": "招聘经理",
    "extractedEmails": ["hr@example.com"],
    "extractedPhones": ["13800000000"],
    "postedDate": "2026-07-01",
    "url": "https://www.zhaopin.com/jobdetail/CC000000001J00000000001.htm"
}
```

#### Core Fields (always returned)

| Field | Type | Description |
|-------|------|-------------|
| `jobId` | string | Unique Zhaopin job identifier |
| `title` | string | Job title |
| `company` | string | Hiring company name |
| `companyId` | string | Stable company identifier |
| `companyUrl` | string | Link to the company's Zhaopin page |
| `city` | string | City the job is located in |
| `postedDate` | string | Date the job was posted |
| `url` | string | Direct link to the job posting |

#### Compensation & Requirements

| Field | Type | Description |
|-------|------|-------------|
| `salary` | string | Advertised salary as shown on Zhaopin (e.g. `2.5-4万`) |
| `salaryMin` | number | Parsed monthly minimum in RMB |
| `salaryMax` | number | Parsed monthly maximum in RMB |
| `experience` | string | Required years of experience |
| `education` | string | Minimum education level |
| `employmentType` | string | Full-time, part-time, internship, or campus |
| `skills` | string\[] | Required skill tags |

#### Company & Location (with `includeDetails`)

| Field | Type | Description |
|-------|------|-------------|
| `companySize` | string | Employee headcount band |
| `industry` | string | Company industry |
| `financingStage` | string | Funding / listing stage |
| `district` | string | District within the city |
| `address` | string | Full work address |
| `latitude` | number | Work location latitude |
| `longitude` | number | Work location longitude |
| `recruitCount` | number | Number of openings for this posting |

#### Details & Contacts (with `includeDetails`)

| Field | Type | Description |
|-------|------|-------------|
| `description` | string | Full job description in Simplified Chinese |
| `benefits` | string\[] | Welfare / benefit tags the employer advertises |
| `hrName` | string | Name of the recruiter handling the posting |
| `hrTitle` | string | Recruiter's job title |
| `extractedEmails` | string\[] | Emails found in the description (needs `extractContacts`) |
| `extractedPhones` | string\[] | Phone numbers found in the description (needs `extractContacts`) |

### Tips for Best Results

- **Start small, then scale** — set `maxResults` to 20–50 on your first run to confirm the data matches your needs, then raise the cap.
- **Get past the 1,000-per-search ceiling by adding cities** — each Zhaopin search tops out at 1,000 results; selecting several cities runs one search each and merges them, so a broad keyword returns many times more.
- **Leave `includeDetails` off for speed** — the job card already carries title, company, city, salary, experience, education, and posted date. Turn details on only when you need descriptions, coordinates, benefits, or HR contacts.
- **Combine experience and education facets to segment candidates** — pairing, say, "3–5 years" with "Bachelor's" gives you a precise slice of the market for benchmarking or sourcing.
- **Search in Chinese for the fullest coverage** — Chinese keywords like `产品经理` or `销售` typically surface more postings than their English equivalents.
- **Turn on `extractContacts` for lead generation** — it works only when full details are on and pulls emails and phone numbers straight from the description when employers include them.
- **Use pasted URLs for filters set on Zhaopin's own site** — build a search on the website, copy the URL into `startUrls`, and the actor reproduces it exactly.

### Pricing

**From $1.70 per 1,000 results** — pay only for the jobs you collect, with volume discounts as you scale. Bronze, Silver, and Gold subscribers pay progressively less; the table below shows total cost at each discount tier.

| Results | No discount | Bronze | Silver | Gold |
|---------|-------------|--------|--------|------|
| 100 | $0.20 | $0.19 | $0.18 | $0.17 |
| 1,000 | $2.00 | $1.90 | $1.80 | $1.70 |
| 10,000 | $20.00 | $19.00 | $18.00 | $17.00 |
| 100,000 | $200.00 | $190.00 | $180.00 | $170.00 |

A "result" is any job row in the output dataset. No compute or time-based charges — you pay per result, plus a small fixed per-run start fee.

### Integrations

Export data in JSON, CSV, Excel, XML, or RSS. Connect to 1,500+ apps via:

- **Zapier** / **Make** / **n8n** — Workflow automation
- **Google Sheets** — Direct spreadsheet export
- **Slack** / **Email** — Notifications on new results
- **Webhooks** — Trigger custom APIs on run completion
- **Apify API** — Full programmatic access

### Legal & Ethical Use

This actor is designed for legitimate recruitment research, market analysis, and lead generation. Users are responsible for complying with applicable laws and Zhaopin's Terms of Service. Handle personal data — including recruiter names and any extracted contact details — responsibly and in line with data-protection regulations. Do not use extracted data for spam, harassment, or any illegal purpose.

# Actor input Schema

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

Job title, skill, or keyword to search for. Works in Chinese or English (e.g. 'python', '销售', 'java工程师', '产品经理'). Leave blank to collect all jobs matching the filters below.

## `city` (type: `array`):

Only include jobs in these Chinese cities. Leave empty to search nationwide. Selecting more than one runs a separate search per city and combines the results — this multiplies the work, so keep the 'Maximum Results' cap in mind when picking several.

## `salary` (type: `string`):

Only include jobs within this monthly salary band (in Chinese Yuan, RMB). Leave on 'Any' to include all salaries.

## `experience` (type: `array`):

Only include jobs requiring these experience levels. Leave empty to include any. Selecting several values runs a separate search for each and merges the results.

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

Only include jobs asking for these education levels. Leave empty to include any. Selecting several values runs a separate search for each and merges the results.

## `employmentType` (type: `array`):

Only include jobs with these employment types. Leave empty to include any. Selecting several values runs a separate search for each and merges the results.

## `startUrls` (type: `array`):

Advanced: paste zhaopin.com search URLs built in the site's own search page (e.g. https://sou.zhaopin.com/?jl=530\&kw=python). Use this when you've already applied filters in the site UI. When provided, the keyword and filters above are ignored for these URLs.

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

Off by default for fast results. Each job card already includes the title, company, city, salary, experience, education and posted date. Turn this on to also fetch the full job description, company profile (size, industry, funding stage), benefit tags, exact address with map coordinates, and the HR contact from each job's own page — this is slower, because every job needs an extra page visit, so expect longer runs on large searches.

## `extractContacts` (type: `boolean`):

When full job details are fetched, also scan each description for contact emails and phone numbers and add them as separate fields. Useful for recruitment lead generation. Has no effect unless 'Fetch Full Job Details' is on.

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

Hard cap on the total number of jobs returned across all searches and URLs. Default 100 — increase for bigger runs, or set to 0 to collect everything (up to a safety ceiling of 100,000 results). Each result is billed at the per-result rate. The actor stops requesting new pages once this number is hit but keeps the full last page even if it slightly overshoots.

## Actor input object example

```json
{
  "query": "python",
  "city": [],
  "experience": [],
  "education": [],
  "employmentType": [],
  "startUrls": [],
  "includeDetails": false,
  "extractContacts": false,
  "maxResults": 100
}
```

# Actor output Schema

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

Table of jobs with the most useful fields — title, company, city, salary, experience, posted date and link.

## `details` (type: `string`):

Full per-job rows with company profile, education, employment type, benefits, address, coordinates, description, HR contact and apply link.

# 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": "python",
    "city": [],
    "salary": "",
    "experience": [],
    "education": [],
    "employmentType": [],
    "startUrls": [],
    "includeDetails": false,
    "extractContacts": false,
    "maxResults": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("solidcode/zhaopin-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": "python",
    "city": [],
    "salary": "",
    "experience": [],
    "education": [],
    "employmentType": [],
    "startUrls": [],
    "includeDetails": False,
    "extractContacts": False,
    "maxResults": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("solidcode/zhaopin-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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": "python",
  "city": [],
  "salary": "",
  "experience": [],
  "education": [],
  "employmentType": [],
  "startUrls": [],
  "includeDetails": false,
  "extractContacts": false,
  "maxResults": 100
}' |
apify call solidcode/zhaopin-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=solidcode/zhaopin-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Zhaopin Scraper",
        "description": "[💰 $1.7 / 1K] Scrape jobs from Zhaopin (智联招聘), one of China's largest recruitment platforms. Get title, company, city, salary, experience, education & posted date, plus optional full descriptions, company profiles & HR contacts. Filter by keyword, city, salary, experience & more.",
        "version": "1.0",
        "x-build-id": "t8rdA3BDSL0bHjsrN"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/solidcode~zhaopin-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-solidcode-zhaopin-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/solidcode~zhaopin-scraper/runs": {
            "post": {
                "operationId": "runs-sync-solidcode-zhaopin-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/solidcode~zhaopin-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-solidcode-zhaopin-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "query": {
                        "title": "Search Keyword",
                        "type": "string",
                        "description": "Job title, skill, or keyword to search for. Works in Chinese or English (e.g. 'python', '销售', 'java工程师', '产品经理'). Leave blank to collect all jobs matching the filters below."
                    },
                    "city": {
                        "title": "City",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Only include jobs in these Chinese cities. Leave empty to search nationwide. Selecting more than one runs a separate search per city and combines the results — this multiplies the work, so keep the 'Maximum Results' cap in mind when picking several.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "530",
                                "538",
                                "765",
                                "763",
                                "531",
                                "736",
                                "854",
                                "801",
                                "600",
                                "613",
                                "599",
                                "635",
                                "702",
                                "703",
                                "653",
                                "639",
                                "636",
                                "654",
                                "551",
                                "719",
                                "749",
                                "681",
                                "682",
                                "622"
                            ],
                            "enumTitles": [
                                "Beijing (北京)",
                                "Shanghai (上海)",
                                "Shenzhen (深圳)",
                                "Guangzhou (广州)",
                                "Tianjin (天津)",
                                "Wuhan (武汉)",
                                "Xi'an (西安)",
                                "Chengdu (成都)",
                                "Dalian (大连)",
                                "Changchun (长春)",
                                "Shenyang (沈阳)",
                                "Nanjing (南京)",
                                "Jinan (济南)",
                                "Qingdao (青岛)",
                                "Hangzhou (杭州)",
                                "Suzhou (苏州)",
                                "Wuxi (无锡)",
                                "Ningbo (宁波)",
                                "Chongqing (重庆)",
                                "Zhengzhou (郑州)",
                                "Changsha (长沙)",
                                "Fuzhou (福州)",
                                "Xiamen (厦门)",
                                "Harbin (哈尔滨)"
                            ]
                        }
                    },
                    "salary": {
                        "title": "Monthly Salary Range",
                        "enum": [
                            "",
                            "0000,4000",
                            "4001,6000",
                            "6001,8000",
                            "8001,10000",
                            "10001,15000",
                            "15001,25000",
                            "25001,35000",
                            "35001,50000",
                            "50001,9999999"
                        ],
                        "type": "string",
                        "description": "Only include jobs within this monthly salary band (in Chinese Yuan, RMB). Leave on 'Any' to include all salaries."
                    },
                    "experience": {
                        "title": "Experience Required",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Only include jobs requiring these experience levels. Leave empty to include any. Selecting several values runs a separate search for each and merges the results.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "-1",
                                "0001",
                                "0103",
                                "0305",
                                "0510",
                                "1099"
                            ],
                            "enumTitles": [
                                "Experience unlimited",
                                "Under 1 year",
                                "1 – 3 years",
                                "3 – 5 years",
                                "5 – 10 years",
                                "Over 10 years"
                            ]
                        }
                    },
                    "education": {
                        "title": "Education Level",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Only include jobs asking for these education levels. Leave empty to include any. Selecting several values runs a separate search for each and merges the results.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "9",
                                "7",
                                "12",
                                "5",
                                "4",
                                "3",
                                "10",
                                "1"
                            ],
                            "enumTitles": [
                                "Junior high & below (初中及以下)",
                                "High school (高中)",
                                "Vocational secondary (中专/中技)",
                                "College / Associate (大专)",
                                "Bachelor's (本科)",
                                "Master's (硕士)",
                                "MBA / EMBA",
                                "Doctorate (博士)"
                            ]
                        }
                    },
                    "employmentType": {
                        "title": "Employment Type",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Only include jobs with these employment types. Leave empty to include any. Selecting several values runs a separate search for each and merges the results.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "2",
                                "1",
                                "4",
                                "5"
                            ],
                            "enumTitles": [
                                "Full-time (全职)",
                                "Part-time (兼职/临时)",
                                "Internship (实习)",
                                "Campus recruitment (校园招聘)"
                            ]
                        }
                    },
                    "startUrls": {
                        "title": "Search URLs",
                        "type": "array",
                        "description": "Advanced: paste zhaopin.com search URLs built in the site's own search page (e.g. https://sou.zhaopin.com/?jl=530&kw=python). Use this when you've already applied filters in the site UI. When provided, the keyword and filters above are ignored for these URLs.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "includeDetails": {
                        "title": "Fetch Full Job Details",
                        "type": "boolean",
                        "description": "Off by default for fast results. Each job card already includes the title, company, city, salary, experience, education and posted date. Turn this on to also fetch the full job description, company profile (size, industry, funding stage), benefit tags, exact address with map coordinates, and the HR contact from each job's own page — this is slower, because every job needs an extra page visit, so expect longer runs on large searches.",
                        "default": false
                    },
                    "extractContacts": {
                        "title": "Extract Emails & Phone Numbers",
                        "type": "boolean",
                        "description": "When full job details are fetched, also scan each description for contact emails and phone numbers and add them as separate fields. Useful for recruitment lead generation. Has no effect unless 'Fetch Full Job Details' is on.",
                        "default": false
                    },
                    "maxResults": {
                        "title": "Maximum Results",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Hard cap on the total number of jobs returned across all searches and URLs. Default 100 — increase for bigger runs, or set to 0 to collect everything (up to a safety ceiling of 100,000 results). Each result is billed at the per-result rate. The actor stops requesting new pages once this number is hit but keeps the full last page even if it slightly overshoots.",
                        "default": 100
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
