# Krisha.kz Scraper - Kazakhstan Property Listings & Prices (`sian.agency/krisha-property-scraper`) Actor

Krisha.kz property data: prices in tenge, rooms, area, floor, address, seller type and photos for Almaty, Astana and all Kazakhstan. JSON/CSV/Excel.

- **URL**: https://apify.com/sian.agency/krisha-property-scraper.md
- **Developed by:** [SIÁN OÜ](https://apify.com/sian.agency) (community)
- **Categories:** Real estate, Lead generation, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.32 / 1,000 property listings

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Krisha.kz Scraper - Kazakhstan Property Listings & Prices 🚀

[![SIÁN Agency Store](https://img.shields.io/badge/Store-SI%C3%81N%20Agency-1AE392)](https://apify.com/sian.agency?fpr=sian) [![OLX Property Scraper](https://img.shields.io/badge/Store-OLX%20Property%20Scraper-002F34)](https://apify.com/sian.agency/olx-property-scraper?fpr=sian) [![Cian Scraper](https://img.shields.io/badge/Store-Cian%20Scraper-0468FF)](https://apify.com/sian.agency/cian-property-scraper?fpr=sian) [![Kufar.by Scraper](https://img.shields.io/badge/Store-Kufar.by%20Scraper-1AE392)](https://apify.com/sian.agency/kufar-property-scraper?fpr=sian)

#### 🎉 Kazakhstan's largest property portal as a spreadsheet: 465,000 live krisha.kz adverts, with seller type on every row and building facts on most apartment rows

##### For analysts, agencies, developers and investors tracking Almaty, Astana, Shymkent and the regions

### 🔎 What is the Krisha.kz Scraper — and when should you use it?

The **Krisha.kz Scraper** turns public property adverts from krisha.kz, Kazakhstan's largest property portal into clean, structured rows you can filter, export and feed straight into a spreadsheet, database or AI agent. No account, no portal API key, no browser automation to maintain.

**Use it when you need:** Kazakh sale and rental adverts as rows. Each row carries the asking price or monthly rent in tenge, room count, floor area, floor and building height, plot size in sotka, city, district and street. It also names the seller type: owner, specialist, company, krisha.kz agent or developer, with the residential complex for new builds. Promotion badges, the mortgage flag, wall type, year built, ceiling height, condition and the lead photo come too. Switch on full details and each row adds GPS coordinates, the complete description, every photo, kitchen area and the date the advert was first published.

**Use something else when:** the property is not in Kazakhstan, or you need adverts that are only on OLX. Use [OLX Property Scraper](https://apify.com/sian.agency/olx-property-scraper?fpr=sian) for olx.kz property adverts, mostly private sellers. Use [Cian Scraper](https://apify.com/sian.agency/cian-property-scraper?fpr=sian) for Russia's largest property portal. Use [Kufar.by Scraper](https://apify.com/sian.agency/kufar-property-scraper?fpr=sian) for Belarus property adverts. This actor covers every property section krisha.kz publishes: apartments, houses and dachas, land plots, commercial premises, garages and parking, industrial bases, ready businesses and property abroad for sale, and apartments, houses, rooms, commercial premises, garages and industrial bases for rent. Phone numbers sit behind krisha.kz's own click-to-call and are never read. The site shows only current prices, so there is no price history, and it stops any one search at page 1,000 (about 20,000 adverts).

### 🤖 Use with AI agents

Already connected to the [Apify MCP server](https://mcp.apify.com)? Just ask for this Actor by name: sian.agency/krisha-property-scraper

**Your agent can pay for its own runs.** This Actor is eligible for [agentic payments](https://docs.apify.com/platform/actors/publishing/monetize), so an agent can discover it, run it and settle the bill over [x402](https://www.x402.org/) (USDC on Base) or [Skyfire](https://www.skyfire.xyz/) — without an Apify account or API token of its own. Billing is the same either way: per successful row, never for errors.

Otherwise copy this prompt into Claude, ChatGPT, Cursor or any MCP-enabled assistant:

```text
I want property listings and asking prices from krisha.kz using the Apify Actor `sian.agency/krisha-property-scraper`.

Use it when I need: Kazakh sale and rental adverts as rows. Each row carries the asking price or monthly rent in tenge, room count, floor area, floor and building height, plot size in sotka, city, district and street. It also names the seller type: owner, specialist, company, krisha.kz agent or developer, with the residential complex for new builds. Promotion badges, the mortgage flag, wall type, year built, ceiling height, condition and the lead photo come too. Switch on full details and each row adds GPS coordinates, the complete description, every photo, kitchen area and the date the advert was first published.

Don't use it when: the property is not in Kazakhstan, or you need adverts that are only on OLX — use olx-property-scraper or cian-property-scraper or kufar-property-scraper instead.

How to call it: set `dealType` to `sale` or `rent` and `propertyType` to one of `apartments`, `houses`, `land`, `commercial`, `garages`, `industrial`, `business`, `rooms` or `abroad`. Set `location` to `kazakhstan`, a city such as `almaty`, `astana` or `shymkent`, or a region such as `almatinskaja-oblast`. Narrow with `minPrice`/`maxPrice` in tenge, `rooms` (1-5, 5 = five or more), `minArea`/`maxArea` in m², `minPlotSotka`/`maxPlotSotka`, `ownersOnly` and `withPhotosOnly`. A filter the chosen section does not support stops the run before any advert is billed. `sortBy` takes `newest`, `cheapest` or `most-expensive`, and `maxResults` caps the rows. `includeDetails` opens each advert for GPS, the complete text and every photo, for an extra charge per advert read. To reuse a search built on the site, paste its address into `searchUrls`.

Start with this input:
{
  "dealType": "sale",
  "propertyType": "apartments",
  "location": "almaty",
  "rooms": [
    "2"
  ],
  "maxResults": 200
}

Ask me which city or region to cover, whether they want sale or rental adverts and of which property type, and whether GPS and the full description are worth the extra per-advert charge, then run the Actor and summarise the results as a table.
```

**Things you can ask your agent for:**

- *Pull two-room flats for sale in Almaty under 40 million tenge and rank the districts by median price per square metre.*
- *Find owner-listed apartments for rent in Astana posted this week, with GPS points for each.*
- *List the developers advertising new builds in Shymkent and the starting price of each residential complex.*

Machine-readable API, MCP config and OpenAPI definition for this Actor are published at [apify.com/sian.agency/krisha-property-scraper.md](https://apify.com/sian.agency/krisha-property-scraper.md).

### 📋 Overview

**Krisha.kz (крыша кз) is where Kazakhstan goes to find a flat, a house or an office.** It carries about 465,000 live adverts, and 223,000 of them are apartments for sale. This Actor turns any krisha.kz search into clean rows: price in tenge, rooms, floor area, floor, district, seller type and the building facts the site prints in each description.

**What you get:**

- ✅ **Every section krisha.kz publishes**: apartments, houses and dachas, land, commercial premises, garages, industrial bases, ready businesses and property abroad for sale, plus six sections for rent.
- ⚡ **20 adverts per page**, read straight from the search results. A 1,000-row market extract is 50 pages.
- 🎯 **Up to 39 fields per advert** from the search alone, and 48 with full details switched on.
- 💰 **$1.50 per 1,000 adverts** on a paid Apify plan, plus $0.005 per run start. Promoted adverts that break your price, rooms, area or plot filters are dropped before billing.
- 💎 **Building facts as columns**: wall type, year built, ceiling height, condition and residential complex, split out of the description text.
- ✨ **NEW**: optional full details with GPS coordinates, every photo, the first-published date and days on market.

***

### ✨ Features

- 🏢 **14 section and deal combinations**: eight sale sections and six rent sections. Each row is labelled with its deal type and property type.
- 📍 **52 locations**: all of Kazakhstan, 34 cities from Almaty and Astana to Baikonur, and all 17 regions.
- 💵 **Tenge prices parsed properly**: the number, the text as shown, a flag for a developer's "from" price, the rent period and the price per m².
- 👤 **Seller type on every row**: owner, specialist, company, krisha.kz agent or developer. New builds also carry the complex and developer name.
- 🔥 **Promotion badges**: hot, raised to top, urgent, the badge text, and whether a mortgage is offered.
- 🧱 **Building facts**: panel, brick or monolithic walls, year built, ceiling height, condition and residential complex.
- 🎚️ **Filters krisha.kz applies itself**: price, rooms, floor area, plot size in sotka, owners only, with photos only and three sort orders.
- 🛑 **No quietly unfiltered results**: if a section does not support a filter, the run stops before any charge and says why.
- 🌐 **Paste your own search**: build it on krisha.kz, copy the address bar, and its filters come along.
- 📄 **Full details on demand**: GPS, complete description, every photo, kitchen area and the full parameter list.

***

### 🎬 Quick Start

Pick a deal type, a property type and a location. Add filters if you want a narrower slice. Press Start, then download the rows as JSON, CSV or Excel.

```bash
curl -X POST 'https://api.apify.com/v2/acts/sian.agency~krisha-property-scraper/runs?token=YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"dealType": "sale", "propertyType": "apartments", "location": "almaty", "maxResults": 100}'
```

***

### 🚀 Getting Started (3 Simple Steps)

#### Step 1: Choose what to search

Pick **For sale** or **For rent**, then a property type such as Apartments, Houses and dachas or Commercial premises.

#### Step 2: Choose where

Pick a city, a region or all of Kazakhstan, and set how many adverts you want.

#### Step 3: Press Start

Filters are optional. The default run returns 100 Almaty apartments for sale, newest first (25 on a free Apify plan).

**A default run takes about 15 seconds and gives you:**

- A table of adverts with price in tenge, rooms, floor area, floor and district
- The seller type on every row, with the complex and developer for new builds
- Building age, wall type and condition, ready to group and chart
- A run report with the totals and exactly what you paid

***

### 📥 Input Configuration

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| operation | string | No | `search` (Property Listings). The only operation, and the default. |
| dealType | string | No | `sale` or `rent`. Default `sale`. |
| propertyType | string | No | `apartments`, `houses`, `land`, `commercial`, `garages`, `industrial`, `business`, `rooms` or `abroad`. Default `apartments`. |
| location | string | No | `kazakhstan`, a city such as `almaty`, `astana` or `shymkent`, or a region such as `almatinskaja-oblast`. Default `almaty`. |
| maxResults | integer | No | Stop after this many adverts, 1 to 20,000. Default 100. |
| minPrice / maxPrice | integer | No | Price range in tenge. For rentals this is the monthly rent. Not available for property abroad. |
| rooms | array | No | Room counts `"1"` to `"5"` (5 means five or more). Apartments and houses. |
| minArea / maxArea | integer | No | Floor area in m². Apartments, houses, rooms, commercial premises and businesses. |
| minPlotSotka / maxPlotSotka | integer | No | Plot size in sotka (1 sotka = 100 m²). Houses, land and industrial bases. |
| ownersOnly | boolean | No | Keep only adverts posted by the owner. |
| withPhotosOnly | boolean | No | Skip adverts without photos. |
| sortBy | string | No | `newest`, `cheapest` or `most-expensive`. Default `newest`. |
| includeDetails | boolean | No | Open each advert's page for GPS, full text, all photos and every parameter. Billed per advert read. |
| searchUrls | array | No | krisha.kz search addresses to use instead of the form. |

Land plots, ready businesses and property abroad are sale-only, and rooms are rent-only. If you pick a pair krisha.kz does not publish, the run stops before any advert is billed (only the run-start fee applies).

**Example: two- and three-room flats in Astana between 20 and 40 million tenge, owners only:**

```json
{
  "dealType": "sale",
  "propertyType": "apartments",
  "location": "astana",
  "minPrice": 20000000,
  "maxPrice": 40000000,
  "rooms": ["2", "3"],
  "ownersOnly": true,
  "sortBy": "cheapest",
  "maxResults": 500
}
```

**Example: reuse searches you built on krisha.kz:**

```json
{
  "searchUrls": [
    { "url": "https://krisha.kz/prodazha/kvartiry/almaty/?das[live.rooms]=2" },
    { "url": "https://krisha.kz/arenda/kvartiry/astana/" }
  ],
  "maxResults": 1000
}
```

`maxResults` is one budget for the whole run: the URLs are read in order, so a big first search can use it all before the second one starts.

***

### 📤 Output

Every advert is one flat row with **up to 48 fields**. Fields the advert does not have are left out of the row instead of being filled with nulls. Export as JSON, CSV, Excel or XML, or read the rows through the API.

| Field | Type | Description |
|-------|------|-------------|
| listingId | integer | krisha.kz advert ID |
| url | string | Link to the advert |
| propertyTitle | string | The title line krisha.kz builds: rooms, area and floor |
| price | number | Asking price, or the rent for rentals, in tenge |
| priceText | string | The price exactly as the site shows it |
| priceIsFrom | boolean | True for a developer's "from" starting price |
| pricePeriod | string | `month`, `day` or `hour` for rentals, `total` for a commercial whole-unit price, empty for a plain sale price |
| pricePerSqm | number | Price per m² in tenge: the figure krisha.kz prints (for commercial rents, the monthly rent per m²), otherwise price ÷ area for a single sale price; empty for "from" prices and flat rents |
| rooms / areaSqm / plotSotka | number | Room count, floor area in m², plot size in sotka |
| floor / floorsTotal | integer | Floor, and the number of floors in the building |
| city / district / address | string | City, district and street as published |
| buildingType | string | `panel`, `brick`, `monolithic`, `other` or a rarer wall type |
| yearBuilt / ceilingHeightM / condition | mixed | Year built, ceiling height in metres, condition as written |
| residentialComplex / developer / complexUrl | string | New-build complex, its developer and its krisha.kz page |
| sellerType / sellerLabel | string | `owner`, `specialist`, `company`, `krisha-agent` or `developer`, plus the site's own label |
| isHot / isTop / isUrgent / badgeText | mixed | Promotion flags and the badge text |
| mortgageAvailable | boolean | The advert offers a mortgage |
| photoUrl / photoCount | mixed | Lead photo and number of photos |
| postedDate | string | Date posted, or last raised to the top |
| dealType / propertyType / searchUrl | string | Which search produced the row |

**Added by full details (`includeDetails`):** `latitude`, `longitude`, `fullDescription`, `photoUrls`, `kitchenAreaSqm` and `detailParameters`, which holds every parameter krisha.kz lists. You also get `createdDate` (first published), `daysOnMarket` and `detailStatus`, which reads `ok`, `removed` or `unavailable`.

**Example row (Almaty apartment for sale):**

```json
{
  "listingId": 1014118238,
  "url": "https://krisha.kz/a/show/1014118238",
  "propertyTitle": "3-комнатная квартира · 80.9 м² · 9/9 этаж",
  "propertyKind": "3-комнатная квартира",
  "rooms": 3,
  "areaSqm": 80.9,
  "floor": 9,
  "floorsTotal": 9,
  "price": 51000000,
  "priceText": "51 000 000 ₸",
  "priceIsFrom": false,
  "pricePerSqm": 630408,
  "currency": "KZT",
  "city": "Алматы",
  "district": "Ауэзовский р-н",
  "address": "мкр Аксай-2 — Елемесова",
  "descriptionPreview": "панельный дом, 1984 г.п., состояние: требует ремонта, потолки 2м., санузел раздельный, …",
  "buildingType": "panel",
  "yearBuilt": 1984,
  "ceilingHeightM": 2,
  "condition": "требует ремонта",
  "sellerType": "krisha-agent",
  "sellerLabel": "Крыша Агент",
  "isHot": true,
  "isTop": true,
  "isUrgent": false,
  "mortgageAvailable": false,
  "photoUrl": "https://krisha-photos.kcdn.online/webp/7d/7d8bc43d-248e-45e9-8691-d95cb986caf1/51-full.jpg",
  "photoCount": 25,
  "postedDate": "2026-09-27",
  "dealType": "sale",
  "propertyType": "apartments",
  "searchUrl": "https://krisha.kz/prodazha/kvartiry/almaty/",
  "status": "success"
}
```

**Full-details fields for another Almaty flat (advert 1015089009):**

```json
{
  "latitude": 43.234608,
  "longitude": 76.82925,
  "kitchenAreaSqm": 11.5,
  "createdDate": "2026-08-24",
  "daysOnMarket": 34,
  "detailParameters": {
    "flat.building": "панельный",
    "house.year": "1989",
    "flat.toilet": "2 с/у и более",
    "flat.flooring": "ламинат",
    "ceiling": "2.8 м"
  },
  "detailStatus": "ok"
}
```

Each run also saves a report (`report.html`) next to the dataset. It shows the totals, any search that returned nothing, and an itemised statement of what the run cost.

***

### 💼 Use Cases & Examples

#### 1. Almaty and Astana Price Tracking

**Property analysts watching asking prices move, district by district.**

**Input:** Apartments for sale in Almaty, two rooms, newest first, scheduled weekly
**Output:** Price, price per m², district and building age for each new advert
**Use:** Chart the median price per square metre by district without cleaning a single cell

#### 2. Rental Yield Research

**Investors working out where a flat pays for itself.**

**Input:** The same city run twice, once for `sale` and once for `rent`
**Output:** Asking prices and monthly rents with rooms, area and district
**Use:** Compare gross yield by room count across Almaty, Astana or Shymkent

#### 3. Agency and Developer Lead Lists

**Proptech and mortgage sales teams building a prospect list.**

**Input:** Any city and section, all sellers
**Output:** The seller type on every row, with the developer and complex for new builds
**Use:** Group developer rows by complex to see who is building where, or keep the `owner` rows for private sellers

#### 4. New-Build Market Monitoring

**Developers and their marketing agencies keeping an eye on the competition.**

**Input:** Apartments or houses for sale in a city, newest first
**Output:** Complex name, its krisha.kz page, the developer and the "from" price
**Use:** Track which complexes are advertising and how their entry price shifts over the season

#### 5. Commercial and Land Deal Sourcing

**Brokers and buyers shortlisting sites before the first phone call.**

**Input:** Commercial premises with a floor-area range, or land with a plot range in sotka
**Output:** Total price, price per m², plot size, district and address
**Use:** Build a shortlist across a whole region in one run

#### 6. Owner-Direct Acquisition

**Buy-to-let investors who want to reach private sellers first.**

**Input:** `ownersOnly` switched on, a price ceiling and a room count
**Output:** Owner-posted adverts only, with the posted date
**Use:** Run it every morning and call the newest owners before an agency signs them

#### 7. Housing Market Research and Journalism

**Researchers and data journalists who need a dated snapshot of supply.**

**Input:** One section across all of Kazakhstan, split by region
**Output:** A repeatable table of adverts with building age, wall type and condition
**Use:** Compare Soviet-era panel stock with new monolithic builds, city by city

***

### 🔗 Integration Examples

#### JavaScript/Node.js

```javascript
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });

const run = await client.actor('sian.agency/krisha-property-scraper').call({
  dealType: 'sale',
  propertyType: 'apartments',
  location: 'almaty',
  rooms: ['2'],
  maxResults: 100,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0].propertyTitle, items[0].price, items[0].district);
```

#### Python

```python
from apify_client import ApifyClient
client = ApifyClient('YOUR_TOKEN')

run = client.actor('sian.agency/krisha-property-scraper').call(
    run_input={
        'dealType': 'rent',
        'propertyType': 'apartments',
        'location': 'astana',
        'maxResults': 200,
    }
)

for item in client.dataset(run['defaultDatasetId']).iterate_items():
    print(item['propertyTitle'], item.get('price'), item.get('pricePeriod'))
```

#### cURL

```bash
curl -X POST 'https://api.apify.com/v2/acts/sian.agency~krisha-property-scraper/runs?token=YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"dealType": "sale", "propertyType": "commercial", "location": "almaty", "minArea": 40, "includeDetails": true, "maxResults": 50}'
```

#### Automation Workflows (N8N / Zapier / Make)

1. **Trigger**: A schedule, for example every morning at 08:00 Almaty time
2. **HTTP Request**: Call this Actor's API with your saved input, sorted newest first
3. **Process**: Drop the `listingId` values you already have
4. **Action**: Append the new adverts to Google Sheets or a database, or post them to Slack or email

***

### 📊 Performance & Pricing

#### FREE Tier (Try It Now)

- **25 adverts** per run, with every field and every filter
- No credit card required
- Enough to check the columns against your own spreadsheet before you commit

#### PAID Tier (Production Ready)

- **Up to 20,000 adverts** per run, from one search or several pasted ones
- 20 adverts per page, so a 1,000-row extract finishes in a minute or two
- Pay per event: no advert charge for an empty search or a failed row

| Event | Starter plan | Free plan |
|-------|-------------:|----------:|
| Run start | $0.005 | $0.02 |
| Property listing (per 1,000) | $1.50 | $6.00 |
| Full details, optional (per 1,000) | $5.00 | $20.00 |

Higher Apify plans pay less, down to $1.17 per 1,000 listings and $3.90 per 1,000 details. Full details are billed only when the advert page was actually read.

💰 **$1.50 per 1,000 krisha.kz adverts**, and seller type, promotion badges and building facts are included at that price.

🔗 [View current pricing](https://apify.com/sian.agency/krisha-property-scraper?fpr=sian)

***

### ❓ Frequently Asked Questions (FAQ)

**Q: Do I need a krisha.kz account or any setup?**
A: No. Pick a deal type, a property type and a location and press Start. The listing rows need nothing else.

**Q: Which cities and regions can I search?**
A: All of Kazakhstan, 34 cities from Almaty, Astana and Shymkent down to Baikonur and Kulsary, and all 17 regions. A region includes every town in it.

**Q: How many adverts can one run return?**
A: krisha.kz shows at most 1,000 pages of 20 per search, so one search reaches about 20,000 adverts. Almaty apartments for sale alone hold about 42,600. Split a market that size by price range or rooms and run it in parts.

**Q: What do full details add?**
A: GPS coordinates, the complete description, every photo, kitchen area, the date the advert was first published, days on market and krisha.kz's full parameter list. The Actor opens one extra page per advert and bills a Listing Details event only when that page was read.

**Q: Can I get the seller's phone number?**
A: No. krisha.kz hides numbers behind its own click-to-call, and this Actor never reads them. You get the seller type and, for developers, the company name.

**Q: Is there a price history?**
A: krisha.kz shows the current price only. Schedule the same search daily or weekly and you build the history yourself, keyed on `listingId`.

**Q: Are prices in tenge?**
A: Yes. Every row carries the number, the text as the site shows it, and whether it is a starting price, a monthly rent or a total.

**Q: What does the posted date mean?**
A: `postedDate` is the day the advert was posted or last paid to be raised to the top. The real first-publication date comes with full details, as `createdDate`.

**Q: Can I reuse a search I built on the site?**
A: Yes. Paste the address from your browser into Search URLs and its filters are kept, including ones the form does not offer. Tracking tags and a few keys krisha.kz asks automated visitors to avoid (such as `raion` and `sub_cat`) are dropped, and the run log names them.

**Q: What output formats are available?**
A: JSON, CSV, Excel, XML and HTML, straight from the Apify dataset or through the API.

***

### 🐛 Troubleshooting

**The run stopped before any charge with a filter message**

- That filter does not exist for the section on krisha.kz. Rooms work for apartments and houses only, and plot size for houses, land and industrial bases.
- Clear the filter or pick another property type. No advert was billed; only the run-start fee applies.

**The run returned fewer adverts than Max results**

- On a free Apify plan every run stops at 25 adverts, and there is a daily run allowance that resets at 00:00 UTC.
- The search may simply have fewer matches. The log prints the total krisha.kz reports on page 1.

**Some rows show `detailStatus: unavailable`**

- That advert page could not be read during the run. The listing row is still delivered, with no detail charge.
- If many advert pages in a row cannot be read, the run switches full details off, keeps delivering listings and stops billing details.

**A row shows `detailStatus: removed`**

- The advert was taken down between the search and the detail read. Popular Almaty flats can go within hours.

**A search URL was skipped**

- It has to be a krisha.kz search page such as https://krisha.kz/prodazha/kvartiry/almaty/. Single adverts (/a/show/…) and other sites are skipped, and the log says which.

***

### ⚖️ Is it legal to scrape data?

Our actors are ethical and do not extract any private user data, such as email addresses, phone numbers or personal contact details. They only extract what the user has chosen to share publicly. We therefore believe that our actors, when used for ethical purposes by Apify users, are safe.

However, you should be aware that your results could contain personal data. Personal data is protected by the **GDPR** in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.

You can also read Apify's blog post on the [legality of web scraping](https://blog.apify.com/is-web-scraping-legal/).

Krisha.kz is a trademark of its owner. This actor is not affiliated with, endorsed by, or sponsored by Krisha.kz or Kolesa Group.

***

### 🤝 Support

**Support**

- For issues or questions, open an issue at https://apify.com/sian.agency/krisha-property-scraper/issues
- Check [SIÁN Agency Store](https://apify.com/sian.agency?fpr=sian) for more automation tools
- Need another market? [OLX Property Scraper](https://apify.com/sian.agency/olx-property-scraper?fpr=sian) covers olx.kz and six more countries. For Russia there is [Cian Scraper](https://apify.com/sian.agency/cian-property-scraper?fpr=sian), and for Belarus [Kufar.by Scraper](https://apify.com/sian.agency/kufar-property-scraper?fpr=sian)
- 📧 <apify@sian-agency.online>

***

**Built by [SIÁN Agency](https://www.sian-agency.online)** | **[More Tools](https://apify.com/sian.agency?fpr=sian)**

# Changelog

This Actor's version history is a separate document: https://apify.com/sian.agency/krisha-property-scraper/changelog.md

# Actor input Schema

## `operation` (type: `string`):

🔍 **PROPERTY LISTINGS:** reads krisha.kz search results for the deal type, property type and location you pick, with any filters, and returns one row per advert: price, rooms, area, floor, address, seller and photo.

📄 **TIP:** switch on **Add full details** below to also open each advert's own page for GPS coordinates, the complete description and every photo.

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

🤝 **SALE OR RENT:** sale adverts carry the asking price in tenge; rent adverts carry the rent, with its period (usually per month) in a column of its own.

⚠️ Some sections exist on one side only: land plots, ready businesses and property abroad are sale-only, and rooms are rent-only. A pair krisha.kz does not publish stops the run before any advert is billed (only the run-start fee applies).

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

🏠 **WHICH SECTION:** the krisha.kz category to read. Apartments is by far the largest: about 223,000 for sale and 25,000 for rent across Kazakhstan.

💰 **For sale:** apartments, houses, land plots, commercial premises, garages, industrial bases, ready businesses, property abroad.
🔑 **For rent:** apartments, houses, rooms, commercial premises, garages, industrial bases.

## `location` (type: `string`):

📍 **WHERE:** one of 34 cities, one of 17 regions, or all of Kazakhstan. A region includes every town in it. Property abroad ignores this field and always searches the whole section.

💡 **TIP:** one search tops out near 20,000 adverts. To cover a whole section nationwide, run one city or region at a time.

## `maxResults` (type: `integer`):

🔢 **HOW MANY ADVERTS:** the run stops after this many. krisha.kz serves 20 adverts per page and at most 1,000 pages per search, so one search tops out near 20,000. For more, split by location or price range. With several Search URLs this is one budget for the whole run, filled in order.

💎 **Paid Apify plans** get the full amount. Free plans are capped at 25 adverts per run.

## `minPrice` (type: `integer`):

💵 **PRICE FROM:** lowest asking price in tenge. For rentals this is the lowest rent. Leave empty for no lower bound. Works for every section except property abroad.

## `maxPrice` (type: `integer`):

💵 **PRICE UP TO:** highest asking price in tenge, or the highest rent for rentals. Leave empty for no upper bound. Works for every section except property abroad.

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

🛏️ **ROOM COUNT:** keep only these room counts. Pick several to combine them; 5 means five or more. Works for apartments and houses. Leave empty for every size.

## `minArea` (type: `integer`):

📐 **FLOOR AREA FROM:** smallest total floor area in square metres. Works for apartments, houses, rooms, commercial premises and ready businesses.

## `maxArea` (type: `integer`):

📐 **FLOOR AREA UP TO:** largest total floor area in square metres. Works for the same sections as the minimum: apartments, houses, rooms, commercial premises and ready businesses.

## `minPlotSotka` (type: `integer`):

🌱 **PLOT SIZE FROM:** smallest plot in sotka (1 sotka = 100 m², 100 sotka = 1 hectare). Works for houses, land plots and industrial bases.

## `maxPlotSotka` (type: `integer`):

🌱 **PLOT SIZE UP TO:** largest plot in sotka. Works for the same sections as the minimum: houses, land plots and industrial bases.

## `ownersOnly` (type: `boolean`):

👤 **PRIVATE SELLERS ONLY:** keep only adverts posted by the owner (krisha.kz's own 'from owners' filter), leaving out agents, agencies and developers. Handy for a for-sale-by-owner lead list.

## `withPhotosOnly` (type: `boolean`):

📷 **PHOTOS REQUIRED:** skip adverts that have no photos.

## `sortBy` (type: `string`):

↕️ **ORDER:** newest first is krisha.kz's default and the right one for a scheduled run that only wants what appeared since the last one. Adverts that paid to be raised also count as new on the day they were raised.

💡 **TIP:** price order is handy when you only need the cheapest or the most expensive slice of a large search.

## `includeDetails` (type: `boolean`):

📄 **FULL DETAILS (PAID ADD-ON):** open each advert's own page for its GPS coordinates, the complete description, every photo, kitchen area, days on market and the full parameter list (bathroom, balcony, furniture, flooring, security and more).

💰 Billed as one Listing Details event per advert on top of the listing row, and only when the page was read. Adds a few seconds per advert.

## `searchUrls` (type: `array`):

🌐 **YOUR OWN SEARCH:** paste krisha.kz search addresses instead of filling the form, e.g. https://krisha.kz/prodazha/kvartiry/almaty/?das\[live.rooms]=2. Build the search on the site and copy the address bar. Its filters carry over, including ones this form does not offer; page numbers and tracking tags are dropped.

⚠️ When set, deal type, property type, location, filters and sort above are ignored. Max results and full details still apply.

## Actor input object example

```json
{
  "operation": "search",
  "dealType": "sale",
  "propertyType": "apartments",
  "location": "almaty",
  "maxResults": 100,
  "sortBy": "newest",
  "includeDetails": false,
  "searchUrls": []
}
```

# Actor output Schema

## `krishaKzListings` (type: `string`):

One row per krisha.kz advert this run returned, photo first, in the 📊 Overview column order.

## `scrapingSummary` (type: `string`):

Run summary: adverts saved, what was searched, any search that returned nothing with the fix, and an itemized charges statement.

# 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 = {
    "operation": "search",
    "dealType": "sale",
    "propertyType": "apartments",
    "location": "almaty",
    "maxResults": 100,
    "sortBy": "newest",
    "includeDetails": false,
    "searchUrls": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("sian.agency/krisha-property-scraper").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 = {
    "operation": "search",
    "dealType": "sale",
    "propertyType": "apartments",
    "location": "almaty",
    "maxResults": 100,
    "sortBy": "newest",
    "includeDetails": False,
    "searchUrls": [],
}

# Run the Actor and wait for it to finish
run = client.actor("sian.agency/krisha-property-scraper").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 '{
  "operation": "search",
  "dealType": "sale",
  "propertyType": "apartments",
  "location": "almaty",
  "maxResults": 100,
  "sortBy": "newest",
  "includeDetails": false,
  "searchUrls": []
}' |
apify call sian.agency/krisha-property-scraper --silent --output-dataset

```

## MCP server setup

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

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/0w5CveReNyhgK4YpW/builds/yUX5vEu5vYH0O0ePf/openapi.json
