# Turbo.az Scraper — Azerbaijan Used Car Prices (`logiover/turbo-az-car-scraper`) Actor

Scrape Turbo.az, Azerbaijan's largest car marketplace. Extract make and model, price and currency, model year, engine size, mileage, city, listing date, dealer flag and photos across new and used cars.

- **URL**: https://apify.com/logiover/turbo-az-car-scraper.md
- **Developed by:** [Logiover](https://apify.com/logiover) (community)
- **Categories:** E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

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

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

## Turbo.az Scraper — Azerbaijan Used Car Prices

Azerbaijan's largest car marketplace in rows: make and model, price and currency, model year, engine size, mileage, city, listing date, seller type and photos — new and used cars.

### What does the Turbo.az Scraper do?

This Actor collects car listings from **Turbo.az**, by far the largest vehicle marketplace in Azerbaijan and the country's reference for what a car is worth. It returns make and model, the asking price, model year, engine capacity, mileage, city and how recently the listing was posted.

Two details on this market needed handling rather than assuming. Prices are quoted in **three currencies on the same page** — manat, dollars and euros — so the currency is detected per listing instead of being assumed, which would otherwise mix three units silently in one column. And the seller is not a simple dealer/private split: the site marks an **official brand dealer** (*Rəsmi*) separately from an independent **showroom** (*Salon*), with unmarked listings being private sellers. All three are kept apart, because that distinction is exactly what a trader is looking at.

### Who is it for?

- **Car dealers and importers** benchmarking asking prices in the Azerbaijani market.
- **Valuation and price-guide services** building residual-value curves.
- **Market researchers** measuring supply by make, year and engine size.
- **Fleet and leasing companies** tracking resale values.
- **Analysts** watching import patterns into the Caucasus.
- **Marketplaces** seeding an Azerbaijani vehicle catalogue.

### Use cases

- Track asking prices for a make and model by model year.
- Compare official dealer pricing against private-seller pricing on the same car.
- Measure how mileage moves price within one model year.
- Watch new-listing volume as a demand indicator.
- Build a depreciation curve from year and price across the market.
- Separate brand-new stock (0 km) from used supply.
- Feed an AI agent live car prices for valuation questions.

### Why use this Turbo.az Scraper?

- **Currency detected per listing** — manat, dollars and euros never mixed into one number.
- **Seller type split three ways** — official dealer, showroom, private.
- **Zero mileage preserved as `0`**, so brand-new stock is visible rather than blank. See the FAQ.
- **Year, engine size and mileage parsed into numbers** you can filter on.
- **Thirty-six listings per page** with pages fetched in parallel.
- **Keyless and login-free.**

### What data can you extract?

One row per listing. Anything the source left blank comes back as `null`.

| Field | Description |
| --- | --- |
| `listingId` | Turbo.az listing ID |
| `url` | Link to the listing |
| `title` | Make and model |
| `price` | Asking price |
| `currency` | AZN, USD or EUR, detected per listing |
| `modelYear` | Model year |
| `engineLitres` | Engine capacity in litres |
| `mileageKm` | Mileage in kilometres |
| `city` | City |
| `publishedText` | Listing date as the site shows it |
| `sellerType` | Official dealer, Showroom or Private |
| `imageUrl` | First photo |
| `scrapedAt` | ISO timestamp of collection |

#### Sample output

```json
{
  "listingId": "9835383",
  "url": "https://turbo.az/autos/9835383-jac-t6",
  "title": "JAC T6",
  "price": 37900,
  "currency": "AZN",
  "modelYear": 2025,
  "engineLitres": 2,
  "mileageKm": 0,
  "city": "Bakı",
  "publishedText": "bugün 09:17",
  "sellerType": "Official dealer",
  "imageUrl": "https://turbo.azstatic.com/uploads/f460x343/2025/10/08/jac-t6.jpg",
  "scrapedAt": "2026-08-22T09:17:04.388Z"
}
```

### How to use the Turbo.az Scraper

#### Option A — the whole market

Leave **Section** as `autos`, set **Maximum results** and run.

#### Option B — another vehicle type

Set **Section** to another slug from a Turbo.az URL, such as `motorcycles`.

#### Option C — a price watch

Schedule a daily run and diff by `listingId` to track what sold and what changed price.

### Input parameters

| Parameter | Type | Default | Description |
| --- | --- | --- | --- |
| `section` | string | `autos` | Section as it appears in a Turbo.az URL |
| `maxResults` | integer | 1000 | Stop after this many listings (max 50,000) |
| `proxyConfiguration` | object | AZ residential | Turbo.az serves Azerbaijani exits |

### Tips for best results

- **Always group by `currency` before averaging.** A €30,000 car and a ₼30,000 car are not the same car, and both appear in the same category.
- **`sellerType` matters more than it looks.** Official dealer stock is mostly new and priced to list; private stock is used and negotiable. Mixing them flattens the signal.
- **`mileageKm: 0` means new**, not missing. Filter on it to separate new stock from used.
- **Use `modelYear` with `mileageKm` together** for any depreciation work; either alone is misleading.
- **Deduplicate on `listingId`** when combining scheduled runs.

### Integrations

Connect the dataset to Make, Zapier, Airbyte, Google Sheets, Slack, GitHub or any HTTP endpoint through Apify integrations, or schedule a run and push results into a warehouse with a webhook.

### API usage

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("logiover/turbo-az-car-scraper").call(run_input={
    "section": "autos",
    "maxResults": 3000,
})
rows = list(client.dataset(run["defaultDatasetId"]).iterate_items())
used = [r for r in rows if r["currency"] == "AZN" and (r["mileageKm"] or 0) > 0]
print(len(used), "used cars, median price ₼",
      sorted(r["price"] for r in used)[len(used) // 2])
```

### Use with AI agents (MCP)

The Actor is callable from the Apify MCP server, so an assistant can pull Azerbaijani car listings directly and answer valuation questions.

### FAQ

#### Do I need a Turbo.az account or API key?

No. This Actor reads the public marketplace; there is nothing to register.

#### How many listings can one run return?

Up to 50,000 per run, thirty-six per page. Pages are fetched several at a time, so a few thousand listings take about a minute.

#### Why are there three currencies?

Because sellers in Azerbaijan quote in manat, dollars or euros depending on the car and the buyer they are targeting. The site does not normalise them, so this Actor labels each listing with the currency actually shown rather than assuming manat and silently corrupting the column.

#### Why is mileage sometimes zero?

Because the car is brand new. Zero is a real value here, so it is kept as `0` rather than blanked — filtering on it is the cleanest way to separate new stock from used supply.

#### What is the difference between an official dealer and a showroom?

*Rəsmi* marks an official brand dealer, *Salon* an independent car showroom, and an unmarked listing is a private seller. All three price differently, so they are kept as separate values rather than collapsed into one dealer flag.

#### Does it collect the seller's phone number?

No. Contact details sit behind the individual listing page. Every row carries a `url` to it.

#### Are titles in Azerbaijani?

Make and model come through as written — mostly Latin-script Latin brand names — while the city and the date label are in Azerbaijani, exactly as published.

#### Can I export to CSV or Excel?

Yes — every run's dataset exports to JSON, CSV, Excel, XML or JSONL.

#### How fresh is the data?

Each run reads the marketplace live, so results are as current as Turbo.az itself.

#### Why did my run return zero listings?

Usually a section slug that does not exist. Use `autos` to check, then copy other slugs from a Turbo.az URL.

### Is it legal to scrape Turbo.az?

Turbo.az is a public marketplace and this Actor reads only its public listing pages — no accounts, no logins. Vehicle details and asking prices are commercial listings published for public view. You remain responsible for how you use the data and for respecting the marketplace's terms in your own jurisdiction.

### Related scrapers

- **Arabam Scraper** — Turkish used cars.
- **Auto.ria Scraper** — Ukrainian used cars.
- **Encar Scraper** — Korean used cars.
- **AutoScout24 Scraper** — pan-European used cars.

# Actor input Schema

## `section` (type: `string`):

Section as it appears in a Turbo.az URL, e.g. autos for cars, motorcycles, trucks.

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

Stop after this many listings. Each page returns 36.

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

Turbo.az serves Azerbaijani exits. An Azerbaijani residential proxy is used automatically.

## Actor input object example

```json
{
  "section": "autos",
  "maxResults": 1000,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "AZ"
  }
}
```

# Actor output Schema

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

Every record collected in this run. Open the Dataset tab to browse, filter or export as JSON, CSV or Excel.

# 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 = {
    "section": "autos",
    "maxResults": 1000,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "AZ"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("logiover/turbo-az-car-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 = {
    "section": "autos",
    "maxResults": 1000,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "AZ",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("logiover/turbo-az-car-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 '{
  "section": "autos",
  "maxResults": 1000,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "AZ"
  }
}' |
apify call logiover/turbo-az-car-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,logiover/turbo-az-car-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/dmtVteKmBrVeEaM0y/builds/biaVt2xN7cemYIOEj/openapi.json
