# Milanuncios Scraper (`memo23/milanuncios-scraper`) Actor

Scrape Milanuncios classifieds by keyword, category or ad URL. One row per ad: title, price, city/province, 4-level category tree, images, publish date and seller type (private vs professional). Spanish residential proxy included. Optional attributes + contact flags.

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

## Pricing

from $3.00 / 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

## Milanuncios Scraper

Turn any [Milanuncios](https://www.milanuncios.com) search into clean, structured classifieds data. Search by **keyword** (`iphone 15`, `opel astra`, `piso alquiler`), or paste **search, category and ad URLs** — and get one flat row per ad with title, price, city and province, a **4-level category tree**, images, publish date and — crucially — whether the seller is **private or professional**.

Built for used-car and dealer intelligence, property research, price monitoring and Spanish classifieds analysis.

#### How it works

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

#### ✨ Why use this scraper?

- **Spanish residential proxy included** — Milanuncios refuses non-Spanish traffic outright: a normal request gets HTTP 405 and a captcha, no matter the fingerprint. This actor ships with a Spanish residential pool at no extra cost, so it just works. That's the whole reason most Milanuncios scrapers return nothing.
- **Real used-car specs** — car ads return `kilometers`, `year`, `fuel`, `transmission`, `hp`, `doors`, `color`, `warranty` and the Spanish `environmentalLabel` (0 / ECO / C / B), in **both machine-readable and display form** (`"39681"` and `"39.681 kms"`). Filter and sort on them directly.
- **Private vs professional sellers** — every row carries `sellerType`, so you can isolate dealers from private sellers in one filter. That's the split that matters for dealer intelligence and lead-gen.
- **Supply vs demand ads** — Milanuncios carries wanted ads alongside for-sale ads; `sellType` separates them so you don't pollute price analysis with "compro" listings.
- **4-level category tree** — `Motor > Coches > Volkswagen`, `Telefonía > Móviles > Teléfonos móviles > iPhone`. Structured levels, not a single label.
- **Engagement + seller volume** — deep mode returns favourites, shares and the seller's total live listing count, which tells you a dealer's inventory size at a glance.
- **Fast mode or deep mode** — feed rows already include price, description, city/province, category tree and seller type. Turn on deep mode for attributes, contact flags and counters. You choose cost vs depth.
- **JSON, CSV, Excel or API** — pipe straight into your sheet, CRM or pipeline. Billed per ad.

#### 🎯 Use cases

| You are a… | Use it to… |
|---|---|
| Used-car dealer / analyst | Pull local inventory with km, year, fuel, transmission and power for market pricing |
| Dealer-network researcher | Isolate `sellerType: professional` and size each dealer by listing count |
| Property analyst | Track listings by province and category over time |
| Price-monitoring / repricing | Follow asking prices for a model or product across Spain |
| Reseller / flipper | Source underpriced private-seller ads before dealers list them |
| Market researcher | Measure supply, price distribution and category mix by province |

#### 📥 Supported inputs

| Input | Example | What it does |
|---|---|---|
| Search keyword | `iphone 15`, `opel astra` | Builds & paginates that search feed |
| Search URL | `https://www.milanuncios.com/anuncios/?s=iphone` | Paginates that search |
| Category URL | `https://www.milanuncios.com/coches-de-segunda-mano/` | Paginates that whole category |
| Ad URL | `https://www.milanuncios.com/iphone/…-593529484.htm` | Scrapes that single ad in full detail |

**Not supported:** private messages, buyer data, and anything behind a login. The actor reads only public Milanuncios pages.

> **Note on phone numbers.** Milanuncios does not publish seller phone numbers on the page — it exposes only which contact channels an ad offers. Rows therefore carry `hasPhone`, `hasChat` and `hasContactForm` flags rather than a raw number.

#### ⚙️ How it works

1. **Classify** every input — keywords become search URLs; pasted URLs are sorted into search / category / ad.
2. **Unlock** each page through a Spanish residential exit. The geo-block is per-IP and flaky, so each page races a small batch of fresh sessions and takes the first real response.
3. **Parse** the embedded `__INITIAL_PROPS__` JSON — the feed's ad array, and each ad page's full object.
4. **Enrich** (optional) — for each ad, open its page to add structured attributes, contact flags, favourites and the seller's listing count.
5. **Push** one flat, deduplicated row per ad to the dataset.

#### 🔧 Input configuration

| Field | Type | Default | Description |
|---|---|---|---|
| `searchQueries` | array | `["iphone 15"]` | Keywords to search. Each is paginated. |
| `startUrls` | array | `[]` | Search, category and/or ad URLs. Auto-classified. |
| `scrapeDetails` | boolean | `false` | Open each ad page (attributes, contact flags, counters). |
| `maxItems` | integer | `1000` | Hard cap on rows for the whole run. |
| `maxItemsPerSearch` | integer | `1000` | Cap per keyword / search URL (~41 ads per page). |
| `maxConcurrency` | integer | `6` | Parallel requests — keep moderate, Milanuncios rate-limits. |
| `maxRequestRetries` | integer | `12` | Retry budget; each retry rotates to a fresh Spanish IP. |
| `proxy` | object | built-in | Optional override — ES residential ships at no extra cost. |

#### 📤 Output overview

One row per ad.

**Fast mode (feed):** `adId`, `title`, `description`, `price`, `sellerType`, `sellType`, `location` (city, province, region), `categoryTree`/`categoryPath`, `images`, `isNew`, `isReserved`, `isHighlighted`, `publishDate`, `url`.

**Deep mode adds:** `attributes` + `attributesFormatted`, `hasPhone`/`hasChat`/`hasContactForm`, `favorites`, `shares`, `sellerListings`, `updateDate`, `priceIndicator`.

#### 🧾 Output samples

**A car listing (deep mode):**

```json
{
  "rowType": "listing",
  "adId": "597677383",
  "url": "https://www.milanuncios.com/volkswagen-de-segunda-mano/…-597677383.htm",
  "title": "VOLKSWAGEN Golf Advance 1.6 TDI BMT DSG",
  "price": 13900,
  "currency": "EUR",
  "sellerType": "professional",
  "sellType": "supply",
  "location": { "cityName": "Santa Coloma de Queralt", "provinceName": "Tarragona" },
  "categoryPath": "Motor > Coches > Volkswagen",
  "attributes": {
    "kilometers": "106500", "year": "2017", "fuel": "diesel",
    "transmission": "AUTOMATIC", "hp": "110", "doors": "5", "color": "gris"
  },
  "attributesFormatted": { "kilometers": "106.500 kms", "hp": "110 CV" },
  "hasPhone": true, "hasChat": true,
  "favorites": 8, "sellerListings": 12,
  "publishDate": "2026-05-03T11:18:46.000Z"
}
````

**A phone listing (deep mode) — private seller, no attribute set:**

```json
{
  "adId": "593529484",
  "title": "Iphone 15",
  "price": 445,
  "sellerType": "private",
  "location": { "cityName": "Córdoba", "provinceName": "Córdoba" },
  "categoryPath": "Telefonía > Móviles > Teléfonos móviles > iPhone",
  "attributes": null,
  "hasPhone": false, "hasChat": true, "hasContactForm": true,
  "favorites": 1, "sellerListings": 6
}
```

#### 🔑 Key output fields

| Field | Description |
|---|---|
| `adId` | Milanuncios ad id (stable dedup key) |
| `title` / `description` | Ad title and full description |
| `price` / `currency` | Numeric price; Milanuncios is EUR-only |
| `sellerType` | `private` or `professional` — dealer vs individual |
| `sellType` | `supply` (for sale) or `demand` (wanted) |
| `location` | City, province and region with Milanuncios' ids |
| `categoryTree` / `categoryPath` | 4-level category path and its structured levels |
| `images` | Array of image URLs |
| `isNew` / `isReserved` / `isHighlighted` | Ad state flags |
| `publishDate` / `updateDate` | When the ad was posted and last updated (ISO) |
| `attributes` | Category attributes, raw values (deep mode) |
| `attributesFormatted` | The same attributes as displayed (deep mode) |
| `hasPhone` / `hasChat` / `hasContactForm` | Contact channels offered (deep mode) |
| `favorites` / `shares` / `sellerListings` | Engagement and the seller's live listing count (deep mode) |

#### ❓ FAQ

**Why do other Milanuncios scrapers return nothing?** Milanuncios geo-blocks: from outside Spain it answers HTTP 405 with a captcha, regardless of browser fingerprint. It needs a Spanish residential IP, which this actor bundles.

**Do I need my own proxy?** No. Spanish residential proxy is included at no extra cost. You can override it in the `proxy` field if you have your own Spanish pool.

**Do I get seller phone numbers?** No. Milanuncios does not publish the number on the page — only which contact channels the ad offers. You get `hasPhone`, `hasChat` and `hasContactForm` instead.

**Which categories return attributes?** Ones where Milanuncios itself uses structured filters — cars, motorbikes and property are the richest. Most phone and general second-hand ads carry no attribute set, so `attributes` is `null` there. That reflects the source, not a parsing gap.

**Can I separate dealers from private sellers?** Yes — `sellerType` is on every row, including in fast mode, and deep mode adds `sellerListings` so you can size each dealer's inventory.

**How many results per search?** Milanuncios returns ~41 ads per page. The actor walks up to 100 pages per feed (~4,100 ads). Use several keywords or categories 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

- Wallapop Scraper
- OLX Marketplace Scraper (7 countries)
- OfferUp Marketplace Scraper
- Kleinanzeigen Scraper
- Craigslist Scraper

#### ⚠️ Disclaimer

This actor scrapes only **publicly available** ad data from Milanuncios. It does not access private messages, buyer data, or any content behind a login, and it does not collect personal data beyond the public ad information Milanuncios itself displays. You are responsible for using the scraped data in compliance with Milanuncios' 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

Milanuncios scraper, Milanuncios API, Milanuncios data extractor, scrape Milanuncios ads, Milanuncios coches scraper, Milanuncios car scraper, Milanuncios property scraper, Spanish classifieds scraper, segunda mano scraper, used car data Spain, Milanuncios price monitoring, dealer inventory scraper Spain, Milanuncios JSON export, anuncios clasificados scraper.

# Actor input Schema

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

Keywords to search, e.g. `iphone 15`, `opel astra`, `piso alquiler`. Each is paginated across the Milanuncios search feed.

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

Search: `https://www.milanuncios.com/anuncios/?s=iphone` · Category: `https://www.milanuncios.com/coches-de-segunda-mano/` · Ad: `https://www.milanuncios.com/iphone/…-593529484.htm`

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

Off (default) returns the feed fields, which already include price, description, city/province, the 4-level category tree and seller type. On additionally opens every ad page for structured attributes (car make/model/km, property m²/rooms), contact flags (phone / chat / form), favourites and the seller's total listing count. Slower, and billed at the higher Ad detail rate.

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

Hard cap on rows for the whole run.

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

Cap per keyword / search URL. Milanuncios returns ~41 ads per page.

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

Parallel requests. Keep moderate — Milanuncios rate-limits.

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

Retry budget per request; each retry rotates to a fresh Spanish residential IP.

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

Optional override. Milanuncios only answers Spanish residential IPs — the actor ships with an ES residential pool at no extra cost, so leave this alone unless you have your own Spanish proxies.

## Actor input object example

```json
{
  "searchQueries": [
    "iphone 15",
    "opel astra"
  ],
  "startUrls": [],
  "scrapeDetails": false,
  "maxItems": 1000,
  "maxItemsPerSearch": 1000,
  "maxConcurrency": 6,
  "maxRequestRetries": 12,
  "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"
    ],
    "startUrls": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("memo23/milanuncios-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"],
    "startUrls": [],
}

# Run the Actor and wait for it to finish
run = client.actor("memo23/milanuncios-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"
  ],
  "startUrls": []
}' |
apify call memo23/milanuncios-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Milanuncios Scraper",
        "description": "Scrape Milanuncios classifieds by keyword, category or ad URL. One row per ad: title, price, city/province, 4-level category tree, images, publish date and seller type (private vs professional). Spanish residential proxy included. Optional attributes + contact flags.",
        "version": "0.1",
        "x-build-id": "zvzXDFTZzgJSyhxMr"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/memo23~milanuncios-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-memo23-milanuncios-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~milanuncios-scraper/runs": {
            "post": {
                "operationId": "runs-sync-memo23-milanuncios-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~milanuncios-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-memo23-milanuncios-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`, `piso alquiler`. Each is paginated across the Milanuncios search feed.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "startUrls": {
                        "title": "Milanuncios URLs (search, category, or ad)",
                        "type": "array",
                        "description": "Search: `https://www.milanuncios.com/anuncios/?s=iphone` · Category: `https://www.milanuncios.com/coches-de-segunda-mano/` · Ad: `https://www.milanuncios.com/iphone/…-593529484.htm`",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "scrapeDetails": {
                        "title": "Also open each ad page (attributes + contact flags)",
                        "type": "boolean",
                        "description": "Off (default) returns the feed fields, which already include price, description, city/province, the 4-level category tree and seller type. On additionally opens every ad page for structured attributes (car make/model/km, property m²/rooms), contact flags (phone / chat / form), favourites and the seller's total listing count. 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.",
                        "default": 1000
                    },
                    "maxItemsPerSearch": {
                        "title": "Max ads per feed",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Cap per keyword / search URL. Milanuncios returns ~41 ads per page.",
                        "default": 1000
                    },
                    "maxConcurrency": {
                        "title": "Max concurrency",
                        "minimum": 1,
                        "maximum": 20,
                        "type": "integer",
                        "description": "Parallel requests. Keep moderate — Milanuncios rate-limits.",
                        "default": 6
                    },
                    "maxRequestRetries": {
                        "title": "Max request retries",
                        "minimum": 0,
                        "maximum": 40,
                        "type": "integer",
                        "description": "Retry budget per request; each retry rotates to a fresh Spanish residential IP.",
                        "default": 12
                    },
                    "proxy": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Optional override. Milanuncios only answers Spanish residential IPs — the actor ships with an ES residential pool at no extra cost, so leave this alone unless you have your own Spanish proxies.",
                        "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
