51job China Jobs Scraper: Aliyun WAF Bypass & Bilingual Fields avatar

51job China Jobs Scraper: Aliyun WAF Bypass & Bilingual Fields

Pricing

from $3.99 / 1,000 jobs

Go to Apify Store
51job China Jobs Scraper: Aliyun WAF Bypass & Bilingual Fields

51job China Jobs Scraper: Aliyun WAF Bypass & Bilingual Fields

China's leading 51job (前程无忧) job board scraper. Extracts detailed job listings, salaries, experience/degree requirements, company type, size, and HR contact coordinates. Bypasses Aliyun WAF, normalizes salary currencies, and translates fields to English. $3.99 per 1,000 results.

Pricing

from $3.99 / 1,000 jobs

Rating

0.0

(0)

Developer

GetAScraper

GetAScraper

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

31 minutes ago

Last modified

Share

Get live China tech and corporate job listings: normalized JPY/CNY salary bands, degree requirements, company structures, and HR response times. Ready for your spreadsheet in under 60 seconds.

51job (前程无忧, 51job.com) is one of China's largest job boards. This Scraper extracts detailed job listings, salaries, experience requirements, and recruiter response rates directly from Aliyun WAF-protected single-page app endpoints. No complex setups. No API keys.

What does 51job China Jobs Scraper do?

The Actor extracts structured corporate and startup jobs from 51job and saves them to the Apify dataset. It provides 5 massive competitive advantages:

  • Automated Aliyun WAF Bypass: Built specifically on Playwright to clear the dynamic Alibaba cookie challenge. Paired with residential proxies, it operates completely unblocked.
  • Normalized Salaries (CNY): Parses complex Chinese salary formats (e.g. 1.5万-2.5万 or 30万-50万) into standardized monthly minimum and maximum integers in CNY (minSalaryMonthlyCny and maxSalaryMonthlyCny).
  • Bilingual Translations: Mapped educational and corporate categories into standard English. Field groupings like 本科"Bachelor's", 大专"Associate's", 民营"Private Enterprise", and 国企"State-Owned Enterprise" are returned as clean English strings.
  • Zero-Maintenance API Interception: Intercepts 51job's backend JSON search payload directly. No brittle CSS selectors: you capture the exact 40+ fields (including geographic coordinates, HR response times, company logos, and active hiring tags) natively.
  • Cost Efficiency: Flat pay-per-result pricing with no hidden monthly fees.

Who is this for

  • I am a global recruiter looking to build or backfill China-specific talent pools for my international B2B clients. I need clean English translations for degree levels and company types ready to feed my ATS.
  • I am an investment analyst tracking corporate hiring velocities and salary inflation inside Chinese tech hubs. I need normalized monthly CNY salary bands to run bulk regressions.
  • I am a database administrator syncing international job boards. I need a stable JSON feed with coordinates and company metadata to map locations accurately.
  • I am an HR tech product manager building a competitor research tool. I need structured, deduplicated listings with direct application links.

How to use

  1. Configure Search: Set search query keywords (e.g. python or AI), area codes (e.g. 020000 for Shanghai), required experience, degree, or company type.
  2. Set limits: Specify the maximum number of job records to extract.
  3. Execute Run: Click the Start button. The browser will clear the challenge and collect results.
  4. Download: Export your dataset as CSV, Excel, XML, or JSON.

Input

