51job Scraper avatar

51job Scraper

Pricing

from $0.11 / 1,000 job posting saveds

Go to Apify Store
51job Scraper

51job Scraper

Scrape 51job jobs with salary, company, location, requirements, descriptions, tags, and URLs for China hiring intelligence.

Pricing

from $0.11 / 1,000 job posting saveds

Rating

0.0

(0)

Developer

Stas Persiianenko

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Categories

Share

Extract public job postings from 51job (前程无忧) for China recruiting, staffing, HR-tech, and labor-market analysis workflows.

The actor searches we.51job.com, captures the public job-search response, and saves structured job records with company, salary, location, requirements, tags, descriptions, recruiter signals, and source URLs.

What does 51job Scraper do?

51job Scraper turns 51job search pages into a clean Apify dataset.

It can:

  • 🔎 Search 51job by keyword.
  • 🌏 Limit results to a 51job area code such as Shanghai or nationwide.
  • 🧾 Extract job titles, employers, salaries, locations, and requirements.
  • 🧩 Include long job descriptions when available.
  • 🏢 Capture company size, company type, and company industry.
  • 📍 Save province, city, district, and coordinates when 51job returns them.
  • 🔗 Keep job and company URLs for verification or enrichment.

Who is it for?

Recruiters use it to monitor competing employers and active hiring signals.

Staffing agencies use it to build lead lists and identify companies with urgent demand.

HR-tech teams use it to power job-market dashboards, compensation studies, and talent-supply workflows.

Labor-market analysts use it to track demand by city, function, industry, and job family across China.

Why use this actor?

51job is a major China job-board source, but the modern search page is a dynamic SPA with anti-bot challenge behavior. This actor uses a browser session and captures the site's public search JSON after the page loads.

You get a dataset that is ready for spreadsheets, BI tools, CRMs, or downstream enrichment.

Typical use cases

  • Track salary ranges for a role in Shanghai, Beijing, Guangzhou, or Shenzhen.
  • Monitor which companies are hiring for a keyword such as python, 数据分析, or 销售.
  • Build recruiter lead lists from companies posting new jobs.
  • Compare demand by city or job function.
  • Feed a labor-market dashboard with current postings.
  • Collect job descriptions for skill-frequency analysis.

Input options

The actor supports two ways to define searches.

Use keywords for simple searches.

Use startUrls when you copied a search URL from 51job and want the actor to parse its query parameters.

Keywords

Add one or more search terms in the keywords field.

Examples:

  • python
  • 数据分析
  • 销售
  • Java
  • 项目经理

Each keyword creates a separate search target.

Job area codes

Use jobArea to target a 51job region.

Common examples:

  • 000000 — nationwide
  • 010000 — Beijing
  • 020000 — Shanghai
  • 030200 — Guangzhou
  • 040000 — Shenzhen

If you are unsure, copy a 51job search URL into startUrls; the actor will parse the area code from the URL when present.

Limits and pagination

maxItems controls the total number of job records saved.

maxPages controls how many search pages are loaded for each keyword or start URL.

pageSize controls how many records 51job should return per page.

Start small, verify the dataset, and then increase limits for monitoring jobs.

Output data

Each dataset item represents one public 51job job posting.

The actor saves practical fields for analysis and verification.

Output table

FieldDescription
jobId51job job identifier
jobNameJob title
companyNameDisplay company name
fullCompanyNameFull legal/display company name when available
salarySalary text from 51job
salaryMin / salaryMaxParsed salary bounds when provided by 51job
locationHuman-readable job location
province, city, districtLocation breakdown
workYearExperience requirement
degreeEducation requirement
jobTypeFull-time, part-time, internship, etc.
industryJob industry
companyTypeCompany ownership/type
companySizeCompany size bucket
issueDatePosting date/time
updateDateTimeLast update timestamp
jobTagsSkills, benefits, and requirement tags
jobDescriptionLong job description when enabled
jobUrlPublic job URL
companyUrlPublic company URL
searchKeywordKeyword that produced the item
sourceUrl51job search URL used for the page
scrapedAtActor scrape timestamp

Example input

{
"keywords": ["python"],
"jobArea": "020000",
"maxItems": 50,
"maxPages": 3,
"pageSize": 20,
"includeDescriptions": true
}

Example output

