# DOM.RIA Listing Lookup — Ukraine Real Estate API (`accountable_eel/domria-listing-lookup`) Actor

Look up real estate listings on dom.ria.com, Ukraine's dominant property marketplace, by URL. Get price, address, room count, total/living/kitchen area, floor, and seller name. Pay only for listings that resolve.

- **URL**: https://apify.com/accountable\_eel/domria-listing-lookup.md
- **Developed by:** [Adrian Voss](https://apify.com/accountable_eel) (community)
- **Categories:** Real estate, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 successful lookups

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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## DOM.RIA Listing Lookup — Ukraine Real Estate API

Look up any real estate listing on [dom.ria.com](https://dom.ria.com), Ukraine's largest
property marketplace, by URL — price, address, room count, total/living/kitchen area,
floor, seller name, and description. This actor reads the listing's own structured
`Product` data plus its Ukrainian-language facts panel directly, no login and no manual
copy-pasting required.

### Features

- **URL → full listing record.** Title, price, currency, availability, address, and
  seller name pulled straight from the page's structured product data.
- **Real area & room breakdown.** Total, living, and kitchen area in m², room count, and
  floor / building-floor-count — parsed from the listing's Ukrainian facts panel
  (Cyrillic units like "Загальна площа" and "поверх"), not guessed from layout.
- **Listing ID & image.** `listingId` and `imageUrl` for cross-referencing or display.
- **Pay only for hits.** URLs that don't resolve — sold, removed, or malformed — cost
  nothing. See [Pricing](#pricing).
- **Built for bulk.** Feed in thousands of listing URLs; concurrency, keyword filtering,
  and column selection are all configurable.

### How to use DOM.RIA Listing Lookup — Ukraine Real Estate API

1. **In the Apify Console.** Open the actor page and click **Start** — the `listingUrls` field is already pre-filled with a working example. Results land in the run's dataset as soon as each item is found.
2. **Via the API.** Call it directly with a POST request — no Console needed once you have an API token:
   ```bash
   curl "https://api.apify.com/v2/acts/accountable_eel~domria-listing-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \
     -X POST \
     -H "Content-Type: application/json" \
     -d '{"listingUrls":["https://dom.ria.com/uk/realty-prodaja-kvartira-kiev-novoe-stroenie-bolshaya-vasilkovskaya-krasnoarmeyskaya-ulitsa-34653884.html"]}'
   ```
3. **On a schedule.** Save this actor as an Apify **Task** with the input you want, then add a **Schedule** (hourly, daily, weekly) so it runs on its own — no server of your own required.

### Input

```json
{
  "listingUrls": [
    "https://dom.ria.com/uk/realty-prodaja-kvartira-kiev-novoe-stroenie-bolshaya-vasilkovskaya-krasnoarmeyskaya-ulitsa-34653884.html"
  ]
}
```

One dom.ria.com real estate listing URL per line. Accepted formats: https://dom.ria.com/uk/realty-prodaja-kvartira-kiev-...\_34653884.html.

```json
{
  "listingUrls": [
    "https://dom.ria.com/uk/realty-prodaja-kvartira-kiev-..._34653884.html"
  ],
  "testRun": false,
  "onlyFound": false,
  "maxConcurrency": 5
}
```

`listingUrls` is a list of dom.ria.com listing URLs — one per line. A bare listing path
also works; it's resolved against `https://dom.ria.com/uk/`. Turn on `testRun` to check
the first 5 before committing to a full list. `onlyFound` hides rows with no result (they
stay free either way). `includeKeywords` / `excludeKeywords` filter results by keyword,
`maxResults` caps how many hits you pay for, `columns` picks which fields come back, and
`proxyConfiguration` defaults to Apify's Residential proxy group.

### Output

| query | found | status | title | price | currency | availability | address | rooms | totalAreaSqm | livingAreaSqm | kitchenAreaSqm | floor | totalFloors | sellerName | imageUrl | description | listingId | url | scrapedAt |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| https://dom.ria.com/uk/realty-prodaja-kvartira-kiev-novoe-stroenie-bolshaya-vasilkovskaya-krasnoarmeyskaya-ulitsa-34653884.html | true | OK | Продаж 1к квартири 46.9 кв. м  на вул. Велика Васильківська 26 • ID 34653884 | 156000 | USD | InStock | Киевская обл., Киев, район Новое строение, Большая Васильковская (Красноармейская) улица | 1 | 46.9 | 20 | 9.7 | 1 | 4 | Єлизавета Сінельник | https://cdn.riastatic.com/photosnew/dom/photo/prodaja-kvartira-kiev-novoe-stroenie-bolshaya-vasilkovskaya-krasnoarmeyskaya-ulitsa\_\_340359924f.jpg | Продажа от владельца | 1 минута от метро «Площа Українських Героїв» | Большая Васильковская | Центр Киева
Продаю собственную квартиру площадью 46, 9 м² в центральной части Киева, рядом с площадью Українських Героїв.
Объект расположен буквально за 1 минуту от входа в метро «Площа Українських Героїв».
Объект расположен на 1-м этаже 4-этажного дома. Большие окна обеспечивают много естественного света и хорошую видимость с улицы. На окнах установлены роллеты.
Квартира в ухоженном состоянии, имеет функциональную планировку и санузел. Ранее помещение использовалось под туристическую компанию, поэтому пространство хорошо подходит для офиса или другого бизнеса.
Жилой фонд. Есть возможность обустроить отдельную входную группу.
Удобное центральное расположение, первый этаж, большие окна и возможность парковки делают объект интересным как для собственного использования, так и для инвестиции.
Большая Васильковская, Киев
️1 минута от метро «Площа Українських Героїв»
46, 9 м²
1 этаж из 4
Большие окна + роллеты
Есть место для парковки
$158 000 (торг уместен)
Владелец. Без комиссии. | 34653884 | https://dom.ria.com/uk/realty-prodaja-kvartira-kiev-novoe-stroenie-bolshaya-vasilkovskaya-krasnoarmeyskaya-ulitsa-34653884.html | 2026-08-31T07:10:20.894Z |

One row per listing URL, for example:

```json
{
  "query": "https://dom.ria.com/uk/realty-prodaja-kvartira-kiev-..._34653884.html",
  "found": true,
  "status": "OK",
  "title": "Продаж 2-кімнатної квартири, Київ, вул. Хрещатик",
  "price": 89000,
  "currency": "USD",
  "availability": "InStock",
  "address": "Київ, Шевченківський район",
  "rooms": 2,
  "totalAreaSqm": 62.5,
  "livingAreaSqm": 34.2,
  "kitchenAreaSqm": 11.8,
  "floor": 5,
  "totalFloors": 9,
  "sellerName": "Олена",
  "imageUrl": "https://cdn.riastatic.com/photos/...",
  "description": "Продається затишна 2-кімнатна квартира...",
  "listingId": "34653884",
  "url": "https://dom.ria.com/uk/realty-prodaja-kvartira-kiev-..._34653884.html",
  "scrapedAt": "2026-08-21T10:15:00.000Z"
}
```

A row with `"found": false` means the listing was sold, removed, or the URL didn't
resolve to a real listing — these rows are never charged.

### Use cases

- Track price and availability changes on specific apartments or houses over time.
- Enrich a list of dom.ria listing links (from a search export or saved shortlist) with
  structured price, area, and room data for spreadsheet analysis.
- Feed clean listing data into a valuation model or comparable-sales report for the
  Ukrainian property market.
- Monitor whether a set of listings is still active, or has been sold/removed.
- Pull seller contact names and descriptions for outreach or lead-list building.

### Pricing

$3 per 1,000 listings, plus a $0.00005 start fee. Misses (`found:false`) are never charged.

### Use it from Clay, n8n, Make, or an AI agent

This actor runs synchronously over plain HTTP — call it directly from a script, a workflow tool, or an AI agent, no Apify Console needed once you have an API token.

```bash
curl "https://api.apify.com/v2/acts/accountable_eel~domria-listing-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \
  -X POST \
  -H "Content-Type: application/json" \
  -d '{"listingUrls":["https://dom.ria.com/uk/realty-prodaja-kvartira-kiev-novoe-stroenie-bolshaya-vasilkovskaya-krasnoarmeyskaya-ulitsa-34653884.html"]}'
```

**n8n.** Add an HTTP Request node: Method `POST`, URL `https://api.apify.com/v2/acts/accountable_eel~domria-listing-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>`, Body Content Type `JSON`, JSON Body `{"listingUrls":["https://dom.ria.com/uk/realty-prodaja-kvartira-kiev-novoe-stroenie-bolshaya-vasilkovskaya-krasnoarmeyskaya-ulitsa-34653884.html"]}` (swap in an expression from an earlier node for a real value).

**Clay.** Add an "HTTP API" column: Method `POST`, URL `https://api.apify.com/v2/acts/accountable_eel~domria-listing-lookup/run-sync-get-dataset-items?token=<YOUR_TOKEN>`, Body `{"listingUrls":["{{listing}}"]}`, mapping the row's listing into the `listingUrls` array.

**MCP.** In Claude, Cursor, or any MCP client with the Apify MCP server, ask for "DOM.RIA API — Ukraine Real Estate Listing Data by URL" — the agent will find and run this actor.

### FAQ

**What counts as "not found"?** A URL that dom.ria.com returns as a 404/410 (listing sold
or removed), or a page with no `Product` JSON-LD block at all — both come back as
`found: false` and are never charged.

**Do I need to pass a full URL?** No — a bare listing path also works and is resolved
against `https://dom.ria.com/uk/`, but a full URL from the site (copy-pasted from your
browser or a search export) is the safest input.

**Where do room count and area come from?** They aren't in the page's structured
`Product` data, so this actor parses them from the listing's own Ukrainian facts text
(e.g. "Загальна площа NN м²", "N-кімнатна квартира", "на N-му поверсі N-поверхового") —
if dom.ria changes that phrasing, those specific fields may come back empty even though
the listing itself was found.

**Does this work for both apartments and houses?** Yes — any dom.ria.com listing page
with a `Product` structured-data block is supported; house listings just won't populate
apartment-specific fields like kitchen area if dom.ria doesn't publish them for that
listing type.

**What proxy should I use?** Residential is the default and recommended setting — this
is a marketplace at real-world scale, and a plain datacenter IP is more likely to get
blocked.

**Can I run thousands of URLs at once?** Yes. Use `maxConcurrency` to control request
rate, `testRun` to sanity-check a small sample first, and `maxResults` if you only need
the first N hits.

# Actor input Schema

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

One dom.ria.com real estate listing URL per line. Accepted formats: https://dom.ria.com/uk/realty-prodaja-kvartira-kiev-...\_34653884.html. You're only charged for the ones we actually find — a miss costs nothing.

## `testRun` (type: `boolean`):

Turn this on to test your input on a small sample before running the full list. Turn it off to process everything.

## `onlyFound` (type: `boolean`):

Only keep rows where something was actually found. Misses are always free, whether or not you show them here.

## `includeKeywords` (type: `array`):

Optional. Only keep results that mention at least one of these words (e.g. a job title, a city, a product name). Leave empty to keep everything.

## `excludeKeywords` (type: `array`):

Optional. Drop any result that mentions one of these words. Leave empty to skip nothing.

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

Optional. Stop the run once this many results have been found — useful for a quick, cheap sample. Leave blank for no limit.

## `columns` (type: `array`):

Choose which pieces of information to include in each result row. All are included by default.

## `maxConcurrency` (type: `integer`):

Parallel requests. Keep conservative — this target has no browser fallback, so getting blocked costs more than slow-and-steady.

## `proxyConfiguration` (type: `object`):

Apify Proxy config. Residential recommended for anti-bot-sensitive targets.

## Actor input object example

```json
{
  "listingUrls": [
    "https://dom.ria.com/uk/realty-prodaja-kvartira-kiev-novoe-stroenie-bolshaya-vasilkovskaya-krasnoarmeyskaya-ulitsa-34653884.html"
  ],
  "testRun": false,
  "onlyFound": false,
  "includeKeywords": [],
  "excludeKeywords": [],
  "columns": [
    "title",
    "price",
    "currency",
    "availability",
    "address",
    "rooms",
    "totalAreaSqm",
    "livingAreaSqm",
    "kitchenAreaSqm",
    "floor",
    "totalFloors",
    "sellerName",
    "imageUrl",
    "description",
    "listingId",
    "url"
  ],
  "maxConcurrency": 5,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# 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 = {
    "listingUrls": [
        "https://dom.ria.com/uk/realty-prodaja-kvartira-kiev-novoe-stroenie-bolshaya-vasilkovskaya-krasnoarmeyskaya-ulitsa-34653884.html"
    ],
    "includeKeywords": [],
    "excludeKeywords": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("accountable_eel/domria-listing-lookup").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 = {
    "listingUrls": ["https://dom.ria.com/uk/realty-prodaja-kvartira-kiev-novoe-stroenie-bolshaya-vasilkovskaya-krasnoarmeyskaya-ulitsa-34653884.html"],
    "includeKeywords": [],
    "excludeKeywords": [],
}

# Run the Actor and wait for it to finish
run = client.actor("accountable_eel/domria-listing-lookup").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 '{
  "listingUrls": [
    "https://dom.ria.com/uk/realty-prodaja-kvartira-kiev-novoe-stroenie-bolshaya-vasilkovskaya-krasnoarmeyskaya-ulitsa-34653884.html"
  ],
  "includeKeywords": [],
  "excludeKeywords": []
}' |
apify call accountable_eel/domria-listing-lookup --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,accountable_eel/domria-listing-lookup"
        }
    }
}

```

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/HsKzdl7CjcSpdFvLW/builds/79CP2afPfjf7wVaKN/openapi.json
