# Moscow Public Premises Auction Watch (`isolovyev/moscow-premises-auction-watch`) Actor

Track Moscow public auctions for non-residential premises: rental and sale lots, starting prices, deadlines and changes. Монитор городских торгов Москвы по нежилым помещениям.

- **URL**: https://apify.com/isolovyev/moscow-premises-auction-watch.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

$0.03 / completed auction check

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?

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

## Moscow Public Premises Auction Watch

Track open public auctions for non-residential premises in Moscow. Review rental and sale lots, starting prices, application deadlines, source links and changes across observations.

Use `profile: moscow_auctions`. The safe default selects the Moscow auction portal, rental auctions, one page and at most ten lots. Direct requests are the default. Choose one catalogue view: Torgi Moscow or Invest Moscow. Both represent the same Moscow city auction catalogue.

Only lots with confirmed scope, active status and a future application deadline are included. Land, apartments and movable assets are excluded. Prices retain their units and payment period when stated; unknown periods remain empty. Auction documents and eligibility require manual review.

Each run provides current observations, changes and source coverage. Page limits and unavailable details can produce partial results. Missing lots in a partial result do not establish withdrawal. Check coverage before interpreting an empty result.

The auction profile enforces at most three pages, 100 lots, a 60-second network budget, 15-second requests, one retry and 1 MiB per response. The default search covers one page and up to ten lots. Saved tasks do not create a schedule.

### Quick start

For rental premises between 150 and 400 square metres, paste this input:

```json
{
  "scenarios": ["city_rent"],
  "minArea": 150,
  "maxArea": 400,
  "stateKey": "moscow-rental-150-400"
}
```

Reuse the same state key and search parameters on later checks to compare changes. Review source coverage alongside the returned observations.

Auction history retains up to 1,000 listing identities. Each run shares a 12-request and 8 MiB response budget; reached limits are reported as partial coverage.

### Billing

One completed bounded search is one paid check. Apify platform resources are included; the current rate appears in Pricing. A valid empty search and an unchanged check count as completed. Invalid input and a source failure do not generate a paid event. Reaching the stated page, item or request limits can deliver a paid partial result; review source coverage. Dataset rows and new-lot events are not charged separately.

Use a separate saved search for rental and sale auctions. A narrow area range can cover the selected segment more completely than a broad catalogue query. Reuse the same state key and search parameters to compare observations. Start or schedule the saved task explicitly for repeated checks.

### На русском

Монитор открытых городских аукционов Москвы по аренде и продаже нежилых помещений. Результат содержит текущие наблюдения, начальную цену, единицы цены, срок подачи заявок, ссылки на источник и изменения между проверками.

Безопасный старт: профиль `moscow_auctions`, один городской источник, одна страница и до десяти лотов. Земля, квартиры, движимое имущество, отменённые лоты и истёкшие сроки подачи заявок исключаются. Неуказанный период оплаты остаётся неизвестным. Документы и условия участия проверяются отдельно.

Ограниченная выдача может быть неполной. Отсутствие лота при неполном сборе не означает снятие с торгов. Покрытие каждого источника отражается в отчёте. Расписание автоматически не создаётся.

Оплата за одну завершённую ограниченную проверку, ресурсы Apify включены. Актуальная цена указана в разделе Pricing. Успешный пустой поиск и проверка без изменений оплачиваются; неверные параметры и ошибка источника не создают платного события. Достижение заявленных лимитов может дать оплачиваемую частичную выдачу. Строки результата и события новых лотов отдельно не тарифицируются.

Для аренды и продажи рекомендуются отдельные сохранённые поиски. Узкий диапазон площади позволяет полнее проверить выбранный сегмент. Для сравнения результатов сохраняйте одинаковые параметры и ключ истории; повторные проверки требуют запуска или явного расписания задачи.

Пример поиска аренды площадью 150–400 м²: введите JSON из раздела Quick start. Поля `scenarios`, `minArea` и `maxArea` задают сегмент, `stateKey` сохраняет историю выбранного поиска. Для сравнения изменений повторяйте те же параметры и проверяйте полноту источника в результате. По умолчанию поиск ограничен одной страницей и десятью лотами.