{
"jobId": "172765694",
"jobName": "中级大数据开发工程师",
"companyName": "上海海隆软件",
"salary": "1-1.6万",
"location": "上海·徐汇区",
"workYear": "3年及以上",
"degree": "本科",
"jobTags": ["sql", "报表", "五险一金"],
"jobUrl": "https://jobs.51job.com/shanghai-xhq/172765694.html",
"searchKeyword": "python"
}

How much does it cost to scrape 51job jobs?

This actor uses pay-per-event pricing.

You pay a small run start fee plus a per-job fee for each job posting saved to the dataset.

The final price shown on Apify is authoritative. Use low maxItems values for test runs, then scale after you confirm the dataset shape.

How to run it

  1. Open the actor on Apify.
  2. Add one or more keywords.
  3. Choose a 51job area code or leave 000000 for nationwide.
  4. Set maxItems to a small number for your first run.
  5. Start the actor.
  6. Download the dataset as JSON, CSV, Excel, or via API.

Tips for better results

Use Chinese role names when your workflow is China-focused.

Use city-specific area codes for local compensation research.

Disable includeDescriptions if you only need high-level listing fields and want smaller dataset rows.

Use multiple short runs for recurring monitoring rather than one very large exploratory run.

Integrations

Send the dataset to Google Sheets for recruiter review.

Load the JSON into a data warehouse for trend analysis.

Push company URLs into an enrichment workflow.

Use Apify webhooks to trigger a Slack alert when a search finishes.

Use the Apify API to schedule recurring searches for the same keywords.

API usage

Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/51job-scraper').call({
keywords: ['python'],
jobArea: '020000',
maxItems: 50
});
console.log(run.defaultDatasetId);

Python

from apify_client import ApifyClient
client = ApifyClient(token='YOUR_APIFY_TOKEN')
run = client.actor('automation-lab/51job-scraper').call(run_input={
'keywords': ['python'],
'jobArea': '020000',
'maxItems': 50,
})
print(run['defaultDatasetId'])

cURL

curl -X POST 'https://api.apify.com/v2/acts/automation-lab~51job-scraper/runs?token=YOUR_APIFY_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"keywords":["python"],"jobArea":"020000","maxItems":50}'

MCP usage

Use this actor from Claude Desktop or Claude Code through Apify MCP.

MCP tool URL:

https://mcp.apify.com/?tools=automation-lab/51job-scraper

Claude Code setup:

$claude mcp add apify https://mcp.apify.com/?tools=automation-lab/51job-scraper

Claude Desktop JSON setup:

{
"mcpServers": {
"apify-51job": {
"url": "https://mcp.apify.com/?tools=automation-lab/51job-scraper"
}
}
}

Example prompts:

  • "Run 51job Scraper for python jobs in Shanghai and summarize top employers."
  • "Extract 100 data analyst jobs from 51job nationwide and group them by salary range."
  • "Monitor 51job postings for sales roles in Guangzhou and list companies hiring this week."

Data quality notes

The actor returns fields made public by 51job's search page.

Some postings may omit salary, recruiter activity, exact district, or long descriptions.

Salary parsing depends on fields returned by 51job; always keep the original salary text for auditability.

Troubleshooting

If a run returns zero items, check that the keyword has active postings on 51job.

If a city returns fewer jobs than expected, verify the jobArea code or use a copied startUrls value from the 51job UI.

If 51job changes its anti-bot or API behavior, the actor may need a maintenance update.

Legality and ethical use

This actor extracts public job-search data. Use it responsibly, respect applicable laws, and avoid collecting or using data in ways that violate privacy, employment, or platform rules.

Do not use the data for spam, harassment, discriminatory profiling, or unauthorized credentialed access.

You may also want these automation-lab actors:

FAQ

Can I scrape nationwide jobs?

Yes. Set jobArea to 000000.

Can I use a 51job URL instead of keywords?

Yes. Add the URL to startUrls. The actor parses supported query parameters.

Does the actor need a 51job account?

No. It uses public search pages and public search responses.

Does it scrape applicant resumes?

No. It only extracts public job posting data.

Can I monitor jobs every day?

Yes. Create an Apify task with the same input and schedule it.

Why are some fields missing?

51job does not return every field for every posting. Missing optional fields are omitted from the dataset item.

Changelog

  • 0.1 — Initial private build with keyword/search URL inputs and public job-posting extraction.