Cian RU at a glance
Cian RU is a ready-to-run Apify actor from abotapi for collecting real estate data. Its documented output includes id, url, title, price and pricevalue, which you can export as JSON, CSV or Excel or read through the Apify API. It costs $2.20 per 1,000 results on the Apify Free plan and from $1.50 on paid plans, with smaller per-run or optional feature charges listed on Apify.
- Runs on
- Apify cloud: console, API, schedules and integrations
- Data type
- Real Estate, Developer Tools, Automation
- Region
- Europe
- Pricing
- $2.20 per 1,000 results (Free plan), from $1.50 on paid plans
- Output
- Documented below · JSON, CSV, Excel
- Inputs
- 45 options
Collect property listings from Cian.ru by search filters or direct URLs. Returns structured rows with listing URL, title, price, address, rooms, area, floors, photos, visible contact fields, coordinates when available, and optional detail-page enrichment.
What Cian RU can do
- Two ways in. Search by location and filters, or paste Cian search result URLs directly.
- Every row comes ready to use. Price, address, rooms, area, floor, coordinates, photos, description and contact phone numbers are included on every saved listing, no extra step.
- An optional detail step. Turn on Fetch listing details for fields that only live on the listing page itself: agent and agency identity, a running view count, BTI-verified build year, renovation type, and more.
- Covers the whole market. Flats, rooms, houses, new buildings, and commercial categories, for sale or for rent.
- Built for monitoring. Resume one interrupted crawl, or track a saved search across a schedule and get back only what changed.
- A power-user escape hatch. Pass Cian's own raw filter fields when the built-in filters aren't enough.
Choose what to collect
These inputs let you configure Cian RU - Property Listings, Search Filters & URLs. Open the actor on Apify to enter your values and review the current options.
| Input | What it controls |
|---|---|
modestring · required | Choose search filters or direct listing/search URLs. |
maxItemsinteger · required | Maximum matching rows to save. Fewer rows can be returned when the selected source and filters match fewer live records. |
urlsarray | Cian listing URLs or search-result URLs. Used only in URL mode. Encode any filters directly in the URL, because the search filters below are ignored in URL mode. |
locationstring | Search mode only. Type a city name (Москва, Санкт-Петербург, Казань). It is resolved through the site's own city pages; the run stops with a clear error when no city matches. |
regionIdinteger | Search mode only. Optional Cian region ID. Moscow is 1, Saint Petersburg is 2. Leave empty to resolve from Location when possible. |
operationTypestring | Search mode only. Deal type for search mode. |
categorystring | Search mode only. Listing category. Choose Any to let operation and property type decide. |
Show 38 more inputs
| Input | What it controls |
|---|---|
sortstring | Search mode only. Sort results when supported by the selected source. |
roomsarray | Search mode only. Room counts for flats and rooms. |
includeStudioboolean | Search mode only. Include studio listings together with selected room counts. |
minPriceinteger | Search mode only. Minimum price in rubles. |
maxPriceinteger | Search mode only. Maximum price in rubles. |
minAreainteger | Search mode only. Minimum total area in square meters. |
maxAreainteger | Search mode only. Maximum total area in square meters. |
minFloorinteger | Search mode only. Minimum floor. |
maxFloorinteger | Search mode only. Maximum floor. |
minFloorsinteger | Search mode only. Minimum floors in the building. |
maxFloorsinteger | Search mode only. Maximum floors in the building. |
minLivingAreainteger | Search mode only. Minimum living area in m2. |
maxLivingAreainteger | Search mode only. Maximum living area in m2. |
minHouseYearinteger | Search mode only. Earliest building year. |
maxHouseYearinteger | Search mode only. Latest building year. |
minCeilingHeightnumber | Search mode only. Minimum ceiling height in metres. |
maxCeilingHeightnumber | Search mode only. Maximum ceiling height in metres. |
isByHomeownerboolean | Search mode only. Only listings placed by the owner. |
fromDeveloperboolean | Search mode only. Only listings placed by the developer. |
isFirstFloorboolean | Search mode only. Only first-floor listings. |
notLastFloorboolean | Search mode only. Exclude top-floor listings. |
hasVideoboolean | Search mode only. Only listings with a video. |
withLayoutboolean | Search mode only. Only listings with a layout drawing. |
shortTermRentboolean | Search mode only. With operation Rent, only daily-rental listings. |
repairarray | Search mode only. Cian renovation codes (1 none, 2 cosmetic, 3 euro, 4 designer). |
publishPeriodstring | Search mode only. Only listings published in this window. |
advancedFiltersobject | Search mode only. Raw Cian query objects merged into the search, e.g. {"repair":{"type":"terms","value":[2,3]}}. For power users who know Cian's query field names. |
maxPagesinteger | No page limit when set to 0. The run stops at Max items. |
fetchDetailsboolean | Load each saved listing's own detail page for richer fields not on the search card: agent/agency name, total view count, BTI-verified build year, renovation type, window view, balcony count, bathroom counts, parking type, and amenities. Billed as a detail-enrichment surcharge. |
resumeFromRunIdstring | Continue ONE interrupted crawl: paste a previous run ID (or dataset ID) and this run skips listings it already saved, appending only new ones. For recurring monitoring of the SAME search across scheduled runs instead, use Incremental mode below. |
incrementalModeboolean | Remember this search's results between scheduled runs and report only what changed (NEW / UPDATED / REAPPEARED / EXPIRED) instead of re-saving everything every time. Distinct from Resume from run above, which continues one specific interrupted crawl rather than tracking a recurring search. |
stateKeystring | Incremental mode only. Optional manual key identifying this tracked search. Leave empty to derive one automatically from mode/filters/URLs, so identical searches share a baseline and different ones never mix. |
emitUnchangedboolean | Incremental mode only. Also save and CHARGE for listings that did not change since the last run. Off by default so recurring runs only pay for what actually changed. |
emitExpiredboolean | Incremental mode only. Also save and CHARGE a row for previously-tracked listings no longer found, marked changeType EXPIRED. Only fires after a run that scanned the full tracked search with no cap, resume, or unreadable URL truncating it early. |
ignoreFieldsForChangesarray | Incremental mode only. Field names that must NOT count as a change, e.g. imageUrls or description (dotted paths such as a.b reach nested fields). The fields stay in every saved row; they are only left out of the NEW/UPDATED comparison, so a change in them alone never produces an UPDATED row. scrapedAt and addedLabel are always ignored. Price, area, address and the other listing fields are compared unless listed here. |
mcpConnectorsarray | Optionally send the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize a connector once under Apify → Settings → Integrations, then select it here. The connector receives a condensed, human-readable summary per item (title + key fields), not the full JSON. The complete record stays in the dataset. Leave empty to skip. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com). |
notionParentPageUrlstring | URL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors. |
maxNotifyListingsinteger | Maximum saved records to export to selected MCP connectors. |
Fields in the output
The documented dataset includes the fields below. Availability can depend on the source page and selected mode.
idID (text)urlURL (link)titleTitle (text)pricePrice (text)priceValuepriceValueaddressAddress (text)roomsCountRooms (number)totalAreaArea (number)floorNumberFloor (number)floorsCountFloors (number)dealTypedealTypecategorycategoryShow 23 more fields
agentNameAgent (text)agentCompanyNameAgency (text)phoneNumbersPhones (array)latitudeLatitude (number)longitudeLongitude (number)imageUrlsImages (array)viewsTotalViews (number)houseBuildYearBuild year (BTI) (number)repairTypeRenovation (text)detailStatusDetail (text)scrapedAtScraped (date)changeTypeChange (text)changedFieldsChanged fields (array)firstSeenAtFirst seen (date)lastSeenAtLast seen (date)creationDatecreationDateformattedFullInfoformattedFullInfomainImagemainImageagentagentgeogeositeUrlsiteUrlformattedAddressformattedAddressformattedFullPriceformattedFullPriceExample output
An example from this actor’s documentation. Values are illustrative; this is not a fresh live result.
{
"id": 123456789,
"url": "https://www.cian.ru/sale/flat/123456789/",
"sourceUrl": "https://www.cian.ru/sale/flat/123456789/",
"title": "2-комн. кв., 54 м², 5/9 эт.",
"jkName": null,
"price": "12 500 000 ₽",
"priceValue": 12500000,
"pricePerMeter": 231481,
"currency": "rur",
"address": "Москва, Пресненский р-н, ул. Ленина, 10",
"district": "Пресненский",
"metro": "Баррикадная",
"metroTime": 7,
"metroLineId": 3,
"metroLineColor": "00701A",
"roomsCount": 2,
"totalArea": 54,
"livingArea": 32,
"kitchenArea": 10,
"floorNumber": 5,
"floorsCount": 9,
"buildYear": 2015,
"materialType": "monolith",
"dealType": "sale",
"category": "flatSale",
"offerType": "flat",
"isFromDeveloper": false,
"isPremium": false,
"isApartments": false,
"phoneNumbers": [
"+79991234567"
],
"latitude": 55.7601,
"longitude": 37.6103,
"description": "Просторная квартира с ремонтом, рядом метро",
"imageUrls": [
"https://img.cian.site/a.jpg",
"https://img.cian.site/b.jpg"
],
"mainImage": {
"full": "https://img.cian.site/a.jpg"
},
"siteUrl": "https://www.cian.ru/sale/flat/123456789/",
"formattedAddress": "Москва, Пресненский р-н, ул. Ленина, 10",
"formattedFullPrice": "12 500 000 ₽",
"ceilingHeight": 2.8,
"agent": {
"userId": 141493134,
"accountType": "agency",
"agencyName": "Компания PIONEER",
"isAgent": true,
"isBuilder": true
},
"geo": {
"coordinates": {
"lat": 55.7601,
"lng": 37.6103
}
},
"creationDate": "2026-09-20T10:00:00+03:00",
"addedLabel": "вчера, 14:40",
"scrapedAt": "2026-09-28T08:00:00.000Z"
}Ways to use this data
- Real estate agencies and brokers: build and refresh a listings feed for a market segment, building complex, or client search.
- Price and market research: track price per square meter, floor, and room count trends across districts and cities.
- Property investment monitoring: watch a saved search over time and get back only the new, updated, or delisted properties.
- Lead generation and outreach: collect agent and agency names alongside contact phone numbers and listing details.
Before you run
Start with a small input and check the resulting records against your expected fields. Source content and actor options can change; the current Apify listing is the reference for availability and pricing.
Questions about this actor
What data does Cian RU return?
The documented output for Cian RU includes id, url, title, price, pricevalue, address, rooms and area. Availability of each field depends on the source page and the selected mode.
How much does Cian RU cost?
It costs $2.20 per 1,000 results on the Apify Free plan and from $1.50 on paid plans, with smaller per-run or optional feature charges listed on Apify. The Apify listing shows the current rate for every plan.
Can I get only new or changed listings on a schedule?
Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. Each run then classifies every listing as new, updated, unchanged, reappeared, or expired against the previous run of the same search, and unchanged listings are not billed unless you turn that on too.
What is the difference between Resume from run and Incremental mode?
Resume from run continues ONE specific interrupted crawl: it skips listing ids already saved in a past run's dataset so that run can finish without duplicates. Incremental mode is for a recurring, scheduled search: it keeps its own state between separate runs and reports what changed each time. They can combine to bootstrap a monitoring baseline from an interrupted crawl's dataset, but not once that baseline already has tracked listings, in which case the run stops with a message asking you to remove Resume from run or set a different State key.
Why did my run fail instead of returning an empty dataset?
A run fails when it cannot read the site at all after several attempts, when none of the pasted URLs could be read, or when the search matched no listings whatsoever, since the actor treats a completely empty result as indistinguishable from a blocked run and stops with a clear message rather than guessing. Run it again, try broader filters, or try a different region. The one case where a successful run can still save nothing is Incremental mode finding every previously tracked listing unchanged.
Can I use it with AI agents or MCP?
Yes. Call it from any Apify integration or MCP client, and use the connector field to push results into Notion, Linear, Airtable, or Apify.
