# PropertyGuru SE Asia Real Estate Scraper (`jungle_synthesizer/propertyguru-multi-region-scraper`) Actor

Scrape PropertyGuru and DDproperty listings across Singapore and Thailand. Extract sale and rental properties with price, address, geo coordinates, bedrooms, bathrooms, floor area, agent name, license number, phone, and image URLs.

- **URL**: https://apify.com/jungle\_synthesizer/propertyguru-multi-region-scraper.md
- **Developed by:** [BowTiedRaccoon](https://apify.com/jungle_synthesizer) (community)
- **Categories:** Real estate, Business, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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 Scraper — Singapore + Thailand Real Estate Listings (DDproperty)

Scrape property listings from [PropertyGuru](https://www.propertyguru.com.sg) (Singapore) and [DDproperty](https://www.ddproperty.com) (Thailand) in one run. This is a PropertyGuru API alternative and DDproperty Thailand scraper for exporting Singapore and Bangkok real estate data — sale and rental listings — to JSON, CSV, or Excel. Returns sale and rental listings with price, address, geo coordinates, bedrooms, bathrooms, floor area, agent name, license number, phone, and image URLs — all flattened into a single unified record schema across both countries.

---

### PropertyGuru SE Asia Property Scraper Features

- Covers two PropertyGuru-Group portals: **PropertyGuru Singapore** and **DDproperty Thailand**.
- Handles both sale and rental listings via a single `listingType` toggle.
- Optional `regionPath` slug narrows the search to a specific city, district, or MRT station.
- Returns a unified record schema across both portals — same field names, same types, regardless of brand.
- Extracts agent contact details including the **CEA license number** (Singapore) where the listing publishes it.
- Geo coordinates (latitude / longitude) when the listing exposes them, useful for mapping pipelines.
- Image URLs come back as a flat array per listing — no rehosting, no transformation.

---

### Who Uses This Singapore + Thailand Real Estate Data?

- **Real estate agents** tracking competitor inventory and price movements across SG / TH.
- **Foreign investors** sourcing residential and commercial deals in Singapore and Bangkok.
- **PropTech and analytics teams** building cross-country price models on the dominant SE Asia portal network.
- **Banks and mortgage desks** running portfolio pricing against current listed comparables.
- **Researchers** studying SE Asian real estate trends without scraping each brand separately.

---

### How PropertyGuru SE Asia Property Scraper Works

1. Pick a **brand** (PropertyGuru SG or DDproperty TH), a **listing type** (sale or rent), and an optional **region path**.
2. The scraper solves the Cloudflare challenge once per run using a residential proxy in the brand's country.
3. It then walks the listing pages, parses the embedded `__NEXT_DATA__` Apollo cache, and emits one record per listing.
4. Pagination continues until `maxItems` is reached or the listing pool runs out.

---

### Input

```json
{
  "brand": "PROPERTYGURU_SG",
  "listingType": "SALE",
  "regionPath": "",
  "maxItems": 15,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"],
    "apifyProxyCountry": "SG"
  }
}
````

| Field                | Type    | Default            | Description                                                                                                       |
| -------------------- | ------- | ------------------ | ----------------------------------------------------------------------------------------------------------------- |
| `brand`              | string  | `PROPERTYGURU_SG`  | Which portal to scrape: `PROPERTYGURU_SG` (Singapore) or `DDPROPERTY_TH` (Thailand).                              |
| `listingType`        | string  | `SALE`             | `SALE` or `RENT`.                                                                                                 |
| `regionPath`         | string  | `""`               | Optional URL slug to narrow the search. Examples: `in-singapore`, `in-bangkok`. Leave blank for nationwide.       |
| `maxItems`           | integer | `15`               | Max listings to scrape. The portal returns ~20 listings per page; deep paging is capped at 50 pages per query.    |
| `proxyConfiguration` | object  | RESIDENTIAL        | Residential proxy required (Cloudflare blocks datacenter IPs). Country is inferred from the brand if unspecified. |

#### Example: Bangkok Rentals

```json
{
  "brand": "DDPROPERTY_TH",
  "listingType": "RENT",
  "regionPath": "in-bangkok",
  "maxItems": 50,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"],
    "apifyProxyCountry": "TH"
  }
}
```

***

### PropertyGuru SE Asia Property Scraper Output Fields

```json
{
  "listing_id": "24123456",
  "brand": "PROPERTYGURU_SG",
  "country": "SG",
  "listing_type": "SALE",
  "url": "https://www.propertyguru.com.sg/listing/24123456",
  "title": "Marina One Residences — 2 Bed Premium Floor",
  "description": "Marina Bay condo with full sea view...",
  "property_type": "Condominium",
  "price": 2850000,
  "currency": "SGD",
  "price_psf": 3120,
  "bedrooms": 2,
  "bathrooms": 2,
  "floor_area_sqft": 915,
  "land_area_sqft": null,
  "tenure": "99-year Leasehold",
  "completion_year": 2017,
  "project_name": "Marina One Residences",
  "address": "21 Marina Way",
  "district": "Marina Bay",
  "city": "Singapore",
  "region": "Central Region",
  "latitude": 1.2779,
  "longitude": 103.8581,
  "agent_name": "Tan Wei Ming",
  "agent_license": "R012345A",
  "agent_phone": "+65 9123 4567",
  "agent_agency": "PropNex Realty",
  "image_urls": [
    "https://sg2-cdn-pgimgs.com/listing/24123456/N-12345/x.jpg",
    "https://sg2-cdn-pgimgs.com/listing/24123456/N-12346/x.jpg"
  ],
  "posted_at": "2026-04-15T08:30:00Z",
  "scraped_at": "2026-04-30T12:55:53Z"
}
```

| Field             | Type      | Description                                                                          |
| ----------------- | --------- | ------------------------------------------------------------------------------------ |
| `listing_id`      | string    | Unique listing identifier from the portal backend.                                   |
| `brand`           | string    | `PROPERTYGURU_SG` or `DDPROPERTY_TH`.                                                |
| `country`         | string    | Two-letter country code (`SG` or `TH`).                                              |
| `listing_type`    | string    | `SALE` or `RENT`.                                                                    |
| `url`             | string    | Listing detail page URL.                                                             |
| `title`           | string    | Listing headline.                                                                    |
| `description`     | string    | Listing description, truncated to 2,000 characters.                                  |
| `property_type`   | string    | Property type (e.g. Condominium, Landed, HDB, Apartment, Shophouse, Terrace).        |
| `price`           | number    | Sale price, or monthly rent, in local currency.                                      |
| `currency`        | string    | Currency code (`SGD` or `THB`).                                                      |
| `price_psf`       | number    | Price per square foot, when published by the listing.                                |
| `bedrooms`        | integer   | Number of bedrooms.                                                                  |
| `bathrooms`       | integer   | Number of bathrooms.                                                                 |
| `floor_area_sqft` | number    | Floor area in square feet (converted from sqm when needed).                          |
| `land_area_sqft`  | number    | Land area in square feet, landed properties only.                                    |
| `tenure`          | string    | `Freehold`, `99-year Leasehold`, `999-year Leasehold`, etc.                          |
| `completion_year` | integer   | Year the project was or will be completed (TOP).                                     |
| `project_name`    | string    | Development or project name.                                                         |
| `address`         | string    | Listing address (street + district).                                                 |
| `district`        | string    | District or neighborhood name.                                                       |
| `city`            | string    | City name.                                                                           |
| `region`          | string    | Region or state name.                                                                |
| `latitude`        | number    | Latitude in decimal degrees.                                                         |
| `longitude`       | number    | Longitude in decimal degrees.                                                        |
| `agent_name`      | string    | Listing agent name.                                                                  |
| `agent_license`   | string    | Agent license number (CEA in Singapore; no scheme in Thailand).                      |
| `agent_phone`     | string    | Agent phone number.                                                                  |
| `agent_agency`    | string    | Agency or brokerage name.                                                            |
| `image_urls`      | string\[]  | Array of image URLs.                                                                 |
| `posted_at`       | string    | Date the listing was first published (ISO 8601, when available).                     |
| `scraped_at`      | string    | Timestamp when this record was scraped (ISO 8601).                                   |

***

### FAQ

#### Does PropertyGuru SE Asia Property Scraper cover iProperty Malaysia?

Not in this version. iProperty MY uses a second layer of bot protection on top of Cloudflare that needs a different bypass strategy. It's on the roadmap for a future release. For now, this actor covers PropertyGuru Singapore and DDproperty Thailand — the two portals where the listing data is reachable through the same approach.

#### What's the difference between PropertyGuru and DDproperty?

Both are PropertyGuru-Group brands and run the same backend. PropertyGuru is the Singapore portal; DDproperty is the Thailand portal. The actor returns identical record shapes for both, so a downstream pipeline can mix and match without per-country branching.

#### Why does it require a residential proxy?

PropertyGuru-Group portals sit behind Cloudflare's managed challenge. Datacenter IPs are blocked outright. Residential proxy in the brand's country is the only reliable path, and the actor pins to the right country automatically.

#### How fast does it run?

About 5 records per second once the Cloudflare challenge is solved. The challenge takes 15-60 seconds depending on residential proxy session quality. A 100-record run typically finishes in well under two minutes. A 1,000-record run is paced — both for politeness and to dodge rate limits.

#### Why can't I get more than 1,000 results per query?

PropertyGuru caps deep pagination at 50 pages (about 1,000 listings) per filtered query. Use the `regionPath` input to narrow the search by city or district to surface more inventory beyond that ceiling.

#### Is there a PropertyGuru API to download Singapore property listings?

PropertyGuru does not offer a public listings API. This actor is the practical alternative: it reads the same data the site renders and exports Singapore (PropertyGuru) and Thailand (DDproperty) listings to JSON, CSV, or Excel, with price, address, geo coordinates, agent contact, and CEA license number in each record.

#### Can I get full agent license metadata or MRT distance?

The current build returns whatever the listing card publishes, which is enough for most use cases. Per-listing detail-page fetches and transit-distance enrichment are planned for a v2 release. File an issue if you need them sooner.

***

### Need More Features?

If you need iProperty Malaysia, batdongsan Vietnam, rumah123 Indonesia, or extra fields like full agent licensing or transit-distance enrichment, [open an issue](https://github.com/OrbTop/orbtop-actors/issues) and we'll prioritize it.

### Why Use PropertyGuru SE Asia Property Scraper?

- **One actor, two countries** — Singapore and Thailand listings land in the same dataset with the same field names. No reconciliation needed downstream.
- **Cloudflare handled** — the actor solves the managed challenge automatically. You don't think about it.
- **Card-level extraction is fast** — pulls full listing data straight from the embedded Next.js Apollo cache, no per-listing detail page fetches required for the published fields.
- **Stable schema across brands** — PropertyGuru Group runs both portals on the same backend, so the data shape is the same on either side of the border.

# Actor input Schema

## `sp_intended_usage` (type: `string`):

Please describe how you plan to use the data extracted by this crawler.

## `sp_improvement_suggestions` (type: `string`):

Provide any feedback or suggestions for improvements.

## `sp_contact` (type: `string`):

Provide your email address so we can get in touch with you.

## `brand` (type: `string`):

Which PropertyGuru-Group brand to scrape. Each brand serves a different country.

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

Sale or rental listings.

## `regionPath` (type: `string`):

Optional URL slug to narrow the search to a region/district. Leave blank for all regions in the brand's country. Examples: 'in-singapore' (SG), 'in-bangkok' (TH).

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

Maximum number of listings to scrape. Each PropertyGuru listing page returns ~20 records.

## Actor input object example

```json
{
  "sp_intended_usage": "Describe your intended use...",
  "sp_improvement_suggestions": "Share your suggestions here...",
  "sp_contact": "Share your email here...",
  "brand": "PROPERTYGURU_SG",
  "listingType": "SALE",
  "regionPath": "",
  "maxItems": 15
}
```

# Actor output Schema

## `results` (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 = {
    "sp_intended_usage": "Describe your intended use...",
    "sp_improvement_suggestions": "Share your suggestions here...",
    "sp_contact": "Share your email here...",
    "brand": "PROPERTYGURU_SG",
    "listingType": "SALE",
    "regionPath": "",
    "maxItems": 15
};

// Run the Actor and wait for it to finish
const run = await client.actor("jungle_synthesizer/propertyguru-multi-region-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 = {
    "sp_intended_usage": "Describe your intended use...",
    "sp_improvement_suggestions": "Share your suggestions here...",
    "sp_contact": "Share your email here...",
    "brand": "PROPERTYGURU_SG",
    "listingType": "SALE",
    "regionPath": "",
    "maxItems": 15,
}

# Run the Actor and wait for it to finish
run = client.actor("jungle_synthesizer/propertyguru-multi-region-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 '{
  "sp_intended_usage": "Describe your intended use...",
  "sp_improvement_suggestions": "Share your suggestions here...",
  "sp_contact": "Share your email here...",
  "brand": "PROPERTYGURU_SG",
  "listingType": "SALE",
  "regionPath": "",
  "maxItems": 15
}' |
apify call jungle_synthesizer/propertyguru-multi-region-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "PropertyGuru SE Asia Real Estate Scraper",
        "description": "Scrape PropertyGuru and DDproperty listings across Singapore and Thailand. Extract sale and rental properties with price, address, geo coordinates, bedrooms, bathrooms, floor area, agent name, license number, phone, and image URLs.",
        "version": "1.0",
        "x-build-id": "X8RWFqH2aVYeBf05h"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/jungle_synthesizer~propertyguru-multi-region-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-jungle_synthesizer-propertyguru-multi-region-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/jungle_synthesizer~propertyguru-multi-region-scraper/runs": {
            "post": {
                "operationId": "runs-sync-jungle_synthesizer-propertyguru-multi-region-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/jungle_synthesizer~propertyguru-multi-region-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-jungle_synthesizer-propertyguru-multi-region-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": {
                    "sp_intended_usage": {
                        "title": "What is the intended usage of this data?",
                        "minLength": 1,
                        "type": "string",
                        "description": "Please describe how you plan to use the data extracted by this crawler."
                    },
                    "sp_improvement_suggestions": {
                        "title": "How can we improve this crawler for you?",
                        "minLength": 1,
                        "type": "string",
                        "description": "Provide any feedback or suggestions for improvements."
                    },
                    "sp_contact": {
                        "title": "Contact Email",
                        "minLength": 1,
                        "type": "string",
                        "description": "Provide your email address so we can get in touch with you."
                    },
                    "brand": {
                        "title": "Brand",
                        "enum": [
                            "PROPERTYGURU_SG",
                            "DDPROPERTY_TH"
                        ],
                        "type": "string",
                        "description": "Which PropertyGuru-Group brand to scrape. Each brand serves a different country.",
                        "default": "PROPERTYGURU_SG"
                    },
                    "listingType": {
                        "title": "Listing Type",
                        "enum": [
                            "SALE",
                            "RENT"
                        ],
                        "type": "string",
                        "description": "Sale or rental listings.",
                        "default": "SALE"
                    },
                    "regionPath": {
                        "title": "Region Path (optional)",
                        "type": "string",
                        "description": "Optional URL slug to narrow the search to a region/district. Leave blank for all regions in the brand's country. Examples: 'in-singapore' (SG), 'in-bangkok' (TH).",
                        "default": ""
                    },
                    "maxItems": {
                        "title": "Max Items",
                        "type": "integer",
                        "description": "Maximum number of listings to scrape. Each PropertyGuru listing page returns ~20 records.",
                        "default": 15
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
