# Bazos Scraper - Czech & Slovak Classifieds Marketplace (`studio-amba/bazos-scraper`) Actor

Scrape classifieds listings from Bazos.cz and Bazos.sk. Extract prices, descriptions, seller info, images, and location data. No login required.

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

## Pricing

from $2.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/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

## Bazos Scraper - Czech & Slovak Classifieds Data

Extract classified listings, prices, seller information, and images from [Bazos.cz](https://www.bazos.cz) (Czech Republic) and [Bazos.sk](https://www.bazos.sk) (Slovakia) — the most popular peer-to-peer classifieds platform in Central Europe with millions of active listings across 20+ categories.

### How to scrape Bazos data

Bazos Scraper collects structured listing data from both the Czech and Slovak versions of Bazos. It searches by keyword, browses category pages, or scrapes individual listing URLs. The scraper handles pagination automatically and can visit each listing's detail page for full descriptions, seller contact info, and all images.

Bazos is famously minimal — no JavaScript rendering, no anti-bot protection, pure HTML. This makes it one of the fastest and cheapest sites to scrape on the Apify platform. The same simple structure has been running since 2004, serving over 3 million monthly visitors in the Czech Republic alone.

**No login or cookies required.**

### Supported countries

| `country` | Site | Currency | Search language |
|-----------|------|----------|-----------------|
| `CZ` (default) | [bazos.cz](https://www.bazos.cz) | CZK | Czech |
| `SK` | [bazos.sk](https://www.bazos.sk) | EUR | Slovak |

Set `country` to choose the site for a keyword search. When you give `categoryUrls`, each URL decides its own site, so `https://auto.bazos.sk/` returns Slovak listings whatever `country` says. Every record carries a `country` field and a `currency` field.

**Popular use cases:**

- **Market research** — Monitor pricing trends for used electronics, vehicles, real estate, and consumer goods across Czech and Slovak markets.
- **Price comparison** — Track how much specific items (phones, laptops, cars) sell for on the peer-to-peer market vs. retail.
- **Lead generation** — Find sellers offering specific products or services in target regions.
- **Academic research** — Study classifieds market dynamics, regional pricing differences, and consumer behavior in Central European markets.
- **Inventory sourcing** — Discover bulk lots, business liquidations, and wholesale opportunities posted by sellers.

### What data does Bazos Scraper extract?

When `scrapeDetails` is enabled (default), each listing includes:

- **listingTitle** — Title of the classified listing
- **price** — Listed price (null for "Dohodou"/negotiable listings)
- **currency** — CZK for bazos.cz, EUR for bazos.sk
- **listingDescription** — Full description text from the detail page
- **sellerName** — Name of the seller
- **location** — Seller's city or area
- **postalCode** — Seller's postal code
- **datePosted** — Date the listing was published (ISO format)
- **imageUrl** — Primary listing image (full size)
- **imageUrls** — All listing images (full size)
- **category** — Listing category (PC, Auto, Mobil, etc.)
- **listingId** — Unique Bazos listing ID
- **views** — Number of views on the listing
- **url** — Full listing URL
- **country** — CZ or SK
- **scrapedAt** — ISO timestamp of extraction

**Basic mode** (with `scrapeDetails` off) returns listing-page data only: title, price, description snippet, location, date, and thumbnail image. Much faster for bulk monitoring.

### Input parameters

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `searchQuery` | String | `"notebook"` | Keyword search in Czech or Slovak |
| `country` | Enum | `CZ` | `CZ` (bazos.cz, CZK) or `SK` (bazos.sk, EUR) |
| `categoryUrls` | Array | none | Direct category or listing URLs from bazos.cz or bazos.sk. Overrides `searchQuery` |
| `maxResults` | Integer | `100` | Maximum listings to return (up to 10,000) |
| `maxPages` | Integer | `5` | Max pagination pages to scrape (20 listings/page) |
| `scrapeDetails` | Boolean | `true` | Visit detail pages for full data (slower but richer) |
| `proxyConfiguration` | Object | Residential, selected country | Proxy settings. The proxy country follows `country` unless you set one yourself |

#### Tips

- Bazos has minimal anti-bot protection, but proxies help for large runs (1,000+ listings).
- Each page has 20 listings. With `maxPages: 5`, you get up to 100 listings per search.
- Use native-language search terms for best results: "telefon" (phone), "auto" (car), "kolo" (bicycle), "byt" (apartment).
- Category URLs use subdomains: `https://pc.bazos.cz/`, `https://auto.bazos.sk/`, `https://mobil.bazos.cz/`.
- The `scrapeDetails` toggle is your speed/depth tradeoff. Off = 5-10x faster but no seller info or full descriptions.

### Output

Here is realistic example output from Bazos.cz:

```json
[
  {
    "listingTitle": "Prodej notebook Lenovo ThinkPad T14 Gen 3",
    "price": 15000,
    "currency": "CZK",
    "listingDescription": "Prodavam notebook Lenovo ThinkPad T14 Gen 3, AMD Ryzen 5 PRO 6650U, 16GB RAM, 512GB SSD, 14\" FHD IPS, podsvicena klavesnice, ctecka otisku prstu. Baterie drzi 6-7 hodin. Stav velmi dobry, minimalni pouziti. Puvodni krabice a nabijecka.",
    "sellerName": "Martin Novak",
    "location": "Praha",
    "postalCode": "110 00",
    "datePosted": "2026-06-05",
    "imageUrl": "https://www.bazos.cz/img/1/123/219123456.jpg",
    "imageUrls": [
      "https://www.bazos.cz/img/1/123/219123456.jpg",
      "https://www.bazos.cz/img/1/123/219123456b.jpg",
      "https://www.bazos.cz/img/1/123/219123456c.jpg"
    ],
    "category": "Pc",
    "listingId": "219123456",
    "views": 342,
    "url": "https://pc.bazos.cz/inzerat/219123456/prodej-notebook-lenovo-thinkpad-t14-gen-3.php",
    "country": "CZ",
    "scrapedAt": "2026-06-07T10:30:15.000Z"
  },
  {
    "listingTitle": "iPhone 15 Pro 256GB - zaruka",
    "price": 22500,
    "currency": "CZK",
    "listingDescription": "Prodavam iPhone 15 Pro 256GB v cernem provedeni. Telefon je v perfektnim stavu, vzdy pouzivan s obalem a ochrannym sklem. Zaruka do 03/2027. Kompletni baleni vcetne nabijecky a kabelu.",
    "sellerName": "Jana Svobodova",
    "location": "Brno",
    "postalCode": "602 00",
    "datePosted": "2026-06-06",
    "imageUrl": "https://www.bazos.cz/img/1/789/219789012.jpg",
    "imageUrls": [
      "https://www.bazos.cz/img/1/789/219789012.jpg",
      "https://www.bazos.cz/img/1/789/219789012b.jpg"
    ],
    "category": "Mobil",
    "listingId": "219789012",
    "views": 891,
    "url": "https://mobil.bazos.cz/inzerat/219789012/iphone-15-pro-256gb-zaruka.php",
    "country": "CZ",
    "scrapedAt": "2026-06-07T10:30:18.000Z"
  },
  {
    "listingTitle": "Predaj Skoda Octavia Combi 2.0 TDI",
    "price": 12900,
    "currency": "EUR",
    "listingDescription": "Predavam Skoda Octavia Combi 2.0 TDI, rok 2019, 150 000 km, automat DSG, full vybava. Pravidelny servis u autorizovaneho dealera. STK do 2027. Moznost vymeny za SUV.",
    "sellerName": "Peter Horvath",
    "location": "Bratislava",
    "postalCode": "811 01",
    "datePosted": "2026-06-04",
    "imageUrl": "https://www.bazos.sk/img/1/456/192456789.jpg",
    "imageUrls": [
      "https://www.bazos.sk/img/1/456/192456789.jpg",
      "https://www.bazos.sk/img/1/456/192456789b.jpg",
      "https://www.bazos.sk/img/1/456/192456789c.jpg",
      "https://www.bazos.sk/img/1/456/192456789d.jpg"
    ],
    "category": "Auto",
    "listingId": "192456789",
    "views": 1547,
    "url": "https://auto.bazos.sk/inzerat/192456789/predaj-skoda-octavia-combi-20-tdi.php",
    "country": "SK",
    "scrapedAt": "2026-06-07T10:30:21.000Z"
  }
]
```

### How much does it cost?

The actor is pay per event. You pay $0.002 per result (one listing in the dataset) plus $0.005 per run start. The price is the same for bazos.cz and bazos.sk, and the same with `scrapeDetails` on or off.

| Scenario | Listings | Cost |
|----------|----------|------|
| Quick search | 20 | $0.045 |
| Category sweep | 100 | $0.205 |
| Large search | 500 | $1.005 |
| Bulk run | 2,000 | $4.005 |

A run's usage cost only settles after the run reports SUCCEEDED. Reading the cost of a run that is still in progress shows a number that is far too low, so wait for SUCCEEDED before you estimate spend from a run.

### Can I integrate?

Bazos Scraper connects to the full Apify integration ecosystem:

- **Apify API** — Trigger runs programmatically, stream results in real-time
- **Webhooks** — Notify your systems when scraping completes
- **Google Sheets** — Auto-export Bazos listings for team review
- **Zapier / Make** — Build no-code automations triggered by new listings
- **Slack alerts** — Get notified when specific items appear at target prices
- **Scheduled runs** — Set up daily monitoring with Apify Schedules
- **Direct download** — CSV, JSON, XML, or Excel export from the Apify Console

### Can I use it as an API?

Use Bazos Scraper as a Czech/Slovak classifieds API. Start runs, poll for results, and process data in your application.

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_API_TOKEN")

run = client.actor("studio-amba/bazos-scraper").call(run_input={
    "searchQuery": "iPhone",
    "country": "CZ",
    "maxResults": 50,
    "scrapeDetails": True,
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    price = item.get("price", "N/A")
    currency = item.get("currency", "CZK")
    print(f"{item['listingTitle']} - {price} {currency} ({item['location']})")
```

#### JavaScript

```javascript
import { ApifyClient } from "apify-client";

const client = new ApifyClient({ token: "YOUR_API_TOKEN" });

const run = await client.actor("studio-amba/bazos-scraper").call({
  searchQuery: "auto",
  country: "SK",
  maxResults: 200,
  maxPages: 10,
  scrapeDetails: true,
});

const { items } = await client
  .dataset(run.defaultDatasetId)
  .listItems();

items.forEach((item) => {
  console.log(`${item.listingTitle} - ${item.price} ${item.currency} (${item.location})`);
});
```

### FAQ

#### What is the difference between bazos.cz and bazos.sk?

Bazos.cz serves the Czech Republic with prices in CZK (Czech koruna). Bazos.sk serves Slovakia with prices in EUR (euro). Both sites have identical structure and the same categories. Use the `country` input parameter to choose which site to scrape.

#### What categories are available?

Both sites have 20+ categories including: Auto (cars), Motorky (motorcycles), PC (computers), Mobil (phones), Elektro (electronics), Reality (real estate), Prace/Praca (jobs), Nabytek (furniture), Obleceni (clothing), Sport, Knihy (books), Foto (photography), Hudba (music), and more. Each category uses its own subdomain (e.g., `pc.bazos.cz`, `auto.bazos.sk`).

#### What does "Dohodou" mean for price?

"Dohodou" means "negotiable" or "by agreement" — the seller hasn't listed a fixed price. These listings return `null` for the price field. "V textu" means the price is mentioned somewhere in the description text. "Zdarma" means free (price = 0).

#### Does this scraper handle anti-bot protection?

Bazos is famously simple with minimal anti-bot measures. The scraper uses browser-like headers for reliability, but Bazos generally does not block automated requests. Proxies are recommended for high-volume runs (1,000+ listings) to avoid rate limiting.

#### Can I scrape bazos.pl (Poland) or bazos.at (Austria)?

This actor currently supports bazos.cz and bazos.sk. The Polish and Austrian versions have similar structure. Contact us if you need these added.

### Limitations

- **Phone numbers** — Bazos partially hides phone numbers behind a "zobraz cislo" (show number) click that requires JavaScript. The scraper captures the visible part but not the full number.
- **Expired listings** — Bazos removes expired listings. The scraper only finds currently active listings.
- **Image count** — Some listings have many images (10+). The scraper captures all available images from the detail page.
- **Price format** — Negotiable prices ("Dohodou") return null. Prices in text ("V textu") also return null — check the description field.
- **Rate limiting** — Very aggressive scraping (10,000+ listings without proxies) may trigger temporary IP blocks. Use proxies and moderate concurrency.

### Other Central European classifieds scrapers

Build a complete view of Central European secondhand markets:

- **[Bazos Scraper](https://apify.com/studio-amba/bazos-scraper)** — Czech Republic and Slovakia (this actor)
- Check the [Apify Store](https://apify.com/store) for more European classifieds scrapers from Studio AMBA.

### Your feedback

If you notice any data quality issues, missing fields, or broken runs, let us know through the Apify Console. Bazos rarely changes its structure (it's been nearly identical since 2004), but we monitor and update this scraper to ensure reliable operation.

# Actor input Schema

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

Search for listings by keyword. Uses native-language search (Czech for .cz, Slovak for .sk). Examples: "notebook", "iPhone", "kolo" (bicycle), "auto".

## `country` (type: `string`):

Which Bazos site to scrape. CZ = bazos.cz (Czech Republic, prices in CZK), SK = bazos.sk (Slovakia, prices in EUR). Defaults to CZ. When you give Category or Listing URLs, the site in each URL decides the country of its records.

## `categoryUrls` (type: `array`):

Direct category or listing URLs from bazos.cz or bazos.sk. Examples: "https://pc.bazos.cz/" (all PC listings), "https://auto.bazos.sk/" (all cars in Slovakia). Overrides searchQuery when provided.

## `postalCode` (type: `string`):

Only listings near this postal code (PSC), for example "11000". Applies to keyword search.

## `radiusKm` (type: `integer`):

Search radius around the postal code, in km. Defaults to 25.

## `priceMin` (type: `integer`):

Only listings priced at or above this amount (CZK on bazos.cz, EUR on bazos.sk). Applies to keyword search.

## `priceMax` (type: `integer`):

Only listings priced at or below this amount. Applies to keyword search.

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

Maximum number of listings to return.

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

Maximum number of pagination pages to scrape. Each page has 20 listings.

## `scrapeDetails` (type: `boolean`):

Visit each listing's detail page to get full description, seller name, phone number, and all images. Slower but gives much richer data.

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

Proxy settings. The default is a residential proxy in the selected country (CZ for bazos.cz, SK for bazos.sk). Set a proxy country here only if you want to override that.

## Actor input object example

```json
{
  "searchQuery": "notebook",
  "country": "CZ",
  "radiusKm": 25,
  "maxResults": 20,
  "maxPages": 5,
  "scrapeDetails": true,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# 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 = {
    "searchQuery": "notebook",
    "maxResults": 20,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("studio-amba/bazos-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 = {
    "searchQuery": "notebook",
    "maxResults": 20,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("studio-amba/bazos-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 '{
  "searchQuery": "notebook",
  "maxResults": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call studio-amba/bazos-scraper --silent --output-dataset

```

## MCP server setup

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