# Unegui Property Scraper - Mongolia Real Estate Listings (`sian.agency/unegui-property-scraper`) Actor

Scrape Unegui.mn property adverts across Mongolia: price in tugrik, rooms, floor area, floor, district and khoroo, GPS, photos, seller and view counts. Apartments, houses, land and commercial space, for sale and to rent. Export to JSON, CSV or Excel.

- **URL**: https://apify.com/sian.agency/unegui-property-scraper.md
- **Developed by:** [SIÁN OÜ](https://apify.com/sian.agency) (community)
- **Categories:** Real estate, Lead generation, Automation
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 1 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

## Unegui Scraper: Mongolia Property Listings & Prices 🏠

[![Store: SIÁN Agency](https://img.shields.io/badge/Store-SI%C3%81N%20Agency-1AE392)](https://apify.com/sian.agency?fpr=sian) [![Store: Krisha.kz](https://img.shields.io/badge/Store-Krisha.kz-1AE392)](https://apify.com/sian.agency/krisha-property-scraper?fpr=sian) [![Store: Kufar.by](https://img.shields.io/badge/Store-Kufar.by-1AE392)](https://apify.com/sian.agency/kufar-property-scraper?fpr=sian) [![Store: Bazaraki](https://img.shields.io/badge/Store-Bazaraki-1AE392)](https://apify.com/sian.agency/bazaraki-property-scraper?fpr=sian)

#### 🎉 Mongolia's property market as rows: 44,000 Unegui.mn adverts, prices in tugrik, Ulaanbaatar down to the khoroo

##### For analysts, agencies, developers and investors who need Ulaanbaatar asking prices they can sort

***

### 🔎 What is the Unegui Mongolia Property Scraper — and when should you use it?

The **Unegui Mongolia Property Scraper** turns public Unegui.mn property adverts from Ulaanbaatar and the rest of Mongolia 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:** Mongolian sale and rental adverts as rows. Each one carries the asking price in tugrik as a number, the site's own price label, the room count, the city, district and khoroo, every photo and a flag for paid placements. The seller block names the account, whether it is a business, and links its profile. Open each advert as well and the row gains GPS coordinates, floor area, floor and building height, year built and the seller's own description. It also gains the full attribute table and the view, favourite and phone-reveal counters.

**Use something else when:** the property is not in Mongolia. Use [Krisha.kz Scraper](https://apify.com/sian.agency/krisha-property-scraper?fpr=sian) for Kazakhstan's largest property portal, covering Almaty, Astana and the regions. Use [Kufar.by Scraper](https://apify.com/sian.agency/kufar-property-scraper?fpr=sian) for Belarusian sale and rental adverts from Minsk and the regions. Use [Bazaraki Scraper](https://apify.com/sian.agency/bazaraki-property-scraper?fpr=sian) for Cyprus property listings with prices in euro. Coverage is the property section of Unegui.mn, across Ulaanbaatar and the aimags. Seller phone numbers appear only after a click on the advert, so they are never collected. Titles, descriptions and attribute values stay in Mongolian, exactly as the seller wrote them. The site lists what is advertised today, so every run returns live adverts and no sold-price history.

### 🤖 Use with AI agents

Already connected to the [Apify MCP server](https://mcp.apify.com)? Just ask for this Actor by name: sian.agency/unegui-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 Mongolian property listings and asking prices from Unegui.mn using the Apify Actor `sian.agency/unegui-property-scraper`.

Use it when I need: Mongolian sale and rental adverts as rows. Each one carries the asking price in tugrik as a number, the site's own price label, the room count, the city, district and khoroo, every photo and a flag for paid placements. The seller block names the account, whether it is a business, and links its profile. Open each advert as well and the row gains GPS coordinates, floor area, floor and building height, year built and the seller's own description. It also gains the full attribute table and the view, favourite and phone-reveal counters.

Don't use it when: the property is not in Mongolia — use krisha-property-scraper or kufar-property-scraper or bazaraki-property-scraper instead.

How to call it: set `dealType` to `sale` or `rent` and `propertyCategory` to one of `all`, `apartment`, `house`, `land`, `office`, `commercial`, `industrial`, `country-house`, `garage`, `basement`, `dormitory`, `ger` (sale only), `daily-rent` or `meeting-room` (both rent only). On apartments, `rooms` takes `1` to `5`, or `shared` on rentals. `district` takes a district of Ulaanbaatar or an aimag; only adverts whose own location line names that place are returned and charged. `keyword` runs the site's own text search inside the category, and `sortBy` takes `newest`, `cheapest` or `expensive`. Unegui shows at most 99 pages (5,940 adverts) of any one list, so split a big category by `rooms`, add a `keyword` or change `sortBy` to read deeper. `includeDetails` opens each advert for its full record, for an extra charge per advert. To expand adverts you already have, set `operation` to `detail` and pass whole advert addresses in `listingUrls`; to reproduce a list you built on the site, paste its address into `searchUrls`.

Start with this input:
{
  "operation": "search",
  "dealType": "rent",
  "propertyCategory": "apartment",
  "rooms": "2",
  "district": "khan-uul",
  "sortBy": "newest",
  "maxResults": 120,
  "includeDetails": true
}

Ask me which district and property category to cover, whether they want adverts for sale or to rent, and whether the full advert record is worth the extra charge per advert, then run the Actor and summarise the results as a table.
```

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

- *Pull two-room apartments to rent in Khan-Uul, newest first, with floor area and coordinates, and give me the median monthly rent.*
- *Compare the asking price per square metre of two-room flats for sale in Bayangol and Bayanzurkh, split by year built.*
- *List the business accounts advertising offices for sale in Ulaanbaatar, with how many active adverts each one runs.*

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

### 📋 Overview

**Unegui.mn is where Mongolia advertises property.** On 5 October 2026 it carried 44,000 property adverts: 30,302 for sale and 13,697 to rent. This Actor turns any slice of that into rows, with the price, the rooms, the district and khoroo, the floor area and the seller behind each advert.

**What you get:**

- ✅ **Every property category**: apartments, houses, land, offices, retail space, industrial objects, country houses, garages, basements, dormitories and gers. Sale and rent both, plus daily rentals and meeting rooms.
- ⚡ **60 adverts per page**: two-room flats in one district come back in a normal run.
- 🎯 **64 fields per row**: asking price in tugrik, price per square metre, floor area, floor and building height, year built, GPS, balcony, garage, windows, payment terms.
- 💰 **Charged per advert returned**: a search that matches nothing costs nothing, and neither do adverts outside the district you picked.
- 💎 **Districts and aimags from a list**: the nine districts of Ulaanbaatar, the city as a whole and eleven aimags, picked from a list rather than typed.
- 🔢 **Numbers you can calculate with**: price, area, floor and year arrive as numbers, with the site's own price label kept beside the price.

***

### ✨ Features

- 🏘️ **13 property categories**: pick one, or set the category to all and take the whole sale or rent side in one run.
- 🛏️ **Room filter for apartments**: one to five rooms, or shared rooms on rentals.
- 📍 **21 places to filter by**: Khan-Uul, Bayanzurkh, Sukhbaatar, Bayangol, Songinokhairkhan, Chingeltei, Nalaikh, Baganuur, Bagakhangai, Ulaanbaatar as a whole, and eleven aimags, among them Tuv, Darkhan-Uul and Orkhon.
- 🔎 **Keyword search inside a category**: the site's own text search, so "Зайсан" or "шинэ байр" narrows the list before anything is returned.
- 📄 **Full advert records on demand**: the seller's description, coordinates, area, floor, year built, the attribute table and the view, favourite and phone-reveal counters.
- 🏢 **Seller details**: business or private, verified or not, profile link, member since, and how many active adverts the account runs.
- ⭐ **Paid placements flagged**: VIP and featured adverts are marked, so you can leave them out of an average.
- 📸 **Every photo**: the whole gallery, plus flags for a video and a floor plan.
- 🔗 **Paste your own addresses**: a category list you built on the site, or advert pages you already hold.
- 📊 **JSON, CSV or Excel**: straight out of the dataset.

***

### 🎬 Quick Start

Pick sale or rent, pick a category, press Start. The Actor reads Unegui's own lists 60 adverts at a time and stops at the number you asked for. An empty input returns 120 apartments for sale, newest first.

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

***

### 🚀 Getting Started (3 Simple Steps)

#### Step 1: Choose the market

Set **For sale or to rent**, then pick a **Property category**. Apartments for sale is the default.

#### Step 2: Narrow it down

Pick a **District** and, for apartments, a **Room count**. Add a **Keyword** if you want a building, a street or a complex.

#### Step 3: Press Start

Switch on **Include details** if you need coordinates, floor area and the seller's description, then run it.

**That's it. In a few minutes you'll have:**

- Asking prices in tugrik, with the site's own label and price per square metre
- Rooms, floor area, floor, building height and year built
- The city, district and khoroo of every advert, and the seller behind it

***

### 📥 Input Configuration

| Field | Type | Required | Description |
|---|---|---|---|
| `operation` | string | No | `search` to read a category list (default), `detail` to open adverts you already have |
| `dealType` | string | No | `sale` or `rent` |
| `propertyCategory` | string | No | `all`, `apartment`, `house`, `land`, `office`, `commercial`, `industrial`, `country-house`, `garage`, `basement`, `dormitory`, `ger` (sale only), `daily-rent` and `meeting-room` (rent only) |
| `rooms` | string | No | Apartments only: `any`, `1` to `5`, or `shared` (rent only) |
| `district` | string | No | `any`, `ulaanbaatar`, a district such as `khan-uul` or `bayangol`, or an aimag such as `tuv` or `darkhan-uul` |
| `keyword` | string | No | Unegui's own text search inside the category |
| `sortBy` | string | No | `newest`, `cheapest` or `expensive` |
| `maxResults` | integer | No | Stop after this many adverts. Default 120, maximum 5,940 |
| `includeDetails` | boolean | No | Open each advert for its full record, charged per advert |
| `searchUrls` | array | No | Unegui category addresses copied from your browser |
| `listingUrls` | array | No | Advert addresses to open, for `operation: "detail"` |

**Example: two-room apartments to rent in Khan-Uul, with the full record:**

```json
{
  "operation": "search",
  "dealType": "rent",
  "propertyCategory": "apartment",
  "rooms": "2",
  "district": "khan-uul",
  "sortBy": "newest",
  "maxResults": 120,
  "includeDetails": true
}
```

**Example: open adverts you already hold:**

```json
{
  "operation": "detail",
  "listingUrls": [
    "https://www.unegui.mn/adv/10781607_narny-khoroololyn-ondort-2-oroo-55mkv/"
  ]
}
```

Paste the whole advert address from your browser. A bare advert number is refused.

**Reading past 5,940 adverts:** Unegui shows at most 99 pages (5,940 adverts) of any one list. Apartments for sale hold 15,951, so read them in slices: one run per room count, a keyword, or the same list sorted cheapest first and then most expensive first.

***

### 📤 Output

Results land in the Apify dataset with **64 fields**. Field names are in English. Titles, descriptions and attribute values stay in Mongolian, exactly as the seller wrote them. The most-used fields:

| Field | Type | Description |
|---|---|---|
| `listingId` | number | Unegui's advert number |
| `propertyTitle` | string | The advert headline, in Mongolian |
| `url` | string | The advert's own address |
| `price` | number | Asking price in tugrik (MNT) |
| `priceLabel` | string | The site's own label, for example "379 сая ₮" |
| `originalPrice` | number | The price before a reduction, when there was one |
| `pricePerSqm` | number | Tugrik per square metre, on opened adverts |
| `dealType` | string | `sale` or `rent` |
| `categoryName` | string | The category in English, for example Apartments |
| `rooms` | number | Room count |
| `city` / `district` / `subDistrict` | string | City, district and khoroo or area |
| `latitude` / `longitude` | number | Map coordinates, on opened adverts |
| `areaSqm` / `floor` / `buildingFloors` | number | Floor area, the advert's floor, and the building's height |
| `yearBuilt` | number | Year the building came into use |
| `attributes` | array | Every name and value pair from the advert page |
| `adPlacement` | string | Paid placement, for example VIP or Онцгой |
| `sellerName` / `sellerIsBusiness` | string / boolean | Who placed the advert, and whether it is a business account |
| `viewCount` / `favoriteCount` / `phoneViewCount` | number | The advert's counters, on opened adverts |
| `publishedLabel` / `publishedAt` | string | The site's own age label and the publication date |

A search without **Include details** returns the card fields: id, title, address, price, deal type, category, rooms, location, photos, placement, the seller block and the published label. Coordinates, area, floor, year built, the attribute fields and the description come from opening the advert. So do price per square metre, the counters, the publication and update dates, and the seller's member-since date and active advert count.

**Example row** (a two-room flat for sale in Bayangol, opened in full; photos and attributes shortened):

```json
{
  "listingId": 10781607,
  "propertyTitle": "Нарны хороололын өндөрт 2 өрөө 55мкв байр",
  "url": "https://www.unegui.mn/adv/10781607_narny-khoroololyn-ondort-2-oroo-55mkv/",
  "price": 379000000,
  "priceLabel": "379 сая ₮",
  "priceCurrency": "MNT",
  "priceNote": "Үнэ тохирно",
  "originalPrice": null,
  "pricePerSqm": 6890909,
  "dealType": "sale",
  "categoryName": "Apartments",
  "rooms": 2,
  "city": "Улаанбаатар",
  "district": "Баянгол",
  "subDistrict": "Нарны хороолол",
  "latitude": 47.90771,
  "longitude": 106.899413,
  "coordinatesApproximate": false,
  "areaSqm": 55,
  "floor": 12,
  "buildingFloors": 23,
  "yearBuilt": 2018,
  "constructionStatus": "Ашиглалтад орсон",
  "elevator": "Цахилгаан шаттай",
  "balcony": "1 тагттай",
  "paymentTerms": "Бэлэн төлөлтөөр",
  "attributes": [
    { "name": "Шал", "value": "Паркет" },
    { "name": "Тагт", "value": "1 тагттай" }
  ],
  "photoCount": 13,
  "adPlacement": "Онцгой",
  "sellerIsBusiness": false,
  "sellerMemberSince": "2020-01",
  "sellerActiveAdverts": 9,
  "viewCount": 106,
  "favoriteCount": 10,
  "phoneViewCount": 2,
  "publishedLabel": "3 өдрийн өмнө",
  "publishedAt": "2026-10-02",
  "status": "success",
  "_operation": "search"
}
```

***

### 💼 Use Cases & Examples

#### 1. Ulaanbaatar Housing Market Analysis

**An analyst measuring asking prices by district instead of guessing at them.**

**Input:** `dealType: "sale"`, `propertyCategory: "apartment"`, one district, with **Include details** on.
**Output:** Price, floor area, price per square metre, year built and khoroo on every advert.
**Use:** Compare what a two-room flat lists for in Khan-Uul against Bayanzurkh, or new builds against older blocks.

#### 2. Rental Yield Research

**An investor comparing like with like.**

**Input:** The same district and room count, run once for sale and once for rent.
**Output:** Two sets of rows with the same shape: rooms, area, floor, district and khoroo.
**Use:** Divide the rent by the price per district and room count to get a gross yield on the site's own numbers.

#### 3. Daily Market Monitoring

**A broker who wants every new advert in a district each morning.**

**Input:** `sortBy: "newest"`, a district and a category, on an Apify schedule.
**Output:** The latest adverts, each with the site's age label and an approximate publication date.
**Use:** Keep only advert numbers you have not seen before and send the new ones to your team.

#### 4. Agency and Developer Lead Lists

**A sales team mapping who is active in a category.**

**Input:** A category and a district, with **Include details** on.
**Output:** Every advert with the account behind it: business or private, verified or not, member since, active advert count and profile link.
**Use:** Rank agencies and developers by live stock, or keep only private sellers.

#### 5. Land and Plot Research

**A developer or buyer looking for plots.**

**Input:** `propertyCategory: "land"`, with `district` set to `tuv` or a city district.
**Output:** About 3,400 plots for sale across the site, with price, land use and coordinates on opened adverts.
**Use:** Put the plots on a map and filter by distance from the city.

#### 6. Commercial Space Tracking

**A consultant advising business tenants and landlords.**

**Input:** `propertyCategory: "office"` or `"commercial"`, for sale or to rent.
**Output:** Asking prices and rents for offices and retail space, with area and location.
**Use:** Track asking rents per square metre and how many units are on offer each month.

#### 7. Due Diligence Before a Purchase

**A buyer checking one asking price against the market.**

**Input:** A keyword for the complex or street, in the same category and district.
**Output:** Every comparable advert with floor, building height, year built and view counts.
**Use:** See whether the asking price sits above or below similar flats before you make an offer.

***

### 🔗 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/unegui-property-scraper').call({
  operation: 'search',
  dealType: 'sale',
  propertyCategory: 'apartment',
  rooms: '3',
  district: 'bayanzurkh',
  sortBy: 'cheapest',
  maxResults: 300,
});

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/unegui-property-scraper').call(run_input={
    'operation': 'search',
    'dealType': 'rent',
    'propertyCategory': 'apartment',
    'district': 'khan-uul',
    'includeDetails': True,
    'maxResults': 120,
})

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

#### cURL

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

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

1. **Trigger**: a daily schedule, or a webhook from your CRM
2. **HTTP Request**: call the Actor with your saved input
3. **Process**: filter the JSON on price, rooms or district
4. **Action**: write new adverts to a sheet 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 data shape against your own model

#### PAID Tier (Production Ready)

- Up to **5,940 adverts** per list, the most Unegui shows, and as many lists as you need
- Pay per advert returned: error rows, adverts outside your district and searches that match nothing are not charged
- Opening each advert for its full record is a separate, optional charge

| Event | Store price | Apify Free plan |
|---|---:|---:|
| Run start | $0.005 per run | $0.02 per run |
| Property listing | $0.0015 per advert | $0.006 per advert |
| Property detail | $0.003 per advert opened in full | $0.012 per advert |

A search with **Include details** on bills the listing and the detail for each advert: $0.0045 at the Store price. Higher Apify plans pay less per event. 1,000 two-room flats with card fields cost $1.50 plus the run start.

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

***

### ❓ Frequently Asked Questions

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

**Q: How many adverts can one run return?**
A: Up to 5,940 from one list, the most Unegui shows (99 pages of 60). FREE accounts get 25 per run. To read a bigger category, split it by room count, add a keyword, or run the same list with a different sort order.

**Q: What currency are prices in?**
A: Mongolian tugrik (MNT), as a number in `price`. The site's own label stays beside it in `priceLabel`, for example "379 сая ₮", which means 379 million.

**Q: Are the texts in English?**
A: Field names are in English and so is `categoryName`. Titles, descriptions and attribute values are in Mongolian, exactly as the seller wrote them. Price, area, floor and year are parsed into numbers, so you can calculate without reading the text.

**Q: How does the district filter work?**
A: Pick a district of Ulaanbaatar, the city as a whole, or an aimag. Each advert's own location line is checked, and only adverts located there are returned and charged.

**Q: Do I get the seller's phone number?**
A: No. Unegui shows phone numbers only after a click on the advert, and this Actor does not collect them. You get the seller's name, profile link, account type and verification flag.

**Q: What does Include details add?**
A: The seller's description, GPS coordinates, floor area, floor, building height, year built, balcony, garage, windows, doors, payment terms, the full attribute table, price per square metre and the view, favourite and phone-reveal counters.

**Q: How fresh is the data?**
A: Live. Every run reads the site when you press Start. Each row keeps the age label Unegui shows, for example "5 өдрийн өмнө" (five days ago), plus an approximate date worked out from it.

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

***

### 🐛 Troubleshooting

**A search returned nothing**

- Check the category belongs to the side of the market you picked. Gers are sale only; daily rentals and meeting rooms are rent only.
- Shared rooms exist only on rentals, and the room filter applies to apartments only.
- A small aimag in a narrow category can be genuinely empty. Widen the district or clear the keyword.

**The run returned fewer adverts than I asked for**

- The list may simply hold fewer adverts. With a district set, only adverts whose own location line names that place are kept and charged.

**The run stopped at 5,940 adverts**

- That is the deepest Unegui shows of any one list. Split the category by room count, add a keyword, or run it again sorted cheapest first and most expensive first.

**A detail run refused an advert**

- Paste the whole address from your browser, in the form https://www.unegui.mn/adv/10781607_narny-khoroololyn-ondort-2-oroo-55mkv/. A bare advert number is refused.

**An advert came back as an error row**

- The row says "Not found" when the advert has been sold, rented or withdrawn. Error rows are never charged. Re-run the search to pick up what is live now.

***

### ⚖️ 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/).

This Actor reads only publicly visible pages and follows unegui.mn's robots.txt. Unegui's terms reserve copyright in the site's content. You are responsible for how you use the data, and you should not republish adverts wholesale.

Unegui is a trademark of its owner. This actor is not affiliated with, endorsed by, or sponsored by Unegui Group LLC or Larixon Classifieds.

***

### 🤝 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>
- ⭐ Found it useful? [Leave a review](https://apify.com/sian.agency/unegui-property-scraper/reviews)

***

**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/unegui-property-scraper/changelog.md

# Actor input Schema

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

🎯 **ONE OPERATION PER RUN.** Property Search walks one Unegui property category and returns one row per advert, 60 adverts per page. Property Detail opens the advert addresses you paste in "Unegui advert addresses" and returns the full record for each.

💡 **TIP:** want full records straight from a search? Leave this on Property Search and turn on "Open each advert for the full record".

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

🤝 **SALE OR RENT.** Unegui keeps sale and rental adverts in separate sections, so a run reads one side.

💡 **TIP:** for rental yield, run the same category and room count once on each side and join the two datasets by district.

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

🏢 **CATEGORY.** Unegui's own property categories. Apartments are the biggest market, with about 15,950 for sale.

⚠️ Some categories exist on one side only: gers are for sale only, daily rentals and meeting rooms are to rent only. Pick one on the wrong side and the run stops with a message saying so. No adverts are charged.

## `rooms` (type: `string`):

🛏️ **APARTMENTS ONLY.** Unegui splits apartments by room count. Pick one to read just that list. Leave it on any number of rooms for other categories; a room count there is refused and no adverts are charged.

💡 **TIP:** each room count is a separate list on Unegui, so splitting by rooms gets you past the 5,940-advert limit of a single list.

A room in a shared flat is listed to rent only.

## `district` (type: `string`):

📍 **LOCATION FILTER.** Keeps only adverts whose own location line names this district or aimag. Adverts located elsewhere are skipped and not charged. Also applies to pasted category addresses.

💡 **TIP:** the run reads through the category to find matches, so a small district can take many pages to fill your maximum. Khan-Uul and Bayanzurkh fill fastest.

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

🔎 **TEXT SEARCH (optional).** Unegui's own search inside the category. Try a building or complex name (Зайсан, River Garden) or a word such as шинэ (new). Leave it empty to read the whole category.

💡 **TIP:** a keyword is another way to split a big category into lists under 5,940 adverts.

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

↕️ **ORDER.** The order Unegui lists adverts in. Newest first suits a daily monitor. The price orders give a quick look at the bottom or the top of a market.

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

🔢 **HOW MANY.** The run stops after this many adverts. Unegui serves 60 per page and shows at most 99 pages of any list, so one list gives up to 5,940 adverts.

💎 Paid Apify plans get the full amount you set. Free plan runs return up to 25 rows, enough to check the data before you scale up.

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

📄 **FULL RECORDS (optional).** Opens every advert the search returns and adds the seller's description, GPS, floor area, floor, building height, year built, balcony, garage, windows, payment terms, the full attribute table and the view counters to its row.

💰 Each opened advert is charged as a Property Detail on top of the listing. Leave it off for a cheaper sweep of prices and locations.

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

🔗 **PASTE CATEGORY PAGES (optional, Property Search).** Set up a property category on unegui.mn, then paste the address from your browser, for example https://www.unegui.mn/l-hdlh/l-hdlh-zarna/oron-suuts-zarna/2-r/

Category, rooms, keyword and sort then come from the address and the same settings above are ignored. District, maximum and full records still apply. Only property addresses are accepted; anything else is skipped with the reason.

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

🏷️ **FOR PROPERTY DETAIL.** The adverts to open, as whole Unegui addresses, for example https://www.unegui.mn/adv/10310151_11t-khonogiin-bair-iag-odoo-belen-baina/

⚠️ The advert number alone is not enough. Copy the full address from your browser.

📂 Use Bulk edit to paste many at once, or upload a .txt file. Duplicates are removed before the run starts, so you never pay twice for one advert.

## Actor input object example

```json
{
  "operation": "search",
  "dealType": "sale",
  "propertyCategory": "apartment",
  "rooms": "any",
  "district": "any",
  "keyword": "",
  "sortBy": "newest",
  "maxResults": 120,
  "includeDetails": false,
  "searchUrls": [],
  "listingUrls": []
}
```

# Actor output Schema

## `uneguiAdverts` (type: `string`):

Every property advert this run returned, one row each.

## `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",
    "dealType": "sale",
    "propertyCategory": "apartment",
    "rooms": "any",
    "district": "any",
    "keyword": "",
    "sortBy": "newest",
    "maxResults": 120,
    "includeDetails": false,
    "searchUrls": [],
    "listingUrls": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("sian.agency/unegui-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",
    "propertyCategory": "apartment",
    "rooms": "any",
    "district": "any",
    "keyword": "",
    "sortBy": "newest",
    "maxResults": 120,
    "includeDetails": False,
    "searchUrls": [],
    "listingUrls": [],
}

# Run the Actor and wait for it to finish
run = client.actor("sian.agency/unegui-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",
  "propertyCategory": "apartment",
  "rooms": "any",
  "district": "any",
  "keyword": "",
  "sortBy": "newest",
  "maxResults": 120,
  "includeDetails": false,
  "searchUrls": [],
  "listingUrls": []
}' |
apify call sian.agency/unegui-property-scraper --silent --output-dataset

```

## MCP server setup

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