# Sutochno.ru Scraper — Daily Rentals & Hotels Russia (`bovi/sutochno-scraper`) Actor

Scrape public listings from Sutochno.ru, a Russian daily-rental marketplace: apartments, houses and hotel rooms with price per night, rating, reviews, guests, area, address, distance to the sea, cashback and photos. Any city or category catalog URL. No login.

- **URL**: https://apify.com/bovi/sutochno-scraper.md
- **Developed by:** [Vitalii Bondarev](https://apify.com/bovi) (community)
- **Categories:** Travel, Real estate
- **Security:** Limited permissions
- **Stats:** 1 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.50 / 1,000 sutochno.ru scraper — daily rentals & hotels russias

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

## Sutochno.ru Scraper — Daily Rentals & Hotels in Russia

Collect public listings from [Sutochno.ru](https://sutochno.ru), a large Russian marketplace for daily rentals: apartments, houses, guest houses and hotel rooms in Russia, CIS countries and abroad. For every listing you get the headline, object type, price per night, guest rating, number of reviews, capacity, area, address, distance to the sea, host badges, cashback percent and photos. No login and no cookies are needed.

### What it collects

The actor reads the public catalog pages of the site (a city, a country or region, or a category such as flats or houses). Each catalog page holds up to 50 listings. If you ask for more results than the pages you passed contain, the actor continues with further catalog pages (countries, cities, categories) listed in the site's own `sitemap.xml`. Duplicates are removed by object id.

Collected fields: `id`, `url`, `title`, `subtitle`, `is_hotel`, `hotel_stars`, `guests`, `beds`, `bedrooms`, `area_m2`, `address`, `locality`, `distance_text`, `distance_m`, `price`, `currency`, `price_unit`, `rating`, `reviews_count`, `superhost`, `recommended`, `instant_booking`, `cashback_percent`, `meal_note`, `popularity`, `image_url`, `images`, `catalog_url`, `scraped_at`.

Notes on the data:

- `price` is the price per night in roubles as the site shows it for a one-night stay starting today, so it changes from day to day.
- Fields the site does not show for a listing (for example `rating` for a new listing, or `hotel_stars` for an apartment) are `null`.
- Only catalog pages are requested. The actor does not use query strings, internal `/front` or `/api` paths, or any login-only data.

### Input

| Name | Type | Description | Default |
| --- | --- | --- | --- |
| startUrls | array | Catalog URLs, e.g. `https://sochi.sutochno.ru/`, `https://sutochno.ru/kyrgyzstan`, `https://sochi.sutochno.ru/flats` | `["https://sochi.sutochno.ru/"]` |
| maxResults | integer | Maximum number of listings in total | 50 |
| expandFromSitemap | boolean | Continue with more catalog pages from `sitemap.xml` when the given pages are not enough | true |
| proxyConfiguration | object | Optional proxy. A residential proxy is recommended on the Apify platform; turn the proxy off to connect directly | residential |

Example input:

```json
{
  "startUrls": ["https://sochi.sutochno.ru/", "https://kazan.sutochno.ru/"],
  "maxResults": 100,
  "proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
}
```

### Example output

```json
{
  "id": "1765010",
  "url": "https://sochi.sutochno.ru/1765010",
  "title": "Квартира с кухней, балконом и видом на море для отпуска",
  "subtitle": "1-комнатная квартира",
  "is_hotel": false,
  "guests": 2,
  "beds": 1,
  "area_m2": 25.0,
  "address": "Сочи, Православная улица, 16/1",
  "locality": "Сочи",
  "distance_text": "850 м до моря",
  "distance_m": 850,
  "price": 2706,
  "currency": "RUB",
  "price_unit": "per night",
  "rating": 9.8,
  "reviews_count": 10,
  "superhost": true,
  "instant_booking": true,
  "cashback_percent": 4,
  "popularity": "Повышенный спрос"
}
```

### Use cases

Monitor nightly prices and ratings per city, compare hotels and private apartments, build a travel or real-estate dataset, or track host quality signals such as superhost status and review counts.

### Pricing

Pay per result: the platform bills each dataset item (one listing), about $0.001 per listing, so 1,000 listings cost about $1. You pay only for the records delivered.

# Actor input Schema

## `startUrls` (type: `array`):

Public Sutochno.ru catalog pages: a city (https://sochi.sutochno.ru/), a country or region (https://sutochno.ru/kyrgyzstan) or a category (https://sochi.sutochno.ru/flats). Each page returns up to 50 listings.

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

Maximum number of listings to collect in total.

## `expandFromSitemap` (type: `boolean`):

If the given catalog pages hold fewer listings than Max results, keep going with more catalog pages (countries, cities, categories) taken from sitemap.xml.

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

Optional. Sutochno.ru is a Russian site; a residential proxy is recommended when running on the Apify platform. Switch the proxy off to connect directly.

## Actor input object example

```json
{
  "startUrls": [
    "https://sochi.sutochno.ru/"
  ],
  "maxResults": 50,
  "expandFromSitemap": true,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

Dataset with the scraped records.

# 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 = {
    "startUrls": [
        "https://sochi.sutochno.ru/"
    ],
    "maxResults": 50,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("bovi/sutochno-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 = {
    "startUrls": ["https://sochi.sutochno.ru/"],
    "maxResults": 50,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("bovi/sutochno-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 '{
  "startUrls": [
    "https://sochi.sutochno.ru/"
  ],
  "maxResults": 50,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call bovi/sutochno-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,bovi/sutochno-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/W9wl2vpPa26dGzCeL/builds/aHawYCFvuODTkaQuk/openapi.json
