# Autobazar.eu Car Listings Extractor (`steeriq/autobazar-eu-extract`) Actor

Extracts passenger car and light commercial vehicle listings from autobazar.eu. Paste a search or listing URL from the site; every matching public listing comes back normalised to one shape shared with other marketplaces.

- **URL**: https://apify.com/steeriq/autobazar-eu-extract.md
- **Developed by:** [steeriq](https://apify.com/steeriq) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-usage

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

## Autobazar.eu Car Listings Extractor

Extracts car listings from [autobazar.eu](https://www.autobazar.eu), the Slovak
used-car marketplace. You paste search or listing URLs, and it returns every
matching listing as clean, structured JSON: price, make, model, year, mileage,
fuel, gearbox, body, power, location, seller, photos, VIN and more.

The output uses one normalised shape that is shared with our other car
marketplace extractors, so you can combine data from several countries without
writing a mapping layer.

### What it covers

- Passenger cars, SUVs and off-road vehicles
- Light commercial vehicles up to 3.5 t
- Classic and veteran cars

Other categories are skipped, including motorcycles, trucks, caravans and parts.

### How to use it

1. Open [autobazar.eu](https://www.autobazar.eu) and build a search with the
   site's own filters: make, model, price, year, fuel, region, and so on.
2. Copy the URL from your browser's address bar.
3. Paste it into **Start URLs** and run the actor.

Every result of that search is returned. A single listing URL returns just that
listing. You can mix as many searches and listings as you like; the results are
de-duplicated.

The actor accepts:

| URL | Example |
| --- | --- |
| Search results | `https://www.autobazar.eu/en/vysledky/osobne-vozidla/bmw/` |
| One listing | `https://www.autobazar.eu/en/detail/bmw-x5-xdrive25d/Ae2frct06xJ/` |
| A dealer's stock | `https://www.autobazar.eu/en/predajca/<dealer>/` |

The Slovak and English versions of the site both work.

### Input

| Field | Default | What it does |
| --- | --- | --- |
| `startUrls` | (required) | Search, listing and dealer URLs. |
| `detailLevel` | `full` | `full` opens every listing page for the complete record. `compact` returns only what the search result cards show, and costs about 20× fewer requests. |
| `maxItems` | no limit | Stop after this many listings. |
| `includeEquipment` | `false` | Add the equipment list (in Slovak, as published). |
| `includeRawParameters` | `false` | Add every parameter from the listing page, as the site published it. |
| `skipSeenListings` | `false` | Skip listings that an earlier run already returned. |
| `seenStoreName` | `autobazar-eu-seen-listings` | The named key-value store that remembers seen listings. |
| `maxConcurrency` | `10` | Most requests in flight at once. |
| `maxRequestRetries` | `3` | Retries per request. |
| `proxyConfiguration` | none | Leave it empty and the actor uses a proxy only if the site blocks it. |

Example input:

```json
{
  "startUrls": ["https://www.autobazar.eu/en/vysledky/osobne-vozidla/bmw/"],
  "maxItems": 100
}
```

#### Tracking new listings

To collect only new listings on a schedule, turn on `skipSeenListings` and run
the same searches daily. Listings that an earlier run returned are skipped
before they are requested, so you don't pay for them again. Use a different
`seenStoreName` for each independent feed.

### Output

Each dataset item is one listing. Here is an example at `full` detail, with
the photo list and description shortened:

```json
{
  "marketplace": "autobazar-eu",
  "id": "Ae2frct06xJ",
  "url": "https://www.autobazar.eu/en/detail/bmw-x5-xdrive25d-at-160kw218hp-a8/Ae2frct06xJ/",
  "title": "BMW X5 xDrive25d AT 160kW218HP A8",
  "make": "bmw",
  "model": "X5",
  "price": 13000,
  "priceDerived": false,
  "currency": "EUR",
  "year": 2016,
  "mileageKm": 385000,
  "fuelType": "diesel",
  "bodyType": "suv",
  "gearbox": "automatic",
  "engineCapacityCc": 1995,
  "powerKw": 160,
  "location": {
    "raw": "Skalica",
    "city": "Skalica",
    "region": "Trnavský kraj",
    "postalCode": null,
    "countryCode": "SK",
    "latitude": 48.8460561,
    "longitude": 17.2278639
  },
  "seller": {
    "type": "private",
    "typeInferred": false,
    "name": "…",
    "profileUrl": "https://www.autobazar.eu/en/predajca/…/",
    "activeListingCount": 1
  },
  "imageUrls": ["https://img.autobazar.eu/foto/…"],
  "imageCount": 46,
  "status": "active",
  "firstRegistration": "2016-07",
  "drivetrain": "all_wheel",
  "doors": 5,
  "seats": 5,
  "gears": 8,
  "color": "black",
  "vin": "WBA…",
  "co2Gkm": 156,
  "euroStandard": "Euro 5",
  "consumption": {
    "fuelL100km": { "city": 6.8, "highway": 5.4, "combined": 5.7 },
    "electricKwh100km": null
  },
  "technicalInspectionUntil": "2028-08-31",
  "hasServiceHistory": true,
  "isDamaged": null,
  "description": "…",
  "publishTime": "2026-09-24T16:03:02.816Z",
  "extractionTime": "2026-09-24T17:29:19.758Z",
  "startUrl": "https://www.autobazar.eu/en/vysledky/osobne-vozidla/bmw/"
}
```

At `compact` detail you get the fields from `id` to `status`: the ones on the
search result card.

#### How to read the fields

- **Normalised values.** Make, fuel, body, gearbox, drivetrain, colour and
  condition use fixed lowercase values (`diesel`, `suv`, `automatic`), whatever
  language the site used. If the site publishes a value outside that list, the
  field is `"unidentified"` and the original label is kept under `unmapped`,
  for example `{ "fuelType": "…" }`.
- **`null`** means the site did not publish that value.
- **`price`** is the full purchase price including VAT. It is `null` when the
  listing shows only a lease or monthly payment. If the seller published only a
  price before VAT, `price` is calculated with Slovak VAT and `priceDerived` is
  `true`.
- **`extractionTime`** is when the page was read. Price, mileage and status are
  as of that moment.
- **Removed listings.** A listing URL that points to a removed ad returns an
  item with `"status": "removed"`, so you can tell it apart from a failed
  request.

#### Run summary

Each run also saves a `RUN_SUMMARY` record in its key-value store. It shows the
outcome of every start URL (`ok`, `truncated`, `rejected` or `failed`), and any
requests that failed. The same summary appears as the run's status message.

`truncated` means the search had more results than the site lets anyone page
through. To get all of them, split the search into narrower ones, for example
by year or price range.

### Cost and speed

The actor reads the data the site embeds in each page. It uses no browser and,
by default, no proxy, so runs are fast and cheap. A proxy is added
automatically, first datacenter and then residential, only if the site starts
blocking requests.

To keep costs down:

- Use `compact` when the search card fields are enough.
- Set `maxItems` while you are testing.
- Use `skipSeenListings` for scheduled runs.

### Limits

- Only public listings are extracted. Nothing that requires a login.
- The "new cars" and "equipment" search pages are not supported yet.
- Descriptions and equipment are returned in the language the seller wrote
  them in, usually Slovak.

# Actor input Schema

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

Search and listing URLs, mixed freely. Build a search with the site’s own filters and paste its URL: every result comes back. A listing URL returns that one listing. Results are merged and de-duplicated.

## `detailLevel` (type: `string`):

Full visits every listing page for the complete record. Compact returns only what the search result cards show, at about a twentieth of the requests.

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

Stop after this many results. Leave empty for every result.

## `includeEquipment` (type: `boolean`):

Add the equipment list to each full listing. It runs to about 80 entries on some sites.

## `includeRawParameters` (type: `boolean`):

Add every parameter the site published, as it published it, to each full listing.

## `skipSeenListings` (type: `boolean`):

Skip listings a previous run with the same store name already returned, without requesting them.

## `seenStoreName` (type: `string`):

The named key-value store holding the ids of listings already returned.

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

Most requests in flight at once.

## `maxRequestRetries` (type: `integer`):

Retries per request. With the default proxy tiers, a retry is likely to go out on a costlier proxy for that site.

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

Leave empty, or on “no proxy”, to start without a proxy and step up to Apify datacenter, then residential, only where the site blocks. An Apify Proxy group or your own proxies chosen here are used as they are, without stepping up.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.autobazar.eu/en/vysledky/osobne-vozidla/bmw/"
  ],
  "detailLevel": "full",
  "maxItems": 3,
  "includeEquipment": false,
  "includeRawParameters": false,
  "skipSeenListings": false,
  "seenStoreName": "autobazar-eu-seen-listings",
  "maxConcurrency": 10,
  "maxRequestRetries": 3
}
```

# Actor output Schema

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

Every observation this run emitted, with every field, as JSON.

## `overview` (type: `string`):

The same observations, trimmed to the overview columns.

## `runSummary` (type: `string`):

The outcome of every start URL, the requests that failed, and the route each start URL finished on.

# 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://www.autobazar.eu/en/vysledky/osobne-vozidla/bmw/"
    ],
    "maxItems": 3
};

// Run the Actor and wait for it to finish
const run = await client.actor("steeriq/autobazar-eu-extract").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://www.autobazar.eu/en/vysledky/osobne-vozidla/bmw/"],
    "maxItems": 3,
}

# Run the Actor and wait for it to finish
run = client.actor("steeriq/autobazar-eu-extract").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://www.autobazar.eu/en/vysledky/osobne-vozidla/bmw/"
  ],
  "maxItems": 3
}' |
apify call steeriq/autobazar-eu-extract --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,steeriq/autobazar-eu-extract"
        }
    }
}
```

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/dH2agRDfFTa3DkjCA/builds/0IQbmz67T3ao4KTTl/openapi.json
