Liepin Scraper 猎聘: China Jobs, Salary Data & Headhunter Posts avatar

Liepin Scraper 猎聘: China Jobs, Salary Data & Headhunter Posts

Pricing

from $0.90 / 1,000 jobs

Go to Apify Store
Liepin Scraper 猎聘: China Jobs, Salary Data & Headhunter Posts

Liepin Scraper 猎聘: China Jobs, Salary Data & Headhunter Posts

Liepin scraper for China jobs: white-collar and headhunter postings with CNY and USD salary, bonus months, salary percentiles, seniority, poster type and recruiter title. Search by English or Chinese job title and city, and track new, updated and removed jobs. No login needed. $1.76 per 1,000 jobs.

Pricing

from $0.90 / 1,000 jobs

Rating

0.0

(0)

Developer

GetAScraper

GetAScraper

Maintained by Community

Actor stats

0

Bookmarked

59

Total users

11

Monthly active users

12 hours ago

Last modified

Features

Limited permissions

Share

🇨🇳 Liepin Scraper 猎聘: China Jobs, Salary Data & Headhunter Posts

Collect public Liepin job postings with CNY and USD salary data, and know exactly what changed. Search China's white-collar job market by keyword and city, several of each in one run, and see which jobs are posted by the hiring company and which by headhunters. Turn on change tracking to get only new, updated, and removed jobs on every run.
China jobs source comparison   •  Zhaopin, 51Job, Liepin, and ChinaHR listings side by side
 Zhaopin
Jobs, salary & hiring-change monitoring
 51job
Jobs, salary & employer context
 Liepin
➤ You are here
 ChinaHR
Job titles, salary & employer data
  More than one job board? China Jobs Feed covers the main ones in one run.
要查多个招聘网站? China Jobs Feed 一次运行覆盖主要平台。
Liepin jobs with salary statistics and poster type attached
Search China's white-collar job market by keyword and city, or start from featured listings, and keep normalized CNY and USD salary figures, requirements, and company details in clean rows.
💰 Salary data you can compare
Monthly CNY and USD pay, pay months, annual figure and percentiles by role and city.
🔔 Change tracking built in
Every run after the first returns only new, updated, and removed jobs.
🧑‍💼 Headhunter or employer
Every job says who posted it, with company industry, funding stage and size.
📝 Optional job detail
Pull the full public job description only on the runs where you need it.

Liepin jobs data, from the white-collar and executive job board 猎聘, in clean rows. This Actor returns public listing data for China salary data products, recruitment-market research, headhunter and recruiter tracking, and company hiring intelligence. It does not collect candidate profiles or private contact information, and it needs no Liepin account.

🎯 What you can do

  • Search several job titles across several cities in one run, de-duplicated by job ID.
  • Get monthly and annual salary in CNY, with optional US dollars at a dated exchange rate shown on each row.
  • Save salary statistics (median and percentiles by keyword and city, degree, seniority and poster type) computed from the jobs in the run.
  • Tell headhunter-posted jobs from jobs posted by the hiring company, and keep only one kind with a filter.
  • Turn on change tracking to get only new, updated, and removed jobs on a schedule, with the previous salary when it changed.
  • Flag the same company posting the same title in several cities.
  • Paste Liepin category, city or search links, including the links used by other Liepin scrapers. Search links run on the closest Liepin job category for their keyword, and the run tells you which one.
  • Add full job descriptions, work address and last update date for the runs that need them.

👥 Who this China jobs data is for

  • I am a workforce researcher looking to measure demand and advertised CNY compensation for professional roles in a Chinese city.
  • I am a job-data platform manager looking to add traceable public Liepin roles to a China jobs product.
  • I am a talent-intelligence analyst looking to identify companies, sectors, and locations hiring for a specialist role.
  • I am a market-research consultant looking to compare public role requirements and employer signals without manually reading result pages.

🛠️ How to use it

STEP 1
Choose keywords and cities
Add one or many job titles and cities, or paste Liepin links you already use.
STEP 2
Bound the run
Set a job limit, page depth, filters, and whether to add USD pay or job descriptions.
STEP 3
Use the evidence
Analyze source URLs, salary, requirement, and company fields in your own workflow.

📥 Input

