# Batdongsan $1💰 Search By URLs and Keywords (`abotapi/batdongsan-com-vn-scraper`) Actor

From $1/1K. Scrape Batdongsan.com.vn property listings into clean JSON. Search by listing type, property category, and city, or paste a search URL. Automatically paginates and can extract GPS, specs, agent details, dates, and high-resolution photos.

- **URL**: https://apify.com/abotapi/batdongsan-com-vn-scraper.md
- **Developed by:** [AbotAPI](https://apify.com/abotapi) (community)
- **Categories:** Real estate, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/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

## Batdongsan.com.vn Property Scraper

Scrape property listings from **Batdongsan.com.vn**, Vietnam's largest property portal, in clean structured JSON. Pick a listing type, property category and city in Search mode, or paste any batdongsan.com.vn search URL in URL mode. The scraper walks pagination automatically and can open each listing's detail page to pull GPS coordinates, the full specification table, the agent's name and profile, posted and expiry dates, and the high-resolution photo gallery.

### Why this scraper

- **Two input modes.** Search mode (listing type + property category + city) for quick setups, or URL mode to paste a fully filtered batdongsan.com.vn URL straight from your browser.
- **30+ fields per listing.** Title, price, area, bedrooms, bathrooms, location, GPS, agent, photos, posted/expiry dates, and the complete Vietnamese spec table preserved verbatim.
- **Detail enrichment toggle.** Turn it on for GPS + description + agent + specs, or off for fast, low-cost runs with just the listing-card fields.
- **Auto forward pagination.** Give it a city and a page budget; it walks page by page until the budget or the result set is exhausted.
- **Vietnamese price parsing.** "2 tỷ", "1,5 tỷ" and "25 triệu/tháng" are parsed into numeric VND alongside the original text.
- **Deduplicated.** Listings are de-duplicated by ID across pages and across multiple cities in one run.

### Data you get

Example values below are taken from a real listing scraped from the site.

| Field | Example |
| --- | --- |
| `id` | `45763512` |
| `url` | `https://batdongsan.com.vn/ban-can-ho-chung-cu-duong-tran-hung-dao-...-pr45763512` |
| `listingType` | `Buy` |
| `propertyType` | `Apartment` |
| `title` | `Căn hộ cao cấp view trực diện sông Hàn Symphony 5, Giá chỉ từ 2 Tỷ` |
| `priceText` | `Thỏa thuận` |
| `priceValue` | `null` (negotiable; numeric VND when a price is shown, e.g. `3000000000`) |
| `priceUnit` | `Thỏa thuận` |
| `area` | `34` |
| `bedrooms` | `1` |
| `bathrooms` | `1` |
| `direction` | `Đông - Nam` |
| `furniture` | `Không nội thất` |
| `locationText` | `Đà Nẵng` |
| `city` | `Đà Nẵng` |
| `district` | `null` |
| `latitude` | `16.0894295200889` |
| `longitude` | `108.228379644058` |
| `cityCode` | `DDN` |
| `project` | `Symphony 5` |
| `listingTier` | `Tin VIP Kim Cương` |
| `postedDate` | `20/05/2026` |
| `expiryDate` | `04/06/2026` |
| `listingCode` | `45763512` |
| `agentName` | `Bảo Bảo SRT Miền Trung` |
| `agentId` | `5181335` |
| `agentProfileUrl` | `https://guru.batdongsan.com.vn/pa/baobaosrtmientrung` |
| `agentPhone` | `null` (revealed on the site via a click; see notes below) |
| `specs` | `{ "Diện tích": "34 m²", "Số phòng ngủ": "1 phòng", "Hướng nhà": "Đông - Nam", ... }` |
| `imageCount` | `24` |
| `images` | `[ "https://file4.batdongsan.com.vn/resize/1275x717/.../...-ca65_wm.jpg", ... ]` |
| `scrapedAt` | `2026-05-26T00:00:00.000Z` |

The full Vietnamese specification table is preserved verbatim under `specs`, so any field batdongsan adds in the future flows through without code changes.

### How to use

#### 1. Search mode, basic (apartments for sale in Ho Chi Minh City)

```json
{
  "mode": "search",
  "listingType": "Buy",
  "propertyType": "Apartment",
  "locations": ["tp-hcm"],
  "maxPages": 5,
  "fetchDetails": true,
  "proxy": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "VN" }
}
````

#### 2. Search mode, multiple cities, fast (no detail pages)

```json
{
  "mode": "search",
  "listingType": "Buy",
  "propertyType": "PrivateHouse",
  "locations": ["ha-noi", "da-nang", "can-tho"],
  "maxPages": 3,
  "fetchDetails": false,
  "proxy": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "VN" }
}
```

#### 3. Search mode, rentals

```json
{
  "mode": "search",
  "listingType": "Rent",
  "propertyType": "Apartment",
  "locations": ["tp-hcm"],
  "maxPages": 5,
  "maxListings": 100,
  "proxy": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "VN" }
}
```

#### 4. URL mode, paste browser-filtered URLs (multiple)

Apply price, area or bedroom filters on batdongsan.com.vn in your browser, then paste the resulting URLs here. Each URL is paginated forward from where it points.

```json
{
  "mode": "url",
  "urls": [
    "https://batdongsan.com.vn/ban-can-ho-chung-cu-tp-hcm",
    "https://batdongsan.com.vn/cho-thue-van-phong-ha-noi/p2"
  ],
  "maxPages": 4,
  "fetchDetails": true,
  "proxy": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "VN" }
}
```

### Input parameters

| Parameter | Type | Default | Description |
| --- | --- | --- | --- |
| `mode` | string | `search` | `search` = pick type + category + city below. `url` = paste batdongsan.com.vn URLs. |
| `listingType` | string | `Buy` | `Buy` (Bán) or `Rent` (Cho thuê). Search mode only. |
| `propertyType` | string | `Apartment` | All, Apartment, PrivateHouse, TownHouse, Villa, Land, ProjectLand, Office, Shop, Warehouse. Search mode only. |
| `locations` | array | `["tp-hcm"]` | Province slugs (`tp-hcm`, `ha-noi`, `da-nang`) or common names (`Ho Chi Minh`, `Hanoi`), slugified automatically. Empty = nationwide. Search mode only. |
| `urls` | array | (example) | Full batdongsan.com.vn search URLs. URL mode only. A trailing `/pN` starts at page N. |
| `maxPages` | integer | `5` | Result pages to walk per city / URL. Roughly 20 to 30 listings per page. |
| `maxListings` | integer | `0` | Hard cap across the whole run. `0` = unlimited (bounded by `maxPages`). |
| `fetchDetails` | boolean | `true` | Visit each detail page for GPS, description, agent, specs, dates. Turn off for faster, cheaper runs. |
| `proxy` | object | VN residential | Proxy configuration. Vietnam residential is required for reliable results. |

#### Notes on filters and the agent phone

- **Price, area, bedroom and sort filters** are applied on batdongsan.com.vn through a form, not through the address bar, so they cannot be set as Search-mode fields. To use them, apply them in your browser and paste the resulting URL in URL mode.
- **Agent phone numbers** are revealed on the site through a click action rather than printed in the page, so `agentPhone` is often `null`. The `agentName`, `agentId` and `agentProfileUrl` fields are always captured when present, and the `agentProfileUrl` page lists the agent's other contact details.

### Output example

```json
{
  "id": "45763512",
  "url": "https://batdongsan.com.vn/ban-can-ho-chung-cu-duong-tran-hung-dao-phuong-nai-hien-dong-symphony-5/so-huu-view-song-han-chi-2-ty-tien-inh-cao-10-nam-du-an-5-pr45763512",
  "listingType": "Buy",
  "propertyType": "Apartment",
  "title": "Căn hộ cao cấp view trực diện sông Hàn Symphony 5, Giá chỉ từ 2 Tỷ, Khai Thác Dòng Tiền 12%/Năm.",
  "priceText": "Thỏa thuận",
  "priceValue": null,
  "priceUnit": "Thỏa thuận",
  "area": 34,
  "bedrooms": 1,
  "bathrooms": 1,
  "direction": "Đông - Nam",
  "furniture": "Không nội thất",
  "locationText": "Đà Nẵng",
  "city": "Đà Nẵng",
  "latitude": 16.0894295200889,
  "longitude": 108.228379644058,
  "cityCode": "DDN",
  "project": "Symphony 5",
  "listingTier": "Tin VIP Kim Cương",
  "postedDate": "20/05/2026",
  "expiryDate": "04/06/2026",
  "listingCode": "45763512",
  "agentName": "Bảo Bảo SRT Miền Trung",
  "agentId": "5181335",
  "agentProfileUrl": "https://guru.batdongsan.com.vn/pa/baobaosrtmientrung",
  "specs": {
    "Khoảng giá": "Thỏa thuận",
    "Diện tích": "34 m²",
    "Số phòng ngủ": "1 phòng",
    "Số phòng tắm, vệ sinh": "1 phòng",
    "Hướng nhà": "Đông - Nam"
  },
  "imageCount": 24,
  "images": ["https://file4.batdongsan.com.vn/resize/1275x717/2026/05/25/20260525224254-ca65_wm.jpg"],
  "scrapedAt": "2026-05-26T00:00:00.000Z"
}
```

### Plan requirement

Batdongsan.com.vn only serves traffic from Vietnam-reachable connections, so a **Vietnam residential proxy is required**. The default proxy configuration uses Apify Residential pinned to country `VN`.

- **Paid Apify plans** (Starter and above) include residential proxy access; keep the default and the actor runs as-is.
- **Free Apify plans** do not include residential proxy. Either upgrade your plan, or uncheck "Use Apify proxy" and paste your own Vietnam residential proxy URLs in the proxy field.

If a run returns zero items, the exit IP was likely flagged: re-run for a fresh IP, and keep the proxy country pinned to `VN`.

# Actor input Schema

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

Search mode = pick listing type (buy/rent) + property type + city below. URL mode = paste any batdongsan.com.vn search URL already refined in a browser (recommended for price, area, or bedroom filters, since batdongsan encodes those into the URL only after you interact with the on-page filter panel).

## `listingType` (type: `string`):

Bán (Buy) or Cho thuê (Rent). Search mode only.

## `propertyType` (type: `string`):

What kind of property to search for. Maps to a batdongsan.com.vn category. Search mode only. Note: some categories exist in only one direction on batdongsan, Office is rent-only, while Land, Project land, and Warehouse are buy-only. Picking the unavailable direction returns no results.

## `locations` (type: `array`):

One or more Vietnamese provinces/cities. Use the batdongsan slug (tp-hcm, ha-noi, da-nang, hai-phong, can-tho) or a common name ("Ho Chi Minh", "Hanoi", "Da Nang"), which is slugified automatically. Leave empty for a nationwide search. Search mode only.

## `urls` (type: `array`):

One or more full batdongsan.com.vn search URLs. Tip: open batdongsan.com.vn in your browser, pick listing type + property type + city + any price/area/bedroom filters, then paste the resulting URL here. Multi-URL supported. Filter-mode fields are ignored. If a URL ends with `/pN`, scraping starts at page N and walks forward.

## `maxPages` (type: `integer`):

How many result pages to walk per city / URL. Batdongsan returns roughly 20 to 30 listings per page.

## `maxListings` (type: `integer`):

Hard cap across the whole run. 0 = unlimited (bounded only by Max pages).

## `fetchDetails` (type: `boolean`):

Adds GPS latitude/longitude, full description, agent name + phone + profile link, the full specification table, posted date, expiry date, and listing code. Turn off for a faster, cheaper run with just the SERP-level fields (title, price, area, bedrooms, location, primary photo).

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

Vietnam residential proxy is strongly recommended (default). Batdongsan only serves traffic from Vietnam-reachable connections, so a VN residential exit is required for reliable results.

## Actor input object example

```json
{
  "mode": "search",
  "listingType": "Buy",
  "propertyType": "Apartment",
  "locations": [
    "tp-hcm"
  ],
  "urls": [
    "https://batdongsan.com.vn/ban-can-ho-chung-cu-tp-hcm"
  ],
  "maxPages": 1,
  "maxListings": 0,
  "fetchDetails": true,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "VN"
  }
}
```

# 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 = {
    "locations": [
        "tp-hcm"
    ],
    "urls": [
        "https://batdongsan.com.vn/ban-can-ho-chung-cu-tp-hcm"
    ],
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "VN"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("abotapi/batdongsan-com-vn-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 = {
    "locations": ["tp-hcm"],
    "urls": ["https://batdongsan.com.vn/ban-can-ho-chung-cu-tp-hcm"],
    "proxy": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "VN",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("abotapi/batdongsan-com-vn-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 '{
  "locations": [
    "tp-hcm"
  ],
  "urls": [
    "https://batdongsan.com.vn/ban-can-ho-chung-cu-tp-hcm"
  ],
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "VN"
  }
}' |
apify call abotapi/batdongsan-com-vn-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Batdongsan $1💰 Search By URLs and Keywords",
        "description": "From $1/1K. Scrape Batdongsan.com.vn property listings into clean JSON. Search by listing type, property category, and city, or paste a search URL. Automatically paginates and can extract GPS, specs, agent details, dates, and high-resolution photos.",
        "version": "1.0",
        "x-build-id": "LtYd9fonvYavFFnXk"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/abotapi~batdongsan-com-vn-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-abotapi-batdongsan-com-vn-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/abotapi~batdongsan-com-vn-scraper/runs": {
            "post": {
                "operationId": "runs-sync-abotapi-batdongsan-com-vn-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/abotapi~batdongsan-com-vn-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-abotapi-batdongsan-com-vn-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": {
                    "mode": {
                        "title": "1. Search mode",
                        "enum": [
                            "search",
                            "url"
                        ],
                        "type": "string",
                        "description": "Search mode = pick listing type (buy/rent) + property type + city below. URL mode = paste any batdongsan.com.vn search URL already refined in a browser (recommended for price, area, or bedroom filters, since batdongsan encodes those into the URL only after you interact with the on-page filter panel).",
                        "default": "search"
                    },
                    "listingType": {
                        "title": "Buy or rent? (Search mode)",
                        "enum": [
                            "Buy",
                            "Rent"
                        ],
                        "type": "string",
                        "description": "Bán (Buy) or Cho thuê (Rent). Search mode only.",
                        "default": "Buy"
                    },
                    "propertyType": {
                        "title": "Property type (Search mode)",
                        "enum": [
                            "All",
                            "Apartment",
                            "PrivateHouse",
                            "TownHouse",
                            "Villa",
                            "Land",
                            "ProjectLand",
                            "Office",
                            "Warehouse"
                        ],
                        "type": "string",
                        "description": "What kind of property to search for. Maps to a batdongsan.com.vn category. Search mode only. Note: some categories exist in only one direction on batdongsan, Office is rent-only, while Land, Project land, and Warehouse are buy-only. Picking the unavailable direction returns no results.",
                        "default": "Apartment"
                    },
                    "locations": {
                        "title": "Cities / provinces to search (Search mode)",
                        "type": "array",
                        "description": "One or more Vietnamese provinces/cities. Use the batdongsan slug (tp-hcm, ha-noi, da-nang, hai-phong, can-tho) or a common name (\"Ho Chi Minh\", \"Hanoi\", \"Da Nang\"), which is slugified automatically. Leave empty for a nationwide search. Search mode only.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "urls": {
                        "title": "Search URLs (URL mode)",
                        "type": "array",
                        "description": "One or more full batdongsan.com.vn search URLs. Tip: open batdongsan.com.vn in your browser, pick listing type + property type + city + any price/area/bedroom filters, then paste the resulting URL here. Multi-URL supported. Filter-mode fields are ignored. If a URL ends with `/pN`, scraping starts at page N and walks forward.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxPages": {
                        "title": "Max pages per search",
                        "minimum": 1,
                        "maximum": 500,
                        "type": "integer",
                        "description": "How many result pages to walk per city / URL. Batdongsan returns roughly 20 to 30 listings per page.",
                        "default": 1
                    },
                    "maxListings": {
                        "title": "Max total listings",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Hard cap across the whole run. 0 = unlimited (bounded only by Max pages).",
                        "default": 0
                    },
                    "fetchDetails": {
                        "title": "Visit each listing's detail page",
                        "type": "boolean",
                        "description": "Adds GPS latitude/longitude, full description, agent name + phone + profile link, the full specification table, posted date, expiry date, and listing code. Turn off for a faster, cheaper run with just the SERP-level fields (title, price, area, bedrooms, location, primary photo).",
                        "default": true
                    },
                    "proxy": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Vietnam residential proxy is strongly recommended (default). Batdongsan only serves traffic from Vietnam-reachable connections, so a VN residential exit is required for reliable results."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
