# Boliga Scraper - Danish Property Listings (`crawlerbros/boliga-scraper`) Actor

Scrape boliga.dk, Denmark's leading property portal. Search for-sale homes, apartments, and land by location, price, size, rooms, property type, and build year. Get price, address, specs, energy label, photos, and agent details.

- **URL**: https://apify.com/crawlerbros/boliga-scraper.md
- **Developed by:** [Crawler Bros](https://apify.com/crawlerbros) (community)
- **Categories:** Real estate, Automation, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
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/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

## Boliga Scraper

Scrape **Boliga.dk** — Denmark's leading property portal. Search for-sale homes, apartments, summer houses, and building plots by postal code, municipality, street, price, size, rooms, property type, and build year, search recently **sold** properties with sale date and asking-vs-sold price, or fetch full details for specific listings by ID. No login, no cookies, no paid proxy required.

### What this actor does

- **Three modes:** `search` (filter-driven for-sale listings), `sold` (recently sold properties, same filters), and `byIds` (direct lookup by listing ID)
- **Location filters:** postal code, all 98 Danish municipalities, street name
- **Full Boliga taxonomy:** Villa, Rækkehus, Ejerlejlighed, Fritidshus, Andelsbolig, Landejendom, Helårsgrund, Fritidsgrund, Villalejlighed, Andet
- **Range filters:** price, size, rooms, build year
- **12 sort orders:** newest/oldest, price, size, price/m², return on investment
- **Empty fields are omitted** — every returned field has a real value

### Output per listing

- `estateId` — Boliga's internal listing ID
- `title` — property type + address summary
- `price`, `pricePerSqm`, `priceChangePercent` — asking price and recent change
- `publicEvaluationPrice`, `downPayment`
- `address`, `streetName`, `zipCode`, `city`, `municipality`
- `propertyType` — Villa / Rækkehus / Ejerlejlighed / Fritidshus / Andelsbolig / Landejendom / Helårsgrund / Fritidsgrund / Villalejlighed / Andet
- `rooms`, `size` (m²), `lotSize` (m²), `basementSize` (m²), `floor`, `buildYear`
- `energyClass` — Danish EU energy label (A–G)
- `daysForSale`, `createdDate` — how long it's been listed
- `lastSoldDate`, `lastSoldPrice` — most recent prior sale, when known
- `soldDate`, `askingPrice` — sale date and originally advertised asking price (mode=sold only)
- `views` — page views on Boliga
- `isForeclosure`, `isSelfSale`, `isActive` — whether the listing is currently active on Boliga
- `isPremiumAgent`, `agentId` — whether the broker is a Boliga premium agent, and their agent registration ID
- `latitude`, `longitude`
- `openHouse` — scheduled open-house text, when set
- `photos[]`, `photoCount`
- `cadastralNumber` — land registry number (mode=byIds only)
- `agentName`, `agentPhone`, `agentEmail`, `agentHomepage` — listing broker, when available
- `brokerListingUrl` — the listing's page on the broker's own site (mode=byIds only)
- `listingUrl`, `sourceUrl` — canonical boliga.dk listing page
- `recordType: "listing"`, `scrapedAt`

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `mode` | string | `search` | `search`, `sold`, or `byIds` |
| `zipCodes` | array | `["2100"]` | Danish postal codes (mode=search) |
| `municipality` | string | – | One of Denmark's 98 municipalities (mode=search) |
| `street` | string | – | Street name filter (mode=search) |
| `estateIds` | array | – | Listing IDs to fetch (mode=byIds) |
| `minPrice` / `maxPrice` | int | – | Price range in DKK |
| `propertyTypes` | array | – | Villa, Rækkehus, Ejerlejlighed, Fritidshus, Andelsbolig, Landejendom, Helårsgrund, Fritidsgrund, Villalejlighed, Andet |
| `minRooms` / `maxRooms` | int | – | Room count range |
| `minSize` / `maxSize` | int | – | Living area range in m² |
| `minBuildYear` / `maxBuildYear` | int | – | Build year range |
| `sort` | string | `date-d` | `date-d/a`, `price-d/a`, `size-d/a`, `sqmprice-d/a`, `roi-d/a`, `createdDate-d/a` |
| `maxItems` | int | `50` | Hard cap on returned listings (1–1000) |

#### Example: apartments for sale in Copenhagen under 4M DKK

```json
{
  "mode": "search",
  "zipCodes": ["2100", "2200"],
  "propertyTypes": ["3"],
  "maxPrice": 4000000,
  "sort": "price-a",
  "maxItems": 50
}
````

#### Example: houses in a specific municipality with 3+ rooms

```json
{
  "mode": "search",
  "municipality": "751",
  "propertyTypes": ["1"],
  "minRooms": 3,
  "minSize": 100,
  "maxItems": 100
}
```

#### Example: newly built summer houses nationwide

```json
{
  "mode": "search",
  "propertyTypes": ["4"],
  "minBuildYear": 2015,
  "sort": "createdDate-d",
  "maxItems": 50
}
```

#### Example: recently sold villas in Aarhus

```json
{
  "mode": "sold",
  "municipality": "751",
  "propertyTypes": ["1"],
  "sort": "date-d",
  "maxItems": 50
}
```

#### Example: fetch specific listings by ID

```json
{
  "mode": "byIds",
  "estateIds": ["2331454", "2331455"]
}
```

### Use cases

- **Real estate market research** — track asking prices and price-per-m² across postal codes or municipalities
- **PropTech products** — feed live Danish listing data into valuation or search tools
- **Relocation services** — surface listings matching a client's location, budget, and size criteria
- **Investment analysis** — filter by return-on-investment sort order to find yield opportunities
- **Lead generation for agents** — monitor new listings and price changes in a target area

### FAQ

**What data source does this use?**
The actor reads boliga.dk's own public listing search, the same data shown to visitors on the site.

**Is this affiliated with Boliga?**
No. This is an independent, third-party actor built against Boliga's publicly accessible listing data.

**Why do some listings have fewer fields than others?**
Boliga's brokers control what they publish — a building plot (Helårsgrund/Fritidsgrund) has no `size`/`rooms`, and some listings omit `energyClass` or `openHouse`. This actor only returns fields with real values; empty fields are omitted rather than sent as `null`.

**What does `mode=sold` add over `mode=search`?**
`mode=sold` searches Boliga's recently-sold register instead of active for-sale listings, using the same location/price/size/rooms/type filters. Each record's `price` field is the final sale price; `soldDate` and `askingPrice` (the originally advertised price) are included when Boliga publishes them, letting you compare asking vs. actual sale price.

**What does `mode=byIds` add over `mode=search`?**
Fetching a listing directly by ID returns extra fields not present in search results: `cadastralNumber` and full broker contact details (`agentPhone`, `agentEmail`, `agentHomepage`, `brokerListingUrl`).

**How current is the data?**
Each run reads live from boliga.dk at request time — there is no caching layer.

**Does `listingUrl` open directly for anyone?**
Yes, in a normal web browser. Like most Danish property sites, boliga.dk sits behind a bot-protection layer that shows a brief automated security check to non-browser traffic (e.g. `curl`); a real browser passes it transparently in under a second. Photo URLs (`photos[]`) are served from a separate, unprotected image CDN and load directly everywhere, including in `<img>` tags.

**Can I search all of Denmark at once?**
Yes — leave `zipCodes`, `municipality`, and `street` all empty to search nationwide, then narrow with price/size/rooms/type filters and `maxItems`.

**Why is `municipality` a dropdown instead of free text?**
Denmark has exactly 98 municipalities; using the fixed list avoids typos that would silently return zero results.

**Why does an occasional listing show a `municipality` that looks off for its city?**
A small share of "for sale by owner" (self-sale) listings on Boliga carry a stale or default municipality code in the source data itself. This actor passes through Boliga's own `municipality` value as-is; it affects roughly 1 in 30 self-sale listings and is a known upstream data quirk, not a filtering error.

# Actor input Schema

## `mode` (type: `string`):

What to fetch.

## `zipCodes` (type: `array`):

Danish postal (zip) codes to search, e.g. `2100` (Copenhagen Ø), `8000` (Aarhus C), `5000` (Odense C). Leave empty together with Municipality/Street to search nationwide. For mode=sold, Boliga's sold-listings feed only supports server-side filtering by Municipality, not postal code -- postal-code filtering there is applied client-side over a bounded scan window, so pair it with Municipality for fast, complete results, or expect a slower/partial scan for a postal code alone.

## `municipality` (type: `string`):

Restrict the search to one Danish municipality (kommune). Combines with postal codes / street if also set.

## `street` (type: `string`):

Restrict results to a specific street name, e.g. `Østerbrogade`. Combine with postal codes to narrow further.

## `estateIds` (type: `array`):

Boliga estate IDs to fetch full details for. Find the ID in any boliga.dk listing URL, e.g. `https://www.boliga.dk/bolig/2331454` -> `2331454`.

## `minPrice` (type: `integer`):

Only include listings priced at or above this amount, in Danish kroner. In mode=sold this filters on the final sale price.

## `maxPrice` (type: `integer`):

Only include listings priced at or below this amount, in Danish kroner. In mode=sold this filters on the final sale price.

## `propertyTypes` (type: `array`):

Filter to specific property types (Boliga's own taxonomy). Leave empty for all.

## `minRooms` (type: `integer`):

Only include listings with at least this many rooms.

## `maxRooms` (type: `integer`):

Only include listings with at most this many rooms.

## `minSize` (type: `integer`):

Only include listings with a living area at or above this size in square meters.

## `maxSize` (type: `integer`):

Only include listings with a living area at or below this size in square meters.

## `minBuildYear` (type: `integer`):

Only include listings built in or after this year.

## `maxBuildYear` (type: `integer`):

Only include listings built in or before this year.

## `sort` (type: `string`):

How Boliga orders the results before the max-items cap is applied.

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

Hard cap on the number of listings returned.

## Actor input object example

```json
{
  "mode": "search",
  "zipCodes": [
    "2100"
  ],
  "estateIds": [],
  "propertyTypes": [],
  "sort": "date-d",
  "maxItems": 50
}
```

# Actor output Schema

## `listings` (type: `string`):

Dataset containing all scraped Boliga property listings.

# 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 = {
    "mode": "search",
    "zipCodes": [
        "2100"
    ],
    "estateIds": [],
    "propertyTypes": [],
    "sort": "date-d",
    "maxItems": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawlerbros/boliga-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 = {
    "mode": "search",
    "zipCodes": ["2100"],
    "estateIds": [],
    "propertyTypes": [],
    "sort": "date-d",
    "maxItems": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("crawlerbros/boliga-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 '{
  "mode": "search",
  "zipCodes": [
    "2100"
  ],
  "estateIds": [],
  "propertyTypes": [],
  "sort": "date-d",
  "maxItems": 50
}' |
apify call crawlerbros/boliga-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Boliga Scraper - Danish Property Listings",
        "description": "Scrape boliga.dk, Denmark's leading property portal. Search for-sale homes, apartments, and land by location, price, size, rooms, property type, and build year. Get price, address, specs, energy label, photos, and agent details.",
        "version": "1.0",
        "x-build-id": "cl4hi8ocOjwOwivGp"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/crawlerbros~boliga-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-crawlerbros-boliga-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/crawlerbros~boliga-scraper/runs": {
            "post": {
                "operationId": "runs-sync-crawlerbros-boliga-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/crawlerbros~boliga-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-crawlerbros-boliga-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",
                "required": [
                    "mode"
                ],
                "properties": {
                    "mode": {
                        "title": "Mode",
                        "enum": [
                            "search",
                            "sold",
                            "byIds"
                        ],
                        "type": "string",
                        "description": "What to fetch.",
                        "default": "search"
                    },
                    "zipCodes": {
                        "title": "Postal codes (mode=search/sold)",
                        "type": "array",
                        "description": "Danish postal (zip) codes to search, e.g. `2100` (Copenhagen Ø), `8000` (Aarhus C), `5000` (Odense C). Leave empty together with Municipality/Street to search nationwide. For mode=sold, Boliga's sold-listings feed only supports server-side filtering by Municipality, not postal code -- postal-code filtering there is applied client-side over a bounded scan window, so pair it with Municipality for fast, complete results, or expect a slower/partial scan for a postal code alone.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "municipality": {
                        "title": "Municipality (mode=search/sold)",
                        "enum": [
                            "101",
                            "147",
                            "151",
                            "153",
                            "155",
                            "157",
                            "159",
                            "161",
                            "163",
                            "165",
                            "167",
                            "169",
                            "173",
                            "175",
                            "183",
                            "185",
                            "187",
                            "190",
                            "201",
                            "210",
                            "217",
                            "219",
                            "223",
                            "230",
                            "240",
                            "250",
                            "253",
                            "259",
                            "260",
                            "265",
                            "269",
                            "270",
                            "306",
                            "316",
                            "320",
                            "326",
                            "329",
                            "330",
                            "336",
                            "340",
                            "350",
                            "360",
                            "370",
                            "376",
                            "390",
                            "400",
                            "410",
                            "420",
                            "430",
                            "440",
                            "450",
                            "461",
                            "479",
                            "480",
                            "482",
                            "492",
                            "510",
                            "530",
                            "540",
                            "550",
                            "561",
                            "563",
                            "573",
                            "575",
                            "580",
                            "607",
                            "615",
                            "621",
                            "630",
                            "657",
                            "661",
                            "665",
                            "671",
                            "706",
                            "707",
                            "710",
                            "727",
                            "730",
                            "740",
                            "741",
                            "746",
                            "751",
                            "756",
                            "760",
                            "766",
                            "773",
                            "779",
                            "787",
                            "791",
                            "810",
                            "813",
                            "820",
                            "825",
                            "840",
                            "846",
                            "849",
                            "851",
                            "860"
                        ],
                        "type": "string",
                        "description": "Restrict the search to one Danish municipality (kommune). Combines with postal codes / street if also set."
                    },
                    "street": {
                        "title": "Street name (mode=search/sold)",
                        "type": "string",
                        "description": "Restrict results to a specific street name, e.g. `Østerbrogade`. Combine with postal codes to narrow further."
                    },
                    "estateIds": {
                        "title": "Listing IDs (mode=byIds)",
                        "type": "array",
                        "description": "Boliga estate IDs to fetch full details for. Find the ID in any boliga.dk listing URL, e.g. `https://www.boliga.dk/bolig/2331454` -> `2331454`.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "minPrice": {
                        "title": "Min price (DKK)",
                        "minimum": 0,
                        "maximum": 200000000,
                        "type": "integer",
                        "description": "Only include listings priced at or above this amount, in Danish kroner. In mode=sold this filters on the final sale price."
                    },
                    "maxPrice": {
                        "title": "Max price (DKK)",
                        "minimum": 0,
                        "maximum": 200000000,
                        "type": "integer",
                        "description": "Only include listings priced at or below this amount, in Danish kroner. In mode=sold this filters on the final sale price."
                    },
                    "propertyTypes": {
                        "title": "Property types",
                        "type": "array",
                        "description": "Filter to specific property types (Boliga's own taxonomy). Leave empty for all.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "1",
                                "2",
                                "3",
                                "4",
                                "5",
                                "6",
                                "7",
                                "8",
                                "9",
                                "10"
                            ],
                            "enumTitles": [
                                "Villa",
                                "Rækkehus (Townhouse)",
                                "Ejerlejlighed (Apartment)",
                                "Fritidshus (Summer house)",
                                "Andelsbolig (Housing co-op)",
                                "Landejendom (Farm / country property)",
                                "Helårsgrund (Building plot)",
                                "Fritidsgrund (Leisure plot)",
                                "Villalejlighed (Villa apartment)",
                                "Andet (Other)"
                            ]
                        },
                        "default": []
                    },
                    "minRooms": {
                        "title": "Min rooms",
                        "minimum": 0,
                        "maximum": 30,
                        "type": "integer",
                        "description": "Only include listings with at least this many rooms."
                    },
                    "maxRooms": {
                        "title": "Max rooms",
                        "minimum": 0,
                        "maximum": 30,
                        "type": "integer",
                        "description": "Only include listings with at most this many rooms."
                    },
                    "minSize": {
                        "title": "Min size (m²)",
                        "minimum": 0,
                        "maximum": 20000,
                        "type": "integer",
                        "description": "Only include listings with a living area at or above this size in square meters."
                    },
                    "maxSize": {
                        "title": "Max size (m²)",
                        "minimum": 0,
                        "maximum": 20000,
                        "type": "integer",
                        "description": "Only include listings with a living area at or below this size in square meters."
                    },
                    "minBuildYear": {
                        "title": "Min build year",
                        "minimum": 1500,
                        "maximum": 2100,
                        "type": "integer",
                        "description": "Only include listings built in or after this year."
                    },
                    "maxBuildYear": {
                        "title": "Max build year",
                        "minimum": 1500,
                        "maximum": 2100,
                        "type": "integer",
                        "description": "Only include listings built in or before this year."
                    },
                    "sort": {
                        "title": "Sort order (mode=search/sold)",
                        "enum": [
                            "date-d",
                            "date-a",
                            "price-d",
                            "price-a",
                            "size-d",
                            "size-a",
                            "sqmprice-d",
                            "sqmprice-a",
                            "roi-d",
                            "roi-a",
                            "createdDate-d",
                            "createdDate-a"
                        ],
                        "type": "string",
                        "description": "How Boliga orders the results before the max-items cap is applied.",
                        "default": "date-d"
                    },
                    "maxItems": {
                        "title": "Max items",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Hard cap on the number of listings returned.",
                        "default": 50
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
