# Bazaraki Scraper: Cyprus Property, Cars & Classifieds (`fayoussef/bazaraki-scraper`) Actor

Scrape Bazaraki.com, Cyprus's biggest classifieds site: property for sale and rent, cars, jobs and every other category. Filter by district, price and keyword or paste any search URL. Export price, bedrooms, m², year, mileage, location, seller and photos to JSON, CSV or Excel.

- **URL**: https://apify.com/fayoussef/bazaraki-scraper.md
- **Developed by:** [Youssef Farhan](https://apify.com/fayoussef) (community)
- **Categories:** Real estate, Lead generation, E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.60 / 1,000 listings

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

## Bazaraki Scraper: Cyprus Property, Cars & Classifieds

> **What is the Bazaraki Scraper?** It is an Apify Actor that scrapes listings from [Bazaraki.com](https://www.bazaraki.com), the biggest classifieds site in Cyprus, and returns one structured row per listing (price, category, decoded attributes like bedrooms, m², year and mileage, district, locality, GPS, seller, photos and dates) as JSON, CSV or Excel.

**Scrape Bazaraki listings at scale**: apartments and houses for sale or rent, plots of land, commercial property, cars, motorbikes, boats, jobs, services, phones, electronics and every other Bazaraki category, in Nicosia, Limassol, Larnaca, Paphos and Famagusta. Pick categories and districts in the form, add a price range or keyword, or paste any Bazaraki search URL with its filters. Bazaraki only shows 30,000 listings per search, so the Actor splits bigger searches by district and price on its own and still returns every match.

Built for **real estate agents and investors** tracking Cyprus property prices and rents, **car dealers and importers** watching the used car market, **relocation and property management** teams, **market researchers and journalists**, and anyone who wants a daily feed of new listings. Runs on Apify, so you get the API, scheduling, integrations and proxy rotation for free.

### Key features at a glance

- **Every Bazaraki category**: property for sale and to rent, Motors (cars, motorbikes, vans, trucks, boats, auto parts), jobs, services, business, phones, computers, electronics, home and garden, hobbies, kids, fashion, pets and health.
- **Readable attributes**: Bazaraki stores attributes as codes (`year: 75`). The Actor decodes them for every category: bedrooms, bathrooms, property area m², plot area, furnishing, condition, energy class for property; year, mileage, fuel, gearbox, engine, body type and extras for cars.
- **Full category path**: `Motors > Cars > Toyota > Yaris`, so you can group cars by make and model.
- **Location**: district (Nicosia, Limassol, Larnaca, Paphos, Famagusta), locality (Germasogeia, Strovolos, Kato Paphos...) and GPS coordinates. When a listing has no map pin, the locality's centre is used and flagged as approximate.
- **Seller**: name, account id, join date, verification badge and how many listings they have. With **Fetch listing details** on: business or private seller, company and legal name, the agent's own reference number, price per m², VIN, WhatsApp and Viber.
- **Paste any Bazaraki URL**: category pages, filtered searches (price, area, year, mileage... all kept) and single listings.
- **No 30,000 limit**: big searches are split by district and price band automatically, then merged without duplicates.
- **Only new listings**: schedule the Actor daily and get only listings that appeared since the last run, perfect for alerts.
- **Fast and light**: reads Bazaraki's own listing data, no browser. 1,000 listings take about 40 seconds.
- **Export anywhere**: JSON, CSV, Excel, XML or JSONL, or straight into Google Sheets, Airtable, Make, Zapier or n8n.

### What data does the Bazaraki scraper extract?

| Field | Example | Description |
|---|---|---|
| `id`, `url` | 6795078, https://www.bazaraki.com/adv/6795078_2-bedroom-apartment-to-rent/ | Listing id and page |
| `title` | 2-bedroom apartment to rent | Listing headline |
| `price`, `currency` | 1590, EUR | Price (monthly rent for rentals) |
| `price_text`, `negotiable`, `exchange_possible` | Negotiable, true, false | Price notes |
| `category`, `category_path`, `category_slug`, `category_id`, `top_category` | Apartments, flats; Real Estate to rent > Apartments, flats | Category and its full path |
| `district`, `locality`, `locality_id` | Limassol, Germasogeia, 5459 | Where the listing is |
| `latitude`, `longitude`, `location_approximate` | 34.7004, 33.0918, false | GPS, and whether it is the locality centre |
| `attributes` | `{"bedrooms": "2", "bathrooms": "1", "property_area_m2": 45, "furnishing": "Fully Furnished", "pets": "Allowed"}` | Every attribute the seller filled in, decoded |
| `description` | More space, same level of service... | Full listing text |
| `main_image`, `images`, `image_count` | https://cdn1.bazaraki.com/media/... | Photos, full size where Bazaraki has it |
| `seller_name`, `seller_id`, `seller_joined`, `seller_verified`, `seller_listing_count` | One Island Estates, 9285222, 2024-04-16, true, 34 | Seller and how many listings they have |
| `views`, `phone_views` | 116, 55 | How often the listing and its phone number were viewed |
| `promoted`, `promotion` | true, \[premium] | Paid placement on Bazaraki |
| `video_url`, `virtual_tour_url` | | Media links when present |
| `posted_at`, `bumped_at` | 2026-04-26T15:07:57Z | First posted, and last bumped to the top |
| `search` | Apartments, flats, Limassol | The search the row came from |
| `scraped_at` | 2026-10-23T18:39:04Z | When the row was scraped |

With **Fetch listing details** on, each row also has `seller_type` (business or private), `seller_company`, `seller_legal_name`, `seller_website`, `seller_reference` (the agency's own ref), `price_per_m2`, `vin`, `whatsapp` and `viber`.

#### Sample output

```json
{
  "id": 6390114,
  "url": "https://www.bazaraki.com/adv/6390114_1-bedroom-apartment-to-rent/",
  "title": "1-bedroom apartment to rent",
  "price": 1349,
  "currency": "EUR",
  "category": "Apartments, flats",
  "category_path": "Real Estate to rent > Apartments, flats",
  "top_category": "Real Estate to rent",
  "district": "Limassol",
  "locality": "Agios Tychon Tourist Area",
  "latitude": 34.70751706224669,
  "longitude": 33.11951563502987,
  "location_approximate": false,
  "attributes": {
    "property_area_m2": 50,
    "pets": "Not allowed",
    "type": "Apartment",
    "floor": "4th",
    "parking": "Uncovered",
    "furnishing": "Fully Furnished",
    "included": ["Pool", "Garden", "Elevator", "Alarm", "Balcony"],
    "air_conditioning": "Full, all rooms",
    "construction_year": "2024",
    "energy_efficiency": "A",
    "bedrooms": "1",
    "bathrooms": "1"
  },
  "description": "One Bedroom Apartment in Ayios Tychonas in the most premium location in Limassol...",
  "main_image": "https://cdn1.bazaraki.com/media/cache1/44/7f/447f8642dae2608e95cadeaf04439ba0.png",
  "image_count": 9,
  "seller_name": "One Island Estates",
  "seller_id": 9285222,
  "seller_joined": "2024-04-16",
  "seller_verified": true,
  "seller_listing_count": 34,
  "views": 116,
  "phone_views": 55,
  "promoted": true,
  "promotion": ["premium"],
  "virtual_tour_url": "https://my.matterport.com/show/?m=NXg1NSKyk4k",
  "posted_at": "2026-04-06T12:28:05Z",
  "bumped_at": "2026-10-22T18:40:36Z",
  "seller_type": "business",
  "seller_company": "One Island Estates",
  "search": "Apartments, flats, Limassol"
}
```

A car row has `"category_path": "Motors > Cars > Toyota > Yaris"` and attributes such as `{"year": "2021", "mileage_in_km": 40000, "fuel_type": "Petrol", "gearbox": "Automatic", "engine_size": "1,5L", "body_type": "Hatchback"}`.

The dataset has three table views: **Listings** (everything), **Property** (bedrooms, bathrooms, m², type, furnishing, GPS) and **Cars** (year, mileage, fuel, gearbox, engine, body type).

### How to scrape Bazaraki

1. Open the Actor and pick one or more **Categories** (for example *Real Estate to rent > Apartments, flats*).
2. Pick **Districts**, or leave them empty for the whole of Cyprus.
3. Optionally set **Price from / to**, a **Keyword** and **Sort by**.
4. Or paste **Bazaraki search URLs**: open bazaraki.com, set any filter you like (car make and model, bedrooms, area, year...), and copy the address bar.
5. Set **Max results** (leave empty for everything) and click **Start**.
6. Download the results as JSON, CSV or Excel, or connect them to Google Sheets, Make, Zapier or n8n.

#### Input example

```json
{
  "categories": ["real-estate-for-sale/houses", "real-estate-for-sale/apartments-flats"],
  "cities": ["Limassol", "Paphos"],
  "price_max": 500000,
  "sort": "newest",
  "max_items": 1000,
  "start_urls": [
    "https://www.bazaraki.com/car-motorbikes-boats-and-parts/cars-trucks-and-vans/toyota/"
  ],
  "fetch_details": true
}
```

#### Input fields

| Field | What it does |
|---|---|
| `categories` | Bazaraki categories (OR). A top-level choice includes all its subcategories. |
| `cities` | Districts: Nicosia, Limassol, Larnaca, Paphos, Famagusta (OR). Empty = all of Cyprus. |
| `search_query` | Keyword. Bazaraki's keyword search returns only its 1,000 best matches, so use categories and districts for complete lists. |
| `price_min`, `price_max` | Price range in EUR (monthly rent for rentals). |
| `sort` | `newest` (as on Bazaraki), `cheapest` or `expensive`. |
| `max_items` | Stop after this many listings in total. Empty = every match. |
| `start_urls` | Bazaraki category, search or listing pages. Each URL is its own search, filters included. URLs from other sites are rejected. |
| `fetch_details` | Open each listing for seller type, company, agency reference, price per m², VIN, WhatsApp and Viber. |
| `only_new` | Return only listings that earlier runs of the same search did not see (paid plans). |

### Monitor Bazaraki for new listings

Turn on **Only new listings** and [schedule the Actor](https://docs.apify.com/platform/schedules) to run every hour or every morning. The first run returns every match and remembers it; each later run returns only listings that are new since. Connect the dataset to email, Slack, Telegram or Google Sheets through Apify integrations, Make or Zapier, and you have a Bazaraki alert for any search: new 2-bedroom flats under 1,500 EUR in Limassol, Toyota Land Cruisers under 60,000 EUR, plots of land in Paphos.

Bazaraki bumps older listings back to the top every day, so "newest" on the site is not the same as new. This mode compares listing ids, so a bumped old listing is not reported again.

### Use cases

- **Cyprus property market analysis**: asking prices and rents per district and locality, price per m², bedrooms and size, new builds vs resale.
- **Rental yield research**: compare sale prices and rents for the same areas.
- **Lead generation for agencies and services**: find private sellers and landlords, or map which agencies list where (`seller_type`, `seller_company`, `seller_listing_count`).
- **Used car pricing**: prices by make, model, year and mileage across Cyprus, for dealers, importers and buyers.
- **Daily alerts** for new listings matching your exact search.
- **Data for AI**: feed listings into ChatGPT or Claude to score deals, translate Greek descriptions or write summaries.

### How much does it cost to scrape Bazaraki?

The Actor is **pay per result**: you pay for each listing saved to the dataset, plus a tiny fee when a run starts. Detail pages, splitting big searches and the only-new memory cost nothing extra, and you pay nothing for listings that only-new skips. The current rate is shown on this Actor's Store page, with a small discount on bigger [Apify plans](https://apify.com/pricing?fpr=youssef).

On the **Free plan**, each run returns up to 50 listings from the first search, and Only new listings is off. Subscribe to any paid Apify plan to remove the limits.

### Tips and limits

- **Bazaraki shows at most 30,000 listings per search.** The Actor splits bigger searches (Motors, Auto parts, all Real Estate for sale) by district, then by price band, so you still get everything. Listings without a price can fall outside the price bands of a split search.
- **Keyword searches stop at 1,000 results** on Bazaraki itself, before the district and price filters apply. For complete data, use categories, districts and price instead of a keyword.
- **Max results counts across all searches**: the first searches can use it up.
- **Photos** are full-size JPEG or PNG links (WebP where Bazaraki has no original) on Bazaraki's CDN. They open in any browser and in the Apify table view; scripts that download them need a browser-like client, because the CDN refuses bare `curl` and bot traffic.
- **Phone numbers** are not in the listing data Bazaraki publishes, so they are not in the output. WhatsApp and Viber appear (with Fetch listing details) when the seller added them to the listing.
- Prices are the seller's asking price in euros as shown on the listing.

### FAQ

**Is it legal to scrape Bazaraki?**
The Actor only reads public listing data that anyone can see on bazaraki.com without logging in. Personal data such as seller names is covered by the GDPR in Cyprus, so only collect and use it when you have a legitimate reason, and check Bazaraki's terms for your use case. If you are unsure, ask a lawyer.

**Can I scrape one specific car model or property filter?**
Yes. Set the filter on bazaraki.com (for example Motors > Cars > Toyota > Yaris, automatic, under 50,000 km) and paste the URL into **Bazaraki search URLs**. All filters in the URL are kept.

**Does it scrape descriptions in Greek and Russian?**
Yes, descriptions are returned exactly as written. Category names and attribute values are in English.

**How fresh is the data?**
Every run reads Bazaraki live. Schedule it as often as you like.

**Can I get the data in Excel or Google Sheets?**
Yes. Export as Excel or CSV from the dataset, or use the Google Sheets integration. The nested `attributes` object becomes one column per attribute (`attributes/bedrooms`, `attributes/year`...).

**Something is broken or a field is missing.**
Open an issue on the [Issues tab](https://apify.com/fayoussef/bazaraki-scraper/issues/open) and it will be fixed.

### Other scrapers for Cyprus and Greece

- [Spitogatos Cyprus Scraper](https://apify.com/fayoussef/spitogatos-cy-scraper?fpr=youssef): Cyprus property listings from Spitogatos.com.cy.
- [xe.gr Scraper](https://apify.com/fayoussef/xe-gr-scraper?fpr=youssef): Greek property listings.
- [Spitogatos Scraper](https://apify.com/fayoussef/spitogatos-scraper?fpr=youssef): Greek property listings from Spitogatos.gr.
- [Skroutz Scraper](https://apify.com/fayoussef/skroutz-scraper?fpr=youssef): Greek and Cypriot product prices.
- [All my Actors](https://apify.com/fayoussef?fpr=youssef)

💼 Need a custom version or another site? [Contact me through my Apify profile](https://apify.com/fayoussef)

# Actor input Schema

## `categories` (type: `array`):

Bazaraki categories to scrape. Several are combined with OR. A top-level choice (all) includes every subcategory under it. For a category not listed here (a car make and model, a phone brand, a job type), open it on Bazaraki and paste its URL into Bazaraki search URLs below.

## `cities` (type: `array`):

Only listings in these districts. Several are combined with OR. Leave empty for the whole of Cyprus.

## `search_query` (type: `string`):

Only listings matching these words (`sea view`, `iphone 15`, `toyota hilux`). Bazaraki's keyword search returns only its 1,000 best matches before the district and price filters apply, so for a complete list leave this empty and use categories, districts and price.

## `price_min` (type: `integer`):

Lowest price in euros (the monthly rent for rentals).

## `price_max` (type: `integer`):

Highest price in euros (the monthly rent for rentals).

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

Order of the results, which decides which listings you get when Max results stops the run early.

## `max_items` (type: `integer`):

Stop after this many listings in total. Leave empty to scrape every listing that matches.

## `start_urls` (type: `array`):

One Bazaraki page per line: a category or search page (`https://www.bazaraki.com/real-estate-for-sale/houses/lemesos-district-limassol/?price_max=500000`) or a single listing (`https://www.bazaraki.com/adv/6426534_3-bedroom-apartment-for-sale/`). Price, keyword, sort and attribute filters in the URL are kept. URLs from other sites are rejected.

## `fetch_details` (type: `boolean`):

Open each listing for the extra fields: seller type (business or private), company and legal name, the agent's own reference, price per m², VIN, WhatsApp and Viber. One extra request per listing, so the run takes longer.

## `only_new` (type: `boolean`):

Monitoring mode for scheduled runs: return only listings that earlier runs of the same search did not see. The first run returns everything and remembers it. Paid plans only.

## Actor input object example

```json
{
  "categories": [
    "real-estate-to-rent/apartments-flats"
  ],
  "cities": [
    "Limassol"
  ],
  "sort": "newest",
  "max_items": 100,
  "fetch_details": false,
  "only_new": false
}
```

# Actor output Schema

## `results` (type: `string`):

One record per Bazaraki listing: price, category chain, decoded attributes (bedrooms, m², year, mileage...), district, locality, coordinates, seller, photos and dates.

# 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 = {
    "categories": [
        "real-estate-to-rent/apartments-flats"
    ],
    "cities": [
        "Limassol"
    ],
    "max_items": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("fayoussef/bazaraki-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 = {
    "categories": ["real-estate-to-rent/apartments-flats"],
    "cities": ["Limassol"],
    "max_items": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("fayoussef/bazaraki-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 '{
  "categories": [
    "real-estate-to-rent/apartments-flats"
  ],
  "cities": [
    "Limassol"
  ],
  "max_items": 100
}' |
apify call fayoussef/bazaraki-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,fayoussef/bazaraki-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/7SFE10VjcxXd0I1Hb/builds/6oAEBJCJL6kGtaNec/openapi.json
