# RST.ua Scraper — Ukraine Used Cars | Prices & Specs | $1/1k (`skipper_lume/rst-ua-scraper`) Actor

Scrape used cars from RST.ua (Ukraine #2 auto marketplace). Prices USD/UAH, mileage, fuel, gearbox, photos, region. Search by brand/model or paste URL. HTTP-only + incremental monitoring. Only RST.ua scraper on Apify.

- **URL**: https://apify.com/skipper\_lume/rst-ua-scraper.md
- **Developed by:** [Maksym Horbachov](https://apify.com/skipper_lume) (community)
- **Categories:** E-commerce, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 84.4% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.70 / 1,000 results

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/platform/actors/running/actors-in-store#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

## RST.ua Scraper — Ukraine Used Cars | Prices & Specs | $1/1k

Extract structured car listing data from **RST.ua** — Ukraine's #2 automotive marketplace. Prices in USD and UAH, mileage, fuel, gearbox, photos, region, and full detail enrichment.

> **$1.00 per 1,000 listings** — the only dedicated RST.ua scraper on Apify. [See pricing](#pricing).

### Why This Actor?

- **Only RST.ua scraper** on Apify — no alternatives
- **Zero setup** — no API key, no login, click Start
- **Fast & cheap** — pure HTTP (CP1251 HTML), no browser
- **List or detail** — cheap card scrape, optional full detail enrichment
- **Incremental monitoring** — detect new listings, price drops, and delisted cars across scheduled runs
- **Brand by name** — type `Toyota` or `Mercedes`, not obscure IDs
- **Pair with AUTO.RIA** — cover both major Ukrainian auto marketplaces
- **Or run both at once** — [UA Cars Monitor](https://apify.com/skipper_lume/ua-cars-monitor) merges AUTO.RIA + RST + digest

### What Data You Get

| Field | Example | Description |
|-------|---------|-------------|
| `title` | TOYOTA Camry | Listing title |
| `brand` / `model` | TOYOTA / Camry | Make and model |
| `year` | 2013 | Year of manufacture |
| `priceUSD` / `priceUAH` | 13950 / 623600 | Prices in USD and UAH |
| `mileageKm` | 220000 | Mileage in km |
| `fuelType` | Газ/Бензин | Fuel type |
| `engineVolume` | 2.5 | Engine displacement |
| `gearbox` | Автомат | Transmission |
| `driveType` | Передній пр. | Drive (detail mode) |
| `bodyType` / `color` | Седан / Чорний | Body & color (detail) |
| `region` | Київська | Oblast / region |
| `photos` | CDN URLs | Listing photos |
| `description` | Seller text | Full text (detail mode) |
| `changeType` | price\_dropped | Incremental monitoring field |

#### Sample Output

```json
{
    "id": 15416177,
    "url": "https://rst.ua/ukr/oldcars/toyota/camry/toyota_camry_15416177.html",
    "title": "TOYOTA Camry",
    "brand": "TOYOTA",
    "model": "Camry",
    "year": 2013,
    "priceUSD": 13950,
    "priceUAH": 623600,
    "mileageKm": 220000,
    "fuelType": "Газ/Бензин",
    "engineVolume": "2.5",
    "gearbox": "Автомат",
    "driveType": "Передній пр.",
    "bodyType": "Седан",
    "color": "Чорний",
    "region": "Київська",
    "photos": ["https://i0.rst.ua/oldcars/toyota/camry/15416177-1.jpg"],
    "photoCount": 8,
    "source": "detail"
}
```

### Use Cases

| Who | What |
|-----|------|
| **Dealers** | Monitor RST inventory vs AUTO.RIA prices |
| **Importers** | Track model availability and asking prices by region |
| **Analysts** | Build dual-marketplace UA used-car datasets |
| **Buyers / bots** | Alert on price drops with incremental mode |

### 3 Modes

#### `search` — Brand / model / year / price

```json
{
    "mode": "search",
    "brandName": "Toyota",
    "modelName": "Camry",
    "yearFrom": 2015,
    "yearTo": 2022,
    "priceTo": 20000,
    "maxResults": 50,
    "fetchDetails": true
}
```

#### `url` — Paste any RST search URL

Configure filters on [rst.ua](https://rst.ua), copy the URL, paste here.

```json
{
    "mode": "url",
    "searchUrl": "https://rst.ua/ukr/oldcars/bmw/x5/",
    "maxResults": 100
}
```

#### `listings` — Specific ads

```json
{
    "mode": "listings",
    "listingIds": [
        "https://rst.ua/ukr/oldcars/toyota/camry/toyota_camry_15416177.html"
    ]
}
```

### Incremental monitoring

Schedule the same search daily:

```json
{
    "mode": "search",
    "brandName": "BMW",
    "maxResults": 200,
    "incremental": true,
    "stateKey": "bmw-ua",
    "onlyChanges": true
}
```

Each row gets `changeType`: `new` | `price_dropped` | `price_raised` | `unchanged` | `delisted`.

### Alerts via Apify Integrations

1. Task with incremental input → **Schedule**.
2. **Telegram:** Integrations → **Webhooks** → Make → Telegram Bot (or Bot API `sendMessage`).\
   **Slack:** Integrations → **Slack**.
3. Optional `"emitDigest": true` for a one-line summary (`headline` / `topDrops`).

Dual-marketplace: [UA Cars Monitor](https://apify.com/skipper_lume/ua-cars-monitor).

### Pricing

**$1.00 per 1,000 listings** (PPE). Platform usage is free for the consumer.

| Volume | Cost |
|--------|------|
| 50 listings | $0.05 |
| 1,000 listings | $1.00 |
| 10,000 listings | $10.00 |

Tip: set `fetchDetails: false` for faster list-only runs.

### Quick Start

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("skipper_lume/rst-ua-scraper").call(run_input={
    "mode": "search",
    "brandName": "Toyota",
    "yearFrom": 2018,
    "maxResults": 30,
})

for car in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(f"{car['title']} — ${car['priceUSD']} — {car.get('region')}")
```

### Tips

- Use **Apify Proxy** for runs over ~100 listings (Cloudflare)
- Keep `maxConcurrency` at 3–5
- Pair with [AUTO.RIA Scraper](https://apify.com/skipper_lume/autoria-scraper) for full Ukrainian auto coverage

### FAQ

**Q: Do I need an API key?**\
A: No.

**Q: VIN / phone numbers?**\
A: Not reliably public on RST HTML — not extracted.

**Q: Encoding?**\
A: RST serves CP1251; output is clean Unicode JSON.

### About RST.ua

[RST.ua](https://rst.ua) is one of Ukraine's largest used-car classifieds sites, alongside AUTO.RIA. It is a key source for market pricing, regional supply, and dealer inventory outside the RIA ecosystem.

### Changelog

#### v1.0 (July 2026)

- Initial release: search / url / listings
- List-card + detail enrichment
- Incremental monitoring

# Actor input Schema

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

search: brand/model filters. url: paste any rst.ua/oldcars URL. listings: scrape specific listing URLs/IDs.

## `searchUrl` (type: `string`):

Paste any search URL from rst.ua (e.g. https://rst.ua/ukr/oldcars/toyota/camry/). Used when mode = url.

## `listingIds` (type: `array`):

Full listing URLs or numeric IDs. Used when mode = listings.

## `brandName` (type: `string`):

Brand in English (Toyota, BMW, Mercedes, Volkswagen…). Mapped to RST URL slug.

## `modelName` (type: `string`):

Model name (Camry, Prado, X5…). Optional.

## `regionSlug` (type: `string`):

Optional region path without brand, e.g. kiev, kharkov, odessa, lviv. Ignored when brandName is set.

## `yearFrom` (type: `integer`):

Minimum year of manufacture

## `yearTo` (type: `integer`):

Maximum year of manufacture

## `priceFrom` (type: `integer`):

Minimum price in USD

## `priceTo` (type: `integer`):

Maximum price in USD

## `fetchDetails` (type: `boolean`):

Visit each listing page for description, full photo gallery, body/color/drive. Disable for faster/cheaper list-only scrapes.

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

Maximum number of listings to return. Keep small for quick tests.

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

Parallel detail-page requests. Keep low — RST sits behind Cloudflare.

## `incremental` (type: `boolean`):

Compare this run to the previous snapshot for the same stateKey. Adds changeType (new / price\_dropped / price\_raised / unchanged / delisted).

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

Snapshot namespace (e.g. toyota-camry). Use different keys per search.

## `onlyChanges` (type: `boolean`):

When incremental is on, skip unchanged listings.

## `detectDelisted` (type: `boolean`):

Emit stubs for IDs present in the previous snapshot but missing now.

## `emitDigest` (type: `boolean`):

Push one summary item (counts + top drops) for webhooks.

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

Residential recommended — RST sits behind Cloudflare and blocks datacenter IPs.

## Actor input object example

```json
{
  "mode": "search",
  "searchUrl": "https://rst.ua/ukr/oldcars/toyota/",
  "brandName": "Toyota",
  "fetchDetails": false,
  "maxResults": 5,
  "maxConcurrency": 4,
  "incremental": false,
  "stateKey": "default",
  "onlyChanges": false,
  "detectDelisted": true,
  "emitDigest": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "UA"
  }
}
```

# Actor output Schema

## `listings` (type: `string`):

Dataset of scraped RST.ua car listings.

# 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 = {
    "searchUrl": "https://rst.ua/ukr/oldcars/toyota/",
    "brandName": "Toyota",
    "maxResults": 5,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "UA"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("skipper_lume/rst-ua-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 = {
    "searchUrl": "https://rst.ua/ukr/oldcars/toyota/",
    "brandName": "Toyota",
    "maxResults": 5,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "UA",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("skipper_lume/rst-ua-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchUrl": "https://rst.ua/ukr/oldcars/toyota/",
  "brandName": "Toyota",
  "maxResults": 5,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "UA"
  }
}' |
apify call skipper_lume/rst-ua-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=skipper_lume/rst-ua-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/Ha7oTOXK8PDjSgtmd/builds/6JJreW0nGFQBa5gMY/openapi.json
