# Skelbiu.lt Scraper - Lithuanian Classifieds Extractor (`studio-amba/skelbiu-scraper`) Actor

Scrape classified ads from Skelbiu.lt, Lithuania's largest general classifieds portal. Extract titles, prices, categories, locations, images, and descriptions across electronics, vehicles, real estate, jobs, and more. No login needed.

- **URL**: https://apify.com/studio-amba/skelbiu-scraper.md
- **Developed by:** [Studio Amba](https://apify.com/studio-amba) (community)
- **Categories:** E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 result scrapeds

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/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

## Skelbiu.lt Scraper

Extract classified ads from [Skelbiu.lt](https://www.skelbiu.lt), Lithuania's largest general classifieds portal. Skelbiu covers everything from vehicles and electronics to real estate, jobs, and services, with hundreds of thousands of active listings from private sellers and businesses.

### Why use this actor?

Skelbiu.lt is the default place Lithuanians list and search for second-hand goods, vehicles, property, and services. This actor lets you collect structured ad data at scale — titles, prices, categories, locations, images, and descriptions — without manual browsing or a login.

Use cases include:

- **Market research**: Track asking prices for a product category across Lithuania
- **Reseller sourcing**: Monitor new listings in a niche (electronics, tools, furniture) for arbitrage
- **Vehicle price tracking**: Compare used car or motorcycle prices by model
- **Real estate scouting**: Pull apartment and house listings alongside dedicated property portals
- **Lead generation**: Find sellers or service providers in a specific city or category
- **Academic/market research**: Collect structured classifieds data for statistical analysis

### How to scrape Skelbiu.lt data

1. Go to the actor's page on the Apify Store
2. Enter a category slug (e.g., "transportas" for vehicles, "elektronika" for electronics) — this is the reliable way to get results
3. Optionally paste specific Skelbiu.lt category or listing detail URLs into Start URLs — these override Category/Search Keyword
4. Set the maximum number of results you want
5. Click "Start" to run the scraper
6. Download results as JSON, CSV, or Excel when complete

Skelbiu.lt runs Cloudflare behavioral rate-limiting that escalates to a Turnstile challenge on every listing and detail page. The actor handles this with a real (non-headless) Chrome browser session and Lithuanian residential proxies, mirroring the approach used on Aruodas.lt (same underlying platform). No login or cookies are needed.

Skelbiu.lt's own keyword search (`/paieska/?keywords=...`) loads its result list through a client-side call the site restricts to normal browser sessions, so it can return zero results even once the Cloudflare challenge is passed. Category pages are rendered server-side and don't have this limitation — use Category for guaranteed results, and treat Search Keyword as best-effort.

### Input

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `category` | String | No | Category slug to browse, e.g., "transportas" (vehicles), "elektronika" (electronics), "nekilnojamasis-turtas" (real estate), "transportas/automobiliai" (cars sub-category). Defaults to "transportas" if empty and no keyword/start URL is set. |
| `searchQuery` | String | No | Keyword to search for, e.g., "dviratis", "telefonas". Only used when Category is empty — best-effort, see limitation above. |
| `startUrls` | Array | No | Skelbiu.lt category or listing detail URLs. Overrides Category/Search Keyword if provided. |
| `maxResults` | Integer | No | Maximum ads to return (default: 100, max: 10000) |
| `proxyConfiguration` | Object | No | Proxy settings. Lithuanian residential proxies are required and configured by default — Skelbiu.lt blocks datacenter IPs with a Cloudflare Turnstile challenge. |

#### Start URLs

You can paste any Skelbiu.lt URL directly:

- Category page: `https://www.skelbiu.lt/skelbimai/transportas/`
- Sub-category page: `https://www.skelbiu.lt/skelbimai/transportas/automobiliai/`
- Individual ad: `https://www.skelbiu.lt/skelbimai/gt-aggressor-expert-dviratis-86478811.html`

### Output

Each ad produces a JSON object with the following fields:

| Field | Type | Description |
|-------|------|--------------|
| `adTitle` | String | Classified ad title |
| `price` | Number | Listing price |
| `currency` | String | Always "EUR" |
| `category` | String | Category/breadcrumb path the ad is listed under |
| `location` | String | City or region where the item/service is offered |
| `imageUrl` | String | Primary listing photo URL |
| `adDescription` | String | Full listing description text |
| `sellerName` | String | Name of the seller/poster, if shown |
| `adId` | String | Numeric Skelbiu.lt ad ID extracted from the URL |
| `url` | String | Full ad URL on Skelbiu.lt |
| `scrapedAt` | String | ISO 8601 timestamp of when the data was collected |

#### Example output

```json
{
  "adTitle": "GT Aggressor Expert dviratis",
  "price": 350,
  "currency": "EUR",
  "category": "Transportas / Dviračiai",
  "location": "Vilnius",
  "imageUrl": "https://skelbiu-img.dgn.lt/1_19_4968145766/gt-aggressor-expert-dviratis.jpg",
  "adDescription": "Parduodamas kalnų dviratis GT Aggressor Expert, geros būklės...",
  "sellerName": "Tomas",
  "adId": "86478811",
  "url": "https://www.skelbiu.lt/skelbimai/gt-aggressor-expert-dviratis-86478811.html",
  "scrapedAt": "2026-08-20T18:00:00.000Z"
}
```

### Cost estimate

This actor requires headful Chrome plus Lithuanian residential proxy traffic to get past Cloudflare — more expensive per result than a plain HTTP scraper. Budget for residential proxy usage on every category/detail page fetched, plus compute for a browser session held open per request. A 100-result run typically stays well within a few dollars of platform usage; heavier runs (thousands of results) scale close to linearly with `maxResults`. Usage cost only settles after a run reports SUCCEEDED — checking the dataset mid-run will undercount what you'll actually be billed.

### Limitations

- Keyword search (`searchQuery`) is best-effort and can return zero results — Skelbiu.lt's own search UI loads results via a client-side call the site restricts to normal browser sessions. Use `category` (or a category start URL) for guaranteed results.
- Skelbiu.lt's terms of service (clause 8.2.3) prohibit automated data collection ("duomenų nuskaitymo (scraping)"). This actor is provided for personal research and market-monitoring use; you are responsible for how you use the data.
- Listing pages sit behind a Cloudflare Turnstile challenge that occasionally requires a session retry — the actor retries automatically with a fresh residential IP, but very large runs may see a higher retry rate than sites without this protection.
- Pagination depth and some detail-page fields (seller name, exact category breadcrumb) can vary by listing type; the actor uses resilient fallback selectors but coverage may differ slightly across categories.
- This actor does not create, edit, or manage listings — it only reads publicly visible ad pages.

### Related Scrapers

Looking for more Baltic and European classifieds/marketplace data? Check out:

- [Aruodas Scraper](https://apify.com/studioamba/aruodas-scraper) — Lithuanian real estate portal (same underlying platform)
- [KV.ee Scraper](https://apify.com/studioamba/kv-ee-scraper) — Estonian real estate listings
- [OLX Scraper](https://apify.com/studioamba/olx-scraper) — Pan-European classifieds
- [Bazos Scraper](https://apify.com/studioamba/bazos-scraper) — Czech/Slovak classifieds
- [Autoplius Scraper](https://apify.com/studioamba/autoplius-scraper) — Lithuanian vehicle marketplace

### Support

Found an issue or have a feature request? Reach out via the Apify Store issue tab on this actor's page.

# Actor input Schema

## `category` (type: `string`):

Category slug to browse, e.g. 'transportas' (vehicles), 'elektronika' (electronics), 'nekilnojamasis-turtas' (real estate), 'transportas/automobiliai' (cars sub-category). This is the reliable way to get results — category pages are server-rendered. Defaults to 'transportas' if empty and no keyword/start URL is set.

## `searchQuery` (type: `string`):

Keyword to search for, e.g., 'dviratis' (bicycle), 'telefonas' (phone). Only used when Category is empty. Skelbiu.lt's keyword search loads results via a client-side call the site restricts to browser sessions, so this can return fewer or no results — prefer Category for guaranteed results.

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

Skelbiu.lt search, category, or listing detail URLs. Overrides searchQuery/category if provided.

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

Maximum number of listings to scrape.

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

Residential proxies are required — Skelbiu.lt uses Cloudflare behavioral rate-limiting and a Turnstile challenge on all listing pages. Lithuanian residential proxies give best results.

## Actor input object example

```json
{
  "category": "transportas",
  "startUrls": [
    {
      "url": "https://www.skelbiu.lt/skelbimai/transportas/"
    }
  ],
  "maxResults": 5,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "LT"
  }
}
```

# 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 = {
    "category": "transportas",
    "startUrls": [
        {
            "url": "https://www.skelbiu.lt/skelbimai/transportas/"
        }
    ],
    "maxResults": 5,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "LT"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("studio-amba/skelbiu-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 = {
    "category": "transportas",
    "startUrls": [{ "url": "https://www.skelbiu.lt/skelbimai/transportas/" }],
    "maxResults": 5,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "LT",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("studio-amba/skelbiu-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 '{
  "category": "transportas",
  "startUrls": [
    {
      "url": "https://www.skelbiu.lt/skelbimai/transportas/"
    }
  ],
  "maxResults": 5,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "LT"
  }
}' |
apify call studio-amba/skelbiu-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,studio-amba/skelbiu-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/gcJtaH6mNATc4BU6b/builds/fZLaUyTYkxdX8ydnL/openapi.json
