# OLX Marketplace Scraper (7 Countries) (`memo23/olx-marketplace-scraper`) Actor

Scrape OLX classifieds across 7 countries (PL, UA, RO, BG, KZ, UZ, PT) from one actor. One row per ad: title, price in native currency, GPS, city/region, business-seller flag, and OLX's own category attributes (car make/model/mileage, property rooms/m²). Optional photos + seller profile.

- **URL**: https://apify.com/memo23/olx-marketplace-scraper.md
- **Developed by:** [Muhamed Didovic](https://apify.com/memo23) (community)
- **Categories:** E-commerce, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 ads

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use 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

## OLX Marketplace Scraper (7 Countries)

Turn any [OLX](https://www.olx.pl) search into clean, structured classifieds data — across **seven countries from a single actor**: Poland, Ukraine, Romania, Bulgaria, Kazakhstan, Uzbekistan and Portugal. Search by **keyword** (`iphone 15`, `opel astra`, `mieszkanie`), or paste **search, category or ad URLs** — and get one flat row per ad with title, description, price in native currency, GPS, city/region, business-seller flag, and OLX's own **normalised category attributes**.

Built for cross-border arbitrage, used-car and property intelligence, price monitoring, and CEE/CIS marketplace research.

#### How it works

![How the OLX Marketplace Scraper works](https://raw.githubusercontent.com/muhamed-didovic/muhamed-didovic.github.io/main/assets/how-it-works-olx.png)

#### ✨ Why use this scraper?

- **Seven countries, one actor, one schema** — most OLX scrapers cover a single domain. Tick `pl`, `ua`, `ro`, `bg`, `kz`, `uz`, `pt` and the same keyword runs across all of them, returning identical columns with each market's own currency. Cross-border price comparison works out of the box.
- **OLX's own normalised attributes** — every ad carries the structured attribute set OLX uses for its filters, in both raw and flattened form: car `make`/`model`/`year`/`mileage`/`fuel`, property `rooms`/`m²`/`floor`, phone `model`/`storage`/`colour`. These are real typed fields, not text parsed out of a description.
- **GPS on every row** — latitude/longitude plus OLX's full city → region → district hierarchy, on feed rows too, not only in deep mode.
- **Business vs private sellers** — `isBusiness` separates shops and dealers from private individuals, which is the filter that matters for lead-gen and dealer analysis.
- **No residential proxy needed** — OLX serves its data to ordinary requests, so runs are fast and cheap. No premium-proxy surcharge buried in your bill.
- **Fast mode or deep mode** — feed rows already include price, description, GPS, location and attributes. Turn on *Also open each ad page* to add all photos, the seller profile and contact flags. You choose cost vs depth.
- **Structured, not scraped** — reads OLX's own embedded `__PRERENDERED_STATE__` JSON rather than fragile HTML selectors, so the output stays reliable.
- **JSON, CSV, Excel or API** — pipe straight into your sheet, CRM or pipeline. Billed per ad.

#### 🎯 Use cases

| You are a… | Use it to… |
|---|---|
| Cross-border arbitrage trader | Compare the same product's price across PL, RO, UA and PT in one run |
| Used-car dealer / analyst | Pull local vehicle inventory with make, model, year, mileage and fuel type |
| Property analyst | Track listings by rooms, m², floor and region across CEE markets |
| Price-monitoring / repricing | Track asking prices for a product across a country over time |
| Lead-gen | Find active business sellers (`isBusiness: true`) with contact channels |
| Market researcher | Measure supply, price distribution and category mix per country |

#### 📥 Supported inputs

| Input | Example | What it does |
|---|---|---|
| Search keyword + markets | `iphone 15` × `["pl","ro"]` | Builds & paginates that search on each selected country |
| Search URL | `https://www.olx.pl/oferty/?q=iphone` | Paginates that search |
| Category URL | `https://www.olx.ro/imobiliare/` | Paginates that whole category |
| Ad URL | `https://www.olx.pl/d/oferta/...-ID123abc.html` | Scrapes that single ad in full detail |

**Supported domains:** `olx.pl`, `olx.ua`, `olx.ro`, `olx.bg`, `olx.kz`, `olx.uz`, `olx.pt`.

**Not supported:** `olx.ba`, `olx.com.br` and `olx.in` run on separate platforms and are not covered. Private messages, buyer data and anything behind a login are out of scope — the actor reads only public pages.

#### ⚙️ How it works

1. **Classify** every input — keywords are expanded across the selected markets; pasted URLs are sorted into search / ad, with the country detected from the domain.
2. **Fetch** each page with a real browser TLS fingerprint. OLX needs no residential proxy, so this is a plain sequential retry — fewer requests, lower cost.
3. **Parse** the embedded `__PRERENDERED_STATE__` JSON — the search feed's ad array, and each ad page's full object.
4. **Enrich** (optional) — for each ad, fetch its own page to add all photos, seller profile and contact flags.
5. **Push** one flat, deduplicated row per ad to the dataset, tagged with its market.

#### 🔧 Input configuration

| Field | Type | Default | Description |
|---|---|---|---|
| `searchQueries` | array | `["iphone 15"]` | Keywords to search. Each runs on every selected market. |
| `markets` | array | `["pl"]` | Countries: `pl`, `ua`, `ro`, `bg`, `kz`, `uz`, `pt`. |
| `startUrls` | array | `[]` | OLX search, category and/or ad URLs. Auto-classified. |
| `scrapeDetails` | boolean | `false` | Open each ad page for all photos, seller profile and contact flags. |
| `maxItems` | integer | `1000` | Hard cap on rows for the whole run. |
| `maxItemsPerSearch` | integer | `1000` | Cap per feed. OLX stops paginating at page 25 (~1,250 ads). |
| `maxConcurrency` | integer | `8` | Parallel requests. |
| `maxRequestRetries` | integer | `6` | Retry budget per request. |
| `proxy` | object | Apify datacenter | Optional. Residential proxies are **not** required for OLX. |

#### 📤 Output overview

One row per ad, tagged with its `market` and `country`. In fast mode you get the feed fields — already rich; with **Also open each ad page** on (or when you paste an ad URL) every row adds photos, seller and contact data.

**Fast mode (feed):** `adId`, `title`, `description`, `price`/`priceDisplay`/`currency`, `latitude`/`longitude`, `location`, `params`/`attributes`, `condition`, `isBusiness`, `isPromoted`, `createdTime`, `url`.

**Deep mode adds:** all `photos`, `primaryImage`, `seller` (name, avatar, last-seen, online status, phone/chat/delivery flags), `isJob`, `salary`, `externalUrl`.

#### 🧾 Output samples

**A phone listing in Poland (deep mode):**

```json
{
  "rowType": "listing",
  "adId": "1075898915",
  "market": "pl",
  "country": "Poland",
  "url": "https://www.olx.pl/d/oferta/...-ID1aOmsj.html",
  "title": "Apple iPhone 15 128GB NOWA BATERIA 100%",
  "price": 1997,
  "priceDisplay": "1 997 zł",
  "currency": "PLN",
  "isNegotiable": false,
  "condition": "Używane",
  "location": { "cityName": "Kraków", "regionName": "Małopolskie" },
  "latitude": 50.06026, "longitude": 19.9396,
  "isBusiness": true,
  "attributes": {
    "state": "Używane",
    "phonemodel": "iPhone 15",
    "builtinmemory_phones": "128GB",
    "rammemory_phones": "6 GB"
  },
  "photos": ["https://ireland.apollo.olxcdn.com/…", "… 6 more"],
  "seller": { "name": "SmartSfera", "hasPhone": true, "chatEnabled": true }
}
````

**The same search in Portugal — identical columns, native currency:**

```json
{
  "adId": "…",
  "market": "pt",
  "country": "Portugal",
  "title": "Iphone 15 128GB - Selado",
  "price": 625,
  "priceDisplay": "625 €",
  "currency": "EUR",
  "condition": "Novo",
  "location": { "cityName": "Loures", "regionName": "Lisboa" },
  "attributes": { "model": "iPhone 15", "capacity": "128GB", "operador": "Desbloqueado" },
  "isBusiness": false
}
```

#### 🔑 Key output fields

| Field | Description |
|---|---|
| `adId` / `adCode` | OLX numeric ad id and URL code (stable dedup keys) |
| `market` / `country` | Which OLX country site the row came from |
| `title` / `description` | Ad title and full description text |
| `price` / `priceDisplay` / `currency` | Numeric price, OLX's formatted string, native ISO currency |
| `isNegotiable` / `isFree` / `isExchange` | OLX's own price flags |
| `params` | Full normalised attribute list (key, label, value, normalised value) |
| `attributes` | The same attributes flattened to key → value, for CSV |
| `location` | City, region and district with OLX's ids |
| `latitude` / `longitude` | Ad GPS coordinates |
| `isBusiness` | Shop/dealer vs private seller |
| `condition` | Item condition, in the market's own language |
| `createdTime` / `lastRefreshTime` | When the ad was posted and last bumped |
| `photos` | Array of full-resolution image URLs (deep mode) |
| `seller` | Name, avatar, last-seen, online status, phone/chat/delivery flags (deep mode) |

#### ❓ FAQ

**Which countries are covered?** Poland, Ukraine, Romania, Bulgaria, Kazakhstan, Uzbekistan and Portugal — seven OLX domains sharing one platform and therefore one schema. Bosnia (`olx.ba`), Brazil and India run separate platforms and are not supported.

**Do I need a residential proxy?** No. OLX serves its data to ordinary requests, so the default Apify datacenter proxy is enough. That's why this actor is cheaper to run than marketplace scrapers that require residential IPs.

**What's the difference between fast and deep mode?** Fast mode (default) returns feed rows, which already include price, description, GPS, location and the full attribute set — cheap and quick. Deep mode opens each ad page to add all photos, the seller profile and contact flags — richer rows, ~2× the requests.

**Can I get seller phone numbers?** OLX does not publish the number itself on the page; it exposes whether the seller accepts phone contact. Rows carry `seller.hasPhone`, `chatEnabled` and `courierEnabled` rather than a raw number.

**Does it work for cars and property?** Yes. Those categories carry the richest attribute sets — make, model, year, mileage and fuel for vehicles; rooms, m², floor and market for property — all in `params`/`attributes`.

**How many results per search?** OLX returns ~50 ads per page and stops at page 25 — about 1,250 per feed. Use several keywords, categories or markets to go wider.

#### 🛟 Support

Found a bug or need a field added? Open an issue on the actor's Issues tab in the Apify Console and we'll take a look.

#### 🚀 Additional services

Need a different marketplace, site, or a custom schema? We build and maintain scrapers across classifieds, real estate, jobs and e-commerce.

#### 🔎 Explore more scrapers

- OfferUp Marketplace Scraper
- Kleinanzeigen Scraper
- Willhaben Scraper
- Craigslist Scraper
- Facebook Marketplace Scraper

#### ⚠️ Disclaimer

This actor scrapes only **publicly available** ad data from OLX. It does not access private messages, buyer data, or any content behind a login, and it does not collect personal data beyond the public seller information OLX itself displays on an ad. You are responsible for using the scraped data in compliance with OLX's Terms of Service, applicable laws (including GDPR and other data-protection and consumer-protection laws), and any restrictions on automated access. Use the output lawfully and ethically.

#### 🔍 SEO Keywords

OLX scraper, OLX API, OLX data extractor, scrape OLX listings, OLX Poland scraper, olx.pl scraper, OLX Ukraine scraper, OLX Romania scraper, OLX Bulgaria scraper, OLX Portugal scraper, OLX Kazakhstan scraper, OLX classifieds scraper, OLX car scraper, OLX property scraper, OLX price monitoring, classifieds data export, CEE marketplace data, second-hand marketplace scraper, OLX JSON export.

# Actor input Schema

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

Keywords to search, e.g. `iphone 15`, `opel astra`, `rower gorski`. Each keyword is searched on every market selected below — 2 keywords × 3 markets = 6 feeds.

## `markets` (type: `array`):

Which OLX country sites to search with the keywords above. Pasted URLs always use their own country, whatever is selected here.

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

Paste any OLX search, category or ad URL — the country is detected from the domain. Search: `https://www.olx.pl/oferty/?q=iphone` · Category: `https://www.olx.ro/imobiliare/` · Ad: `https://www.olx.pl/d/oferta/...-ID123abc.html`

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

Off (default) returns the feed fields, which already include price, description, GPS, city/region and the full category attribute set. On additionally opens every ad page for all photos, the seller profile (name, avatar, last-seen, online status) and contact flags (phone / chat / delivery). Slower, and billed at the higher Ad detail rate.

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

Hard cap on rows for the whole run, across every keyword and market.

## `maxItemsPerSearch` (type: `integer`):

Cap per individual search feed. OLX itself stops paginating at page 25 (~1,250 ads per feed).

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

Parallel requests. 8 is a good balance; raise carefully.

## `maxRequestRetries` (type: `integer`):

Retries per URL before giving up.

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

Optional. OLX does not require residential proxies — the default Apify datacenter proxy is enough, and is what runs if you leave this alone.

## Actor input object example

```json
{
  "searchQueries": [
    "iphone 15",
    "opel astra"
  ],
  "markets": [
    "pl"
  ],
  "startUrls": [],
  "scrapeDetails": false,
  "maxItems": 1000,
  "maxItemsPerSearch": 1000,
  "maxConcurrency": 8,
  "maxRequestRetries": 6,
  "proxy": {
    "useApifyProxy": true
  }
}
```

# 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 = {
    "searchQueries": [
        "iphone 15"
    ],
    "markets": [
        "pl"
    ],
    "startUrls": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("memo23/olx-marketplace-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 = {
    "searchQueries": ["iphone 15"],
    "markets": ["pl"],
    "startUrls": [],
}

# Run the Actor and wait for it to finish
run = client.actor("memo23/olx-marketplace-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchQueries": [
    "iphone 15"
  ],
  "markets": [
    "pl"
  ],
  "startUrls": []
}' |
apify call memo23/olx-marketplace-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=memo23/olx-marketplace-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "OLX Marketplace Scraper (7 Countries)",
        "description": "Scrape OLX classifieds across 7 countries (PL, UA, RO, BG, KZ, UZ, PT) from one actor. One row per ad: title, price in native currency, GPS, city/region, business-seller flag, and OLX's own category attributes (car make/model/mileage, property rooms/m²). Optional photos + seller profile.",
        "version": "0.1",
        "x-build-id": "L8PWGwUpdEKbHKVXZ"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/memo23~olx-marketplace-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-memo23-olx-marketplace-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/memo23~olx-marketplace-scraper/runs": {
            "post": {
                "operationId": "runs-sync-memo23-olx-marketplace-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/memo23~olx-marketplace-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-memo23-olx-marketplace-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "searchQueries": {
                        "title": "Search keywords",
                        "type": "array",
                        "description": "Keywords to search, e.g. `iphone 15`, `opel astra`, `rower gorski`. Each keyword is searched on every market selected below — 2 keywords × 3 markets = 6 feeds.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "markets": {
                        "title": "Markets (countries)",
                        "type": "array",
                        "description": "Which OLX country sites to search with the keywords above. Pasted URLs always use their own country, whatever is selected here.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "pl",
                                "ua",
                                "ro",
                                "bg",
                                "kz",
                                "uz",
                                "pt"
                            ],
                            "enumTitles": [
                                "Poland — olx.pl",
                                "Ukraine — olx.ua",
                                "Romania — olx.ro",
                                "Bulgaria — olx.bg",
                                "Kazakhstan — olx.kz",
                                "Uzbekistan — olx.uz",
                                "Portugal — olx.pt"
                            ]
                        },
                        "default": [
                            "pl"
                        ]
                    },
                    "startUrls": {
                        "title": "OLX URLs (search, category, or single ad)",
                        "type": "array",
                        "description": "Paste any OLX search, category or ad URL — the country is detected from the domain. Search: `https://www.olx.pl/oferty/?q=iphone` · Category: `https://www.olx.ro/imobiliare/` · Ad: `https://www.olx.pl/d/oferta/...-ID123abc.html`",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "scrapeDetails": {
                        "title": "Also open each ad page (all photos + seller profile)",
                        "type": "boolean",
                        "description": "Off (default) returns the feed fields, which already include price, description, GPS, city/region and the full category attribute set. On additionally opens every ad page for all photos, the seller profile (name, avatar, last-seen, online status) and contact flags (phone / chat / delivery). Slower, and billed at the higher Ad detail rate.",
                        "default": false
                    },
                    "maxItems": {
                        "title": "Max ads (total)",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Hard cap on rows for the whole run, across every keyword and market.",
                        "default": 1000
                    },
                    "maxItemsPerSearch": {
                        "title": "Max ads per feed",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Cap per individual search feed. OLX itself stops paginating at page 25 (~1,250 ads per feed).",
                        "default": 1000
                    },
                    "maxConcurrency": {
                        "title": "Max concurrency",
                        "minimum": 1,
                        "maximum": 30,
                        "type": "integer",
                        "description": "Parallel requests. 8 is a good balance; raise carefully.",
                        "default": 8
                    },
                    "maxRequestRetries": {
                        "title": "Max request retries",
                        "minimum": 0,
                        "maximum": 30,
                        "type": "integer",
                        "description": "Retries per URL before giving up.",
                        "default": 6
                    },
                    "proxy": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Optional. OLX does not require residential proxies — the default Apify datacenter proxy is enough, and is what runs if you leave this alone.",
                        "default": {
                            "useApifyProxy": true
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
