# iProperty MY Scraper - Properties, Prices, Agents & Photos (`abotapi/iproperty-com-my-scraper`) Actor

Scrape property listings from iProperty.com.my for sale or rent: price, PSF, bedrooms, bathrooms, floor area, tenure, property type, full address, agent (name, license, agency, contact numbers) and photo gallery. Search and URL modes, filters, 8 sort orders, and optional detail enrichment.

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

## Pricing

from $1.00 / 1,000 listing 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

## iProperty.com.my Scraper

Pull structured property listings from iProperty.com.my at scale. Search by channel (for sale or for rent), location and filters, or paste any iProperty.com.my search or listing URL, and get a clean record per property with price, price type, price-per-square-foot, bedrooms, bathrooms, floor area, tenure, property type, the full address with region / district / area, the photo gallery, the listing agent (name, license, verified status, profile) and agency, and the aggregate agent rating. Two modes (search and URL), 8 sort orders, and location, property-type, price and bedroom filters. An optional detail pass adds the full property description, map coordinates, and the listing agent's contact numbers.

### Why This Scraper?

- ~50 fields per listing, including price type (e.g. Negotiable), price-per-square-foot, tenure, the full photo gallery and the agent / agency profile.
- Two ways in: build a search from channel + location + filters, or paste search and listing URLs directly. Filter fields are ignored in URL mode so pasted links are used as-is.
- 8 sort orders (price, date, bedrooms, built-up size) and location, property-type, price and bedroom filters.
- Optional detail enrichment adds the full property description, the map coordinates (latitude / longitude), and the listing agent's contact numbers.
- One simple cap: set Max items and the run stops there once enough results are collected.
- Export results straight into Notion, Linear, Airtable or Apify via MCP connectors, without touching the dataset.

### A note on agent reviews

iProperty.com.my does **not** publish per-comment agent reviews on its public pages. There is no list of individual review texts to scrape. The only review signal the public site exposes is an **aggregate agent rating**, returned here as `agentRating` with `reviewCount` and `ratingAverage` (these are commonly `0`). This scraper returns that aggregate and does not invent per-comment reviews.

The listing agent's direct phone number is gated behind an on-page verification step and is not present in the page data, so `agent.phone` is intentionally left out rather than guessed.

### Data You Get

> Sample shape - values are illustrative placeholders, not from a live listing.

| Field | Example |
| --- | --- |
| listingId | 501630772 |
| title | Taman Wawasan, Puchong |
| propertyType | 2-storey Terraced House |
| priceValue | 750000 |
| pricePretty | RM 750,000 |
| priceType | Negotiable |
| psf | RM 535.71 psf |
| bedrooms | 4 |
| bathrooms | 3 |
| floorArea | 1800 |
| tenure | Freehold |
| fullAddress | Jalan Wawasan, Taman Wawasan, Puchong, Selangor |
| agent.name | Example Agent |
| agent.license | REN 00000 |
| agency.name | Example Realty Sdn. Bhd. |
| agentRating | { reviewCount: 0, ratingAverage: 0 } |
| imageCount | 6 |
| thumbnail | https://example-cdn/listing/501630772/thumb.jpg |
| url | https://www.iproperty.com.my/property/puchong/taman-wawasan/sale-501630772/ |

Detail fields (when Fetch full details is on): `description`, `latitude`, `longitude`, `agentPhone`, `agentContacts`.

### How to Use

Search for sale in a location:

