# Otomoto.pl Scraper — Polish Auto Classifieds (`automation-lab/otomoto-scraper`) Actor

Scrape car listings from Otomoto.pl — Poland's largest vehicle marketplace with 240k+ listings. Get price, make, model, year, mileage, fuel type, engine specs, and location.

- **URL**: https://apify.com/automation-lab/otomoto-scraper.md
- **Developed by:** [Stas Persiianenko](https://apify.com/automation-lab) (community)
- **Categories:** E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.60 / 1,000 car listing extracteds

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/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.md):

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

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.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/platform/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

## Otomoto.pl Scraper — Polish Auto Classifieds

Extract car listings from [Otomoto.pl](https://www.otomoto.pl) — Poland's largest automotive marketplace with 240,000+ active listings. Get price, make, model, year, mileage, fuel type, engine specs, location, seller type, and more — all in a clean, structured dataset ready for analysis, valuation models, or lead generation.

### 🚗 What does Otomoto.pl Scraper do?

This actor crawls Otomoto.pl search results and category pages, extracting structured data from every car listing. It uses the site's own Next.js SSR data (embedded in every page), so it is fast, lightweight, and reliable — no browser automation needed.

For each listing it extracts:
- **Car specs**: make, model, version/trim, year, mileage, fuel type, transmission, engine capacity, engine power
- **Price**: in PLN with currency code
- **Location**: city and voivodeship (region)
- **Listing metadata**: unique ID, URL, posting date, badges (e.g. LOW_MILEAGE), seller type (private or dealer), thumbnail image

You can scrape any Otomoto.pl URL — the main passenger-car category, a brand sub-page (e.g. `/osobowe/bmw`), or a URL you built yourself using the website's search filters.

### 👥 Who is it for?

- **Polish used-car dealers** who need to monitor competitor pricing and stock in their region
- **Residual-value analysts** and automotive market researchers building pricing models for PLN-denominated assets
- **OEM data teams** tracking brand-level inventory levels or model popularity on the secondary market
- **Classified-data aggregators** building pan-CEE automotive datasets alongside similar scrapers for Mobile.de, AutoScout24, OLX, and OtoDom
- **PropTech / FinTech analysts** who need correlated auto + real-estate data for Polish consumers
- **Individual buyers** automating their car search across thousands of listings

### ✅ Why use it?

- ⚡ **HTTP + Cheerio** — no browser, runs in 256 MB, extremely cost-efficient
- 🔁 **Paginated crawl** — automatically walks through result pages (32 listings/page)
- 🔗 **Any search URL** — paste a URL from the website with your own filters already applied
- 🌍 **Polish market coverage** — 240,000+ listings across all voivodeships
- 💰 **Structured pricing** — price in PLN as a number (not a string), ready for aggregation
- 🛡️ **Resilient** — configurable retries, gracefully skips failed pages

### 📦 Data extracted

| Field | Type | Example |
|---|---|---|
| `id` | string | `"6147784510"` |
| `url` | string | `"https://www.otomoto.pl/osobowe/oferta/kia-picanto-..."` |
| `title` | string | `"Kia Picanto 1.0 ISG Spirit"` |
| `shortDescription` | string | `"bezwypadkowa, pewny przebieg, kamera"` |
| `make` | string | `"Kia"` |
| `model` | string | `"Picanto"` |
| `version` | string | `"1.0 ISG Spirit"` |
| `year` | number | `2017` |
| `mileageKm` | number | `91000` |
| `fuelType` | string | `"Benzyna"` |
| `gearbox` | string | `"Manualna"` |
| `engineCapacityCc` | number | `998` |
| `enginePowerHp` | number | `67` |
| `pricePLN` | number | `27900` |
| `priceCurrency` | string | `"PLN"` |
| `city` | string | `"Olsztyn"` |
| `region` | string | `"Warmińsko-mazurskie"` |
| `badges` | array | `["LOW_MILEAGE"]` |
| `sellerType` | string | `"ProfessionalSeller"` |
| `thumbnailUrl` | string | `"https://ireland.apollo.olxcdn.com/..."` |
| `createdAt` | string | `"2026-05-10T08:06:39Z"` |

### 💸 How much does it cost to scrape Otomoto.pl listings?

This actor uses **Pay-Per-Event pricing** — you pay per listing extracted, not for actor runtime. There is a small one-time start fee per run plus a per-result charge.

**Typical cost examples:**

| Use case | Results | Estimated cost |
|---|---|---|
| Quick price check | 50 listings | < $0.10 |
| Regional market snapshot | 500 listings | ~$0.60 |
| Full category crawl | 5,000 listings | ~$5.50 |
| Daily monitoring feed | 200 listings/day | ~$0.25/day |

New Apify users receive a **free-tier credit** that covers hundreds of results — enough to evaluate the actor at zero cost.

### 🚀 How to use it

1. **Open the actor** on Apify and click **Try for free**
2. **Paste a Start URL** — copy any search URL from Otomoto.pl (with your filters applied) or use a category shortcut like `https://www.otomoto.pl/osobowe/bmw`
3. **Set Max Results** — start with 20 to test, then increase for production runs
4. **Click Start** — results appear in the dataset within seconds

#### Using Otomoto.pl search filters

The easiest way to apply filters is to use Otomoto.pl's own search UI:

1. Go to [otomoto.pl/osobowe](https://www.otomoto.pl/osobowe)
2. Select brand, model, price range, year, region, etc.
3. Copy the URL from your browser's address bar
4. Paste it as a Start URL in this actor

The actor will walk through every result page for that filter combination.

### ⚙️ Input parameters

| Parameter | Type | Default | Description |
|---|---|---|---|
| `startUrls` | array | `["https://www.otomoto.pl/osobowe"]` | One or more Otomoto.pl category or search URLs to scrape |
| `maxResults` | integer | `50` | Maximum number of listings to extract across all start URLs |
| `maxRequestRetries` | integer | `3` | Number of retry attempts for failed HTTP requests |

#### Example input

```json
{
  "startUrls": [
    "https://www.otomoto.pl/osobowe/volkswagen/golf?search%5Bfilter_float_price%3Ato%5D=50000&search%5Bfilter_float_year%3Afrom%5D=2015"
  ],
  "maxResults": 200
}
````

### 📤 Output

Results are saved to the default Apify dataset. Each item corresponds to one car listing.

#### Example output item

```json
{
  "id": "6147784510",
  "url": "https://www.otomoto.pl/osobowe/oferta/kia-picanto-ID6I3tAG.html",
  "title": "Kia Picanto 1.0 ISG Spirit",
  "shortDescription": "bezwypadkowa, pewny przebieg, kamera, grzana kierownica",
  "make": "Kia",
  "model": "Picanto",
  "version": "1.0 ISG Spirit",
  "year": 2017,
  "mileageKm": 91000,
  "fuelType": "Benzyna",
  "gearbox": "Manualna",
  "engineCapacityCc": 998,
  "enginePowerHp": 67,
  "pricePLN": 27900,
  "priceCurrency": "PLN",
  "city": "Olsztyn",
  "region": "Warmińsko-mazurskie",
  "badges": [],
  "sellerType": "ProfessionalSeller",
  "thumbnailUrl": "https://ireland.apollo.olxcdn.com/v1/files/wzwce1kactjz2-OTOMOTOPL/image;s=320x240",
  "createdAt": "2026-05-10T08:06:39Z"
}
```

### 💡 Tips & tricks

- **Use multiple start URLs** to scrape different brands or regions in a single run — results from all URLs are combined in one dataset
- **Low maxResults for testing** — set `maxResults: 20` for a quick test, then bump to production volume
- **Filter by voivodeship** — use Otomoto.pl's location filter in the search UI and copy the URL to target a specific region
- **Monitor new listings** — schedule a daily run with `maxResults: 200` and the "Najnowsze" (newest first) sort to capture fresh listings
- **Private vs dealer** — filter by `sellerType: "PrivateSeller"` in your downstream code to target only private sellers (often priced lower)
- **Badges** — the `badges` array can include `LOW_MILEAGE`, `PRICE_DROP`, and similar signals useful for deal-finding

### 🔗 Integrations

#### Pricing dashboard (Google Sheets)

Schedule a daily run → connect dataset to Google Sheets via the Apify integration → build a pivot table showing average price by make/model/year. Auto-refreshes every morning.

#### Lead generation CRM (Zapier/Make)

Trigger on new dataset items → filter by `sellerType: "PrivateSeller"` → push contact details to HubSpot or another CRM for dealer outreach.

#### Valuation model (Python + pandas)

```python
import pandas as pd
import requests

dataset_id = "YOUR_DATASET_ID"
token = "YOUR_APIFY_TOKEN"
url = f"https://api.apify.com/v2/datasets/{dataset_id}/items?token={token}&format=json"
df = pd.read_json(url)

## Average price by make and year
pivot = df.groupby(['make', 'year'])['pricePLN'].mean().reset_index()
print(pivot)
```

#### Daily price alert (n8n)

Schedule run → compare pricePLN against your threshold → send Slack alert when a listing drops below target price.

### 🖥️ API usage

#### Node.js

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });

const run = await client.actor('automation-lab/otomoto-scraper').call({
  startUrls: ['https://www.otomoto.pl/osobowe/bmw'],
  maxResults: 100,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")

run = client.actor("automation-lab/otomoto-scraper").call(run_input={
    "startUrls": ["https://www.otomoto.pl/osobowe/bmw"],
    "maxResults": 100,
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["make"], item["model"], item["pricePLN"])
```

#### cURL

```bash
curl -X POST "https://api.apify.com/v2/acts/automation-lab~otomoto-scraper/runs?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "startUrls": ["https://www.otomoto.pl/osobowe/bmw"],
    "maxResults": 100
  }'
```

### 🤖 MCP (Claude / AI assistant integration)

Use this actor directly from Claude Code, Claude Desktop, Cursor, or VS Code with the Apify MCP server.

#### Claude Code

```bash
claude mcp add --transport http apify "https://mcp.apify.com?tools=automation-lab/otomoto-scraper"
```

#### Claude Desktop / Cursor / VS Code

Add to your MCP config:

```json
{
  "mcpServers": {
    "apify": {
      "type": "http",
      "url": "https://mcp.apify.com?tools=automation-lab/otomoto-scraper",
      "headers": { "Authorization": "Bearer YOUR_APIFY_TOKEN" }
    }
  }
}
```

#### Example prompts

- *"Scrape the top 50 BMW listings from Otomoto.pl under 80,000 PLN"*
- *"Get all VW Golf listings from 2018–2022 with under 100,000 km and export to CSV"*
- *"Monitor new listings on Otomoto.pl in the Mazowieckie region every morning"*

### ⚖️ Legality

Web scraping public data is broadly legal in the EU under CJEU C-30/23. Otomoto.pl's public listing pages are accessible without login and constitute publicly available information. This actor does not extract private user data, bypass authentication, or submit forms.

Users are responsible for complying with Otomoto.pl's Terms of Service and applicable Polish/EU law in their jurisdiction. Do not use this actor to re-publish Otomoto.pl data in a way that competes with their core business.

### ❓ FAQ

**Q: How many listings can I scrape per run?**
A: There is no hard limit in this actor. Otomoto.pl serves up to 32 listings per page. You can set `maxResults` as high as you need. For very large crawls (10,000+), consider scheduling multiple runs with different filter URLs.

**Q: Does it scrape detail pages (full description, all photos, equipment list)?**
A: The current version extracts data from search result pages only. Detail-page data (full description, full equipment list, high-res photos, VIN) requires a second HTTP pass to each listing URL. This is planned for a future version. For most market-analysis use cases, search-page data is sufficient.

**Q: Are prices in EUR or PLN?**
A: All prices are extracted in PLN (`priceCurrency: "PLN"`). Otomoto.pl is a Polish platform and lists in Polish Złoty. Convert to EUR using the current exchange rate in your downstream code.

**Q: The actor returned 0 results. What went wrong?**
A: Check that your Start URL is a valid Otomoto.pl listing page (category or search results). If you copied a URL with a typo or the category has no listings matching your filters, the actor will return 0 results gracefully. Try the default URL `https://www.otomoto.pl/osobowe` first to verify the actor works, then apply your custom filters.

**Q: Why are fuel types in Polish (e.g. "Benzyna")?**
A: Otomoto.pl returns fuel types in Polish. "Benzyna" = Petrol/Gasoline, "Diesel" = Diesel, "Hybryda" = Hybrid, "Hybryda Plug-in" = Plug-in Hybrid, "Elektryczny" = Electric, "Benzyna+LPG" = LPG.

### 🔗 Related scrapers

- [automation-lab/olx-scraper](https://apify.com/automation-lab/olx-scraper) — OLX.pl general classifieds
- [automation-lab/otodom-scraper](https://apify.com/automation-lab/otodom-scraper) — Polish real estate classifieds
- [automation-lab/allegro-scraper](https://apify.com/automation-lab/allegro-scraper) — Poland's largest e-commerce marketplace

# Actor input Schema

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

One or more Otomoto.pl search or category URLs to scrape. Examples: `https://www.otomoto.pl/osobowe`, `https://www.otomoto.pl/osobowe/bmw`, or a full search URL with filters from the website.

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

Maximum number of car listings to extract across all start URLs. Set to a low number for quick tests.

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

Number of retry attempts for failed HTTP requests before skipping a page.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.otomoto.pl/osobowe"
  ],
  "maxResults": 20,
  "maxRequestRetries": 3
}
```

# Actor output Schema

## `overview` (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 = {
    "startUrls": [
        "https://www.otomoto.pl/osobowe"
    ],
    "maxResults": 20,
    "maxRequestRetries": 3
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation-lab/otomoto-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 = {
    "startUrls": ["https://www.otomoto.pl/osobowe"],
    "maxResults": 20,
    "maxRequestRetries": 3,
}

# Run the Actor and wait for it to finish
run = client.actor("automation-lab/otomoto-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 '{
  "startUrls": [
    "https://www.otomoto.pl/osobowe"
  ],
  "maxResults": 20,
  "maxRequestRetries": 3
}' |
apify call automation-lab/otomoto-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Otomoto.pl Scraper — Polish Auto Classifieds",
        "description": "Scrape car listings from Otomoto.pl — Poland's largest vehicle marketplace with 240k+ listings. Get price, make, model, year, mileage, fuel type, engine specs, and location.",
        "version": "0.1",
        "x-build-id": "SHzJEoli6QuwRPMbf"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/automation-lab~otomoto-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-automation-lab-otomoto-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/automation-lab~otomoto-scraper/runs": {
            "post": {
                "operationId": "runs-sync-automation-lab-otomoto-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/automation-lab~otomoto-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-automation-lab-otomoto-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": {
                    "startUrls": {
                        "title": "🔗 Start URLs",
                        "type": "array",
                        "description": "One or more Otomoto.pl search or category URLs to scrape. Examples: `https://www.otomoto.pl/osobowe`, `https://www.otomoto.pl/osobowe/bmw`, or a full search URL with filters from the website.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxResults": {
                        "title": "📊 Max results",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum number of car listings to extract across all start URLs. Set to a low number for quick tests.",
                        "default": 50
                    },
                    "maxRequestRetries": {
                        "title": "Max request retries",
                        "minimum": 1,
                        "maximum": 10,
                        "type": "integer",
                        "description": "Number of retry attempts for failed HTTP requests before skipping a page.",
                        "default": 3
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
