# PropertyGuru Singapore Scraper (`alwaysprimedev/propertyguru-singapore-scraper`) Actor

Scrape sale and rental listings from propertyguru.com.sg — price, size, bedrooms, location, agent contact, photos, MRT distances, and more. Returns clean structured JSON / CSV / Excel.

- **URL**: https://apify.com/alwaysprimedev/propertyguru-singapore-scraper.md
- **Developed by:** [Always Prime](https://apify.com/alwaysprimedev) (community)
- **Categories:** SEO tools, Real estate, Developer tools
- **Stats:** 9 total users, 5 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.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.

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

### 🏠 PropertyGuru Singapore Scraper

Get every public listing on **propertyguru.com.sg** as clean structured data — price, size, bedrooms, location, agent contact, photos, MRT distances, descriptions, more. Returns JSON, CSV, or Excel.

![Apify](https://img.shields.io/badge/Apify-Actor-blue) ![Python](https://img.shields.io/badge/Python-3.11-yellow) ![Output](https://img.shields.io/badge/Output-JSON%20%7C%20CSV%20%7C%20XLSX-green)

> ⚡️ ~0.7 s per listing, 256 MB RAM, no browser. Built on PropertyGuru's own `__NEXT_DATA__` payload — same data the site renders to itself.

---

#### ✨ Why this scraper

- 🎯 **Every monetizable field** — price, PSF, bedrooms, floor & land area, tenure, district, lat/lon, agent name + CEA license + mobile, agency, 19+ photos, floor plans, MRT walk times, full description.
- 🚀 **Fast and cheap** — pure HTTP with browser TLS fingerprinting. 5× the throughput of a Playwright-based scraper at 1/8th the memory.
- 🔁 **Incremental friendly** — pass a `since` timestamp and the actor skips listings posted before it, so daily refresh runs only pay for what's new.
- 🧩 **No glue code needed** — push the output straight into BigQuery, Postgres, Notion, Make, n8n, Sheets — every field is typed and the dataset table view is pre-configured.

---

#### 🚀 Quick start

1. Click **Try for free** above.
2. Pick `searchType: sale` or `rent`, optionally narrow by district / price / bedrooms.
3. Hit **Start**.
4. Download as JSON, CSV, or Excel from the **Output** tab.

That's it. No accounts, no proxies, no anti-bot tinkering.

---

#### 🎛️ Input

| Field | Type | What it does |
|---|---|---|
| `searchType` | `sale` \| `rent` | Choose properties for sale or for rent. Default: `sale`. |
| `freetext` | string | Search by project / street / area name (e.g. `"Tanjong Pagar"`). |
| `districts` | string list | Restrict to specific SG districts (`D09`, `D10`, …). |
| `propertyTypeCodes` | string list | Restrict by type — `APT`, `CONDO`, `HDB`, `SEMI`, `TERR`, `BUNG`, `EXEC`, `LAND`. |
| `minPrice` / `maxPrice` | int | Price bounds in SGD. For rentals, monthly rent. |
| `bedrooms` | string list | Bedroom counts to include (`"2"`, `"3"`; use `"0"` for studio). |
| `sortBy` | enum | `default` (relevance), `price_low`, `price_high`. |
| `since` | datetime | Only listings posted after this moment — for incremental refreshes. |
| `scrapeDetails` | bool | Off = URL-only mode (~10× cheaper, fast diff runs). On (default) = full record. |
| `maxItems` | int | Cap on records. `0` = unlimited. Default: `50`. |
| `concurrency` | int | Parallel detail fetches. Default: `5`. Max: `25`. |
| `startUrls` | URL list | Advanced override: feed your own already-built PG search URLs. |

---

#### 📦 Sample output (one listing)

```json
{
  "url": "https://www.propertyguru.com.sg/listing/for-sale-the-lakeshore-500140099",
  "id": "500140099",
  "scraped_at": "2026-05-15T08:34:46+00:00",
  "listingType": "SALE",
  "propertyType": "Condominium",
  "propertyTypeCode": "CONDO",
  "propertyTypeGroup": "N",
  "title": "The Lakeshore",
  "headline": "Lakeshore 3-Bedroom · Pool View · Vacant",
  "description": "Spacious 1,109 sqft 3-bedroom unit with unobstructed pool views...",
  "price": 1688000,
  "pricePretty": "S$ 1,688,000",
  "currency": "SGD",
  "bedrooms": 3,
  "bathrooms": 2,
  "floorArea": 1109,
  "floorAreaPsf": 1522.09,
  "landArea": null,
  "landAreaPsf": null,
  "tenure": "L99",
  "tenureText": "99-year Leasehold",
  "isVerified": true,
  "qualityScore": 98,
  "statusCode": "ACT",
  "datePosted": "2026-05-13T09:21:04",
  "dateCreated": "2026-04-22T11:08:30",
  "dateExpires": "2026-07-21T23:59:59",
  "address": {
    "streetName": "Lakeshore Drive",
    "fullAddress": "1 Lakeshore Drive",
    "postcode": "648292",
    "districtCode": "D22",
    "districtText": "Boon Lay / Jurong / Tuas",
    "lat": 1.3411,
    "lon": 103.7129
  },
  "agent": {
    "id": 88012,
    "name": "Keith Low",
    "license": "R047251D",
    "mobile": "+6593690168",
    "jobTitle": "Senior Marketing Director",
    "profileUrl": "https://www.propertyguru.com.sg/agent/keith-low-88012",
    "avatar": "https://sg1-cdn.pgimgs.com/agent/88012/APHO.../V120B.png"
  },
  "agency": {
    "id": 4619,
    "name": "ERA REALTY NETWORK PTE LTD",
    "license": "L3002382K"
  },
  "images": [
    {"src": "https://sg1-cdn.pgimgs.com/listing/500140099/.../V800/...jpg",
     "caption": "Living Room"}
  ],
  "floorPlans": [],
  "virtualTours": [],
  "mainImage": "https://sg1-cdn.pgimgs.com/listing/500140099/.../V800/...jpg",
  "poiMrt": [
    {"name": "EW27 Boon Lay MRT Station", "distanceKm": 0.41,
     "walkingDistanceKm": 0.45, "walkingDurationMins": 6}
  ],
  "poiSchool": []
}
````

***

#### 💼 Use cases

| Who | What they do with it |
|---|---|
| 🏢 **Investors & buyers** | Build a daily refresh feed of new listings in target districts; flag underpriced units by PSF percentile. |
| 🤝 **Property agents** | Track competitor listings, monitor agent activity, scout co-broking opportunities. |
| 🏗️ **PropTech & analytics** | Power dashboards, AVMs (automated valuation models), heat maps, market reports. |
| 🧠 **ML / data science** | Train pricing models, location-embedding models, agent-fraud classifiers on real SG transaction data. |
| 📊 **Market research** | Quarterly reports on price/PSF trends by district, by property type, by tenure. |

***

#### 💡 Tips & tricks

- **Daily refresh:** set `since` to yesterday's date — the actor short-circuits at the search page and you only pay for genuinely new listings.
- **Index mode:** `scrapeDetails: false` returns just URLs + IDs — perfect for diff-only runs to detect what's been added or de-listed.
- **Pricing buckets:** run 3 separate runs with different `minPrice`/`maxPrice` windows in parallel for faster total scrape times.
- **Districts D09 / D10 / D11** (Orchard, Tanglin, Newton) account for ~40% of all luxury SG sale listings — narrow there for premium segments.

***

#### ❓ FAQ

**How fresh is the data?** Live. Each request hits PropertyGuru's production servers at the moment of your run.

**Will my dataset have duplicates?** No. The actor de-dupes by listing ID at queue time and again at push time.

**What about listings posted in multiple districts?** PropertyGuru issues one ID per listing — you'll see it exactly once.

**Can I scrape rentals too?** Yes — set `searchType: rent`. All the same fields populate (price = monthly rent).

**Will big runs fail halfway?** No. The actor tracks a failure budget (>30% failed → stop and report) so a broken site never quietly drains your CU.

**What happens if PropertyGuru changes its layout?** The actor's parser runs against captured HTML fixtures in CI — site redesigns surface as test failures within hours, not weeks of silently broken data.

***

#### 🛟 Support

Found a bug or missing field? Open an issue or message the actor maintainer from the Apify Store page. Bug reports with the run ID get fastest turnaround.

# Actor input Schema

## `searchType` (type: `string`):

Whether to scrape properties for sale or for rent on propertyguru.com.sg.

## `freetext` (type: `string`):

Free-text query — e.g. a project name ("The Sail"), a street ("Orchard Road"), or an area. Leave empty to scrape all listings of the chosen type.

## `districts` (type: `array`):

Singapore postal district codes (D01–D28) to restrict results to. Leave empty for the entire island. Each district matches the official URA mapping.

## `propertyTypeCodes` (type: `array`):

Restrict results to specific property types. Common codes: APT (Apartment), CONDO (Condominium), HDB, EXEC (Executive Condo), SEMI (Semi-Detached), TERR (Terraced House), BUNG (Bungalow), LAND (Landed). Omit to allow all types.

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

Lower bound on the listing price in Singapore dollars. For rental listings this is the monthly rent.

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

Upper bound on the listing price in Singapore dollars. For rental listings this is the monthly rent.

## `bedrooms` (type: `array`):

Filter to listings with these exact bedroom counts. Use 0 for studios. Leave empty for any.

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

How to sort the search results. "Default" uses PropertyGuru's relevance ranking. Date-based sorting is intentionally not exposed — use "Only listings posted after" below for incremental runs instead.

## `since` (type: `string`):

ISO-8601 timestamp (e.g. 2026-05-01T00:00:00Z). Listings posted before this moment are skipped — useful for daily incremental refresh runs without re-paying for already-seen data.

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

When enabled (default) every listing's full detail page is fetched — agent contact, photos, MRT distances, descriptions, all flat-record fields. Disable for an index-only run that returns just IDs + URLs at ~10× lower cost; useful for diff-only daily refreshes.

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

Cap on the number of listings to scrape. Set to 0 for unlimited (scrape every matching listing across all pages). Caps both pagination and detail fetches — the actor stops fetching search pages as soon as enough URLs are queued.

## `concurrency` (type: `integer`):

How many detail pages to fetch in parallel. Higher = faster but more aggressive on the source site. The default of 3 is polite and works without proxies. Raise carefully — values above 5 risk triggering Cloudflare rate-limits.

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

Power-user override: drop in already-built PropertyGuru search URLs (e.g. complex filtered pages, agent-listing pages, project pages) and the actor will paginate from page 1 of each. Overrides all simple filters above when provided.

## Actor input object example

```json
{
  "searchType": "sale",
  "freetext": "Tanjong Pagar",
  "districts": [
    "D09",
    "D10",
    "D11"
  ],
  "propertyTypeCodes": [
    "CONDO",
    "APT"
  ],
  "minPrice": 500000,
  "maxPrice": 2000000,
  "bedrooms": [
    "2",
    "3"
  ],
  "sortBy": "default",
  "scrapeDetails": true,
  "maxItems": 100,
  "concurrency": 3,
  "startUrls": [
    {
      "url": "https://www.propertyguru.com.sg/property-for-sale/with-3-bedrooms?district_code[]=D09&maxprice=3000000"
    }
  ]
}
```

# Actor output Schema

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

All scraped listings as a JSON array.

## `listingsCsv` (type: `string`):

All scraped listings as a flat CSV — opens directly in Excel / Google Sheets.

## `listingsXlsx` (type: `string`):

All scraped listings as a native .xlsx workbook.

## `consoleView` (type: `string`):

Browse the dataset with the table view and inline filtering in the Apify Console.

# 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 = {
    "searchType": "sale",
    "districts": [
        "D09",
        "D10",
        "D11"
    ],
    "sortBy": "default",
    "scrapeDetails": true,
    "maxItems": 25,
    "concurrency": 3
};

// Run the Actor and wait for it to finish
const run = await client.actor("alwaysprimedev/propertyguru-singapore-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 = {
    "searchType": "sale",
    "districts": [
        "D09",
        "D10",
        "D11",
    ],
    "sortBy": "default",
    "scrapeDetails": True,
    "maxItems": 25,
    "concurrency": 3,
}

# Run the Actor and wait for it to finish
run = client.actor("alwaysprimedev/propertyguru-singapore-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 '{
  "searchType": "sale",
  "districts": [
    "D09",
    "D10",
    "D11"
  ],
  "sortBy": "default",
  "scrapeDetails": true,
  "maxItems": 25,
  "concurrency": 3
}' |
apify call alwaysprimedev/propertyguru-singapore-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "PropertyGuru Singapore Scraper",
        "description": "Scrape sale and rental listings from propertyguru.com.sg — price, size, bedrooms, location, agent contact, photos, MRT distances, and more. Returns clean structured JSON / CSV / Excel.",
        "version": "0.1",
        "x-build-id": "uVpXY2ufQfoCaOD6o"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/alwaysprimedev~propertyguru-singapore-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-alwaysprimedev-propertyguru-singapore-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/alwaysprimedev~propertyguru-singapore-scraper/runs": {
            "post": {
                "operationId": "runs-sync-alwaysprimedev-propertyguru-singapore-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/alwaysprimedev~propertyguru-singapore-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-alwaysprimedev-propertyguru-singapore-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": {
                    "searchType": {
                        "title": "Search type",
                        "enum": [
                            "sale",
                            "rent"
                        ],
                        "type": "string",
                        "description": "Whether to scrape properties for sale or for rent on propertyguru.com.sg.",
                        "default": "sale"
                    },
                    "freetext": {
                        "title": "Search keywords",
                        "type": "string",
                        "description": "Free-text query — e.g. a project name (\"The Sail\"), a street (\"Orchard Road\"), or an area. Leave empty to scrape all listings of the chosen type."
                    },
                    "districts": {
                        "title": "Districts",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Singapore postal district codes (D01–D28) to restrict results to. Leave empty for the entire island. Each district matches the official URA mapping.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "propertyTypeCodes": {
                        "title": "Property type codes",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Restrict results to specific property types. Common codes: APT (Apartment), CONDO (Condominium), HDB, EXEC (Executive Condo), SEMI (Semi-Detached), TERR (Terraced House), BUNG (Bungalow), LAND (Landed). Omit to allow all types.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "minPrice": {
                        "title": "Min price (SGD)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Lower bound on the listing price in Singapore dollars. For rental listings this is the monthly rent."
                    },
                    "maxPrice": {
                        "title": "Max price (SGD)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Upper bound on the listing price in Singapore dollars. For rental listings this is the monthly rent."
                    },
                    "bedrooms": {
                        "title": "Bedroom counts",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Filter to listings with these exact bedroom counts. Use 0 for studios. Leave empty for any.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "sortBy": {
                        "title": "Sort order",
                        "enum": [
                            "default",
                            "price_low",
                            "price_high"
                        ],
                        "type": "string",
                        "description": "How to sort the search results. \"Default\" uses PropertyGuru's relevance ranking. Date-based sorting is intentionally not exposed — use \"Only listings posted after\" below for incremental runs instead.",
                        "default": "default"
                    },
                    "since": {
                        "title": "Only listings posted after",
                        "type": "string",
                        "description": "ISO-8601 timestamp (e.g. 2026-05-01T00:00:00Z). Listings posted before this moment are skipped — useful for daily incremental refresh runs without re-paying for already-seen data."
                    },
                    "scrapeDetails": {
                        "title": "Scrape detail pages",
                        "type": "boolean",
                        "description": "When enabled (default) every listing's full detail page is fetched — agent contact, photos, MRT distances, descriptions, all flat-record fields. Disable for an index-only run that returns just IDs + URLs at ~10× lower cost; useful for diff-only daily refreshes.",
                        "default": true
                    },
                    "maxItems": {
                        "title": "Max listings",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Cap on the number of listings to scrape. Set to 0 for unlimited (scrape every matching listing across all pages). Caps both pagination and detail fetches — the actor stops fetching search pages as soon as enough URLs are queued.",
                        "default": 50
                    },
                    "concurrency": {
                        "title": "Concurrency",
                        "minimum": 1,
                        "maximum": 25,
                        "type": "integer",
                        "description": "How many detail pages to fetch in parallel. Higher = faster but more aggressive on the source site. The default of 3 is polite and works without proxies. Raise carefully — values above 5 risk triggering Cloudflare rate-limits.",
                        "default": 3
                    },
                    "startUrls": {
                        "title": "Custom start URLs (advanced)",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Power-user override: drop in already-built PropertyGuru search URLs (e.g. complex filtered pages, agent-listing pages, project pages) and the actor will paginate from page 1 of each. Overrides all simple filters above when provided.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
