# Bazoš Scraper - Ads, Prices & Seller Contacts (`vilkogamer/bazos-scraper`) Actor

Scrape classified ads from Bazos.sk & Bazos.cz. Extract titles, prices, locations, photos and seller phone/e-mail contacts. Fast, cheap, works out of the box.

- **URL**: https://apify.com/vilkogamer/bazos-scraper.md
- **Developed by:** [Marek Hrabcak](https://apify.com/vilkogamer) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

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

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#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

## Bazoš Scraper – Ads, Prices & Seller Contacts from Bazos.sk & Bazos.cz

Extract classified ads from [Bazoš.sk](https://www.bazos.sk) and [Bazoš.cz](https://www.bazos.cz) — Slovakia's and Czechia's most popular free classifieds sites. Get **titles, prices, descriptions, locations, photos, and seller contacts** (phone & e-mail) for any keyword or category, no coding required.

***

### 📑 Table of Contents

- [Why use this Actor](#-why-use-bazoš-scraper)
- [Input parameters](#-input-parameters)
- [Usage examples](#-usage-examples)
- [Output data](#-output-data)
- [Cost](#-cost)
- [How to run](#-how-to-run)
- [FAQ](#-faq)
- [Privacy & legal](#️-privacy--legal)

***

### ✨ Why Use Bazoš Scraper?

- CZ/SK **Both countries, one Actor** — switch between Bazos.sk and Bazos.cz with a single input field, categories are automatically mapped to each site's own naming.
- 🎯 **Real search filters** — keyword, category, min/max price, ZIP code + radius, and sort order, just like the site itself.
- 📞 **Seller contact extraction** — phone numbers and e-mails are pulled and de-obfuscated automatically, even when sellers write them as "meno (zavináč) gmail bodka com".
- 🖼️ **Full ad details on demand** — description, all photos, view count, seller name, and GPS coordinates when you enable detail scraping.
- 💸 **Cheap by default** — listing-only mode costs almost nothing; detail scraping is optional and only runs when you turn it on.
- 🛡️ **Credit-safe** — a hard `maxItems` limit stops the run before it can overspend.
- 🔌 **Works everywhere** — Apify Console, CLI, REST API, JS/Python client, or a Schedule for daily monitoring of new listings.

***

### 📥 Input Parameters

| Parameter | Type | Default | Description |
|---|---|---|---|
| `country` | Select | `sk` | Which site to scrape: `sk` (Bazos.sk) or `cz` (Bazos.cz) |
| `searchQuery` | String | `""` | What to search for, e.g. `iphone 13`. Leave empty to list the whole category |
| `category` | Select | `all` | Section to search in — `all` searches every section |
| `startUrls` | Array | `[]` | Paste Bazoš listing or ad URLs directly. Overrides the filters above |
| `priceMin` | Integer | — | Minimum price (EUR on .sk, CZK on .cz) |
| `priceMax` | Integer | — | Maximum price (EUR on .sk, CZK on .cz) |
| `zipCode` | String | `""` | Postal code used as the centre of a radius search, e.g. `82105` |
| `radiusKm` | Integer | `25` | Distance from the ZIP code — only used when `zipCode` is set |
| `sort` | Select | `newest` | Order of results: newest, cheapest, most expensive |
| `maxItems` | Integer | `100` | Hard cap on saved results — your main credit-protection setting 🛡️ |
| `scrapeDetails` | Boolean | `false` | Off = fast, listing data only. On = adds phone, e-mail, seller name, view count, and all photos |
| `maxConcurrency` | Integer | `5` | Parallel requests |
| `proxyConfiguration` | Object | off | Optional Apify Proxy — only needed if you get blocked |

> 💡 Nothing is required — just pick a country and category and go.

***

### 📖 Usage Examples

#### 1. 📱 Cheapest run — just headlines

```json
{
  "country": "sk",
  "category": "mobil",
  "searchQuery": "iphone 13",
  "maxItems": 100
}
```

#### 2. 📞 Full ad details with seller contacts, near a ZIP code

```json
{
  "country": "cz",
  "category": "auto",
  "zipCode": "10000",
  "radiusKm": 50,
  "maxItems": 50,
  "scrapeDetails": true
}
```

#### 3. 💰 Price-filtered search, cheapest first

```json
{
  "country": "sk",
  "searchQuery": "notebook",
  "priceMin": 100,
  "priceMax": 500,
  "sort": "cheapest",
  "maxItems": 200
}
```

#### 4. 🔗 Scrape a specific ad or listing URL directly

```json
{
  "startUrls": ["https://mobil.bazos.sk/inzerat/12345678/iphone-15-pro.php"],
  "scrapeDetails": true
}
```

***

### 📤 Output Data

Results land in your Apify Dataset and can be exported as **JSON, CSV, Excel, XML, or HTML**.

Each ad includes: `title`, `description`, `price`, `priceText`, `priceType`, `currency`, `location`, `zipCode`, `latitude`/`longitude`, `postedAt`, `isTop`, `views`, `category`, `mainImage`, `images`, `imagesCount`, `sellerName`, `phone`, `phones`, `email`, `emails`, `url`, and `scrapedAt`.

> 📞 Contact fields (`phone`, `email`, and their arrays) are only fully populated when `scrapeDetails` is turned on.

***

### 💸 Cost

Cost mainly depends on `maxItems` and whether `scrapeDetails` is on.

| Mode | 100 results | 1,000 results |
|---|---|---|
| ⚡ Headlines only | seconds | ~1 min |
| 📞 Full details + contacts | ~10–30 s | ~1–3 min |

**Tips to keep costs low:**

1. 🛡️ Always set `maxItems`.
2. ⚡ Leave `scrapeDetails` off if you only need titles, prices, and locations.
3. 🔀 Keep `maxConcurrency` around 5 — Bazoš doesn't need aggressive parallelism.
4. 🌍 Use `zipCode` + `radiusKm` to narrow results to a region instead of scraping everything.

***

### 🚀 How to Run

1. Open the Actor in the [Apify Console](https://console.apify.com).
2. Pick a `country`, `category`, and optional `searchQuery`.
3. Click **Start** ▶️.
4. Download your results from the **Dataset** tab.

It also works from the Apify CLI, the REST API, the JS/Python client, or on a Schedule — for example, a daily run to catch new listings for a keyword you're watching.

***

### 🔧 Troubleshooting

| Problem | Likely fix |
|---|---|
| 📭 Empty dataset | Category/keyword too narrow — try `category: "all"` or a broader keyword |
| 📞 No phone/e-mail | Seller didn't include one, or `scrapeDetails` is off — turn it on |
| 🚫 Errors / timeouts | Enable `proxyConfiguration` and lower `maxConcurrency` |
| 🐌 Slow run | Lower `maxItems` or disable `scrapeDetails` |

***

### ❓ FAQ

**Does this work for both Slovakia and Czechia?**
Yes — set `country` to `sk` for Bazos.sk or `cz` for Bazos.cz. Categories, currency, and phone number formatting are all handled automatically for each.

**Can I search by location?**
Yes — set `zipCode` and `radiusKm` to only get ads near a specific area.

**Can I get seller phone numbers and e-mails?**
Yes, when the seller included them in the ad — turn on `scrapeDetails` to extract and de-obfuscate them automatically.

**Can I monitor new listings for a keyword?**
Yes — schedule a daily run with your `searchQuery` and a `sort: "newest"` to catch new ads as they're posted.

**Is this legal?**
Only publicly available ad data is collected. Contact details (phone numbers, e-mails) count as personal data under GDPR — how you use them afterward is your responsibility.

***

### ⚖️ Privacy & Legal

- ✅ Only scrapes **publicly available** ad data.
- ✅ Respects Bazoš's robots.txt and terms of service.
- ⚠️ Extracted seller contact details may be personal data under GDPR — make sure you have a valid reason to process them.
- ℹ️ This Actor is just an automation tool; how you use the extracted data is your own responsibility.

***

> **Keywords:** Bazoš scraper, Bazos.sk scraper, Bazos.cz scraper, Slovak classifieds scraper, Czech classifieds scraper, scrape Bazoš ads, Bazoš seller contacts, classifieds data Slovakia, classifieds data Czech Republic, second-hand marketplace scraper.

**Happy scraping! 🚀**

# Actor input Schema

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

Bazoš country site to scrape.

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

Keyword(s) to search for, e.g. "iphone". Leave empty to list all ads in the category.

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

Ad category to search in.

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

Optional list of Bazoš listing or ad detail URLs to start from instead of building a search URL from the fields above.

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

Only return ads priced at or above this amount.

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

Only return ads priced at or below this amount.

## `zipCode` (type: `string`):

ZIP/postal code to search around. Used together with Radius.

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

Search radius in kilometers around the ZIP code. Only applied when ZIP code is set.

## `sort` (type: `string`):

Order in which ads are listed.

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

Maximum number of ads to scrape.

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

If enabled, each ad's detail page is also visited to extract additional fields (full description, images, seller info, GPS coordinates, etc). Slower but more complete.

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

Maximum number of pages processed in parallel.

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

Proxy settings used for making requests to Bazoš.

## Actor input object example

```json
{
  "country": "sk",
  "searchQuery": "",
  "category": "all",
  "startUrls": [],
  "zipCode": "",
  "radiusKm": 25,
  "sort": "newest",
  "maxItems": 100,
  "scrapeDetails": false,
  "maxConcurrency": 5,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `ads` (type: `string`):

Ad listings scraped from Bazoš, one item per ad.

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("vilkogamer/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 = {}

# Run the Actor and wait for it to finish
run = client.actor("vilkogamer/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 '{}' |
apify call vilkogamer/bazos-scraper --silent --output-dataset

```

## MCP server setup

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