# OLX Scraper \[Only $0.9/1K💰] | 7 Countries | Price Data (`ahmed_jasarevic/olx-scraper`) Actor

Extract OLX classifieds listings from 7 country sites — olx.pl, olx.ro, olx.bg, olx.pt, olx.ua, olx.kz, olx.uz — via OLX's own public offers JSON API. Prices, GPS locations, sellers and category attributes for price monitoring, lead generation and market research. No browser, pay per result.

- **URL**: https://apify.com/ahmed_jasarevic/olx-scraper.md
- **Developed by:** [Ahmed Jasarevic](https://apify.com/ahmed_jasarevic) (community)
- **Stats:** 1 total users, 0 monthly users, 96.2% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

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

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

### OLX Scraper — Classifieds Data From 7 Countries Via the Official Offers API

Extract OLX listings from Poland, Romania, Bulgaria, Portugal, Ukraine, Kazakhstan and Uzbekistan for secondhand market research, used-car and real-estate lead generation, and cross-country price monitoring — through OLX's own public `offers` JSON API, no browser needed, at the cheapest per-result price among OLX scrapers on the Apify Store.

#### Main Use Cases

- **OLX price monitoring** — track how car, property and electronics prices move across seven CEE and Central Asian marketplaces.
- **Used-car listings data** — mileage, year, brand, engine, transmission and GPS location per ad, for auto lead generation and resale research.
- **Real-estate lead generation** — rooms, area, floor and district data for rental and resale property filtering at scale.
- **Cross-country classifieds arbitrage** — sort by newest first and catch fresh listings before competitors refresh.
- **Secondhand market research** — build a normalized dataset over 7 OLX domains with one schema and one pipeline.
- **Delivered-listing prospecting** — filter `courierOnly` to find resellable items that actually ship.

### How It Works

![OLX Scraper workflow: from searches across seven country sites to listing records with prices, currency, GPS locations, seller types and category attributes](https://api.apify.com/v2/key-value-stores/oeuA0kLOyhbRM4fzt/records/how-it-works-olx-scraper.webp)

Looking for an **OLX scraper** or a practical **multi-country classifieds data alternative**? Choose Poland, Romania, Bulgaria, Portugal, Ukraine, Kazakhstan or Uzbekistan, add search terms or category and city filters, then set price, delivery and item limits. Each row includes listing ID, title, description, URL, domain, price and currency, previous price, city, region, district, GPS coordinates, seller name and type, delivery and promotion flags, timestamps, photos and promoted attributes such as mileage, rooms, brand and year.

Use the dataset for price monitoring, used-car and property research, resale sourcing and cross-country market comparison. Export as JSON, CSV or Excel, or pull results through the Apify API. Pay from $0.90 per 1,000 listings.

### Build Business and Resale Databases Without Manual Browsing

Every listing lands as one structured row with price *and* currency, GPS lat/lon, seller id/name/type, delivery flag, promo flags and timestamps — no re-visiting detail pages to enrich rows later. Add **Also scrape these sites** to cover several OLX markets in a single run: every seed and site shares the page budget and gets a slice of `maxItems`, so results land in one dataset tagged with their own `domain`.

### Input

| Field | Type | Required | Default | Notes |
|---|---|---|---|---|
| `country` | string (select) | no | `olx.pl` | Main OLX site: `olx.pl`, `olx.ro`, `olx.bg`, `olx.pt`, `olx.ua`, `olx.kz`, `olx.uz`. Language, currency and location names follow this site. |
| `additionalCountries` | array of string | no | `[]` | More OLX country sites to crawl in the same run; rows are tagged with `domain`. |
| `searchQueries` | array of string | no | `["rower"]` | Keywords to search on every selected site, e.g. `["iphone", "mieszkanie"]`. Leave empty to browse a category/city listing. |
| `excludeKeywords` | array of string | no | `[]` | Words to keep out of results; sent as negated OLX terms (`-word`). |
| `startUrls` | array of string (URL) | no | `[]` | Advanced: full `/api/v1/offers?...` URLs used instead of queries, for filters not exposed in the form. The URL's domain decides the OLX site. |
| `categoryId` | integer | no | `0` | OLX category id (the number before `-CID-` in a listing URL, e.g. `767`). |
| `cityId` | integer | no | `0` | Restrict results to one OLX city. |
| `regionId` | integer | no | `0` | Restrict to one region (voivodeship/county); works on `olx.pl`, `olx.ro`, `olx.ua`. |
| `distance` | integer | no | `0` | Search radius in km around the selected city; requires `cityId`. |
| `courierOnly` | boolean | no | `false` | Return only listings that offer courier delivery. |
| `sortBy` | string (select) | no | `relevance:desc` | `relevance:desc`, `created_at:desc` (newest first — best for arbitrage), `filter_float_price:asc`, `filter_float_price:desc`. |
| `priceMin` | number | no | `0` | Minimum price. Only accepted on leaf categories — the Actor auto-retries without the filter if OLX refuses. |
| `priceMax` | number | no | `0` | Maximum price. Same leaf-category caveat as `priceMin`. |
| `maxItems` | integer | no | `100` | Total listings across all sites and queries. OLX caps one search at 1000; add queries or sites to go higher. Hard cap 20000. Free users capped at 10. |
| `maxRequestsPerCrawl` | integer | no | `30` | Upper bound on API calls (one call ≈ 65 listings). Hard cap 400. |
| `maxConcurrency` | integer | no | `12` | Parallel in-flight API calls. Hard cap 25. Lower it if OLX rate-limits you. |
| `maxRequestsPerMinute` | integer | no | `300` | Throttle ceiling to stay under OLX's WAF radar. Hard cap 3000. |
| `proxy` | object | no | off | Standard Apify proxy picker. Enable a residential group for the target country if OLX blocks your IP. |

### Output: One Dataset Row per OLX Listing

The default dataset view (`overview`) maps one row per listing with `photoUrl`, `title`, `price`, `currency`, `city`, `region`, `district`, `sellerName`, `sellerType`, `mileage`, `rooms`, `brand`, `createdAt`, `refreshedAt`, `domain`, `siteName`, `url`. The full stored record adds:

| Field group | Fields |
|---|---|
| Identity | `id`/`offerId`, `title`, `description`, `url`, `status`, `offerType` |
| Price | `price`, `currency`, `priceLabel`, `negotiable`, `priceArranged`, `previousPrice`, `previousPriceLabel`, `convertedPrice`, `convertedCurrency` |
| Location | `city`, `cityId`, `district`, `districtId`, `region`, `regionId`, `latitude`, `longitude`, `mapUrl` |
| Seller | `sellerId`, `sellerName`, `sellerType`, `isBusiness`, `sellerCompanyName`, `sellerSince`, `sellerLastSeen`, `contactPhoneAvailable`, `contactChatAvailable`, `protectPhone`, `safeDeal` |
| Delivery & promo | `deliveryAvailable`, `delivery`, `promoHighlighted`, `promoUrgent`, `promoTopAd`, `promoOptions` |
| Time | `createdAt`, `refreshedAt`, `pushedUpAt`, `validUntil`, `ageDays` |
| Photos | `photoUrl`, `photos`, `photosLarge`, `photoCount` |
| Attributes | `attributes`, `attributeNames` plus promoted convenience fields: `mileage`, `rooms`, `brand`, `model`, `year`, `condition`, `area`, `engineSize`, `enginePower`, `transmission`, `seats`, `color`, `floor`, `vin` |
| Taxonomy | `categoryId`, `categoryType`, `domain`, `siteName` |

> Note: OLX's schema spells mileage as `milage`; the Actor maps both `milage` and `mileage` to the `mileage` field for you.

### Example Input

```json
{
    "country": "olx.pl",
    "additionalCountries": ["olx.ro", "olx.bg"],
    "searchQueries": ["rower", "horyzowca"],
    "excludeKeywords": ["czesci", "uszkodzony"],
    "sortBy": "created_at:desc",
    "maxItems": 1000,
    "maxConcurrency": 16
}
```

### Example Output

```json
{
    "id": 1089622638,
    "title": "Rower dzieciecy 14'' z koszykiem i bocznymi kolkami",
    "description": "Rower w bardzo dobrym stanie.\nWozek dla dziecka.",
    "url": "https://www.olx.pl/d/oferta/rower-dzieciecy-14-z-koszykiem-i-bocznymi-kolkami-CID767-ID1bJVCG.html",
    "domain": "olx.pl",
    "siteName": "Poland",
    "price": 400,
    "priceLabel": "400 zl",
    "currency": "PLN",
    "negotiable": false,
    "city": "Busko-Zdroj",
    "region": "Swietokrzyskie",
    "district": null,
    "latitude": 50.47086,
    "longitude": 20.72001,
    "mapUrl": "https://www.google.com/maps?q=50.47086,20.72001",
    "sellerId": 1114454131,
    "sellerName": "Fedoryshyn",
    "sellerType": "private",
    "isBusiness": false,
    "createdAt": "2026-08-06T09:53:10+02:00",
    "refreshedAt": "2026-09-24T09:15:38+02:00",
    "ageDays": 52,
    "deliveryAvailable": true,
    "promoHighlighted": true,
    "promoUrgent": false,
    "promoTopAd": true,
    "photoCount": 3,
    "photoUrl": "https://ireland.apollo.olxcdn.com:443/v1/files/uj40c3qxh5g42-PL/image;s=750x1000",
    "photos": ["... "],
    "condition": "Jak nowe",
    "attributes": { "state": "Jak nowe", "gender": "Uniseks", "equipment": "Kosz" },
    "categoryId": 767
}
```

### Pricing: Cheapest Per-Result OLX Scraper on the Store

This is a **pure JSON API scraper — no browser, no paid anti-bot API**. Each API call returns up to ~65 listings and pages are pulled in parallel, so 1,000 listings take roughly 16 requests that finish in seconds. Memory starts at 256 MB.

- **Start:** $0.00005 per run
- **Result:** **$0.0009 — $0.90 per 1,000 listings**
- **Free tier:** Apify free users get a 10-listing preview; paid accounts get the full `maxItems` you request.
- **Proxy:** billed only if you enable it (Apify includes proxy traffic in paid plans).

Verified against the OLX scrapers currently on the Store (trev0n, bovi, abotapi, parseforge, dadhalfdev): none matches this per-result price at this country coverage — seven sites, one schema.

### Integrations & Automation

The Actor runs on the Apify platform, so you get **REST API access, webhooks, scheduled runs, dataset exports (JSON, CSV, Excel) and Zapier/Make integrations out of the box**. Recommended schedules for recurring use:

- **Arbitrage hunting:** `created_at:desc` + `courierOnly` every 30–60 minutes to catch fresh, shippable listings.
- **Price monitoring:** `filter_float_price:asc` + a leaf `categoryId`, run daily, export to a spreadsheet.
- **Lead generation:** residential proxy + city radius per target city, weekly sweep into your CRM.

### Related Actors

- [**Vinted Smart Scraper — Cross-Country Arbitrage Scanner**](https://apify.com/kazkn/vinted-smart-scraper) — Vinted price-gap arbitrage across 26 markets; same secondhand-resale cluster.
- [**Allegro Fast Product Scraper**](https://apify.com/e-commerce/allegro-fast-product-scraper) (Apify) — Polish e-commerce product listings; same CEE commerce region.
- [**Vinted Search Scraper**](https://apify.com/epicscrapers/vinted-search-scraper) — Vinted product listings and price monitoring.
- [**Vinted Cross-Country Arbitrage Scraper**](https://apify.com/ahmed_jasarevic/vinted-cross-country-arbitrage-scraper) — by the same developer; Vinted price comparison for arbitrage deals.
- [**eBay Sold Items Scraper**](https://apify.com/ahmed_jasarevic/ebay-scraper) — by the same developer; final sold prices for resale research.

### FAQ

#### Is there an official OLX API — why use this Actor instead?

OLX offers no public partner API for listing data. The Actor uses the `offers` JSON endpoint OLX itself whitelists for crawlers (`Allow: /api/v1/offers/` in `robots.txt`), which many older scrapers miss — they rely on the now-dead `/api/relevance/v4/search` endpoint (returns `Unsupported API version`) or render client-side pages in a browser. This Actor ships one clean row per listing without that overhead.

#### What are the alternatives to this OLX scraper?

Manual browsing, or other Store actors: browser-based OLX scrapers (slower, pricier), single-country actors such as `trev0n/olx-scraper` (olx.pl only) or `dadhalfdev/olx-portugal-scraper` (PT only), and `abotapi/olx-scraper` (9 countries, higher per-result price). For adjacent marketplaces, see the Related Actors section above (Vinted, Allegro, eBay, OLX Brazil actors for the Brazilian platform).

#### Why is olx.com.br not in the country list?

Because a proxy is not enough — the endpoint is genuinely gone. OLX Brazil no longer runs the same platform: it is a Next.js app serving search through separate backend-for-frontend services, `GET /api/v1/offers` is not routed there, and the replacement endpoint is not publicly documented. A run on olx.com.br would only cost money for an empty dataset, so it is rejected with an explicit error instead.

#### Which countries can I scrape and why not more?

Seven domains are verified working against the live offers API: `olx.pl`, `olx.ro`, `olx.bg`, `olx.pt`, `olx.ua`, `olx.kz`, `olx.uz`. Other OLX domains either no longer exist (`olx.co.za` shut down, `olx.pk` does not resolve), do not expose this endpoint (`olx.in` 404, `olx.ae` bot wall), or sit behind a WAF that rejects datacenter IPs.

#### Why did my run return 0 items?

Almost always the 403 datacenter-IP block. Enable the proxy and pick a **residential** group for the target country (PL for olx.pl, RO for olx.ro…). Secondary causes: the query is too narrow for that country (keywords are not translated between sites), or `maxItems` is very low.

#### Can I get seller phone numbers?

No. The API only reports that a phone is available (`contactPhoneAvailable`); actual extraction is intentionally out of scope.

#### Why are some prices null on Kazakhstan and Uzbekistan?

Prices are returned there — the gap is category-specific. Vehicle, dealer and "price on request" ads on `olx.kz`/`olx.uz` come back without a `price` param, while property, electronics and bikes normally have one. The run log reports exact per-site price coverage.

### For AI Agents & LLM Apps

**Purpose:** returns one dataset row per OLX listing (price, GPS, seller, attributes) across 7 OLX country sites.

Minimal working input:

```json
{ "country": "olx.pl", "searchQueries": ["iphone"], "maxItems": 100 }
```

Variants:

- Multi-country: `{ "country": "olx.pl", "additionalCountries": ["olx.ro", "olx.bg"], "searchQueries": ["telefon"], "maxItems": 500 }`
- Arbitrage/newest-first: `{ "country": "olx.pl", "searchQueries": ["rower"], "sortBy": "created_at:desc", "courierOnly": true, "maxItems": 200 }`

Output field list (common): `id`, `title`, `description`, `url`, `domain`, `siteName`, `price`, `currency`, `priceLabel`, `negotiable`, `previousPrice`, `city`, `cityId`, `district`, `region`, `regionId`, `latitude`, `longitude`, `mapUrl`, `sellerId`, `sellerName`, `sellerType`, `isBusiness`, `deliveryAvailable`, `promoHighlighted`, `promoUrgent`, `promoTopAd`, `createdAt`, `refreshedAt`, `ageDays`, `photoUrl`, `photos`, `photoCount`, `attributes`, `categoryId`, `mileage`, `rooms`, `brand`, `model`, `year`, `condition`, `area`, `engineSize`, `enginePower`, `transmission`, `seats`, `color`, `floor`, `vin`.

Behaviors an agent should know:

- **`searchQueries` has default `["rower"]`** — always override it, or the run scrapes bicycle ads.
- **`sortBy` `created_at:desc`** returns newest listings first; `relevance:desc` is the default and may mix unrelated promoted ads.
- **`priceMin`/`priceMax` are ignored on non-leaf categories** — the Actor auto-retries without them; don't design agent logic around strict price bounds on broad queries.
- **One search is capped at 1000 results by OLX** — to exceed 1000, add `searchQueries` or `additionalCountries`, not just `maxItems`.
- **Datacenter IPs get HTTP 403** from OLX's WAF — if results are empty, set proxy with a residential group for the target country.
- **Cost rule of thumb:** 1 API call ≈ 65 listings, so `maxRequestsPerCrawl: 5` already yields ~250 rows. Raise `maxItems` before raising request count.

**Billing:** pay-per-result — start $0.00005, then $0.0009 per listing ($0.90 per 1K results). Free tier caps at 10 listings.

### Legal & Compliance Disclaimer

This Actor is an independent tool and is **not affiliated with, endorsed by, or sponsored by OLX Group** or any of the country sites it reads. It accesses only publicly available listing data via the `offers` API path that OLX's `robots.txt` explicitly allows (`Allow: /api/v1/offers/`) — no login bypass, no CAPTCHA solving, no private endpoints. You are responsible for complying with the applicable OLX site's Terms of Use and with data-protection law. Output includes personal data of sellers in the EU/UK (e.g. `sellerName`, `sellerId`), which falls under GDPR — keep or drop those fields according to your use. This information is not legal advice.

### SEO Keywords

olx scraper, olx.pl data extraction, olx poland classifieds scraper, olx romania listings, olx bulgaria scraper, olx portugal scraper, olx ukraine data, olx kazakhstan listings, olx uzbekistan classifieds, olx price monitoring, secondhand market data, used car listings data, real estate listings scraping, classifieds lead generation, olx offers api, cross-country arbitrage, olx seller data, olx gps location, apartment listing monitoring, delivered-listing prospecting, olx category attributes, olx api alternative, olx cost per result, cee marketplace data

# Actor input Schema

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

Main OLX marketplace to scrape. Language, currency and location names in the output follow this site.

## `additionalCountries` (type: `array`):

Optional. Crawl more OLX country sites in the same run. Every output row carries its own 'domain' field, so results from all sites land in one dataset. Each site is paginated and fetched in parallel.

## `searchQueries` (type: `array`):

Keywords to search for, e.g. \["rower", "automat"]. Leave empty to browse a category/city listing. Applied to every selected country site.

## `excludeKeywords` (type: `array`):

Optional. Words to keep out of the results, e.g. \["czesci", "uszkodzony"]. Sent to OLX as negated search terms (-word).

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

Optional. Full OLX offers-API URLs to use instead of search queries, e.g. https://www.olx.pl/api/v1/offers?query=-rower\&sort_by=created_at%3Adesc. Must contain /api/v1/offers. Useful for filters this Actor does not expose. The domain of each URL decides which OLX site it is scraped from.

## `categoryId` (type: `integer`):

Optional OLX category ID to narrow the search (the number before -CID- in a listing URL, e.g. 767).

## `cityId` (type: `integer`):

Optional OLX city ID to restrict results to one city. Leave 0 for all locations.

## `regionId` (type: `integer`):

Optional OLX region (voivodeship / county) ID. Useful on olx.pl, olx.ro and olx.ua where region filters are supported.

## `distance` (type: `integer`):

Optional search radius in kilometres around the selected city. Requires City ID.

## `courierOnly` (type: `boolean`):

Return only listings that offer courier delivery.

## `sortBy` (type: `string`):

OLX sort criteria. 'created_at:desc' is best for arbitrage hunting (newest first).

## `priceMin` (type: `number`):

Optional minimum price. Note: OLX only accepts price filters on leaf categories, so this may be rejected for broad keyword searches.

## `priceMax` (type: `number`):

Optional maximum price. Note: OLX only accepts price filters on leaf categories, so this may be rejected for broad keyword searches.

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

Total number of listings to store across all sites and queries. OLX caps a single search at 1000 results, so use several queries or several sites to go higher. Hard cap 20000. Free users are additionally capped at 10.

## `maxRequestsPerCrawl` (type: `integer`):

Upper bound on API calls. Each call returns up to ~65 listings and pages are fetched in parallel, so a small number already yields a lot of rows. Hard cap 400.

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

How many API calls to keep in flight at once. OLX paginates by offset, so pages are independent and can be fetched concurrently. Lower this if OLX starts rate-limiting you. Hard cap 25.

## `maxRequestsPerMinute` (type: `integer`):

Throttle ceiling that keeps the run under OLX's WAF radar. Hard cap 3000.

## `proxy` (type: `object`):

Select proxies to be used by your crawler. The supported sites work without one unless OLX blocks your IP.

## Actor input object example

```json
{
  "country": "olx.pl",
  "additionalCountries": [],
  "searchQueries": [
    "rower"
  ],
  "excludeKeywords": [],
  "startUrls": [],
  "categoryId": 0,
  "cityId": 0,
  "regionId": 0,
  "distance": 0,
  "courierOnly": false,
  "sortBy": "relevance:desc",
  "priceMin": 0,
  "priceMax": 0,
  "maxItems": 100,
  "maxRequestsPerCrawl": 30,
  "maxConcurrency": 12,
  "maxRequestsPerMinute": 300,
  "proxy": {
    "useApifyProxy": false
  }
}
```

# 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 = {
    "maxItems": 100,
    "maxRequestsPerCrawl": 30,
    "maxConcurrency": 12,
    "maxRequestsPerMinute": 300,
    "proxy": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("ahmed_jasarevic/olx-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 = {
    "maxItems": 100,
    "maxRequestsPerCrawl": 30,
    "maxConcurrency": 12,
    "maxRequestsPerMinute": 300,
    "proxy": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("ahmed_jasarevic/olx-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 '{
  "maxItems": 100,
  "maxRequestsPerCrawl": 30,
  "maxConcurrency": 12,
  "maxRequestsPerMinute": 300,
  "proxy": {
    "useApifyProxy": false
  }
}' |
apify call ahmed_jasarevic/olx-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,ahmed_jasarevic/olx-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/fYtLOxqFhTT379gsQ/builds/03WNl0z1Vb5fpwtTf/openapi.json
