# Kufar Scraper - Belarus Property Listings & Prices (`sian.agency/kufar-property-scraper`) Actor

Данные о недвижимости с Куфар: цены в BYN, USD и EUR, площадь, этаж, адрес, GPS, фото и контакты продавцов. Минск и все регионы, экспорт JSON/CSV.

- **URL**: https://apify.com/sian.agency/kufar-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.76 / 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

## Kufar.by Scraper — Belarus Real Estate Listings & Prices 🚀

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

#### 🎉 The whole Belarusian property market in one run — 27,000 apartment adverts in 138 requests, with no page limit

##### Built for analysts, agencies and investors who need Minsk and the regions as a table, not as browser tabs

### 🔎 What is the Kufar.by Belarus Property Scraper — and when should you use it?

The **Kufar.by Belarus Property Scraper** turns public Kufar property adverts from anywhere in Belarus 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:** Belarusian sale and rental adverts as rows. The asking price or monthly rent comes back in Belarusian roubles, US dollars, euros and Russian roubles at once, alongside floor area, kitchen area, plot size in sotkas and room count. Building facts follow: floor, floors in the building, construction year, wall material, renovation grade, condition, heating, water, sewage and gas. Every row also carries the street address the seller published, GPS coordinates and every photo at full size, plus the region and city, and for Minsk the micro-district and metro station. The seller block names who is advertising and whether it is an agency. Agency rows add the company's VAT number, its registered address and its estate-agency licence details. Switch on full details and each row also carries the seller's complete advert text instead of the 150-character teaser, the seller's feedback score and the video and 3D-tour flags.

