# Krisha.kz Scraper — Kazakhstan Real Estate Listings (`yadroo/krisha-kz`) Actor

Krisha.kz real-estate listings for analysts, agencies and AI agents: apartments, houses, commercial, land for sale or rent in Almaty, Astana, Shymkent, any city or district of Kazakhstan.

- **URL**: https://apify.com/yadroo/krisha-kz.md
- **Developed by:** [Samat Makatov](https://apify.com/yadroo) (community)
- **Categories:** Real estate, Lead generation, Automation
- **Stats:** 1 total users, 1 monthly users, 100.0% runs succeeded, 2 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 listing scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Krisha.kz Scraper — Kazakhstan real estate listings

Structured listings from **krisha.kz**, the #1 real-estate marketplace of Kazakhstan: apartments, houses, commercial property, land and garages — for sale or rent — in Almaty, Astana, Shymkent, any city, region or district. Every krisha.kz filter is available (price, area, floor, year built, building type, owner-only, new buildings, furniture, pets…), each item comes with price per m², seller type, publish date and view count, and `detail: true` adds full description, all parameters, GPS coordinates and photos. Built for analysts, agencies, developers, banks and AI agents.

No proxies, no browser, no API key — plain HTTP, cheap and fast.

### Use cases

- **Lead generation for agencies** — `ownerOnly: true` + your district: fresh owner-posted apartments every hour (`sinceHours: 1`), with phone-free contact through the listing URL.
- **Price monitoring / market reports** — pull 1 000 listings of 2-room apartments in Almaty weekly, compute median `pricePerM2` by `district`, `yearBuilt`, `buildingType`.
- **Investment screening** — `newBuildingOnly` + `mortgageAvailable` + `yearFrom: 2020`, rank by `views` to see what the market is looking at.
- **Rental yield analysis** — run once for `prodazha` and once for `arenda` on the same complex (`complexId`) and divide.
- **Commercial real estate sourcing** — `kommercheskaya-nedvizhimost` with `commercialUse: "warehouse"`, `withTenants: true` (income-producing assets).
- **Developer competitive intel** — `seller: "developer"` items reveal which complexes are actively marketed, at what ₸/m².

### Input

All fields are optional. Location and type fields mirror the krisha.kz URL: `https://krisha.kz/{dealType}/{propertyType}/{city}/`.

| Field | Type | Default | Allowed values / notes |
|---|---|---|---|
| `dealType` | string | `prodazha` | `prodazha` (sale), `arenda` (rent) |
| `propertyType` | string | `kvartiry` | `kvartiry`, `doma-dachi`, `komnaty`*, `kvartiry-posutochno`*, `kvartiry-po-chasam`*, `doma-dachi-posutochno`*, `kommercheskaya-nedvizhimost`, `biznes`\*\*, `prombazy`, `uchastkov`, `garazhi`, `zarubezhnoj-nedvizhimosti` (\* rent only, \*\* sale only). Legacy `doma`, `uchastki` still accepted. |
| `city` | string | `almaty` | Any slug from **Reference → Locations** (city, region or district). Russian names work too (`Алматы`, `Бостандыкский р-н`). Empty = all Kazakhstan. |
| `complexId` | integer | – | Residential complex id (number in `https://krisha.kz/complex/almaty/<id>`). |
| `rooms` | string\[] | `[]` | `"1"…"4"`, `"5+"` (apartments), up to `"10"` for houses. |
| `priceFrom` / `priceTo` | integer | – | Tenge. For `arenda` = monthly rent. |
| `areaFrom` / `areaTo` | integer | – | Total area m² (commercial → premises area). |
| `kitchenAreaFrom` / `kitchenAreaTo` | integer | – | Apartments. |
| `floorFrom` / `floorTo` | integer | – | Apartments. |
| `notFirstFloor` / `notLastFloor` | boolean | `false` | Apartments. |
| `buildingFloorsFrom` / `buildingFloorsTo` | integer | – | Floors in the building. |
| `yearFrom` / `yearTo` | integer | – | Year built. |
| `buildingType` | string | – | `brick`, `panel`, `monolith`, `other` |
| `bathroom` | string | – | `separate`, `combined`, `twoOrMore`, `none` |
| `ownerOnly` | boolean | `false` | Only owner-posted listings (`das[who]=1`). |
| `fromAgentsOnly` | boolean | `false` | Only verified Krisha Agents. |
| `hasPhoto` | boolean | `false` | |
| `newBuildingOnly` | boolean | `false` | Primary market only. |
| `mortgageAvailable` | boolean | `false` | |
| `notDormitory` | boolean | `false` | Exclude former dormitories. |
| `exchangePossible` | boolean | `false` | |
| `furniture` | string | – | Rent only: `full`, `partial`, `none` |
| `petsAllowed` / `kidsAllowed` | boolean | `false` | Rent only. |
| `houseType` | string | – | Houses: `detached`, `partOfHouse`, `dacha` |
| `wallMaterial` | string | – | Houses: `brick`, `monolith`, `wood`, `adobe`, `gasSilicate`, `aeratedConcrete`, `cinderBlock`, `foamBlock`, `thermoBlock`, `frameReed`, `framePanel`, `sip`, `concretePanel`, `shellRock`, `finBlock` |
| `renovation` | string | – | Houses: `fresh`, `decent`, `needsRepair`, `roughFinish`, `demolition`, `unfinished` |
| `heating` | string | – | Houses: `central`, `gas`, `solidFuel`, `liquidFuel`, `electric`, `mixed`, `none` |
| `sewage` | string | – | Houses: `central`, `canConnect`, `septic`, `none` |
| `landAreaFrom` / `landAreaTo` | integer | – | Sotka (100 m²): houses, land, garages. |
| `commercialUse` | string | – | `any`, `office`, `retail`, `warehouse`, `auto`, `catering`, `beauty`, `agriculture`, `hospitality`, `medical`, `education`, `entertainment` |
| `commercialLocation` | string | – | `businessCenter`, `residential`, `mall`, `market`, `standalone` |
| `withTenants` / `asBusiness` | boolean | `false` | Commercial. |
| `extraParams` | object | `{}` | Any other raw `das[...]` parameter copied from a krisha.kz URL, e.g. `{"das[flat.phone]": "1"}`. |
| `sort` | string | `newest` | `newest`, `cheapest`, `expensive`. Note: paid "hot" listings are pinned to the top of every krisha.kz page regardless of sort — filter on `hot: false` if you need a strict order. |
| `sinceHours` | integer | – | Keep only listings published in the last N hours (day precision). With `sort: newest` pagination stops at the first page that is entirely older. |
| `maxItems` | integer | `40` | 1–5000. ~20 listings per page. |
| `maxPages` | integer | `50` | 1–300 safety cap. Raise it together with `maxItems` (5000 items ≈ 250 pages). |
| `detail` | boolean | `false` | Open every listing page: full description, all parameters, coordinates, photos, owner name/type, exact publish date. +1 request per listing. |
| `includeViews` | boolean | `true` | Attach view counts (1 batch request per 25 listings). |
| `dedupe` | boolean | `true` | Drop repeated ids (paid listings repeat in the "hot" block). |

Filters that do not apply to the chosen property type are dropped with a warning in the log — nothing is silently ignored.

### Reference

#### Locations (`city`)

Slugs come from krisha.kz's own region tree (`/region/ajaxGetChildren/`). Districts are only defined for Almaty, Astana and Shymkent. Any other town slug that appears in a krisha.kz URL (`https://krisha.kz/prodazha/kvartiry/<slug>/`) also works — an unknown slug yields a clear `404` error, never empty data.

| Region / city | Slug | Districts / main cities (slug) |
|---|---|---|
| **Алматы** (city) | `almaty` | Алатауский → `almaty-alatauskij`; Алмалинский → `almaty-almalinskij`; Ауэзовский → `almaty-aujezovskij`; Бостандыкский → `almaty-bostandykskij`; Жетысуский → `almaty-zhetysuskij`; Медеуский → `almaty-medeuskij`; Наурызбайский → `almaty-nauryzbajskiy`; Турксибский → `almaty-turksibskij` |
| **Астана** (city) | `astana` | Алматы р-н → `astana-almatinskij`; Есильский → `astana-esilskij`; Нура → `astana-nura`; Байконур → `r-n-bajkonur`; Сарайшык → `astana-saraishyk`; Сарыарка → `astana-saryarkinskij` |
| **Шымкент** (city) | `shymkent` | Абайский → `shymkent-abajskij`; Аль-Фарабийский → `shymkent-al-farabijskij`; Енбекшинский → `shymkent-enbekshinskij`; Каратауский → `karatauskij`; Туран → `shymkent-turan` |
| Абай обл. | `abay-oblast` | Семей → `semej` |
| Акмолинская обл. | `akmolinskaja-oblast` | Кокшетау → `kokshetau`; Щучинск → `shhuchinsk`; Степногорск → `stepnogorsk` |
| Актюбинская обл. | `aktjubinskaja-oblast` | Актобе → `aktobe` |
| Алматинская обл. | `almatinskaja-oblast` | Боралдай → `boroldaj-burundaj`; Каскелен → `kaskelen`; Конаев → `konaev`; Талгар → `talgar` |
| Атырауская обл. | `atyrauskaja-oblast` | Атырау → `atyrau`; Кульсары → `kulsary` |
| Восточно-Казахстанская обл. | `vostochno-kazahstanskaja-oblast` | Риддер → `ridder`; Усть-Каменогорск → `ust-kamenogorsk` |
| Жамбылская обл. | `zhambylskaja-oblast` | Тараз → `taraz`; Жанатас → `zhanatas`; Шу → `shu` |
| Жетысу обл. | `jetisyskaya-oblast` | Талдыкорган → `taldykorgan` |
| Западно-Казахстанская обл. | `zapadno-kazahstanskaja-oblast` | Аксай → `aksaj`; Уральск → `uralsk` |
| Карагандинская обл. | `karagandinskaja-oblast` | Балхаш → `balhash`; Караганда → `karaganda`; Темиртау → `temirtau`; Шахтинск → `shahtinsk`; Сарань → `saran` |
| Костанайская обл. | `kostanajskaja-oblast` | Костанай → `kostanaj`; Лисаковск → `lisakovsk`; Рудный → `rudnyj` |
| Кызылординская обл. | `kyzylordinskaja-oblast` | Байконур → `bajkonur`; Кызылорда → `kyzylorda` |
| Мангистауская обл. | `mangistauskaja-oblast` | Актау → `aktau`; Жанаозен → `zhanaozen` |
| Павлодарская обл. | `pavlodarskaja-oblast` | Павлодар → `pavlodar`; Экибастуз → `ekibastuz`; Аксу → `aksu` |
| Северо-Казахстанская обл. | `severo-kazahstanskaja-oblast` | Петропавловск → `petropavlovsk` |
| Туркестанская обл. | `juzhno-kazahstanskaja-oblast` | Туркестан → `turkestan`; Арысь → `arys`; Кентау → `kentau` |
| Улытау обл. | `ulitayskay-oblast` | Жезказган → `zhezkazgan`; Сатпаев → `satpaev` |

Abroad (`propertyType: zarubezhnoj-nedvizhimosti`): `gruzija`, `kipr`, `grecija`, `italija`, `rossija`, `kyrgyzstan`, `vetnam`.

#### Property types

| Slug | Meaning | Sale | Rent |
|---|---|---|---|
| `kvartiry` | Apartments | ✓ | ✓ |
| `doma-dachi` | Houses & dachas | ✓ | ✓ |
| `komnaty` | Rooms | – | ✓ |
| `kvartiry-posutochno` | Apartments, daily | – | ✓ |
| `kvartiry-po-chasam` | Apartments, hourly | – | ✓ |
| `doma-dachi-posutochno` | Houses, daily | – | ✓ |
| `kommercheskaya-nedvizhimost` | Commercial property | ✓ | ✓ |
| `biznes` | Ready business | ✓ | – |
| `prombazy` | Industrial bases | ✓ | ✓ |
| `uchastkov` | Land plots | ✓ | ✓ |
| `garazhi` | Garages & parking | ✓ | ✓ |
| `zarubezhnoj-nedvizhimosti` | Property abroad | ✓ | ✓ |

#### Filter → krisha.kz parameter map

| Input | krisha.kz `das[...]` | Codes |
|---|---|---|
| `rooms` | `das[live.rooms][]` | 1,2,3,4, `5.100` (=5+) |
| `priceFrom/To` | `das[price][from/to]` | ₸ |
| `areaFrom/To` | `das[live.square]` / `das[com.square]` | m² |
| `kitchenAreaFrom/To` | `das[live.square_k]` | m² |
| `floorFrom/To` | `das[flat.floor]` | |
| `notFirstFloor`, `notLastFloor` | `das[floor_not_first]`, `das[floor_not_last]` | 1 |
| `buildingFloorsFrom/To` | `das[house.floor_num]` | |
| `yearFrom/To` | `das[house.year]` | |
| `buildingType` | `das[flat.building]` | brick 1, panel 2, monolith 3, other 0 |
| `bathroom` | `das[flat.toilet]` | separate 1, combined 2, twoOrMore 3, none 4 |
| `ownerOnly` | `das[who]` | 1 |
| `fromAgentsOnly` | `das[_sys.fromAgent]` | 1 |
| `hasPhoto` | `das[_sys.hasphoto]` | 1 |
| `newBuildingOnly` | `das[novostroiki]` | 1 |
| `mortgageAvailable` | `das[mortgage]` | 1 |
| `notDormitory` | `das[flat.priv_dorm]` | 2 |
| `exchangePossible` | `das[has_change]` | 1 |
| `furniture` | `das[live.furniture]` | full 1, partial 2, none 3 |
| `petsAllowed`, `kidsAllowed` | `das[who_match][4]`, `das[who_match][5]` | 4, 5 |
| `houseType` | `das[house.type_object]` | detached 1, partOfHouse 2, dacha 3 |
| `wallMaterial` | `das[house.building_opts]` | 1–15 in the order listed above |
| `renovation` | `das[house.renewal]` | 1–6 |
| `heating` | `das[cmtn.heating]` | central 1, gas 2, solidFuel 3, liquidFuel 4, electric 7, mixed 5, none 6 |
| `sewage` | `das[cmtn.sewage]` | central 1, canConnect 2, septic 3, none 4 |
| `landAreaFrom/To` | `das[land.square]` | sotka |
| `commercialUse` | `das[com.use_case]` | any 1, office 2, retail 3, warehouse 4, auto 5, catering 6, beauty 7, agriculture 8, hospitality 9, medical 11, education 12, entertainment 13 |
| `commercialLocation` | `das[com.location]` | businessCenter 1, residential 2, mall 3, market 4, standalone 5 |
| `withTenants`, `asBusiness` | `das[com.is_tenants]`, `das[estate.is_buss]` | 1 |
| `complexId` | `das[map.complex]` | complex id |
| `sort` | `sort_by` | newest = default (`add_date-desc`), cheapest `price-asc`, expensive `price-desc` |

### Examples

**Daily market snapshot — 2-room apartments in Almaty under 45 M ₸**

```json
{ "dealType": "prodazha", "propertyType": "kvartiry", "city": "almaty", "rooms": ["2"], "priceTo": 45000000, "maxItems": 500 }
```

**Agency lead-gen — new owner-posted rentals in Bostandyk district, checked hourly**

```json
{ "dealType": "arenda", "propertyType": "kvartiry", "city": "almaty-bostandykskij", "rooms": ["1", "2"], "priceTo": 400000, "ownerOnly": true, "furniture": "full", "sinceHours": 2, "detail": true, "maxItems": 100 }
```

**Investor screen — new builds with mortgage, 2020+, monolith, not ground floor**

```json
{ "city": "astana", "newBuildingOnly": true, "mortgageAvailable": true, "yearFrom": 2020, "buildingType": "monolith", "notFirstFloor": true, "sort": "cheapest", "maxItems": 300 }
```

**Commercial sourcing — warehouses with tenants in Almaty region**

```json
{ "propertyType": "kommercheskaya-nedvizhimost", "city": "almatinskaja-oblast", "commercialUse": "warehouse", "withTenants": true, "areaFrom": 500, "detail": true, "maxItems": 100 }
```

**Houses — gas-heated detached houses with 6+ sotka near Almaty**

```json
{ "propertyType": "doma-dachi", "city": "kaskelen", "houseType": "detached", "heating": "gas", "landAreaFrom": 6, "priceTo": 90000000, "maxItems": 200 }
```

### Output

One dataset item per listing. Example (trimmed, `detail: false`):

```json
{
  "id": "1015668341",
  "title": "2-комнатная квартира · 45.2 м² · 5/5 этаж",
  "url": "https://krisha.kz/a/show/1015668341",
  "price": 35000000, "currency": "KZT", "priceText": "35 000 000 ₸", "pricePerM2": 774336,
  "rooms": 2, "area": 45.2, "floor": 5, "floors": 5,
  "address": "Бостандыкский р-н, Толеу Басенова", "district": "Бостандыкский р-н", "street": "Толеу Басенова", "cityName": "Алматы",
  "complex": null, "yearBuilt": 1985, "buildingType": "кирпичный", "condition": "не новый, но аккуратный ремонт", "ceilingHeight": 2.6,
  "description": "кирпичный дом, 1985 г.п., состояние: … ПРОДАЁТСЯ ЕВРОДВУШКА В БОСТАНДЫКСКОМ РАЙОНЕ! …",
  "seller": "specialist", "sellerVerified": true, "hot": true, "photosCount": 12,
  "image": "https://krisha-photos.kcdn.online/webp/cb/…/1-full.jpg",
  "publishedAt": "2026-09-13", "views": 45,
  "city": "almaty", "dealType": "prodazha", "propertyType": "kvartiry", "searchTotal": 10429,
  "fetchedAt": "2026-09-12T23:43:27.131Z"
}
```

| Field | Description |
|---|---|
| `id`, `url` | krisha.kz listing id and canonical URL |
| `title` | Listing title (rooms · area · floor) |
| `price`, `currency`, `priceText` | Price in ₸ (monthly for rent); `null` when "price on request" |
| `pricePerM2` | Price per m² as shown by krisha.kz (commercial cards), otherwise `price / area`, rounded |
| `pricePeriod` | `month`, `day` or `hour` for rentals; `null` for sales |
| `rooms`, `area`, `floor`, `floors` | Parsed from the title |
| `address`, `district`, `street`, `cityName` | Address line split into district (`… р-н`) and street; city as shown on the card |
| `complex` | Residential complex name when the listing belongs to one |
| `yearBuilt`, `buildingType`, `condition`, `ceilingHeight` | Parsed from the card summary (Russian values as on the site) |
| `description` | Card preview text (truncated by the site) |
| `seller` | `owner`, `specialist` (agent), `company` (agency), `developer` (new-building complex) |
| `sellerVerified` | Identity-verified badge |
| `hot` | Paid promotion ("hot") |
| `photosCount`, `image` | Number of photos and first photo URL |
| `publishedAt` | Publish date `YYYY-MM-DD` (day precision from the card) |
| `views` | Site view counter (when `includeViews`) |
| `city`, `dealType`, `propertyType` | Echo of the resolved search scope |
| `searchTotal` | Total number of listings krisha.kz reports for this search (market size) |
| `fetchedAt` | ISO timestamp |

With `detail: true` each item additionally has: `descriptionFull`, `parameters` (object keyed by krisha field names: `flat.balcony`, `flat.parking`, `flat.security`, `live.furniture`, `flat.facilities`, `who_match`, …), `lat`, `lon`, `mapUrl`, `addressParts` (`{city, district, street, house_num, corner_street}`), `photos[]`, `ownerName`, `userType` (`owner` / `specialist` / `company` / `complex`), `complexId`, `isEstateVerified`, and `publishedAt` from the listing page. Phone numbers are behind a click-to-reveal captcha on krisha.kz and are **not** collected.

### Use it from code / agents

```bash
curl -X POST "https://api.apify.com/v2/acts/yadroo~krisha-kz/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"city":"almaty","rooms":["2"],"priceTo":45000000,"maxItems":50}'
```

```js
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('yadroo/krisha-kz').call({ city: 'astana', newBuildingOnly: true, maxItems: 100 });
const { items } = await client.dataset(run.defaultDatasetId).listItems();
```

```python
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("yadroo/krisha-kz").call(run_input={"dealType": "arenda", "city": "almaty-medeuskij", "ownerOnly": True, "sinceHours": 24})
items = client.dataset(run["defaultDatasetId"]).list_items().items
```

MCP: add `https://mcp.apify.com` to Claude / Cursor / any MCP client and call the `yadroo/krisha-kz` tool with the same JSON input.

### Pricing

Pay per event: **$0.005 per run start + $0.002 per listing**. No proxy or browser costs.
Typical runs: 40 listings ≈ $0.085; 500-listing market snapshot ≈ $1.005; hourly 20-item monitor ≈ $0.045/run. `detail: true` costs the same per item but takes a few seconds per listing longer (more compute time on your side).

### Limits & FAQ

- **Rate limits** — ~0.7 s between search pages and ~1.5 s between detail pages. krisha.kz is behind a WAF that randomly answers `468` to a share of requests; the Actor retries each page up to 6 times with growing backoff, so detail mode takes roughly 2–4 s per listing. If a page still fails, the item is kept with `detailError`; the run stops only if most detail pages fail.
- **Freshness** — data is read live from krisha.kz at run time; `publishedAt` on cards is day-precise. `views` are live counters.
- **Blocks / errors** — a 403 or an unrecognized layout fails the run with a clear message instead of returning empty items; a wrong location slug fails with `404`.
- **Max items** — 5000 per run (up to 300 pages; checked live: page 400 still returns fresh listings). With `detail: true` budget about 2 s per listing — the default run timeout is 1 hour. Split very large jobs by district or price range.
- **Phones** — not extracted (captcha-protected on the site).
- **Roadmap** — complex catalog mode (all listings inside a ЖК by name), map-bounds search, price-history via repeated runs.

***

Made by **Yadroo**. Sibling actors: [kolesa-kz](https://apify.com/yadroo/kolesa-kz) (cars), [kaspi-kz-products](https://apify.com/yadroo/kaspi-kz-products) (marketplace prices), [hh-kz-vacancies](https://apify.com/yadroo/hh-kz-vacancies) (jobs), [autoscout24-cars](https://apify.com/yadroo/autoscout24-cars) (EU cars).

# Actor input Schema

## `dealType` (type: `string`):

prodazha = for sale, arenda = for rent (monthly; use propertyType kvartiry-posutochno for daily rent).

## `propertyType` (type: `string`):

krisha.kz category slug. Rent-only: komnaty, kvartiry-posutochno, kvartiry-po-chasam, doma-dachi-posutochno. Sale-only: biznes. Legacy values doma/uchastki are auto-mapped.

## `city` (type: `string`):

krisha.kz location slug: a city (almaty, astana, shymkent, karaganda, aktobe, atyrau, pavlodar, taraz, ust-kamenogorsk, kostanaj, semej, uralsk, kyzylorda, aktau, petropavlovsk, kokshetau, taldykorgan, turkestan…), a region (almatinskaja-oblast, akmolinskaja-oblast…), or a district of Almaty/Astana/Shymkent (almaty-bostandykskij, almaty-medeuskij, astana-esilskij, shymkent-abajskij…). Russian names (Алматы, Бостандыкский р-н) are accepted. Empty = all Kazakhstan. Full list in README → Reference.

## `complexId` (type: `integer`):

Restrict to one residential complex (ЖК). The id is the number in the complex URL on krisha.kz, e.g. https://krisha.kz/complex/almaty/1234 → 1234.

## `rooms` (type: `array`):

Room counts to include, e.g. \["1","2","3"]. "5+" (or "5") = five and more for apartments; houses accept up to "10". Empty = any.

## `priceFrom` (type: `integer`):

Minimum price in tenge (monthly rent for arenda).

## `priceTo` (type: `integer`):

Maximum price in tenge.

## `areaFrom` (type: `integer`):

Minimum total area (for commercial property → premises area).

## `areaTo` (type: `integer`):

Maximum total area.

## `kitchenAreaFrom` (type: `integer`):

Apartments only.

## `kitchenAreaTo` (type: `integer`):

Apartments only.

## `floorFrom` (type: `integer`):

Apartments only.

## `floorTo` (type: `integer`):

Apartments only.

## `notFirstFloor` (type: `boolean`):

Exclude ground-floor apartments.

## `notLastFloor` (type: `boolean`):

Exclude top-floor apartments.

## `buildingFloorsFrom` (type: `integer`):

Minimum number of floors in the building.

## `buildingFloorsTo` (type: `integer`):

Maximum number of floors in the building.

## `yearFrom` (type: `integer`):

Building constructed in this year or later.

## `yearTo` (type: `integer`):

Building constructed in this year or earlier.

## `buildingType` (type: `string`):

brick = кирпичный, panel = панельный, monolith = монолитный, other = иной. Leave unset for any.

## `bathroom` (type: `string`):

Toilet/bathroom layout. Leave unset for any.

## `ownerOnly` (type: `boolean`):

Only listings posted by the property owner (`das[who]=1`). Great for lead generation.

## `fromAgentsOnly` (type: `boolean`):

Only listings from verified Krisha Agents (`das[_sys.fromAgent]=1`).

## `hasPhoto` (type: `boolean`):

Only listings with photos.

## `newBuildingOnly` (type: `boolean`):

Primary market (новостройки) only. Leave off for secondary + primary.

## `mortgageAvailable` (type: `boolean`):

Seller states the apartment qualifies for a mortgage.

## `notDormitory` (type: `boolean`):

Exclude apartments in former dormitories (общежитие).

## `exchangePossible` (type: `boolean`):

Seller accepts exchange (обмен).

## `furniture` (type: `string`):

Rent (arenda) only. Leave unset for any.

## `petsAllowed` (type: `boolean`):

Rent only: landlord accepts pets.

## `kidsAllowed` (type: `boolean`):

Rent only: landlord accepts families with kids.

## `houseType` (type: `string`):

Leave unset for any.

## `wallMaterial` (type: `string`):

Leave unset for any.

## `renovation` (type: `string`):

Leave unset for any.

## `heating` (type: `string`):

Leave unset for any.

## `sewage` (type: `string`):

Leave unset for any.

## `landAreaFrom` (type: `integer`):

Houses, land plots, garages. 1 sotka = 100 m².

## `landAreaTo` (type: `integer`):

Maximum land area in sotka (100 m²).

## `commercialUse` (type: `string`):

Leave unset for any.

## `commercialLocation` (type: `string`):

Leave unset for any.

## `withTenants` (type: `boolean`):

Premises sold/rented with existing tenants (income-producing).

## `asBusiness` (type: `boolean`):

Premises offered together with the business.

## `extraParams` (type: `object`):

Escape hatch for any krisha.kz filter not listed above, e.g. {"das\[flat.phone]": "1", "das\[garage.object\_type]\[1]": "1"}. Keys must start with das\[. Copy them from the krisha.kz URL after applying a filter in the browser.

## `sort` (type: `string`):

Order of results as on krisha.kz. Paid 'hot' listings are always shown first on every page.

## `sinceHours` (type: `integer`):

Keep only listings published within the last N hours (krisha shows publish dates with day precision, so 24 = today+yesterday boundary, 48 = last two days…). With sort=newest pagination stops as soon as a page is entirely older — ideal for hourly monitoring. Empty = no time filter.

## `maxItems` (type: `integer`):

Stop after this many listings (pagination is automatic, ~20 listings per page).

## `maxPages` (type: `integer`):

Hard cap on search pages fetched (safety limit).

## `detail` (type: `boolean`):

Fetch every listing page to add: full description, all parameters (balcony, parking, security, ceiling…), GPS coordinates, structured address, all photos, owner name & type, complex id, verified-estate flag, exact publish date. One extra request per listing (slower, ~0.6 s each).

## `includeViews` (type: `boolean`):

Attach the site's view counter to each listing (one cheap batch request per 25 listings). Useful to rank demand.

## `dedupe` (type: `boolean`):

Drop repeated ids (paid listings are repeated in the 'hot' block on every page).

## Actor input object example

```json
{
  "dealType": "prodazha",
  "propertyType": "kvartiry",
  "city": "almaty",
  "rooms": [],
  "notFirstFloor": false,
  "notLastFloor": false,
  "ownerOnly": false,
  "fromAgentsOnly": false,
  "hasPhoto": false,
  "newBuildingOnly": false,
  "mortgageAvailable": false,
  "notDormitory": false,
  "exchangePossible": false,
  "petsAllowed": false,
  "kidsAllowed": false,
  "withTenants": false,
  "asBusiness": false,
  "extraParams": {},
  "sort": "newest",
  "maxItems": 40,
  "maxPages": 50,
  "detail": false,
  "includeViews": true,
  "dedupe": true
}
```

# Actor output Schema

## `listings` (type: `string`):

No description

## `overview` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "rooms": [],
    "extraParams": {}
};

// Run the Actor and wait for it to finish
const run = await client.actor("yadroo/krisha-kz").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "rooms": [],
    "extraParams": {},
}

# Run the Actor and wait for it to finish
run = client.actor("yadroo/krisha-kz").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "rooms": [],
  "extraParams": {}
}' |
apify call yadroo/krisha-kz --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,yadroo/krisha-kz"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/YqHWcSFupU8rnDzI3/builds/lUJZXngyD3uMyUGFp/openapi.json