FieldTypeRequiredDefaultDescription
scrapeModeStringYes"search""search" maps the form filters. "urls" uses direct search board URLs in startUrls.
searchQueryStringNo"python"Search keyword (e.g. python, AI, 销售).
jobAreaStringNo"000000"Mapped area codes (e.g. Shanghai = 020000, Beijing = 010000, Shenzhen = 040000).
workYearStringNo"all"Required experience years: 0 (No exp), 1 (Intern), 2 (1-2 yrs), 3 (3-4 yrs), 4 (5-10 yrs), 5 (10+ yrs).
degreeStringNo"all"Required degree: 1 (Associate's), 2 (Bachelor's), 3 (Master's), 4 (PhD).
companyTypeStringNo"all"Company type: 01 (Private), 02 (State-Owned), 03 (Joint Venture), 04 (Foreign-invested), 05 (Listed).
companySizeStringNo"all"Employee headcount: 01 (0-50), 02 (50-150), 03 (150-500), 04 (500-1000), 05 (1000-5000), 06 (5000+).
startUrlsArrayNo[]Direct search result URLs from we.51job.com/pc/search?... when scrapeMode is urls.
outputFormatStringNo"flat""flat" (one row per job) or "normalized" (separate tables for jobs and companies linked by foreign key).
maxItemsIntegerNo50Maximum number of job records to extract.
proxyConfigurationObjectYes{"useApifyProxy":true,"apifyProxyGroups":["RESIDENTIAL"],"apifyProxyCountry":"SG"}Residential proxy. Singapore (SG), Hong Kong (HK), or Japan (JP) are recommended for speed.

Output

Every record outputs with the canonical listing URL and company metadata.

Example row

{
"jobId": "154242431",
"jobUrl": "https://jobs.51job.com/wuhan-wcq/154242431.html",
"applyUrl": "https://jobs.51job.com/wuhan-wcq/154242431.html#apply",
"dedupeKey": "51job:project:154242431",
"title": "法国奢侈品zilli 高级导购",
"datePosted": "2026-06-02T15:48:43.000Z",
"daysSincePosted": 6,
"jobAreaString": "武汉·武昌区",
"jobLocation": {
"province": "湖北省",
"city": "武汉",
"district": "武昌区"
},
"lon": "114.345175",
"lat": "30.563347",
"isRemote": false,
"isIntern": false,
"salaryDisclosed": true,
"salaryString": "5千-1万",
"salaryRangeCny": {
"min": 5000,
"max": 10000,
"period": "monthly"
},
"minSalaryMonthlyCny": 5000,
"maxSalaryMonthlyCny": 10000,
"experienceString": "2年",
"experienceMinYears": 2,
"degreeString": "大专",
"degreeEnglish": "Associate's",
"jobDescribe": "1、根据公司服务标准,向顾客介绍、展示商品。2、负责销售区域卫生...",
"company": {
"companyId": "BGUAZFE0UW8GZANpVTU",
"name": "北京金方同瑞贸易有限责任公司",
"logo": "https://img04.51jobcdn.com/...",
"employees": "150-500人",
"type": "民营",
"typeEnglish": "Private Enterprise",
"industry": "批发/零售",
"url": "https://jobs.51job.com/all/coBGUAZFE0UW8GZANpVTU.html"
},
"scrapedAt": "2026-06-08T..."
}

You can download the dataset in JSON, HTML, CSV, or Excel from the Apify Console dataset tab.

Data table

FieldTypeDescription
jobIdstring51job's primary numeric job ID
jobUrlstringCanonical detailed job listing URL
applyUrlstringDirect apply link
dedupeKeystringStable hash for duplicate filtering
titlestringJob title
datePostedstringISO 8601 posting date
daysSincePostedintegerComputed: days since datePosted
jobAreaStringstringFormatted Chinese region string (e.g. "武汉·武昌区")
jobLocationobjectStructured: province, city, district
lon / latstringGeographic coordinates for mapping
isRemotebooleanIs remote work supported
isInternbooleanIs this an internship position
salaryStringstringOriginal Chinese salary range (e.g. "5千-1万")
minSalaryMonthlyCnynumberComputed: normalized minimum monthly salary in CNY (¥)
maxSalaryMonthlyCnynumberComputed: normalized maximum monthly salary in CNY (¥)
experienceStringstringExperience text requirement (e.g. "2年")
experienceMinYearsnumberNormalized years of experience
degreeStringstringChinese degree requirement (e.g. "大专")
degreeEnglishstringEnglish degree mapping: "Associate's", "Bachelor's", "Master's", "PhD", "All Degrees"
company.namestringCompany name
company.typeEnglishstringEnglish company type: "Private Enterprise", "State-Owned Enterprise", "Wholly Foreign-Owned", "Sino-Foreign Joint Venture", "Listed Company"
jobDescribestringComplete, clean job description
scrapedAtstringISO 8601 scraping timestamp

API quickstart

Curl

curl --request POST \
--url "https://api.apify.com/v2/acts/getascraper~51job-scraper/runs?token=YOUR_API_TOKEN" \
--header 'Content-Type: application/json' \
--data '{
"searchQuery": "python",
"maxItems": 50,
"jobArea": "000000"
}'

Python

from apify_client import ApifyClient
client = ApifyClient('YOUR_API_TOKEN')
run = client.actor('getascraper/51job-scraper').call(
run_input={
'searchQuery': 'python',
'maxItems': 50,
}
)
for item in client.dataset(run['defaultDatasetId']).iterate_items():
print(item)

Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });
const run = await client
.actor('getascraper/51job-scraper')
.call({
searchQuery: 'python',
maxItems: 50,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Pricing

Pay-per-result and billed per row successfully saved to your dataset. Empty runs and blocked requests cost exactly $0.00.

  • Rate: $3.99 per 1,000 results ($0.00399 per result)
  • 100 listings typically cost $0.40
  • 1,000 listings cost exactly $3.99
  • 10,000 listings cost exactly $39.90
  • No fixed monthly subscriptions or hidden maintenance fees

Your Apify subscription tier applies an automatic volume discount on top of the per-result rate.

FAQ

Does it get blocked?

China's leading job platforms utilize aggressive Aliyun WAF firewalls that instantly drop standard datacenter requests. Setting proxyConfiguration to use Singapore (SG) or Hong Kong (HK) residential proxies guarantees stable, unblocked runs.

Does it extract recruiter phone numbers?

The scraper only extracts publicly visible contact details, including headquarters addresses, official websites, and representative names displayed on the company outline page. It does not bypass login walls or click-walls for private personal contact information.

How fresh is the data?

Every run crawls 51job.com live, ensuring you receive the exact, real-time vacancies currently open. There are no stale databases or cached layers. Each row contains a scrapedAt ISO 8601 timestamp.

This Actor only extracts data that is publicly visible on 51job.com. Users must comply with local privacy regulations and the platform's terms of service. 51job is a trademark of KE Holdings Inc. This is an independent scraping tool and is not affiliated with, endorsed by, or sponsored by KE Holdings.

Support

Open an issue on the Issues tab for bugs, feature requests, or layout additions. We respond within 48 hours.