**Use something else when:** the property is not in Belarus. Use [Cian Scraper](https://apify.com/sian.agency/cian-property-scraper?fpr=sian) for Russia's leading property portal, with the same sale-and-rent row shape. Use [Avito Real Estate Scraper](https://apify.com/sian.agency/avito-property-scraper?fpr=sian) for the Russian classifieds board, property section, including owner-listed stock. Use [OLX Property Scraper](https://apify.com/sian.agency/olx-property-scraper?fpr=sian) for Poland, Ukraine, Romania, Bulgaria and Kazakhstan from one actor. This actor covers the property vertical Kufar publishes at re.kufar.by: apartments, houses and country cottages, rooms, commercial premises, land plots, garages and parking, and new-build developments, each for sale or for long-term rent. Daily and holiday lets moved to Kufar's travel vertical and are not part of it. Seller phone numbers sit behind Kufar's own click-to-call and are never read, and the site publishes only what is currently advertised, so there is no sold-price history to return.

### 🤖 Use with AI agents

Already connected to the [Apify MCP server](https://mcp.apify.com)? Just ask for this Actor by name: sian.agency/kufar-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 Kufar.by using the Apify Actor `sian.agency/kufar-property-scraper`.

Use it when I need: Belarusian sale and rental adverts as rows. The asking price or monthly rent comes back in Belarusian roubles, US dollars, euros and Russian roubles at once, alongside floor area, kitchen area, plot size in sotkas and room count. Building facts follow: floor, floors in the building, construction year, wall material, renovation grade, condition, heating, water, sewage and gas. Every row also carries the street address the seller published, GPS coordinates and every photo at full size, plus the region and city, and for Minsk the micro-district and metro station. The seller block names who is advertising and whether it is an agency. Agency rows add the company's VAT number, its registered address and its estate-agency licence details. Switch on full details and each row also carries the seller's complete advert text instead of the 150-character teaser, the seller's feedback score and the video and 3D-tour flags.

Don't use it when: the property is not in Belarus — use cian-property-scraper or avito-property-scraper or olx-property-scraper instead.

How to call it: set `propertyCategory` to one of `apartments`, `houses`, `rooms`, `commercial`, `land`, `garages` or `new-developments`, and `dealType` to `sale` or `rent`. For location, pick a `region` (Minsk city or one of the six regions) or name exact places in `cities`; for the capital, `minskDistricts` and `metroStations` narrow it to a neighbourhood or a station. All four location fields are pickers built from Kufar's own place index, so a name the site does not know is rejected up front rather than quietly widening the search. Narrow further with `minPrice`/`maxPrice` (read in whatever `currency` you chose), `rooms`, `minArea`/`maxArea`, `minPlotSotka`/`maxPlotSotka`, `minYearBuilt`/`maxYearBuilt`, `condition` and `sellerType`; anything a filter excludes is never saved and never billed. `includeDetails` opens each advert for its complete text, for an extra charge per advert. To expand adverts you already have, set `operation` to `detail` and pass `listingUrls`; to reach a facet the form does not expose, paste a re.kufar.by search address into `searchUrls`.

Start with this input:
{
  "operation": "search",
  "propertyCategory": "apartments",
  "dealType": "sale",
  "region": "minsk-city",
  "currency": "USD",
  "maxResults": 200
}

Ask me which Belarusian region or cities to cover, whether they want sale or rental adverts, and whether the full seller text is 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 Minsk between $50,000 and $90,000 and rank the micro-districts by median price per square metre.*
- *Find owner-listed rentals in Gomel and Grodno posted this week, with the address and GPS point for each.*
- *List the agencies advertising in Минск-Мир with their VAT numbers, sorted by how much stock each one holds.*

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

### 📋 Overview

**Belarus has one property portal that matters, and nobody had turned it into data.** Kufar carries around 70,000 live property adverts across seven categories: apartments, houses, rooms, commercial premises, land, garages and new builds. This Actor reads all of them, for sale and for rent.

**Why thousands of professionals choose us:**

- ✅ **No page ceiling**: a sweep drains to the last record. The full apartments category, 27,486 adverts, comes back in 138 requests with zero duplicates.
- ⚡ **200 adverts per request**: a 5,000-row market extract finishes in about a minute.
- 🎯 **70 typed fields per advert**, read from Kufar's own attribute block rather than guessed from page text.
- 💰 **$2.00 per 1,000 adverts**, plus a $0.005 run start. Half the regional leader's rate.
- 💎 **Belarusian geography properly modelled**: six regions, 180 cities, Minsk's nine districts, 40 micro-districts and 33 metro stations, all picked from a list rather than typed.
- ✨ **NEW**: four currencies on every row. Belarusian sellers quote in roubles and dollars interchangeably, so a single-currency row cannot be compared with the next one.

### ✨ Features

- 🏠 **Seven property sections**: apartments, houses and dachas, rooms, commercial, land, garages, new-build developments.
- 🤝 **Sale and rent**, each row labelled, with rent terms and prepayment where the seller filled them in.
- 📍 **GPS on every row**, plus the street address the seller published.
- 🚇 **Minsk at neighbourhood level**: filter by micro-district or by metro station.
- 🏢 **Agency intelligence**: company VAT number, registered address and estate-agency licence on agency adverts.
- 🙋 **Owner-only sourcing**: one switch separates private sellers from agencies, and the split is exact.
- 💱 **Prices in BYN, USD, EUR and RUB**, plus price per square metre where the advert states it.
- 🖼️ **Every photo** as a full-size URL, not a thumbnail.
- 🔗 **Paste a search address** from re.kufar.by and every filter in it is honoured, including facets this form does not expose.
- 📄 **Full seller text on demand**: the search returns the first 150 characters, and one switch opens each advert for the rest.

### 🎬 Quick Start

Pick a category, pick sale or rent, press Start. Everything else is optional. The defaults already sweep Belarusian apartments for sale, newest first. Results land in a dataset you can download as JSON, CSV or Excel.

```bash
curl -X POST https://api.apify.com/v2/acts/sian.agency~kufar-property-scraper/runs?token=YOUR_TOKEN \
-d '{"operation": "search", "propertyCategory": "apartments", "dealType": "sale", "region": "minsk-city"}'
```

### 🚀 Getting Started (3 Simple Steps)

#### Step 1: Choose the section

Pick a property category and whether you want adverts for sale or for rent.

#### Step 2: Choose where

Pick a region, or name specific cities. For Minsk you can go further and pick micro-districts or metro stations.

#### Step 3: Press Start

Raise **Max listings** if you want more than the first 200, then export the dataset.

**That's it! In about a minute, you'll have:**

- Up to 200 adverts per request, with 70 fields each
- Prices in four currencies, with price per square metre where Kufar publishes it
- A dataset ready for Excel, BigQuery, a notebook or an AI agent

### 📥 Input Configuration

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `operation` | string | No | `search` sweeps a category; `detail` opens specific adverts |
| `propertyCategory` | string | No | apartments, houses, rooms, commercial, land, garages, new-developments |
| `dealType` | string | No | `sale`, `rent` or `any` |
| `region` | string | No | Minsk city or one of the six regions; defaults to all of Belarus |
| `cities` | array | No | Specific cities and district towns, picked from the list |
| `minskDistricts` | array | No | Minsk micro-districts, picked from the list |
| `metroStations` | array | No | Minsk metro stations, picked from the list |
| `currency` | string | No | Which currency the price filters use: USD, BYN or EUR |
| `minPrice` / `maxPrice` | integer | No | Price band in that currency; 0 means no bound |
| `rooms` | array | No | Room counts to keep; 5 means five or more |
| `minArea` / `maxArea` | integer | No | Floor area in square metres |
| `minPlotSotka` / `maxPlotSotka` | integer | No | Plot size in sotkas (100 m²) |
| `minYearBuilt` / `maxYearBuilt` | integer | No | Construction year band |
| `condition` | string | No | `new`, `secondary` or any |
| `sellerType` | string | No | `agency`, `owner` or anyone |
| `onlyWithPhoto` | boolean | No | Skip adverts with no photograph |
| `newBuildingOnly` | boolean | No | Only flats in newly built blocks |
| `keyword` | string | No | Free-text search over titles and descriptions, in Russian |
| `sort` | string | No | newest, oldest, cheapest, most-expensive |
| `maxResults` | integer | No | Stop after this many adverts |
| `includeDetails` | boolean | No | Open each advert for the full seller description |
| `searchUrls` | array | No | Paste re.kufar.by search addresses instead of using the form |
| `listingUrls` | array | No | Advert addresses or IDs for the `detail` operation |

**Example:**

```json
{
  "operation": "search",
  "propertyCategory": "apartments",
  "dealType": "sale",
  "region": "minsk-city",
  "rooms": ["2", "3"],
  "minPrice": 40000,
  "maxPrice": 90000,
  "currency": "USD",
  "maxResults": 1000
}
```

**Rental sweep with the full seller text:**

```json
{
  "operation": "search",
  "propertyCategory": "apartments",
  "dealType": "rent",
  "cities": ["5", "9"],
  "includeDetails": true,
  "maxResults": 500
}
```

### 📤 Output

Results are saved to the Apify dataset with **70 fields** including:

| Field | Type | Description |
|-------|------|-------------|
| `listingId` | number | Kufar advert ID |
| `propertyTitle` | string | Advert headline as the seller wrote it |
| `url` | string | Link back to the advert |
| `price` | number | Asking price or monthly rent, in your chosen currency |
| `priceByn` / `priceUsd` / `priceEur` / `priceRub` | number | The same price in all four currencies Kufar publishes |
| `pricePerSqm` | number | Price per square metre, where the advert states it |
| `area` / `kitchenArea` / `plotSotka` | number | Floor area, kitchen area, plot size |
| `rooms` / `floor` / `totalFloors` | number | Room count, floor, floors in the building |
| `yearBuilt` / `wallMaterial` / `renovation` | number, string | Construction year, walls, renovation grade |
| `region` / `city` / `microDistrict` / `metroStations` | string, array | Where it is, at four levels |
| `address` / `latitude` / `longitude` | string, number | Street address and GPS point |
| `isAgency` / `sellerName` / `companyVatNumber` | boolean, string | Who is selling, and their registry identifier |
| `imageUrls` / `imageCount` | array, number | Every photo, full size |
| `descriptionText` / `isDescriptionTruncated` | string, boolean | Seller text, and whether it is the teaser or the whole thing |

**Example:**

```json
{
  "listingId": 1084905303,
  "propertyTitle": "Топ-локация у метро Минск Мир в рассрочку",
  "url": "https://re.kufar.by/vi/1084905303",
  "price": 51705.87,
  "priceCurrency": "USD",
  "priceByn": 156136.22,
  "priceEur": 44444,
  "pricePerSqm": 1501,
  "dealType": "sale",
  "propertyCategory": "Apartments",
  "rooms": 1,
  "area": 29.6,
  "floor": 4,
  "totalFloors": 15,
  "yearBuilt": 2027,
  "wallMaterial": "Каркасно-блочный",
  "renovation": "Без отделки",
  "condition": "Новое",
  "region": "Минск",
  "city": "Октябрьский",
  "microDistrict": "Минск-Мир",
  "metroStations": ["Аэродромная"],
  "address": "Игоря Лученка ул, 22, Минск",
  "latitude": 53.86430696970318,
  "longitude": 27.545774777770855,
  "isAgency": true,
  "sellerName": "ООО Международная риэлтерская компания ЭТАЖИ",
  "companyVatNumber": "193981632",
  "imageCount": 14,
  "listedAt": "2026-09-13T03:41:58Z"
}
```

### 💼 Use Cases & Examples

#### 1. Belarusian Property Market Analysis

**Analysts and valuers who need Minsk and the regions as a comparable table.**

**Input:** a category, a deal type and a region, or nothing at all for the whole country.
**Output:** asking price, floor area, rooms, build year and wall material on every row.
**Use:** price per square metre by district, and how stock splits between Soviet-era panel blocks and post-2015 construction.

#### 2. Estate Agency Lead Generation

**Proptech and CRM vendors selling into Belarusian agencies.**

**Input:** set the seller field to agency.
**Output:** company name, VAT number, registered address and estate-agency licence on every advert.
**Use:** group by company to see who holds the stock in a district before you approach any of them.

#### 3. Private-Owner Sourcing

**Acquisition desks and iBuyers who want the half of the market no agency has signed.**

**Input:** set the seller field to private owner.
**Output:** the seller's own name, the street address and the GPS point.
**Use:** build an approach list that has not already been worked by three agencies.

#### 4. New Listing and Price-Change Monitoring

**Aggregators and portals keeping a live mirror of Belarusian supply.**

**Input:** a saved search sorted newest first, on a schedule.
**Output:** everything posted since your last run.
**Use:** keep the advert IDs you have seen, and pay only for what is new. Re-run later to see which adverts moved price and which disappeared.

#### 5. Minsk Rental Yield Screening

**Investors comparing neighbourhoods before they buy.**

**Input:** two runs over the same micro-districts, one for sale and one for rent.
**Output:** rooms, area, price and metro proximity on both sides.
**Use:** a gross-yield picture per neighbourhood that no single Kufar page shows.

#### 6. Commercial and Land Research

**Developers and site finders working outside the residential market.**

**Input:** the commercial or land category, with a plot-size band in sotkas.
**Output:** premises type, offered area, utilities, and distance from the Minsk ring road.
**Use:** shortlist plots and units without clicking through a thousand adverts.

#### 7. Full-Country Data Extract

**Data teams building a repeatable Belarusian market index.**

**Input:** one category, no location filter, a high row budget.
**Output:** the entire category in one dated dataset.
**Use:** because the search has no page ceiling, the same query reruns identically next month.

### 🔗 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/kufar-property-scraper').call({
  operation: 'search',
  propertyCategory: 'apartments',
  dealType: 'sale',
  region: 'minsk-city',
  maxResults: 500,
});

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