# Actor input Schema

## `profile` (type: `string`):

Open public auctions for non-residential premises in Moscow.

## `city` (type: `string`):

Moscow only.

## `fetchBudgetSeconds` (type: `integer`):

Shared deadline for all source network requests, including retries and redirects.

## `stateKey` (type: `string`):

Independent history namespace. Omit to use the selected profile and city default.

## `sources` (type: `array`):

Choose one view of the Moscow city auction catalogue: Torgi Moscow or Invest Moscow.

## `scenarios` (type: `array`):

Public rental or sale auctions.

## `minArea` (type: `number`):

Minimum total area in square metres for the wider review queue.

## `maxArea` (type: `number`):

Maximum total area in square metres for the wider review queue.

## `maxItems` (type: `integer`):

Maximum current observations collected across sources per run.

## `maxPages` (type: `integer`):

Maximum search pages per source or query scope; reached limits cause partial coverage.

## `requestTimeoutSeconds` (type: `integer`):

Timeout for each public network request in seconds.

## `maxItemsPerSource` (type: `integer`):

Maximum observations collected from each source per run.

## `maxResponseBytes` (type: `integer`):

Maximum bytes accepted from a public response.

## `retryCount` (type: `integer`):

Number of retries for a failed public request.

## Actor input object example

```json
{
  "profile": "moscow_auctions",
  "city": "moscow",
  "fetchBudgetSeconds": 60,
  "sources": [
    "torgi_mos"
  ],
  "scenarios": [
    "city_rent"
  ],
  "minArea": 1,
  "maxArea": 10000,
  "maxItems": 10,
  "maxPages": 1,
  "requestTimeoutSeconds": 15,
  "maxItemsPerSource": 10,
  "maxResponseBytes": 1048576,
  "retryCount": 0
}
```

# Actor output Schema

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

Premises, events and coverage. Помещения, изменения и полнота источников.

## `shortlist` (type: `string`):

Legacy profile review list; empty for Moscow auctions.

# 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 = {
    "profile": "moscow_auctions",
    "city": "moscow",
    "fetchBudgetSeconds": 60,
    "sources": [
        "torgi_mos"
    ],
    "scenarios": [
        "city_rent"
    ],
    "minArea": 1,
    "maxArea": 10000,
    "maxItems": 10,
    "maxPages": 1,
    "requestTimeoutSeconds": 15,
    "maxItemsPerSource": 10,
    "maxResponseBytes": 1048576,
    "retryCount": 0
};

// Run the Actor and wait for it to finish
const run = await client.actor("isolovyev/moscow-premises-auction-watch").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 = {
    "profile": "moscow_auctions",
    "city": "moscow",
    "fetchBudgetSeconds": 60,
    "sources": ["torgi_mos"],
    "scenarios": ["city_rent"],
    "minArea": 1,
    "maxArea": 10000,
    "maxItems": 10,
    "maxPages": 1,
    "requestTimeoutSeconds": 15,
    "maxItemsPerSource": 10,
    "maxResponseBytes": 1048576,
    "retryCount": 0,
}

# Run the Actor and wait for it to finish
run = client.actor("isolovyev/moscow-premises-auction-watch").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 '{
  "profile": "moscow_auctions",
  "city": "moscow",
  "fetchBudgetSeconds": 60,
  "sources": [
    "torgi_mos"
  ],
  "scenarios": [
    "city_rent"
  ],
  "minArea": 1,
  "maxArea": 10000,
  "maxItems": 10,
  "maxPages": 1,
  "requestTimeoutSeconds": 15,
  "maxItemsPerSource": 10,
  "maxResponseBytes": 1048576,
  "retryCount": 0
}' |
apify call isolovyev/moscow-premises-auction-watch --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,isolovyev/moscow-premises-auction-watch"
        }
    }
}
```

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/h7TdsoLO0eGRduuOZ/builds/2WydBlABCodJUn91h/openapi.json
