Cian APIcian.ru ↗
Search Moscow apartment listings on cian.ru by district, price range, rooms, and sort order. Returns price, area, metro, floor, coordinates, and building info.
What is the Cian API?
The cian.ru API exposes one endpoint — search_apartments — that returns paginated Moscow apartment-for-sale listings with 10+ structured fields per offer, including price, area, room count, floor, address, metro station, and GPS coordinates. Filter by district using cian.ru internal IDs, set a ruble price range, specify room counts (including studios as 9), and sort results to match your query requirements.
curl -X GET 'https://api.parse.bot/scraper/4b71aac9-2dd8-49f4-936e-f3b3b675ad71/search_apartments?page=1&sort=default&rooms=2&district=11&max_price=120000000&min_price=30000000' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace cian-ru-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: Cian SDK — bounded, re-runnable; every call capped."""
from parse_apis.cian_ru_api import Cian, Sort, InvalidInput
client = Cian()
# Search apartments in Western Moscow (ЗАО), sorted by price ascending
for apt in client.apartments.search(district="11", min_price="30000000", max_price="120000000", sort=Sort.PRICE_ASC, limit=3):
print(apt.title, apt.price, apt.total_area, apt.metro_station)
# Get the cheapest apartment for inspection
cheapest = client.apartments.search(district="11", min_price="30000000", max_price="50000000", sort=Sort.PRICE_ASC, limit=1).first()
if cheapest:
print(cheapest.address, cheapest.floor, cheapest.floors_total, cheapest.building_type)
# Handle invalid input gracefully
try:
for apt in client.apartments.search(district="11", limit=1):
print(apt.id)
except InvalidInput as e:
print(f"invalid input: {e}")
print("exercised: apartments.search")
Search apartments for sale in Moscow. Returns paginated listings with price, area, rooms, floor, address, metro station, coordinates, and building info. Results are auto-iterated across pages (28 listings per page). The district filter uses cian.ru internal IDs (e.g. 11 = ЗАО/Western, 13 = ЦАО/Central).
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination (1-based). |
| sort | string | Sort order for results. |
| rooms | string | Comma-separated room counts to filter by (e.g. '1,2,3'). Studio = 9. |
| district | string | District (округ) ID on cian.ru. Known IDs: 11 = ЗАО (Western), 13 = ЦАО (Central), 12 = САО (Northern), 325 = НАО (Новомосковский). Omitting searches all Moscow. |
| max_price | string | Maximum price in rubles (e.g. 120000000 for 120 million). |
| min_price | string | Minimum price in rubles (e.g. 30000000 for 30 million). |
{
"type": "object",
"fields": {
"page": "current page number",
"total": "total number of matching listings across all pages",
"offers": "array of apartment listing objects with id, url, title, price, area, rooms, floor, address, metro, coordinates, building info",
"per_page": "number of listings per page (28)"
},
"sample": {
"data": {
"page": 1,
"total": 6550,
"offers": [
{
"id": 330002778,
"url": "https://www.cian.ru/sale/flat/330002778/",
"added": "15 май, 15:58",
"floor": 3,
"price": 30000000,
"title": "2-комн.кв. · 3/14 этаж",
"address": "Россия, Москва, улица Красных Зорь, 23",
"category": "flatSale",
"district": "ЗАО",
"flat_type": "rooms",
"build_year": 2023,
"decoration": null,
"total_area": 55.5,
"coordinates": {
"lat": 55.724601,
"lng": 37.43463
},
"living_area": 32,
"rooms_count": 2,
"floors_total": 14,
"kitchen_area": 10.5,
"neighborhood": null,
"building_type": null,
"is_apartments": false,
"metro_station": "Кунцевская",
"price_per_sqm": 540541
}
],
"per_page": 28
},
"status": "success"
}
}About the Cian API
What the API Returns
The search_apartments endpoint queries Moscow apartment-for-sale listings on cian.ru and returns a paginated result set. Each response includes page (current page), total (total matching listings across all pages), per_page (fixed at 28), and an offers array. Each object in offers contains the listing id, a direct url, a title, the asking price in rubles, area in square meters, rooms count, floor, full address, nearest metro station, geographic coordinates, and building metadata.
Filtering and Pagination
The district parameter accepts cian.ru internal district (округ) IDs — for example, 11 for ЗАО (Western), 13 for ЦАО (Central), 12 for САО (Northern), and 325 for НЗАО (New Western). Price bounds are set in rubles via min_price and max_price (e.g. 30000000 for 30 million RUB). Room counts are passed as a comma-separated string in the rooms parameter; studios use the value 9. The page parameter is 1-based for straightforward iteration across result sets. The sort parameter lets you order results by relevance, price, or other available orderings.
Coverage and Scope
All listings reflect Moscow residential apartments listed for sale on cian.ru. The total field in each response tells you how many listings match your filters across all pages, so you can calculate page depth before iterating. Metro station data and GPS coordinates are included at the listing level, making the results usable for distance-based or map-driven analysis without a separate geocoding step.
The Cian API is a managed, monitored endpoint for cian.ru — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when cian.ru changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official cian.ru API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a Moscow property price heatmap using coordinates and price fields from search_apartments
- Track median asking prices per district over time by iterating all pages for each district ID
- Filter listings by rooms and max_price to surface affordable apartments within a specific округ
- Compare price-per-square-meter across districts using area and price fields
- Identify listings near a specific metro station using the metro and coordinates fields
- Aggregate total listing counts per district to measure market supply across Moscow neighborhoods
- Alert users when new listings appear that match a saved rooms + price range + district combination
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does cian.ru have an official developer API?+
How does district filtering work, and where do I find valid district IDs?+
district parameter takes cian.ru's internal округ (administrative district) IDs as integers. Known mappings include 11 = ЗАО (Western), 12 = САО (Northern), 13 = ЦАО (Central), and 325 = НЗАО (New Western). These IDs correspond to Moscow's administrative divisions as used by cian.ru internally. Pass a single ID per request to scope results to that district.Does the API cover rental listings or properties outside Moscow?+
Can I retrieve sold or historical listing data?+
What is the fixed page size and how do I retrieve all results?+
per_page: 28) and includes a total count. Divide total by 28 and round up to determine the number of pages to iterate. Use the page parameter (1-based) to step through them.