# RU Cadastral Object Lookup (Rosreestr/NSPD) (`isolovyev/ru-cadastral-object-lookup`) Actor

Look up a real estate object on the Russian cadastral map (NSPD, Rosreestr) by cadastral number or address, no captcha. Returns object type, address, area, purpose, status, cadastral value and ownership form. Does not return owner name or right registration date, both captcha gated.

- **URL**: https://apify.com/isolovyev/ru-cadastral-object-lookup.md
- **Developed by:** [Ivan Solovyev](https://apify.com/isolovyev) (community)
- **Categories:** Real estate, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $50.00 / 1,000 object looked ups

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## 🗺️ RU Cadastral Object Lookup (Rosreestr / NSPD)

<table width="100%">
<tr>
<td style="padding:24px 28px;background:#EEF2FF;border:1px solid #C7D2FE;border-top:4px solid #4F46E5;border-radius:12px">
<span style="font-size:23px;font-weight:800;color:#1E1B4B;line-height:1.3">What is this property, by cadastral number or address?</span><br>
<span style="font-size:15px;color:#4B5563;line-height:1.6">Look up any Russian real estate object on the public cadastral map: type, address, area, purpose, status, cadastral value with its revaluation dates, ownership form, map coordinates, and what the object consists of. Open cadastral data, no official extract required.</span>
</td>
</tr>
</table>

<table width="100%">
<tr>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #E0E7FF;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#4338CA">🗺️ Object card</span><br>
<span style="font-size:12px;color:#57534E">Type, address, area, purpose and status by cadastral number or address</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #E0E7FF;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#4338CA">💰 Cadastral value</span><br>
<span style="font-size:12px;color:#57534E">Current value together with its revaluation dates</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #E0E7FF;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#4338CA">📍 Coordinates and composition</span><br>
<span style="font-size:12px;color:#57534E">Outline and centre on the map, premises inside a building, objects on a parcel</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #E0E7FF;border-left:none;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#4338CA">🚧 Restrictions and zones</span><br>
<span style="font-size:12px;color:#57534E">Protected-use zones, territorial zones and heritage territories covering the object</span>
</td>
</tr>
</table>

Look up a Russian real estate object on the **public cadastral map** - [NSPD](https://nspd.gov.ru)
(Национальная система пространственных данных, Rosreestr's open geoportal) - by **cadastral
number** (exact match) or **address** (free text).

Returns the object's open cadastral card: object type (land parcel / building / structure /
premises), address, area, purpose, permitted use, status, cadastral value with its revaluation
dates, ownership-form category (state/municipal/private, when NSPD has it on file), and physical
attributes (floors, wall material, year built, parent building for premises, etc).

Every card also carries **where the object is** and **what it consists of**: the outline in GeoJSON
and WGS84 with a centre point and bounding box, the premises and parking spaces registered inside a
building, the objects standing on a land parcel, the parcel a building sits on, registered parts,
and single-land-use composition.

### Scope

Owner name and right/ownership registration date are not included - a full ЕГРН extract is
required for that and is out of scope for this actor. The `cadastralRegistrationDate` field is the
date the object was assigned its cadastral number, a separate, one-time event.

### Modes

- **search** - one card per query in `queries`. An exact cadastral number (e.g.
  `77:01:0001005:1026`) always returns the one matching object. An address returns up to
  `maxResults` matches, in NSPD's own relevance order.
- **monitor** - run on a schedule; compares against the previous run's snapshot (Key-Value Store,
  keyed by cadastral number) and emits only objects that actually changed, each with a `changeNote`
  describing what changed. Tracked: cadastral value, status, area, removal from the register, and
  the composition itself, so a new unit registered inside a building or a new building on a parcel
  raises a signal on its own. Optionally POSTs
  a summary to `notifyWebhookUrl` (wire it to n8n/Zapier/Make for Telegram/Slack alerts).

### Composition and links

A cadastral card on its own answers "what is this object". These fields answer "what is inside it
and what is it attached to", which is what turns a single lookup into a picture of a site:

| Field | What it answers |
|---|---|
| `premisesCount`, `parkingCount` | How many premises and parking spaces are registered inside a building |
| `premisesCadNumbers` | Their cadastral numbers, ready to look up in turn |
| `objectsOnLand` | Everything standing on a land parcel |
| `landCadNumbers` | The parcel a building or structure is located within |
| `landParts`, `buildingParts` | Registered parts, the ones an encumbrance is recorded against |
| `landUseComposition` | Parcels making up a single land use |
| `intersectedCadNumbers`, `unitedCadNumbers` | Objects overlapping or merged with this one |

One address query therefore expands into the full stack at that address: parcel, the buildings on
it, and the units inside each building.

### Restrictions and zones

Set `includeZones` and every object is checked against 13 restriction layers of the public
cadastral map. This is the part that decides what may actually be done with a plot, and it is
absent from a plain cadastral card:

| Group | Layers |
|---|---|
| Protected-use zones (ЗОУИТ) | cultural heritage, energy/communications/transport, nature, security and guarded facilities, other |
| Planning | territorial zones, red lines |
| Protected territories | heritage territories, protected natural areas, forestries, shorelines |
| Special regimes | special economic zones, priority development areas |

Each hit comes back with its layer, the boundary registry number (for example `77:01-7.6241`) and
its type, in the `zones` array, with `zoneCount` alongside. Zero means checked and nothing found;
an empty field means the check was not run.

The check uses the object's own footprint rather than a single centre point, so a boundary crossing
the edge of a large plot is still caught. It is one request per layer, which is why it is off by
default.

### Coordinates

`centroid` and `bbox` come with every record in plain WGS84 longitude and latitude, so a result
drops straight into a map, a geocoder or a distance calculation. `geometry` holds the full outline
as GeoJSON, `geometryPoints` tells you how detailed that outline is. Set `includeGeometry` to false
when you want the location but not the polygon.

### Input

| Field | Description |
|---|---|
| `mode` | `search` or `monitor` |
| `queries` | Cadastral numbers or addresses to look up |
| `maxResults` | Max matches to fetch per address query (ignored for exact cadastral numbers) |
| `includeComposition` | Also resolve premises, objects on a parcel, the parcel under a building and registered parts (on by default) |
| `includeGeometry` | Return the full outline; the centre point and bounding box are returned either way (on by default) |
| `includeZones` | Check the object against 13 restriction and zoning layers (off by default) |
| `notifyWebhookUrl` | Monitor mode: webhook for the run summary |
| `proxyConfiguration` | Required on Apify: Apify Residential proxy, country RU. All sources require a Russian IP. |

### The `systemInfoUpdatedAt` field

Every NSPD record carries an internal `systemInfo.updated` service timestamp, not part of the
public API contract and not shown in NSPD's own UI card. It changes whenever something in the
record changes - a cadastral-value revaluation, a boundary/attribute correction, or another update.
Monitor mode tracks it as an additional "something changed, go look" signal alongside
`cadastralValue` and `status`, and every monitor record's `changeNote` names what changed.

### Output fields

See `.actor/dataset_schema.json` for the full, typed field list. Key ones: `cadastralNumber`,
`objectType`, `address`, `area`, `purpose`, `permittedUse`, `status`, `ownershipType`,
`cadastralValue`, `costIndex`, `costRegistrationDate`/`costApplicationDate`/`costDeterminationDate`
(revaluation dates), `cadastralRegistrationDate` (date of cadastral-number assignment), `centroid`
and `bbox` (WGS84), `geometry` (GeoJSON outline), `premisesCadNumbers`/`objectsOnLand`/
`landCadNumbers` (composition and links), `zones` and `zoneCount` (restrictions), `isRemoved`, and
`url` (link back to the object on the NSPD map, the source of every record).

***

### RU: область применения

Актор собирает открытые кадастровые данные объекта недвижимости с публичной карты Росреестра
(НСПД) - по кадастровому номеру (точное совпадение) или по адресу (список совпадений).

Актор не возвращает ФИО/наименование правообладателя и дату регистрации права собственности - для
этого нужна отдельная выписка ЕГРН, что выходит за рамки актора. Поле `cadastralRegistrationDate` -
это дата присвоения кадастрового номера объекту, отдельное разовое событие.

Поле `systemInfoUpdatedAt` - это служебный таймштамп НСПД (не часть публичного контракта API, не
показывается в самой карточке на сайте). Он меняется, когда в записи что-то поменялось: переоценка
кадастровой стоимости, уточнение границ/атрибутов или другое обновление. В режиме `monitor` это
дополнительный сигнал наряду с `cadastralValue` и `status`, а поле `changeNote` называет, что именно
изменилось.

Кроме самой карточки актор отдаёт координаты и состав объекта: контур в GeoJSON и WGS84 с центром и
габаритной рамкой, помещения и машино-места, учтённые в здании, объекты на земельном участке,
участок под зданием, учтённые части и состав единого землепользования. Один запрос по адресу таким
образом разворачивается в связку «участок, здания на нём, помещения внутри». В режиме `monitor`
изменение состава отслеживается наравне с кадастровой стоимостью: постановка нового помещения на
учёт или снятие объекта с учёта поднимают сигнал сами по себе.

По флагу `includeZones` объект дополнительно проверяется по тринадцати слоям ограничений публичной
кадастровой карты: зоны с особыми условиями использования (охрана памятников, энергетика и
транспорт, природные территории, охраняемые объекты, иные), территориальные зоны, красные линии,
территории объектов культурного наследия, ООПТ, лесничества, береговые линии, особые экономические
зоны и территории опережающего развития. Именно эти сведения решают, что на участке можно
построить, и в обычной кадастровой карточке их нет. Проверка идёт по контуру объекта, а не по одной
точке в центре, поэтому граница, задевающая край крупного участка, тоже попадает в ответ.

### 🔗 Все наши акторы для данных по России, Казахстану и СНГ

<span style="font-size:14px;color:#4B5563">Одна линейка для маркетплейсов, госзакупок и проверки контрагентов - соседний актор открывается одним кликом по карточке.</span>

<table width="100%">
<tr>
<td style="padding:0;width:16%;background:#FFFFFF;border:1px solid #E0E7FF;border-top:3px solid #4F46E5;border-radius:10px 0 0 10px;vertical-align:top">
<a href="https://apify.com/isolovyev/marketplace-seller-leads" style="display:block;padding:14px 12px;text-decoration:none">
<span style="font-size:13px;font-weight:800;color:#4338CA">🛍️ Лиды продавцов маркетплейсов</span><br>
<span style="font-size:11px;color:#57534E">продавцы WB / Ozon / Яндекс.Маркет / Kaspi с ИНН и ОГРН</span>
</a>
</td>
<td style="padding:0;width:16%;background:#FFFFFF;border:1px solid #E0E7FF;border-left:none;border-top:3px solid #4F46E5;vertical-align:top">
<a href="https://apify.com/isolovyev/zakupki-tender-monitor" style="display:block;padding:14px 12px;text-decoration:none">
<span style="font-size:13px;font-weight:800;color:#4338CA">📄 Тендеры 44-ФЗ / 223-ФЗ</span><br>
<span style="font-size:11px;color:#57534E">госзакупки, нацрежим, реестр российского ПО</span>
</a>
</td>
<td style="padding:0;width:16%;background:#FFFFFF;border:1px solid #E0E7FF;border-left:none;border-top:3px solid #4F46E5;vertical-align:top">
<a href="https://apify.com/isolovyev/ru-counterparty-check" style="display:block;padding:14px 12px;text-decoration:none">
<span style="font-size:13px;font-weight:800;color:#4338CA">🔍 Проверка контрагента по ИНН</span><br>
<span style="font-size:11px;color:#57534E">5 источников, скоринг риска</span>
</a>
</td>
<td style="padding:0;width:16%;background:#FFFFFF;border:1px solid #E0E7FF;border-left:none;border-top:3px solid #4F46E5;vertical-align:top">
<a href="https://apify.com/isolovyev/ru-marketplaces-price-monitor" style="display:block;padding:14px 12px;text-decoration:none">
<span style="font-size:13px;font-weight:800;color:#4338CA">📈 Цены на маркетплейсах</span><br>
<span style="font-size:11px;color:#57534E">WB / Ozon / Яндекс.Маркет / Avito, трекинг цены</span>
</a>
</td>
<td style="padding:0;width:16%;background:#FFFFFF;border:1px solid #E0E7FF;border-left:none;border-top:3px solid #4F46E5;vertical-align:top">
<a href="https://apify.com/isolovyev/kaspi-price-monitor" style="display:block;padding:14px 12px;text-decoration:none">
<span style="font-size:13px;font-weight:800;color:#4338CA">🇰🇿 Цены и позиции на Kaspi.kz</span><br>
<span style="font-size:11px;color:#57534E">Казахстан, позиция в выдаче и цена</span>
</a>
</td>
<td style="padding:0;width:16%;background:#FFFFFF;border:1px solid #E0E7FF;border-left:none;border-top:3px solid #4F46E5;border-radius:0 10px 10px 0;vertical-align:top">
<a href="https://apify.com/isolovyev/ru-software-registry-check" style="display:block;padding:14px 12px;text-decoration:none">
<span style="font-size:13px;font-weight:800;color:#4338CA">🏛️ Реестр российского ПО</span><br>
<span style="font-size:11px;color:#57534E">проверка по ИНН + досье заявителя</span>
</a>
</td>
</tr>
</table>

# Actor input Schema

## `mode` (type: `string`):

search = current open cadastral card per query. monitor = compare vs the previous run (needs a schedule) and emit only objects whose cadastral value, status or the record's internal service timestamp changed, with webhook.

## `queries` (type: `array`):

Cadastral number (e.g. 77:01:0001005:1026) for an exact single-object lookup, or a free-text address for a list of matching objects (up to 'Max results per query').

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

For an address query (which can match many objects on NSPD), how many of the top matches to fetch a full card for. Ignored for an exact cadastral-number query, which always returns the one matching object.

## `notifyWebhookUrl` (type: `string`):

Monitor mode: POST the run summary (counts, changed objects) to this URL - wire it to n8n/Zapier/Make for Telegram/Slack alerts.

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

Required on Apify: set proxyConfiguration to Apify Residential proxy with country RU. All sources require a Russian IP.

## `includeComposition` (type: `boolean`):

Also resolve what the object consists of and what it is tied to: premises and parking spaces inside a building, objects standing on a land parcel, the parcel under a building, registered parts and single-land-use composition. Costs a few extra requests per object; turn off for a plain card.

## `includeGeometry` (type: `boolean`):

Return the full object outline as GeoJSON in WGS84. The centre point, bounding box and vertex count are always returned regardless of this switch - turn the outline off when you only need coordinates, not the polygon.

## `includeZones` (type: `boolean`):

Check the object against 13 restriction layers of the public cadastral map: protected-use zones (ЗОУИТ) for heritage, energy, transport, nature and security, plus territorial zones, heritage territories, red lines, protected natural areas, forestries, shorelines, special economic zones and priority development areas. This is what decides whether anything can be built on a plot. One request per layer, so it is off by default.

## Actor input object example

```json
{
  "mode": "search",
  "queries": [
    "77:01:0001005:1026"
  ],
  "maxResults": 5,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "RU"
  },
  "includeComposition": true,
  "includeGeometry": true,
  "includeZones": false
}
```

# Actor output Schema

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

One record per real estate object: the cadastral card, coordinates in WGS84, what the object consists of, and the restriction zones covering it.

# 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 = {
    "queries": [
        "77:01:0001005:1026"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "RU"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("isolovyev/ru-cadastral-object-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 = {
    "queries": ["77:01:0001005:1026"],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "RU",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("isolovyev/ru-cadastral-object-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 '{
  "queries": [
    "77:01:0001005:1026"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "RU"
  }
}' |
apify call isolovyev/ru-cadastral-object-lookup --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,isolovyev/ru-cadastral-object-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/5aDZxS3NXYLOjubP3/builds/Prn7FbDPfsUlitDUR/openapi.json
