Krisha APIkrisha.kz ↗
Search and retrieve property listings from krisha.kz. Access sale and rental data for apartments, houses, and commercial properties across Kazakhstan.
What is the Krisha API?
The Krisha.kz API exposes 3 endpoints for searching and retrieving property listings from Kazakhstan's largest real estate marketplace. Use search_listings to query apartments, houses, land, and commercial properties by city, deal type, room count, and price range, then pull full listing details — including coordinates, photos, area, and seller information — via get_listing_detail.
curl -X GET 'https://api.parse.bot/scraper/320b67d0-20cf-468a-a587-d9fd52942a2d/search_listings?city=almaty&page=1&sort=add_date-desc&rooms=2&area_to=50&price_to=50000000&area_from=25&deal_type=prodazha&price_from=10000000&property_type=kvartiry' \ -H 'X-API-Key: $PARSE_API_KEY'
Search for real estate listings on krisha.kz with filters for deal type, property type, city, rooms, price range, total area range and an owners-only switch, ordered by the site's sort menu (default newest first, i.e. the site's add_date descending; price ascending/descending also available). All filters, including the area range and owners_only, are applied by krisha.kz's own search before results are returned, so the result set and total_count reflect the filtered search. owners_only=true applies the site's native 'От хозяев' (from owners) checkbox, restricting results to ads posted by private owners rather than agents/agencies/developers; omitted or false leaves the search unfiltered on seller type, and the response shape is identical either way (on the owners-only search the site's first page was observed without promoted 'hot' cards). The site serves fixed pages of 20 regular cards, and its first page additionally carries up to 3 promoted 'hot' cards (is_hot=true) that sit at the top regardless of sort or date. By default one call returns one site page (~20-23 listings). per_page (1-100) asks for more listings per call: it is rounded up to whole site pages (per_page=100 fetches 5 site pages, ~103 listings in 5 round trips), and page then tiles the result stream in units of that many site pages, so page=2 with per_page=100 returns site pages 6-10. site_pages_fetched reports how many site pages were fetched; a page past the end returns an empty listings array. Each listing carries the listing id, numeric price in tenge (a monthly rent for the rental deal type; for new-building offers the developer's starting price, with price_text keeping the site's wording), residential complex name when shown (null otherwise), full address, rooms, total area in m², floor and total floors, year built, locally computed price_per_m2 (price / area rounded to the nearest tenge), and the card date: date_text is the site's own text (day and abbreviated Russian month, no year) and published_at is that date resolved to ISO YYYY-MM-DD against the Almaty calendar (most recent past occurrence). The card shows a single date: it is the site's add_date, which the site also uses as the default sort key and which moves when a seller renews (bumps) an ad, so it is best read as 'listed or last bumped'; krisha.kz does not expose a separate last-update date on search results, so no updated_at is provided. Fields the card does not show are null: year_built appears on sale cards but was absent on every rental card observed; floor is absent for new-building layout offers. Seller contacts, photos and full descriptions are not included; description_snippet is the short card preview text. total_count reports the full result-set size as the site formats it (digits grouped with spaces). listing_ids lists the ids returned in this call as integers. A city slug the site does not recognise as a region is rejected with a stale_input error, as are sort values outside the site's menu, per_page outside 1-100, non-numeric area_from/area_to values, and owners_only values other than true/false.
| Param | Type | Description |
|---|---|---|
| city | string | City slug to filter by (e.g., 'almaty', 'astana'). Omitting returns listings from all cities; an unrecognised slug yields a stale_input error. |
| page | integer | Page number for pagination (1-based). Pages are counted in units of per_page (rounded up to whole site pages of 20). |
| sort | string | Result ordering from the site's sort menu; newest first is the site's default. Any other value is rejected with stale_input. |
| rooms | string | Number of rooms to filter by, comma-separated for multiple values (e.g., '2' or '2,3'). |
| area_to | number | Maximum total area in square meters (inclusive), applied by the site's own search filter. Non-negative number, decimals allowed (e.g. 50). Omitted: no upper bound. |
| per_page | integer | Approximate number of listings per call, 1-100. Rounded up to whole site pages of 20 regular cards (plus up to 3 promoted cards on the site's first page), each site page costing one round trip. Omitted: one site page (~20-23 listings). |
| price_to | integer | Maximum price filter in tenge. |
| area_from | number | Minimum total area in square meters (inclusive), applied by the site's own search filter. Non-negative number, decimals allowed (e.g. 25 or 25.5). Omitted: no lower bound. |
| deal_type | string | Type of deal. |
| price_from | integer | Minimum price filter in tenge. |
| owners_only | boolean | When true, applies the site's native 'От хозяев' (from owners) filter so only ads posted by private owners are returned; false or omitted leaves seller type unfiltered. Values other than true/false are rejected with stale_input. |
| property_type | string | Property type to search. |
{
"type": "object",
"fields": {
"sort": "string sort code applied (SortOrder wire value)",
"listings": "array of listing objects, one per card fetched",
"listing_ids": "array of integer listing IDs from window.data, across all site pages fetched",
"total_count": "string with total number of matching listings after all filters, including the area range and owners_only (formatted with spaces)",
"current_page": "integer indicating the requested page number",
"listings[].id": "string listing ID (numeric string, same value as listing_id inputs elsewhere)",
"listings[].area": "number total area in square meters (within area_from..area_to when those filters are given)",
"listings[].city": "string city name shown on the card",
"listings[].floor": "integer floor of the unit, or null when not shown (new-building layouts)",
"listings[].price": "integer price in tenge parsed from the card (monthly rent for arenda; starting price for new-building offers)",
"listings[].rooms": "integer number of rooms",
"listings[].title": "string card title with rooms, area and floor",
"listings[].is_hot": "boolean true for promoted 'hot' cards pinned at the top of the site's first page regardless of sort",
"site_pages_fetched": "integer number of site pages fetched for this call (1 unless per_page > 20)",
"listings[].subtitle": "string district/street line of the address as shown on the card",
"listings[].date_text": "string date as shown on the card (day and abbreviated Russian month, e.g. '18 сент.'), or null when the card shows none",
"listings[].price_text": "string price as displayed by the site, e.g. 'от 34 305 090 ₸'",
"listings[].year_built": "integer year the building was built / is due for completion, or null when the card does not show it",
"listings[].complex_name": "string residential complex name, or null when the card shows none",
"listings[].full_address": "string city plus subtitle joined with ', '",
"listings[].price_per_m2": "integer computed locally as price / area rounded to the nearest tenge; null when price or area is missing",
"listings[].published_at": "string ISO date YYYY-MM-DD resolved from date_text: the site's add_date, i.e. when the ad was listed or last renewed/bumped; null when date_text is missing or unparseable",
"listings[].total_floors": "integer total floors in the building, or null when not shown",
"listings[].description_snippet": "string short preview text of the listing description"
},
"sample": {
"data": {
"sort": "price-asc",
"listings": [
{
"id": "1015799559",
"area": 45.4,
"city": "Алматы",
"floor": null,
"price": 6500000,
"rooms": 2,
"title": "2-комнатная квартира · 45.4 м²",
"is_hot": false,
"subtitle": "Наурызбайский р-н, мкр Шугыла 342/1 — Абая",
"date_text": "17 сент.",
"price_text": "6 500 000 ₸",
"year_built": 2026,
"complex_name": "Altyn dala",
"full_address": "Алматы, Наурызбайский р-н, мкр Шугыла 342/1 — Абая",
"price_per_m2": 143172,
"published_at": "2026-09-17",
"total_floors": null,
"description_snippet": "жил. комплекс Altyn dala, монолитный дом, 2026 г.п., потолки 3м., Продаю квартиру по переуступке Все вопросы по телефону"
}
],
"listing_ids": [
1015799559
],
"total_count": "16 619",
"current_page": 1,
"site_pages_fetched": 1
},
"status": "success"
}
}About the Krisha API
What the API covers
The Krisha.kz API gives structured access to sale and rental listings across Kazakhstan. search_listings accepts filters for city (slug values like almaty or astana), deal_type (prodazha for sale, arenda for rent), property_type (kvartiry, doma-dachi, kommercheskie, uchastki), rooms (comma-separated values), and price_from/price_to in tenge. Responses include a listings array with per-listing id, price_text, title, subtitle, and description_snippet, along with a flat listing_ids array and a total_count string for pagination planning.
Listing detail data
get_listing_detail takes a listing_id from search results and returns the full advert object: price, addressTitle, square, rooms, photos, map coordinates, description, and ownerName. The adverts array adds card-level data including fullAddress and priceM2 (price per square meter), which is useful for comparative analysis across neighborhoods.
Contact information
get_listing_contact returns owner_name, user_type (distinguishing private owners from agents), and the listing_id. Full phone numbers are not returned directly — the response includes a phones_url path and a note that phone retrieval requires solving a reCAPTCHA challenge on the source site. Plan your contact-retrieval workflows around this constraint.
The Krisha API is a managed, monitored endpoint for krisha.kz — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when krisha.kz 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 krisha.kz 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?+
- Aggregate apartment listings in Almaty and Astana filtered by room count and price range for a property search app
- Track price-per-square-meter trends across neighborhoods using the
priceM2field fromget_listing_detail - Identify whether a listing is from a private owner or an agent using the
user_typefield inget_listing_contact - Build a map-based property browser using
mapcoordinates returned in theadvertobject - Monitor new commercial property listings (
kommercheskie) in a target city by pollingsearch_listingswithdeal_typeandproperty_typefilters - Compare land listings (
uchastki) for sale within a defined tenge price band across multiple cities
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does krisha.kz have an official developer API?+
What does `search_listings` return and how does pagination work?+
search_listings returns a listings array with summary fields (id, price_text, title, subtitle, description_snippet), a flat listing_ids array, a total_count string, and a current_page integer. Use the page parameter to iterate through results. total_count is returned as a string, so parse it to an integer before using it for page-count arithmetic.Can I retrieve full phone numbers for listing owners?+
get_listing_contact returns owner_name and user_type without requiring any challenge, but full phone numbers are gated behind a reCAPTCHA on the source site. The phones_url field points to where phone data can be fetched, but automated retrieval of phone numbers is not supported by this API.Does the API cover new-development (zhk / жилой комплекс) project pages?+
search_listings and detailed via get_listing_detail. New-development project profiles and developer-level data are not exposed. You can fork this API on Parse and revise it to add an endpoint targeting those project pages.Are listings from cities outside Almaty and Astana available?+
city parameter in search_listings returns listings across all cities on krisha.kz. You can also pass other city slugs supported by the site. Coverage depends on listing volume in each city, which varies significantly outside the two major urban centers.