Lianjia Scraper: Resale Listings, Price, Community
Pricing
from $1.49 / 1,000 property listings
Lianjia Scraper: Resale Listings, Price, Community
Scrape Lianjia (链家) resale listings across 12 major Chinese cities. Get total price, price per sqm, community, area, and layout. Perfect for Excel, Google Sheets, or any BI tool. Skip manual copy-pasting or expensive broker fees. $2.50 per 1,000 results.
Pricing
from $1.49 / 1,000 property listings
Rating
5.0
(1)
Developer
GetAScraper
Maintained by CommunityActor stats
0
Bookmarked
22
Total users
1
Monthly active users
4.3 hours
Issues response
2 days ago
Last modified
Categories
Share
🏠 Lianjia Scraper: Resale Listings, Price, Community
| Two independent reads on China's property market. Lianjia Scraper and 58.com Scraper each track a different Chinese property portal, so you can cross-check coverage and pricing instead of relying on one source. | |
| CHINA REAL ESTATE PORTALS Two independent Chinese property portals, cross-checked side by side. | |
|
➤ You are here |
Decrypted CNY prices and direct landlord contacts. |
|
China property price data across 12 cities, ready for your spreadsheet in minutes Pull public resale listings, community averages, and price-change events from Lianjia (链家) and Beike. Twelve major Chinese metros covered. No login, no API key. |
|
🏙️ 12 Chinese cities Beijing, Shanghai, Shenzhen, and 9 more metros in a single verified dropdown. |
🔔 Change detection Detect new listings, price changes, and removed properties across scheduled runs. |
📐 Source-backed filters Filter by district, price range, bedrooms, area, and listing age before results land. |
🏘️ Three operations Listing cards, full property detail, and community neighborhood stats in one actor. |
Lianjia (链家) is China's leading real estate platform, operated by KE Holdings alongside Beike (贝壳找房). This actor pulls public resale housing (二手房) records and community market data for 12 major Chinese cities. No login, no API key required.
🔍 What does Lianjia Source Monitor do?
The actor fetches structured property data from the public Lianjia and Beike desktop pages and saves every record to the Apify dataset. Three operations cover the main research workflows:
- Resale Housing List: walk paginated listing cards by city. 30 rows per page, up to 100 pages per run.
- Resale Housing Detail: fetch one full property record by listing code or detail URL.
- Community List: walk neighborhood cards with average unit prices and on-sale inventory counts.
Turn on change detection to compare each run against the previous one. The actor reports new listings, price changes, and removed records so you only review what actually moved.
👥 Who is this for
- I am a China property market analyst building city-level and neighborhood-level price maps across Beijing, Shanghai, Shenzhen, and 9 other metros. I need clean per-㎡ prices, area, and bedroom counts delivered to my dashboard on schedule.
- I am a cross-border real estate investor comparing China resale housing against my other property datasets. I need a consistent schema and a pay-per-result cost model that fits my research budget.
- I am a proptech builder training an automated valuation model. I need average unit price per community plus on-sale inventory counts to feed my comps engine.
- I am a real estate data operator pulling fresh listings every morning for brokerage or relocation outreach. I need a public mobile URL I can hand to my team with each record.
🚀 How to use
|
STEP 1 Pick your city and operation Choose from 12 verified Chinese cities and select listing list, property detail, or community stats. Or paste a Beike URL directly. |
STEP 2 Apply filters and set limits Narrow by district, price, bedroom count, and floor area. Set max pages to control how many rows come back. |
STEP 3 Export or schedule Download JSON, CSV, or Excel from the dataset tab, or schedule repeat runs to track what changed. |
For the Detail operation, paste a detail URL as a start URL or use the Listing House Code field with a numeric code, for example 101137699747.
📥 Input
| Field | Type | Required | Description |
|---|---|---|---|
startUrls | array of URLs | No | Optional Lianjia or Beike URLs: a resale search, a detail page, or a community page. Unknown city subdomains return an explicit error row. |
operation | enum | Yes | Resale Housing List returns listing cards, Resale Housing Detail returns one property record, Community List returns neighborhood cards. |
cityId | enum | No | Verified city dropdown (12 cities). Ignored when startUrls is set. Unknown IDs are reported as UNSUPPORTED_CITY rather than silently mapped. |
houseCode | string | For Detail | Numeric listing ID (10-20 digits). Required for Detail when no detail start URL is supplied. |
maxPages | integer | No | Pages to fetch for list operations. 30 rows per page. Range 0-100, default 1. |
maxItems | integer | No | Maximum records returned after filters. Range 1-10,000, default 10,000. When capped, removal detection is disabled for that run. |
district | string | No | Exact district label as shown on the source listing card. Records without a source district do not match this filter. |
districts | array | No | Multiple exact district labels. A record matches if its source district equals any value in the list. |
minPriceTotal | number | No | Minimum total price in 万 (10,000 RMB). |
maxPriceTotal | number | No | Maximum total price in 万 (10,000 RMB). |
minUnitPrice | number | No | Minimum price per ㎡ in yuan. |
maxUnitPrice | number | No | Maximum price per ㎡ in yuan. |
minPricePerSqm | number | No | Alias for minimum price per ㎡. Interchangeable with minUnitPrice. |
maxPricePerSqm | number | No | Alias for maximum price per ㎡. Interchangeable with maxUnitPrice. |
rooms | array | No | Exact bedroom counts to include, for example [2, 3]. Matches any value in the array. |
minRooms | integer | No | Minimum bedroom count. |
maxRooms | integer | No | Maximum bedroom count. |
minArea | number | No | Minimum floor area in ㎡. |
maxArea | number | No | Maximum floor area in ㎡. |
minFreshnessDays | number | No | Minimum listing age in days, read from explicit source labels such as 2天前. |
maxFreshnessDays | number | No | Maximum listing age in days. Only explicit source age labels apply; unknown freshness does not match. |
sortBy | enum | No | Sort field: houseCode (default), communityId, priceTotal, unitPrice, area, bedroomNum, freshnessDays, avgUnitPrice, onSaleCount. |
sortOrder | enum | No | Sort direction: asc (default) or desc. |
monitorMode | enum | No | snapshot (default) returns all current records each run. changes returns only records that differ from the previous run of the same scope. |
monitorScope | string | No | Scope label for change tracking. Reuse the same label across scheduled runs to compare each run against the previous one. |
includeUnchanged | boolean | No | In changes mode, also emit records classified as UNCHANGED. Default: false. |
includeOpportunityScore | boolean | No | Add a relative opportunity score to each result. Only computed when source fields have a measurable range in the returned cohort. Default: false. |
proxyConfiguration | proxy | No | Residential proxy is on by default. The source rate-limits repeated requests from the same IP. |
Example: Beijing resale listing search
{"operation": "resaleHousingList","cityId": "110000","maxPages": 5}
Example: custom pre-filtered search
{"startUrls": [{ "url": "https://bj.ke.com/ershoufang/chaoyang/p3/" }],"maxPages": 5}
Example: monitor for price changes
{"operation": "resaleHousingList","cityId": "110000","monitorMode": "changes","monitorScope": "beijing-chaoyang-monitor"}
📤 Output
Every resale row includes a public mobile URL pointing to the live m.ke.com listing so you can verify the data in one click.
Resale Housing List row
{"_operation": "resaleHousingList","status": "success","houseCode": "101133627586","listingTitle": "此房是南北通透三居室,满五唯一","communityName": "加州水郡四期","districtName": "朝阳","priceTotal": 179,"priceTotalDisplay": "179 万","unitPrice": 19551,"unitPriceDisplay": "19,551元/平","area": 91.56,"bedroomNum": 3,"hallNum": 1,"orientation": "南","yearBuilt": "2011年","decoration": "","followInfo": "225人关注 / 8月前发布","freshnessDays": 240,"agentName": "","cityId": "110000","cityName": "北京","subdomain": "bj","listingUrl": "https://m.ke.com/bj/ershoufang/101133627586.html","scrapedAt": "2026-06-12T04:34:18.741Z"}
Resale Housing Detail adds floorState, buildingType, elevator, ownership, publishTime, and tags[].
Community List row adds communityId, avgUnitPrice, avgUnitPriceDisplay, onSaleCount, and buildYear.
When monitorMode is changes, each row also carries changeType, changedFields, firstSeenAt, and lastSeenAt.
Download the dataset as JSON, HTML, CSV, or Excel from the Apify dataset tab.
📊 Data table
| Field | Type | Description |
|---|---|---|
_operation | string | Which operation produced this row: resaleHousingList, resaleHousingDetail, or communityList. |
status | string | success for a clean row, error for an explicit failure row. |
errorCode | string | Error code when status is error. |
errorMessage | string | Human-readable error description when status is error. |
sourceUrl | string | The source URL this row was fetched from. |
inputId | string | Identifies the input run that produced this row. |
retrievedAt | string | ISO 8601 timestamp when the source page was fetched. |
changeType | string | Change event in monitor mode: NEW, UPDATED, PRICE_CHANGED, REMOVED, REAPPEARED, or UNCHANGED. |
changedFields | array | Field names that changed since the previous run. Present in changes mode only. |
firstSeenAt | string | ISO 8601 timestamp when this record was first seen by the monitor. |
lastSeenAt | string | ISO 8601 timestamp when this record was last observed before a REMOVED event. |
houseCode | string | Beike listing ID, for example 101133627586. |
listingTitle | string | Public listing title in Chinese. |
communityName | string | Community or neighborhood name (小区). |
districtName | string | District name as shown on the source listing card. |
priceTotal | number | Total price in 万 (10,000 RMB). For example 179 means ¥1,790,000. |
priceTotalDisplay | string | Formatted total price string, for example 179 万. |
unitPrice | number | Price per ㎡ in RMB. |
unitPriceDisplay | string | Formatted unit price string, for example 19,551元/平. |
area | number | Floor area in ㎡. |
bedroomNum | number | Number of bedrooms. |
hallNum | number | Number of halls or living rooms. |
orientation | string | Building orientation, for example 南 or 西南. |
yearBuilt | string | Year built, for example 2011年. |
decoration | string | Decoration level, for example 毛坯, 简装, or 精装. |
followInfo | string | Raw engagement and publication age string from the source listing. |
freshnessDays | number | Listing age in days, parsed from explicit source age labels. |
publishedAt | string | Publication timestamp parsed from the source listing. |
agentName | string | Public listing agent name when shown on the source page. |
cityId | string | Beike city ID, for example 110000. |
cityName | string | City name in Chinese, for example 北京. |
subdomain | string | Beike subdomain, for example bj or sh. |
listingUrl | string | Public mobile URL on m.ke.com for this listing. |
communityUrl | string | Public URL for the community page. |
scrapedAt | string | ISO 8601 timestamp when the scrape ran. |
floorState | string | (Detail only) Floor position and total floors, for example 中楼层/共23层. |
buildingType | string | (Detail only) Building structure, for example 板楼 or 塔楼. |
elevator | string | (Detail only) Elevator presence: 有电梯 or 无电梯. |
ownership | string | (Detail only) Property ownership type. |
publishTime | string | (Detail only) Listing publication timestamp from the source. |
tags | array | (Detail only) Highlight tags from the source listing page. |
communityId | string | (Community only) Beike community ID. |
avgUnitPrice | number | (Community only) Average unit price per ㎡ in RMB. |
avgUnitPriceDisplay | string | (Community only) Formatted average unit price string. |
onSaleCount | number | (Community only) Number of active listings in this community. |
buildYear | string | (Community only) Year the community was built. |
opportunityScore | number | Relative opportunity score when includeOpportunityScore is enabled. Only present when the cohort has a measurable value range. |
scoreBreakdown | object | Score component breakdown when includeOpportunityScore is enabled. |
💰 Pricing
Pricing is pay per result. You are charged only for records successfully written to your dataset. Empty runs cost nothing. There are no monthly subscriptions or minimum commitments.
⭐ Enjoying Lianjia Source Monitor?
|
⭐ ⭐ ⭐ ⭐ ⭐ This actor turns a day of manual Lianjia browsing into a clean pricing dataset delivered in minutes. A 5-star rating takes 10 seconds and helps other China property market analysts find it. Your feedback also tells us what to build next. |
| ★ Rate this Actor on Apify |
❓ FAQ
链家二手房数据怎么获取?
Point the actor at your target city using the city dropdown, choose Resale Housing List, set a page limit, and click Run. Results land in the Apify dataset within minutes, ready to export as JSON, CSV, or Excel. No login or API key needed.
链家支持哪些城市?
The actor covers 12 major cities: Beijing (北京), Shanghai (上海), Guangzhou (广州), Shenzhen (深圳), Hangzhou (杭州), Chengdu (成都), Nanjing (南京), Wuhan (武汉), Xi'an (西安), Tianjin (天津), Chongqing (重庆), and Shenyang (沈阳). Paste a Beike URL from any other city as a custom start URL to reach additional metros.
Does it get blocked?
The Lianjia and Beike desktop pages rate-limit repeated requests from the same IP. The actor routes every request through Apify Residential proxy by default, which rotates IPs per call and keeps pagination stable across full runs.
How fresh is the data?
Each row reflects a live scrape of the public listing page. There is no cached data layer between you and the source. Every row carries a scrapedAt ISO 8601 timestamp so you know exactly when it was pulled.
Does it extract agent phone numbers?
No. Phone reveal on Lianjia requires an authenticated session and is outside the scope of publicly visible data. The actor returns the agent's display name when it appears on the public listing page.
Which fields track price changes?
Turn on changes mode and set a monitorScope label. Each run after the first compares records against the previous run of the same scope. Changed records carry a changeType of NEW, PRICE_CHANGED, UPDATED, REMOVED, or REAPPEARED, plus a changedFields list showing exactly what moved.
💡 Tips
- Schedule daily runs with the same
monitorScopeto track price movement and inventory depth over time. - Use the Detail operation for a short list of known listing codes to pull the full property record in one call each.
- Dedupe by
houseCodewhen stitching results across multiple runs. Fresh listing codes are guaranteed unique. - Filter early with
district,minPriceTotal, andmaxPriceTotalso you only pay for rows you actually need. - Combine List and Community runs to cross-reference per-property prices against neighborhood averages in the same dataset.
⚖️ Legal compliance
This actor extracts only data that is publicly visible on the public Lianjia and Beike desktop search and detail pages. Users must comply with Lianjia's terms of service, Chinese PIPL, GDPR, and CCPA where applicable. Beike and Lianjia are trademarks of KE Holdings Inc. This is an independent 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 city additions. We respond within 48 hours.
🔗 Other actors
- 🏠 58.com Scraper: Extract China Real Estate ↗ - a second, independent China property portal with decrypted CNY prices and direct landlord contacts.
- 🏘️ Etagi Real Estate Scraper: Парсер Этажи ↗ - pulls Russian residential listings from Etagi with price, floor plan, and agent data.
- 🏠 Yandex Realty Scraper: Яндекс Недвижимость ↗ - collects Russian apartment and house listings from Yandex Nedvizhimost.
- CIAN Real Estate Scraper: Недвижимость ЦИАН ↗ - extracts Russian property listings from CIAN with price, area, and district data.
- 🏢 CommercialRealEstate.com.au scraper: prices, agents, and deal status ready for your spreadsheet ↗ - gathers Australian commercial property listings with asking prices, build area, and agent contacts.