```json
{
  "mode": "search",
  "channel": "sale",
  "location": "kuala-lumpur",
  "sortBy": "price_asc",
  "maxItems": 50
}
````

Filter by price and bedrooms:

```json
{
  "mode": "search",
  "channel": "sale",
  "priceMin": 300000,
  "priceMax": 800000,
  "bedrooms": 3,
  "maxItems": 100
}
```

Paste iProperty.com.my URLs (filters ignored):

```json
{
  "mode": "url",
  "urls": [
    "https://www.iproperty.com.my/property-for-rent"
  ],
  "fetchDetails": true,
  "maxItems": 80
}
```

### Input Parameters

| Parameter | Type | Description |
| --- | --- | --- |
| mode | string | `search` (build a search from channel + location + filters) or `url` (use pasted URLs). |
| channel | string | `sale` or `rent`. |
| location | string | Optional location slug to narrow the search. Empty = whole country. |
| propertyType | string | Optional property-type filter. |
| priceMin | integer | Minimum price (MYR). |
| priceMax | integer | Maximum price (MYR). |
| bedrooms | integer | Minimum number of bedrooms. |
| sortBy | string | One of 8 sort orders (price, date, bedrooms, built-up size). |
| urls | array | iProperty.com.my search or listing URLs (URL mode). |
| fetchDetails | boolean | Visit each listing page for the full description, map coordinates and agent contact numbers. |
| maxItems | integer | The single cap on the run. 0 = unlimited. Default 20. |
| maxPages | integer | Optional safety bound on pages per search. Empty = unlimited; the run stops at Max items. |
| proxy | object | Proxy configuration. Apify Residential recommended. |
| maxResidentialMB | integer | Residential traffic budget in MB. Caps how much residential traffic a run may use; the run keeps working as long as the site still serves results. 0 = unlimited. |
| mcpConnectors | array | Optional MCP connectors to pipe results into (Notion, Linear, Airtable, Apify). |
| notionParentPageUrl | string | Notion parent page URL/id for the Notion connector. |
| maxNotifyListings | integer | Cap on items written to each connector per run. |

### Send results into your apps (MCP connectors)

Optionally pipe each run's results into the tools you already use through Model Context Protocol (MCP) connectors. Authorize a connector under Apify, Settings, API & Integrations, then select it in `mcpConnectors`. Notion receives a rich page per listing (set `notionParentPageUrl`); Linear, Airtable and Apify get a best-effort write or digest. The MCP export never changes the dataset and never fails the run; `maxNotifyListings` caps how many items go to each connector.

### Output Example

> Sample shape - values are illustrative placeholders, not from a live listing.

```json
{
  "listingId": 501630772,
  "url": "https://www.iproperty.com.my/property/puchong/taman-wawasan/sale-501630772/",
  "title": "Taman Wawasan, Puchong",
  "propertyType": "2-storey Terraced House",
  "typeText": "For Sale",
  "price": { "value": 750000, "pretty": "RM 750,000", "currency": "MYR", "type": "Negotiable" },
  "priceValue": 750000,
  "pricePerArea": "RM 416.67 psf",
  "psf": "RM 535.71 psf",
  "bedrooms": 4,
  "bathrooms": 3,
  "floorArea": 1800,
  "tenure": "Freehold",
  "location": { "area": "Taman Wawasan", "district": "Puchong", "region": "Selangor" },
  "fullAddress": "Jalan Wawasan, Taman Wawasan, Puchong, Selangor",
  "agent": { "id": 0, "name": "Example Agent", "license": "REN 00000", "isVerified": true, "profileUrl": "https://www.iproperty.com.my/property-agent/example-0/" },
  "agency": { "id": 0, "name": "Example Realty Sdn. Bhd." },
  "agentRating": { "reviewCount": 0, "ratingAverage": 0 },
  "images": ["https://example-cdn/listing/501630772/photo-1.jpg"],
  "imageCount": 6,
  "thumbnail": "https://example-cdn/listing/501630772/thumb.jpg",
  "description": "Full property description (when Fetch full details is on).",
  "latitude": 3.03671,
  "longitude": 101.61808,
  "source": "iproperty.com.my",
  "scrapedAt": "2024-01-01T00:00:00+00:00"
}
```

### Plan Requirement

Runs on any Apify plan. This site serves best on residential connections, so set the proxy to Apify Residential for reliable results (Residential access is included on the Starter plan and higher). Datacenter and free-tier connections are commonly rejected and will return zero items; if you run on datacenter, a free tier or a non-residential connection the run logs a warning before spending compute.

#### Reliability

- Built for resilient, unattended runs: transient errors are recovered automatically so a run keeps working without manual intervention.
- Residential traffic budget: set `maxResidentialMB` to cap residential spend. The run keeps returning results as long as the site still serves them, and will not silently drop to zero. 0 = unlimited.

# Actor input Schema

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

How to start the scrape. 'search' builds a search from the channel, location and filters below. 'url' walks the iProperty.com.my search or listing URLs you paste (search filters below are ignored in URL mode).

## `channel` (type: `string`):

Search properties for sale or for rent.

## `location` (type: `string`):

Optional location slug to narrow the search (e.g. 'kuala-lumpur', 'selangor', 'petaling-jaya'). Leave empty to search the whole country.

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

Optional property type filter (e.g. 'condo', 'terrace', 'bungalow'). Leave empty for all types.

## `priceMin` (type: `integer`):

Only return listings priced at or above this amount.

## `priceMax` (type: `integer`):

Only return listings priced at or below this amount.

## `bedrooms` (type: `integer`):

Only return listings with at least this many bedrooms.

## `sortBy` (type: `string`):

Order the results are returned in.

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

Paste iProperty.com.my search URLs (https://www.iproperty.com.my/property-for-sale...) or listing URLs (https://www.iproperty.com.my/property/.../sale-<id>/). Multiple URLs supported; search filters are ignored.

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

Visit each listing page to add the full property description and map coordinates (latitude / longitude). Slower and adds a small per-item charge; leave off for fast basic listings.

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

The single cap on this run: stop after collecting this many listings (across all searches/URLs). Set 0 for unlimited.

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

Optional safety bound on how many result pages to include per search. Defaults to unlimited (leave empty or set 0) and does NOT cap the run; it defers to Max items, which is the single cap. The run stops at Max items, not here.

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

Use an Apify Residential proxy for reliable results.

## `maxResidentialMB` (type: `integer`):

When using a Residential proxy group, cap residential traffic at this many MB. The run keeps returning results as long as the site still serves them, and will not silently drop to zero. 0 = unlimited.

## `mcpConnectors` (type: `array`):

Optionally send results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize one under Apify, Settings, API & Integrations, then select it here. Notion gets a rich page-per-item export; other connectors get a best-effort write/digest. Leave empty to skip; never changes the dataset output. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com).

## `notionParentPageUrl` (type: `string`):

URL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors.

## `maxNotifyListings` (type: `integer`):

Cap on items written to each connector per run. Does not affect the dataset.

## Actor input object example

```json
{
  "mode": "search",
  "channel": "sale",
  "sortBy": "relevance",
  "urls": [
    "https://www.iproperty.com.my/property-for-sale"
  ],
  "fetchDetails": false,
  "maxItems": 20,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "MY"
  },
  "maxResidentialMB": 0,
  "maxNotifyListings": 50
}
```

# 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 = {
    "urls": [
        "https://www.iproperty.com.my/property-for-sale"
    ],
    "maxItems": 20,
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "MY"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("abotapi/iproperty-com-my-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 = {
    "urls": ["https://www.iproperty.com.my/property-for-sale"],
    "maxItems": 20,
    "proxy": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "MY",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("abotapi/iproperty-com-my-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 '{
  "urls": [
    "https://www.iproperty.com.my/property-for-sale"
  ],
  "maxItems": 20,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "MY"
  }
}' |
apify call abotapi/iproperty-com-my-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "iProperty MY Scraper - Properties, Prices, Agents & Photos",
        "description": "Scrape property listings from iProperty.com.my for sale or rent: price, PSF, bedrooms, bathrooms, floor area, tenure, property type, full address, agent (name, license, agency, contact numbers) and photo gallery. Search and URL modes, filters, 8 sort orders, and optional detail enrichment.",
        "version": "1.0",
        "x-build-id": "JbW5GzWRqveyCW4d2"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/abotapi~iproperty-com-my-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-abotapi-iproperty-com-my-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~iproperty-com-my-scraper/runs": {
            "post": {
                "operationId": "runs-sync-abotapi-iproperty-com-my-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~iproperty-com-my-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-abotapi-iproperty-com-my-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",
                            "url"
                        ],
                        "type": "string",
                        "description": "How to start the scrape. 'search' builds a search from the channel, location and filters below. 'url' walks the iProperty.com.my search or listing URLs you paste (search filters below are ignored in URL mode).",
                        "default": "search"
                    },
                    "channel": {
                        "title": "Channel",
                        "enum": [
                            "sale",
                            "rent"
                        ],
                        "type": "string",
                        "description": "Search properties for sale or for rent.",
                        "default": "sale"
                    },
                    "location": {
                        "title": "Location",
                        "type": "string",
                        "description": "Optional location slug to narrow the search (e.g. 'kuala-lumpur', 'selangor', 'petaling-jaya'). Leave empty to search the whole country."
                    },
                    "propertyType": {
                        "title": "Property type",
                        "type": "string",
                        "description": "Optional property type filter (e.g. 'condo', 'terrace', 'bungalow'). Leave empty for all types."
                    },
                    "priceMin": {
                        "title": "Minimum price (MYR)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Only return listings priced at or above this amount."
                    },
                    "priceMax": {
                        "title": "Maximum price (MYR)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Only return listings priced at or below this amount."
                    },
                    "bedrooms": {
                        "title": "Minimum bedrooms",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Only return listings with at least this many bedrooms."
                    },
                    "sortBy": {
                        "title": "Sort by",
                        "enum": [
                            "relevance",
                            "date_desc",
                            "date_asc",
                            "price_desc",
                            "price_asc",
                            "bedroom_desc",
                            "bedroom_asc",
                            "size_desc"
                        ],
                        "type": "string",
                        "description": "Order the results are returned in.",
                        "default": "relevance"
                    },
                    "urls": {
                        "title": "iProperty.com.my URLs",
                        "type": "array",
                        "description": "Paste iProperty.com.my search URLs (https://www.iproperty.com.my/property-for-sale...) or listing URLs (https://www.iproperty.com.my/property/.../sale-<id>/). Multiple URLs supported; search filters are ignored.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "fetchDetails": {
                        "title": "Fetch full details",
                        "type": "boolean",
                        "description": "Visit each listing page to add the full property description and map coordinates (latitude / longitude). Slower and adds a small per-item charge; leave off for fast basic listings.",
                        "default": false
                    },
                    "maxItems": {
                        "title": "Max items",
                        "minimum": 0,
                        "type": "integer",
                        "description": "The single cap on this run: stop after collecting this many listings (across all searches/URLs). Set 0 for unlimited.",
                        "default": 20
                    },
                    "maxPages": {
                        "title": "Max pages per search",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Optional safety bound on how many result pages to include per search. Defaults to unlimited (leave empty or set 0) and does NOT cap the run; it defers to Max items, which is the single cap. The run stops at Max items, not here."
                    },
                    "proxy": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Use an Apify Residential proxy for reliable results.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ],
                            "apifyProxyCountry": "MY"
                        }
                    },
                    "maxResidentialMB": {
                        "title": "Residential traffic budget (MB)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "When using a Residential proxy group, cap residential traffic at this many MB. The run keeps returning results as long as the site still serves them, and will not silently drop to zero. 0 = unlimited.",
                        "default": 0
                    },
                    "mcpConnectors": {
                        "title": "Pipe results into your apps (optional)",
                        "type": "array",
                        "description": "Optionally send results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize one under Apify, Settings, API & Integrations, then select it here. Notion gets a rich page-per-item export; other connectors get a best-effort write/digest. Leave empty to skip; never changes the dataset output. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com)."
                    },
                    "notionParentPageUrl": {
                        "title": "Notion parent page (Notion connector only)",
                        "type": "string",
                        "description": "URL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors."
                    },
                    "maxNotifyListings": {
                        "title": "Max items to export per connector",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Cap on items written to each connector per run. Does not affect the dataset.",
                        "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