FieldTypeRequiredDescription
scrapeModeenumNoSearch by keyword and city (default), featured jobs from the Liepin home page, or pasted Liepin links.
keywordsarrayNoJob titles in English or Chinese, such as python, product manager, nurse or 产品经理. Each is matched to a Liepin job category.
citiesarrayNoCity names such as Beijing, Shanghai or 杭州, Liepin city codes such as 010, or all for nationwide. Beijing when left empty.
startUrlsarrayNoLiepin links used in link mode. Category and city links run exactly as given. Search links run on the closest Liepin job category for their keyword, so results can differ from the site's own search, and the status message names the category used.
maxItemsintegerNoMost jobs returned across the run (default 25, up to 5,000). Free-plan runs are capped at 25.
pagesPerQueryintegerNoMost result pages per keyword and city. Each page holds up to 40 jobs.
postedByenumNoAnyone (default), hiring company only, or headhunter only.
onlyDisclosedSalarybooleanNoSkip jobs without a readable salary.
minMonthlySalaryCnyintegerNoKeep jobs whose top salary reaches this monthly amount.
excludeKeywordsarrayNoSkip jobs whose title or company contains any of these words.
dropCrossCityDuplicatesbooleanNoKeep only the first row when a company posts the same title in several cities.
fallbackToFeaturedJobsbooleanNoOff by default. When on, featured home page jobs are returned if nothing matched; they are labelled home-board and charged like any job.
convertToUsdbooleanNoAdd US dollar salary figures.
salaryStatisticsbooleanNoSave a SALARY_STATS record for the run (on by default).
salaryStatisticsMinSampleintegerNoFewest jobs with a salary needed to report a group.
includeSourceFieldsbooleanNoAdd a sourceFields object with the values as Liepin shows them.
includeJobDetailbooleanNoAdd description, full company name, work address, headcount and last update. Jobs whose page cannot be read are not returned or charged.
monitorModeenumNoSnapshot (default) or Track changes for new, updated and removed jobs.
stateNamestringNoWatchlist name for change tracking. Use a different name per keyword set or schedule.
includeUnchangedbooleanNoWith change tracking, also return unchanged jobs.
proxyConfigurationobjectNoLeave on automatic, or set your own proxy.

Earlier inputs keyword, city, and the urls, max_page and max_results inputs used by other Liepin scrapers are still accepted. Liepin's keyword search results page is not read; each keyword is matched to the closest Liepin job category instead, and English job titles are understood in several hundred common forms, and a keyword with no matching category ends the run with a clear message and suggestions.

📊 Data you receive

The Actor returns one flat record per public Liepin listing. A field is omitted or null when the source does not publish it.

Output example

One real row from a Python search in Beijing:

{
"jobId": "81069331",
"title": "Python 开发工程师(AI/Agent 方向)",
"companyName": "沃丰科技",
"salaryString": "23-50k",
"salaryPeriod": "month",
"minSalaryMonthlyCny": 23000,
"maxSalaryMonthlyCny": 50000,
"bonusMonths": 12,
"annualEstimateCny": 438000,
"salaryDisclosed": true,
"cityName": "北京",
"districtName": "西直门",
"experienceString": "2-10年",
"experienceEnglish": "2-10 Years",
"experienceMinYears": 2,
"experienceMaxYears": 10,
"degreeString": "本科",
"degreeEnglish": "Bachelor's",
"companyId": "8926847",
"companyIndustry": "计算机软件",
"companyScale": "500-999人",
"companyStage": "D轮及以上融资",
"companyUrl": "https://www.liepin.com/company/8926847/",
"jobKind": 2,
"postedByType": "employer",
"recruiterTitle": "集团招聘总监",
"recruiterName": "邵女士",
"listingUrl": "https://www.liepin.com/city-bj/career/python/",
"jobUrl": "https://www.liepin.com/job/1981069331.shtml",
"scrapedAt": "2026-11-11T03:55:17.547Z",
"sourceLabel": "search",
"categoryName": "Python",
"categorySlug": "python",
"searchKeyword": "python",
"searchCity": "北京",
"salaryMedianMonthlyCny": 36500,
"changeType": "SNAPSHOT"
}
FieldTypeDescription
jobIdstringSource job identifier.
titlestringPublished job title.
companyNamestring or nullPublished employer name.
salaryStringstring or nullOriginal salary text from the source.
minSalaryMonthlyCnynumber or nullLower monthly CNY amount when derivable from the source.
maxSalaryMonthlyCnynumber or nullUpper monthly CNY amount when derivable from the source.
bonusMonthsnumber or nullNumber of salary months published by the source.
annualEstimateCnynumber or nullAnnual CNY estimate when derivable from the source.
salaryDisclosedbooleanWhether the listing publishes salary information.
cityNamestring or nullPublished city.
districtNamestring or nullPublished district.
experienceStringstring or nullOriginal experience requirement.
experienceEnglishstring or nullEnglish experience label when mapped from the source.
experienceMinYearsnumber or nullMinimum required experience in years when parsed.
experienceMaxYearsnumber or nullMaximum required experience in years when parsed.
degreeStringstring or nullOriginal education requirement.
degreeEnglishstring or nullEnglish education label when mapped from the source.
companyIdstring or nullSource company identifier.
companyTypeStringstring or nullOriginal company-type label.
companyTypeEnglishstring or nullEnglish company-type label when mapped from the source.
companyIndustrystring or nullPublished company industry.
companyScalestring or nullPublished employer-size label.
companyUrlstring or nullPublic employer page when published.
jobKindnumber or nullSource poster-type code: 2 is the hiring company, 1 is a headhunting firm.
postedByTypestring or nullemployer for jobs posted by the hiring company, headhunter for jobs posted by a headhunting firm.
companyNameHiddenboolean or nulltrue when Liepin hides the company name (common on headhunter jobs); companyName is then omitted.
recruiterTitlestring or nullJob title of the poster, for example HR or a headhunter title.
recruiterNamestring or nullThe recruiter's surname and title in the short form Liepin shows on the listing, for example 邵女士 (Ms Shao). Never a full name, phone number or email. Omitted when the listing shows no name in that form.
salaryPeriodstring or nullmonth, year or day, as the source states the pay. Daily pay is converted to monthly at 21.75 working days.
salaryMedianMonthlyCnynumber or nullMidpoint of the monthly salary range.
salaryMedianMonthlyUsd, salaryMinMonthlyUsd, salaryMaxMonthlyUsd, annualEstimateUsdnumber or nullUS dollar figures when convertToUsd is on, with usdPerCny and usdRateDate.
seniorityLevelstring or nullLevel named in the job title (intern, junior, senior, lead, manager, director, vp, c_level); omitted when the title names none.
requiresFullTimeEnrolmentboolean or nulltrue when the degree requirement says 统招 (full-time enrolment).
companyStagestring or nullFunding stage shown on the listing, for example B轮 or 已上市.
categoryName, categorySlugstring or nullThe Liepin job category the keyword was matched to.
searchKeyword, searchCitystring or nullThe keyword and city this row was collected for.
crossCityDuplicate, crossCityDuplicateCities, crossCityDuplicateOfmixedSet when the same company posts the same title in several cities in the run.
previousSalaryString, salaryChangePctmixedWith change tracking, on an UPDATED job whose salary changed.
companyFullName, workAddress, headcount, lastUpdatedDate, daysSinceUpdated, recruiterActiveTextmixedAdded by includeJobDetail.
sourceFieldsobject or nullRaw values as Liepin shows them when includeSourceFields is on.
descriptionTextstring or nullPublic job-description text when includeJobDetail is on.
listingUrlstringLiepin page from which the row was collected.
jobUrlstringPublic source page for the job.
sourceLabelstring or nullsearch/urls for a keyword or link match, home for a featured-jobs run, or home-board when the optional fallback returned featured jobs (never a keyword match).
changeTypestring or nullWith change tracking on: NEW, UPDATED, UNCHANGED, or REMOVED. Otherwise SNAPSHOT.
firstSeenAtstring or nullWith change tracking on: when this job was first seen under this watchlist name.
lastSeenAtstring or nullWith change tracking on: when this job was last seen matching.
scrapedAtstringTime the record was collected.