#### Python

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

run = client.actor('sian.agency/kufar-property-scraper').call(
    run_input={
        'operation': 'search',
        'propertyCategory': 'apartments',
        'dealType': 'rent',
        'region': 'minsk-city',
        'maxResults': 500,
    }
)

for item in client.dataset(run['defaultDatasetId']).iterate_items():
    print(item['price'], item['city'], item['area'])
```

#### cURL

```bash
curl -X POST 'https://api.apify.com/v2/acts/sian.agency~kufar-property-scraper/runs?token=YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"operation": "search", "propertyCategory": "houses", "dealType": "sale", "maxResults": 200}'
```

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

1. **Trigger**: Schedule, daily or weekly
2. **HTTP Request**: Call the Actor API with your saved search
3. **Process**: Drop advert IDs you have already stored
4. **Action**: Append the new rows to a sheet, a database or a Slack alert

### 📊 Performance & Pricing

#### FREE Tier (Try It Now)

- **25 adverts** per run — every field, every filter, same data
- No credit card required
- Enough to check the fields against your own model before you commit

#### PAID Tier (Production Ready)

- **Unlimited** adverts per run, up to 50,000 in a single sweep
- 200 adverts per request, so a 5,000-row extract takes about a minute
- Pay-per-result: charged per advert returned, never for a search that matched nothing

💰 **$2.00 per 1,000 adverts** plus a $0.005 run start. That is half the regional leader's rate, and the only Kufar Actor built for property rather than for the whole classifieds board.

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

### ❓ Frequently Asked Questions

**Q: How many adverts can one search return?**
A: As many as match. Kufar pages by cursor with no depth limit, so a run drains to the last record. The whole apartments category, about 27,000 adverts, comes back in 138 requests. Use Max listings to stop earlier.

**Q: Do I need an API key, a login or a proxy?**
A: No. Pick a category and press Start.

**Q: Which currency are the prices in?**
A: All four that Kufar publishes: Belarusian roubles, US dollars, euros and Russian roubles. The main price field follows the currency you picked. Belarusian sellers quote in different currencies, so a single-currency row would not be comparable.

**Q: Can I get seller phone numbers?**
A: No. Kufar reveals a phone only behind its own click-to-call, and this Actor does not touch it. You get the seller's published name, and for agencies the company block with its VAT number, registered address and licence details.

**Q: What does the full-details switch add?**
A: The complete seller description. The search returns its first 150 characters, and on most adverts the terms, the viewing arrangements and the agent's own notes sit past that cut. It also adds the seller's feedback score and the video and 3D-tour flags. The micro-district, the metro station, every photo and all four currencies are already on the listing row.

**Q: Can I paste a Kufar search address?**
A: Yes. Build the search on re.kufar.by, copy the address bar into Search URLs, and the category, deal type, location and filters in it are used.

**Q: Does it cover the whole of Belarus?**
A: Yes. All six regions plus Minsk, every city Kufar lists, and all seven property categories for sale and for rent. Kufar is a Belarusian site, so nothing outside Belarus is in this dataset.

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

### 🐛 Troubleshooting

**A search returned no adverts**

- Land plots and new-build developments are sale-only on Kufar, so a rent-only run against them is empty by definition.
- Micro-districts and metro stations only exist for Minsk adverts; using one outside the capital empties the search.
- Clear the narrowest filter and widen the location.

**A city I want is not in the list**

- Kufar groups the smaller towns of each region under "Другие города" (Other towns). Pick that entry, or leave the cities field empty and use the region instead.

**The run stopped before Max listings**

- On the FREE tier every run stops at 25 adverts. Add credits in Apify Console to lift it.
- A search that reaches the end of its result set stops there; the log line says so.

**An advert link came back as not found**

- Belarusian adverts are removed the moment a property is taken. Re-run the search to pick up what is live today.

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

Our actors are ethical and do not extract any private user data, such as email addresses, gender, or location. 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/).

Kufar is a trademark of its owner. This actor is not affiliated with, endorsed by, or sponsored by Kufar.

### 🤝 Support

**Join our active support community**

- For issues or questions, open an issue in the actor's repository
- Check [SIÁN Agency Store](https://apify.com/sian.agency?fpr=sian) for more automation tools
- 📧 <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/kufar-property-scraper/changelog.md

# Actor input Schema

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

Pick one per run. Property Search returns listing rows for any Belarusian region, city or Minsk district, with any filter set. Property Detail takes Kufar advert addresses or IDs and opens each one for the complete seller description. The search row carries only the first 150 characters of that text.

## `propertyCategory` (type: `string`):

Which Kufar property section to read. Apartments is the largest section by far and the one most market studies want. Land plots and new-build developments are sale-only on Kufar, so a rent-only run against them returns nothing rather than an error.

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

Sale adverts carry an asking price; rent adverts carry a monthly rent and, where the seller filled it in, the prepayment terms. Both returns the two mixed, with each row labelled.

## `region` (type: `string`):

One of Belarus's six regions or the city of Minsk. Leave it on All of Belarus to sweep the whole country, which this actor can do in one run because Kufar's search has no page ceiling.

## `cities` (type: `array`):

Narrow the region to specific cities or district towns. Minsk's nine administrative districts are listed here too. Leave it empty to take the whole region. Picking cities from more than one region is fine, and the region field above is then ignored.

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

Stop after this many listings. One call returns up to 200, so the run finishes at the first call that crosses your limit. Kufar's largest property category holds about 27,000 adverts and this actor can drain all of it.

## `keyword` (type: `string`):

Free-text search over advert titles and descriptions, in Russian. Useful for a named development or street ('Минск-Мир', 'Комаровка') that no filter expresses. Leave empty to search the whole category.

## `currency` (type: `string`):

Which currency the price filters below are read in, and which currency the row's main price field carries. Every row also carries the price converted to all four currencies Kufar publishes, so this choice never loses information.

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

Lowest price to include, in the currency selected above. 0 means no lower bound. For rent adverts this is a monthly rent.

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

Highest price to include, in the currency selected above. 0 means no upper bound.

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

Keep only adverts with these room counts. Pick several to combine them. 5 means five or more. Leave empty to return every size. Land, garages and commercial adverts rarely carry a room count, so this filter is for apartments, houses and rooms.

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

Minimum total floor area in square metres. 0 means no minimum. For land plots use the plot-size filter instead — land is measured in sotkas, not square metres.

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

Maximum total floor area in square metres. 0 means no maximum.

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

Minimum land area in sotkas, the Belarusian unit of 100 m². Applies to land plots and to houses that publish a plot size. 0 means no minimum.

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

Maximum land area in sotkas. 0 means no maximum.

## `minYearBuilt` (type: `integer`):

Earliest construction year to include. 0 means no lower bound. Soviet-era stock, which dominates the Belarusian market, mostly dates 1960-1991.

## `maxYearBuilt` (type: `integer`):

Latest construction year to include. 0 means no upper bound. Kufar lists buildings still under construction with a future year.

## `condition` (type: `string`):

Kufar's own new-versus-resale grading, as the seller filled it in. The two split the category exactly, so picking one halves the result set rather than filtering a handful of adverts.

## `sellerType` (type: `string`):

Agency and developer adverts carry a company block with a VAT number, a registered address and the estate-agency licence details. Private-owner adverts carry a first name and a phone the seller published themselves. The two split the category exactly.

## `onlyWithPhoto` (type: `boolean`):

Skip adverts that have no photograph. Photoless adverts are a small minority on Kufar and are usually stale or placeholder listings.

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

Keep only apartments the seller marked as being in a newly built block. This is a different question from the new-versus-resale field: a resale flat can sit in a new building.

## `minskDistricts` (type: `array`):

Minsk's named micro-districts — the level a local buyer actually shops at, below the administrative district. Leave empty to take the whole city. Only Minsk adverts carry a micro-district, so this filter empties a search outside the capital.

## `metroStations` (type: `array`):

Keep only adverts the seller attached to one of these Minsk metro stations. About one Minsk advert in seven names a station, so this is a sharp filter rather than a broad one.

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

Newest first is what you want when you run this on a schedule and only care about what appeared since the last run.

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

Open each advert's own page for the complete seller description. The search returns only its first 150 characters, and on Kufar the terms, the viewing arrangements and the agent's own notes usually sit past that cut. It also adds the seller's feedback score and the video and 3D-tour flags. Costs one extra request per advert, billed as a Property Detail event on top of the listing row.

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

Paste re.kufar.by search addresses instead of filling the fields above. Build the search on the site, copy the address bar, and the category, deal type, location and every filter in it are read straight off the URL — including facets this form does not expose.

## `listingUrls` (type: `array`):

Used by the Property Detail operation: Kufar advert addresses to expand, e.g. https://re.kufar.by/vi/1084903128. A bare advert ID such as 1084903128 works too.

## Actor input object example

```json
{
  "operation": "search",
  "propertyCategory": "apartments",
  "dealType": "sale",
  "region": "any",
  "cities": [],
  "maxResults": 200,
  "keyword": "",
  "currency": "USD",
  "minPrice": 0,
  "maxPrice": 0,
  "rooms": [],
  "minArea": 0,
  "maxArea": 0,
  "minPlotSotka": 0,
  "maxPlotSotka": 0,
  "minYearBuilt": 0,
  "maxYearBuilt": 0,
  "condition": "any",
  "sellerType": "any",
  "onlyWithPhoto": false,
  "newBuildingOnly": false,
  "minskDistricts": [],
  "metroStations": [],
  "sort": "newest",
  "includeDetails": false,
  "searchUrls": [],
  "listingUrls": []
}
```

# Actor output Schema

## `kufarListings` (type: `string`):

Every listing this run returned.

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

HTML summary showing successful and failed results with key metrics

# 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",
    "propertyCategory": "apartments",
    "dealType": "sale",
    "region": "any",
    "cities": [],
    "maxResults": 200,
    "keyword": "",
    "currency": "USD",
    "minPrice": 0,
    "maxPrice": 0,
    "rooms": [],
    "minArea": 0,
    "maxArea": 0,
    "minPlotSotka": 0,
    "maxPlotSotka": 0,
    "minYearBuilt": 0,
    "maxYearBuilt": 0,
    "condition": "any",
    "sellerType": "any",
    "onlyWithPhoto": false,
    "newBuildingOnly": false,
    "minskDistricts": [],
    "metroStations": [],
    "sort": "newest",
    "includeDetails": false,
    "searchUrls": [],
    "listingUrls": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("sian.agency/kufar-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",
    "propertyCategory": "apartments",
    "dealType": "sale",
    "region": "any",
    "cities": [],
    "maxResults": 200,
    "keyword": "",
    "currency": "USD",
    "minPrice": 0,
    "maxPrice": 0,
    "rooms": [],
    "minArea": 0,
    "maxArea": 0,
    "minPlotSotka": 0,
    "maxPlotSotka": 0,
    "minYearBuilt": 0,
    "maxYearBuilt": 0,
    "condition": "any",
    "sellerType": "any",
    "onlyWithPhoto": False,
    "newBuildingOnly": False,
    "minskDistricts": [],
    "metroStations": [],
    "sort": "newest",
    "includeDetails": False,
    "searchUrls": [],
    "listingUrls": [],
}

# Run the Actor and wait for it to finish
run = client.actor("sian.agency/kufar-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",
  "propertyCategory": "apartments",
  "dealType": "sale",
  "region": "any",
  "cities": [],
  "maxResults": 200,
  "keyword": "",
  "currency": "USD",
  "minPrice": 0,
  "maxPrice": 0,
  "rooms": [],
  "minArea": 0,
  "maxArea": 0,
  "minPlotSotka": 0,
  "maxPlotSotka": 0,
  "minYearBuilt": 0,
  "maxYearBuilt": 0,
  "condition": "any",
  "sellerType": "any",
  "onlyWithPhoto": false,
  "newBuildingOnly": false,
  "minskDistricts": [],
  "metroStations": [],
  "sort": "newest",
  "includeDetails": false,
  "searchUrls": [],
  "listingUrls": []
}' |
apify call sian.agency/kufar-property-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,sian.agency/kufar-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/RU1b40qfeucIj9Ion/builds/V011sz1y4EhgTMfxv/openapi.json
