The problem
Krisha.kz is Kazakhstan's biggest real-estate classifieds portal. Tracking apartments and houses for sale or rent in Almaty, Astana or Shymkent means watching its search pages constantly — for market monitoring, inventory feeds, or price research.
The manual version is the usual classifieds slog: open each city page, flip through results, copy titles, prices, room counts, areas and links into a spreadsheet — then repeat for every city and deal type you care about. Krisha.kz offers no public API, and a home-grown scraper has to handle its search structure, pagination and Russian-language listing cards on its own.
What the actor does
The Krisha.kz Kazakhstan Real Estate Listings actor pulls live apartment and house listings from Krisha.kz search-result pages — no login, no API key, no browser or proxies. Per the README:
-
Multiple searches in one run: each query is a
deal:type:citytriple (sale:apartment:almaty,rent:house:astana), where the city is a Krisha.kz slug such asalmaty,astanaorshymkent. Results from all queries are combined into one result set with configurable parallelism and pagination caps (max_itemstotal,max_pagesper query). -
Structured rows from the list-view cards: title, numeric price with currency (KZT), deal type, property type, room count, floor area in square meters, district/street location text, short description, preview photo URL, direct listing URL, a per-row
foundindicator and a scrape timestamp.
Two honesty details worth knowing: rooms is null for studios because krisha.kz never prints a room count for them (the actor never invents 0), and posted_date resolves to an ISO timestamp only when the card's relative date stamp carries enough information — a bare day+month with no year stays null rather than guessed. Coordinates and the full photo gallery are not available on list pages and are not fabricated. Unrecognized cities produce explicit found: false rows, not errors.
Because the actor runs on Apify, the same multi-city input can be scheduled to re-run daily from the console, and every run's dataset exports as CSV, JSON or Excel or pulls through the API — the standard backbone for price-watch spreadsheets and new-listing alerts across Almaty, Astana and Shymkent.
Example: input and output
{
"queries": ["sale:apartment:almaty"],
"max_items": 5,
"max_pages": 1,
"maxConcurrency": 5
}
A real row from a local verification run on 2026-07-30, quoted from the README (description truncated):
{
"query": "sale:apartment:almaty",
"found": true,
"url": "https://krisha.kz/a/show/760760728",
"title": "4-комнатная квартира · 186.58 м²",
"price": 465517100,
"currency": "KZT",
"deal_type": "sale",
"property_type": "apartment",
"rooms": 4,
"area_sqm": 186.58,
"location": "Бостандыкский р-н, мкр Мирас, Саина 1а/1",
"posted_date": null,
"description": "жил. комплекс 1st by BI, 3 этажа, 2026 г.п., потолки 3.4м., санузел 2 с/у и более",
"images": ["https://krisha-photos.kcdn.online/webp/5a/5a3bc160-2897-46e6-865b-72b70f8d63e6/3-full.jpg"],
"source_portal": "krisha-kz",
"scraped_at": "2026-07-30T10:31:25.132Z"
}
A query Krisha.kz does not recognize as a distinct city returns an explicit free row instead of an error, as in the README's example:
{
"query": "sale:apartment:not-a-real-city-9999",
"found": false,
"note": "krisha.kz does not recognize city \"not-a-real-city-9999\" as a distinct location for this search (it did not answer with a page scoped to that city) — treated as zero results, not an error.",
"scraped_at": "2026-07-30T06:51:30.449Z"
}
Like every actor in this series, it runs on Apify: schedule it, monitor it, call it from the API, and export the dataset to JSON, CSV or Excel or push it straight into your own pipeline.
Pricing and the free limit
Pay-per-event: $0.005 per run start plus $0.002 per delivered result. Not-found and failed queries are never charged. A run delivering 100 listings costs $0.005 + 100 × $0.002 = $0.205. Apify's free plan gives $5 of usage credits per month, so $5 covers about 24 such runs — roughly 2,400 listings.
Try it
Add one deal:type:city query per search, hit Start, and pull the combined dataset: Krisha.kz Kazakhstan Real Estate Listings
For AI agents and MCP
A standard Apify actor: JSON in, structured JSON dataset rows out, callable from the Apify API, the JavaScript/Python clients, or the hosted Apify MCP server the README documents. An agent can fan out multiple city queries in one input, branch on found, and rely on honest nulls — studios, missing dates and list-page-only fields are never silently filled.
Top comments (0)