💵 Pricing

This is a pay-per-result Actor. You pay for job rows returned to the dataset, with a lower price per row on higher Apify plans, and a small start charge per run. You are not charged for empty searches, blocked attempts, keywords that match no category, or rows whose requested job description could not be read. Salary statistics and the run summary are free. You can cap spending with the maximum total charge setting of the run. There is no subscription.

View the current usage price and free-test allowance on the Actor page.

⭐ Enjoying Liepin Scraper?

⭐ ⭐ ⭐ ⭐ ⭐
Found useful white-collar hiring data for your workflow?
A 5-star rating takes 10 seconds and helps other workforce researchers and job-data teams find it. Your feedback also tells us what to build next.
★  Rate this Actor on Apify

❓ FAQ

How do I run a 猎聘 search for a job title in Chinese or English?

Enter the job title in keywords, for example 产品经理, 数据分析师, java, data analyst, product manager or nurse, and add one or more cities. The Actor matches each keyword to the closest Liepin job category and returns the jobs listed there. If no category matches, the run ends cleanly, tells you, and suggests close categories.

猎聘有哪些职位数据可以导出 (what Liepin job data can I export)?

Title, company, salary in CNY with pay months, city and district, experience and degree, company industry, size and funding stage, poster type (hiring company or headhunter) and the link to each job. Turn on job detail for the description, full company name and work address.

Can I move from another Liepin scraper without changing my pipeline?

Yes. The urls, max_page and max_results inputs are accepted, including m.liepin.com search links, and includeSourceFields adds the values as Liepin shows them. Search links are not run as Liepin's own search page: the keyword in each link is matched to the closest Liepin job category and that category is collected, so results can differ from the site's search results. The run status message says which category each link used, and a keyword that is not a job category (for example a country name) returns a clear message instead of rows.

What happens if Liepin blocks a request?

The run finishes without an error and charges nothing for rows it could not collect. It retries automatically with a different connection first. The status message says whether Liepin had no matching jobs, could not be reached, or showed an access check, so a blocked run is never shown as an empty search. Rows already collected are kept.

How does change tracking decide a job was removed?

A job is reported REMOVED only after two consecutive complete scans confirm it is gone. A scan that stopped at your job or page limit, or could not read a page, never removes anything.

Does this Liepin scraper collect candidate profiles or private contacts?

No. It is for public job listings, salaries, requirements, and employer context. It does not collect candidate profiles or private contact information. For the recruiter it returns only what the listing shows in short form, a surname with a title such as 邵女士, plus the recruiter's job title. Full names, phone numbers and email addresses are never collected.

⚖️ Responsible use

Use public employment data in line with the source terms, applicable law, and your organization’s privacy obligations. Do not use the output to make decisions about individual candidates.

🛟 Support

For a reproducible issue, include the keywords and cities or the Liepin link, selected mode, approximate run time, and the run ID. That provides enough context to inspect the source response.

🔗 Other actors