# Hotels.com Scraper (`khadinakbar/hotels-com-scraper`) Actor

Scrape Hotels.com nightly rates + full hotel data by destination or property. Per-OTA price compare, ratings, amenities. MCP-ready.

- **URL**: https://apify.com/khadinakbar/hotels-com-scraper.md
- **Developed by:** [Khadin Akbar](https://apify.com/khadinakbar) (community)
- **Categories:** Travel, MCP servers, AI
- **Stats:** 6 total users, 3 monthly users, 20.7% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 property scrapeds

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

## Hotels.com Scraper

Get **live Hotels.com nightly rates** and full hotel data for any destination or property — plus a side-by-side OTA price comparison (Expedia, Booking, Priceline, Agoda and 25+ others). Search a city or hotel name and receive structured JSON: rates, guest ratings, star class, amenities, images, coordinates, and detailed review breakdowns. MCP-ready for AI agents.

> **How it works (transparency):** Hotels.com (an Expedia Group site) is protected by enterprise bot management that blocks direct datacenter access. This actor sources its data through **Google Hotels price aggregation**, which publishes the live Hotels.com nightly rate alongside competing OTAs. You get the real Hotels.com price as a first-class field (`hotelsComRate`) without proxies, logins, or captcha risk — and competitor prices for free.

### What you get

| Field | Description |
|---|---|
| `name`, `type`, `description` | Hotel name, property type, blurb |
| `hotelsComRate` | **Live Hotels.com nightly rate** (details mode) |
| `featuredPrices[]` | Per-OTA prices: Hotels.com, Expedia, Booking.com, parkplaza.com… |
| `allPriceSources[]` | Every OTA quoting this property |
| `ratePerNightLowest`, `totalRateLowest` | Best aggregate rate for the stay |
| `overallRating`, `reviewsCount`, `ratings[]` | Guest rating + star distribution |
| `reviewsBreakdown[]` | Sentiment by category (Service, Location, Property…) |
| `hotelClassStars`, `amenities[]`, `images[]` | Class, facilities, photos |
| `address`, `phone`, `gpsLat`/`gpsLng` | Location + contact (details mode) |
| `nearbyPlaces[]`, `typicalPriceLow/High` | Context |

### When to use it
- **Rate monitoring** — track the Hotels.com price for a property over time.
- **OTA price comparison** — see how Hotels.com stacks up vs Expedia/Booking/Agoda per hotel.
- **Travel market research** — pull every 4–5★ hotel in a city with rates and ratings.
- **AI / MCP agents** — a single tool call returns clean, structured hotel data.

### When NOT to use it
- You need a literal scrape of the hotels.com HTML/DOM or booking-flow internals — this returns aggregated rate + property data, not the rendered hotels.com page.
- You need full individual review text at scale (this returns review *breakdowns* and counts, not every review body).

### Input

Two auto-detected modes:

**1. Destination search** — set `location`:
```json
{
  "location": "London",
  "checkInDate": "2026-07-01",
  "checkOutDate": "2026-07-03",
  "adults": 2,
  "maxResults": 40,
  "enrichDetails": true
}
````

With `enrichDetails: true`, each result is enriched with the Hotels.com rate + per-OTA price compare.

**2. Property lookup** — pass `propertyTokens` (from a prior search's `propertyToken` field) for full details on exact hotels:

```json
{
  "propertyTokens": ["ChkIlpfjpu_YpugNGg0vZy8xMWJ4ZHhyeW1rEAE"],
  "checkInDate": "2026-07-01",
  "checkOutDate": "2026-07-03"
}
```

Filters: `sortBy`, `minRating`, `hotelClasses`, `minPrice`/`maxPrice`, `currency`, `countryCode`, `language`, `vacationRentals`, `freeCancellation`.

### Pricing (pay-per-event)

| Event | Price |
|---|---|
| Actor start | $0.00005 |
| Property scraped (search row) | $0.005 |
| Property detail + price compare | $0.015 |

A 40-property search costs ~$0.20. The same search with `enrichDetails` (Hotels.com rate per hotel) costs ~$0.80. Pay-per-usage (compute + proxy) is also available.

### MCP / AI agents

Exposed as `apify--hotels-com-scraper`. Narrow input (destination or token), structured JSON out, predictable per-event cost. Pair with `booking-scraper-pro`, `airbnb-scraper`, and `tripadvisor-scraper` for full OTA coverage.

### Example: cheapest 4★+ hotels in Las Vegas

```json
{ "location": "Las Vegas", "hotelClasses": ["4","5"], "sortBy": "Lowest price", "maxResults": 30, "enrichDetails": true }
```

### FAQ

**Is the Hotels.com price live?** Yes — it reflects the rate Hotels.com is quoting for your dates, surfaced via Google Hotels.
**Why not scrape hotels.com directly?** Its bot protection blocks datacenter IPs at the edge; aggregation is more reliable and adds competitor prices for free.
**Currencies / regions?** Any ISO currency + country code; rates convert accordingly.

### Legal

This actor returns publicly available aggregated pricing and hotel information for research and price-comparison use. It does not log in, bypass authentication, or access private data. You are responsible for complying with applicable terms of service and laws in your jurisdiction. Not affiliated with or endorsed by Hotels.com or Expedia Group.

# Actor input Schema

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

Free-text destination, city, region, or specific hotel name to search (e.g. 'London', 'Las Vegas Strip', 'Park Plaza Westminster'). This is the main input for search mode and resolves to a list of matching hotel properties with their Hotels.com nightly rates. Defaults to 'London'. NOT a URL — paste a place or hotel name, not a hotels.com link; to look up exact known properties use 'propertyTokens' instead.

## `propertyTokens` (type: `array`):

Optional list of property tokens returned in a prior search run's 'propertyToken' field. When provided, the actor skips search and fetches full details (live Hotels.com rate + competitor OTA prices, address, phone, amenities, review breakdowns) for each token. Leave empty to run a destination search instead. Each token looks like 'ChkIlpfjpu\_YpugNGg0vZy8xMWJ4ZHhyeW1rEAE'.

## `checkInDate` (type: `string`):

Check-in date in ISO format YYYY-MM-DD (e.g. '2026-07-01'). Rates are quoted for the stay between check-in and check-out. If left blank, defaults to 30 days from the run date. Must be a future date; a past date returns no rates.

## `checkOutDate` (type: `string`):

Check-out date in ISO format YYYY-MM-DD (e.g. '2026-07-03'). Must be after the check-in date. If left blank, defaults to 2 nights after the resolved check-in date. The nightly and total rates returned cover this exact date range.

## `adults` (type: `integer`):

Number of adult guests per room used to price the stay (e.g. 2). Affects the nightly rate and availability returned. Defaults to 2. Maximum 6 total occupants (adults + children combined) — this is the upstream Google Hotels limit; requests exceeding 6 total return no results. Use 'children' and 'childrenAges' to add minors.

## `children` (type: `integer`):

Number of child guests per room (e.g. 1). Defaults to 0. When set above 0, supply matching 'childrenAges' so the rate reflects the right occupancy. Ages outside 1-17 are treated as adults by the upstream source.

## `childrenAges` (type: `array`):

Ages of each child guest, one entry per child, values 1-17 (e.g. \['5','9']). The count should match the 'children' number. Leave empty when 'children' is 0. Used only to price family occupancy correctly.

## `currency` (type: `string`):

3-letter ISO currency code for all returned prices (e.g. 'USD', 'GBP', 'EUR'). Defaults to 'USD'. Rates are converted by the upstream source to this currency. NOT a symbol — use 'EUR' not '€'.

## `countryCode` (type: `string`):

2-letter country code for the search locale and price geo-targeting (e.g. 'us', 'gb', 'de'). Defaults to 'us'. Affects which regional rates and availability are shown. NOT the destination country — that comes from 'location'; this is the searcher's market.

## `language` (type: `string`):

2-letter language code for result text such as descriptions and amenity labels (e.g. 'en', 'es', 'fr'). Defaults to 'en'. Does not change which hotels are returned, only their text. Use lowercase ISO 639-1.

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

Ordering of search results. 'Relevance' is the default ranking; the others re-sort by price, rating, or review volume. Ignored in property-token (details) mode. Pick one of the listed options.

## `minRating` (type: `string`):

Filter search results to properties at or above this overall guest rating. 'Any' applies no rating filter (default). Options map to the upstream 3.5 / 4.0 / 4.5 thresholds. Ignored in details mode.

## `hotelClasses` (type: `array`):

Optional filter to only return properties of the given star classes. Allowed values are the strings '2','3','4','5' (e.g. \['4','5'] for 4- and 5-star only). Leave empty for all classes. Ignored in details mode.

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

Optional lower bound on nightly price in the selected currency (e.g. 100). Properties below this are excluded from search results. Leave blank for no minimum. Ignored in details mode.

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

Optional upper bound on nightly price in the selected currency (e.g. 400). Properties above this are excluded from search results. Leave blank for no maximum. Ignored in details mode.

## `vacationRentals` (type: `boolean`):

When true, search returns vacation rentals (apartments, homes) instead of hotels. Defaults to false (hotels). Ignored in details mode. Note that rental inventory and fields can differ from hotels.

## `freeCancellation` (type: `boolean`):

When true, only properties offering free cancellation for the selected dates are returned. Defaults to false. Ignored in details mode. May reduce result count for tight date ranges.

## `enrichDetails` (type: `boolean`):

When true, each search result is followed by a detail lookup that adds the live Hotels.com nightly rate, competitor OTA prices, full address, phone, detailed amenities, review breakdowns, and typical price range. Defaults to false. Each enriched property bills the 'property-detail' event in addition to 'property-scraped'. Turn on when you need the Hotels.com-specific price, not just the aggregate lowest rate.

## `maxResults` (type: `integer`):

Maximum number of properties to return in search mode, paginated 20 per page (e.g. 60 fetches 3 pages). Defaults to 20. Higher values cost more and take longer. Ignored in details mode, where every supplied token is fetched.

## Actor input object example

```json
{
  "location": "Las Vegas",
  "propertyTokens": [],
  "checkInDate": "2026-07-01",
  "checkOutDate": "2026-07-03",
  "adults": 2,
  "children": 0,
  "childrenAges": [],
  "currency": "USD",
  "countryCode": "us",
  "language": "en",
  "sortBy": "Relevance",
  "minRating": "Any",
  "hotelClasses": [],
  "vacationRentals": false,
  "freeCancellation": false,
  "enrichDetails": false,
  "maxResults": 20
}
```

# Actor output Schema

## `properties` (type: `string`):

No description

## `summary` (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 = {
    "location": "London"
};

// Run the Actor and wait for it to finish
const run = await client.actor("khadinakbar/hotels-com-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 = { "location": "London" }

# Run the Actor and wait for it to finish
run = client.actor("khadinakbar/hotels-com-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 '{
  "location": "London"
}' |
apify call khadinakbar/hotels-com-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Hotels.com Scraper",
        "description": "Scrape Hotels.com nightly rates + full hotel data by destination or property. Per-OTA price compare, ratings, amenities. MCP-ready.",
        "version": "0.1",
        "x-build-id": "tOsTLTYVYnBCKePZ5"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/khadinakbar~hotels-com-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-khadinakbar-hotels-com-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/khadinakbar~hotels-com-scraper/runs": {
            "post": {
                "operationId": "runs-sync-khadinakbar-hotels-com-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/khadinakbar~hotels-com-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-khadinakbar-hotels-com-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": {
                    "location": {
                        "title": "Destination or hotel name",
                        "type": "string",
                        "description": "Free-text destination, city, region, or specific hotel name to search (e.g. 'London', 'Las Vegas Strip', 'Park Plaza Westminster'). This is the main input for search mode and resolves to a list of matching hotel properties with their Hotels.com nightly rates. Defaults to 'London'. NOT a URL — paste a place or hotel name, not a hotels.com link; to look up exact known properties use 'propertyTokens' instead."
                    },
                    "propertyTokens": {
                        "title": "Property tokens (details mode)",
                        "type": "array",
                        "description": "Optional list of property tokens returned in a prior search run's 'propertyToken' field. When provided, the actor skips search and fetches full details (live Hotels.com rate + competitor OTA prices, address, phone, amenities, review breakdowns) for each token. Leave empty to run a destination search instead. Each token looks like 'ChkIlpfjpu_YpugNGg0vZy8xMWJ4ZHhyeW1rEAE'.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "checkInDate": {
                        "title": "Check-in date",
                        "type": "string",
                        "description": "Check-in date in ISO format YYYY-MM-DD (e.g. '2026-07-01'). Rates are quoted for the stay between check-in and check-out. If left blank, defaults to 30 days from the run date. Must be a future date; a past date returns no rates."
                    },
                    "checkOutDate": {
                        "title": "Check-out date",
                        "type": "string",
                        "description": "Check-out date in ISO format YYYY-MM-DD (e.g. '2026-07-03'). Must be after the check-in date. If left blank, defaults to 2 nights after the resolved check-in date. The nightly and total rates returned cover this exact date range."
                    },
                    "adults": {
                        "title": "Adults",
                        "minimum": 1,
                        "maximum": 6,
                        "type": "integer",
                        "description": "Number of adult guests per room used to price the stay (e.g. 2). Affects the nightly rate and availability returned. Defaults to 2. Maximum 6 total occupants (adults + children combined) — this is the upstream Google Hotels limit; requests exceeding 6 total return no results. Use 'children' and 'childrenAges' to add minors.",
                        "default": 2
                    },
                    "children": {
                        "title": "Children",
                        "minimum": 0,
                        "maximum": 10,
                        "type": "integer",
                        "description": "Number of child guests per room (e.g. 1). Defaults to 0. When set above 0, supply matching 'childrenAges' so the rate reflects the right occupancy. Ages outside 1-17 are treated as adults by the upstream source.",
                        "default": 0
                    },
                    "childrenAges": {
                        "title": "Children ages",
                        "type": "array",
                        "description": "Ages of each child guest, one entry per child, values 1-17 (e.g. ['5','9']). The count should match the 'children' number. Leave empty when 'children' is 0. Used only to price family occupancy correctly.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "currency": {
                        "title": "Currency",
                        "type": "string",
                        "description": "3-letter ISO currency code for all returned prices (e.g. 'USD', 'GBP', 'EUR'). Defaults to 'USD'. Rates are converted by the upstream source to this currency. NOT a symbol — use 'EUR' not '€'.",
                        "default": "USD"
                    },
                    "countryCode": {
                        "title": "Country (geo)",
                        "type": "string",
                        "description": "2-letter country code for the search locale and price geo-targeting (e.g. 'us', 'gb', 'de'). Defaults to 'us'. Affects which regional rates and availability are shown. NOT the destination country — that comes from 'location'; this is the searcher's market.",
                        "default": "us"
                    },
                    "language": {
                        "title": "Language",
                        "type": "string",
                        "description": "2-letter language code for result text such as descriptions and amenity labels (e.g. 'en', 'es', 'fr'). Defaults to 'en'. Does not change which hotels are returned, only their text. Use lowercase ISO 639-1.",
                        "default": "en"
                    },
                    "sortBy": {
                        "title": "Sort by",
                        "enum": [
                            "Relevance",
                            "Lowest price",
                            "Highest rating",
                            "Most reviewed"
                        ],
                        "type": "string",
                        "description": "Ordering of search results. 'Relevance' is the default ranking; the others re-sort by price, rating, or review volume. Ignored in property-token (details) mode. Pick one of the listed options.",
                        "default": "Relevance"
                    },
                    "minRating": {
                        "title": "Minimum guest rating",
                        "enum": [
                            "Any",
                            "3.5",
                            "4.0",
                            "4.5"
                        ],
                        "type": "string",
                        "description": "Filter search results to properties at or above this overall guest rating. 'Any' applies no rating filter (default). Options map to the upstream 3.5 / 4.0 / 4.5 thresholds. Ignored in details mode.",
                        "default": "Any"
                    },
                    "hotelClasses": {
                        "title": "Hotel star classes",
                        "type": "array",
                        "description": "Optional filter to only return properties of the given star classes. Allowed values are the strings '2','3','4','5' (e.g. ['4','5'] for 4- and 5-star only). Leave empty for all classes. Ignored in details mode.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "minPrice": {
                        "title": "Minimum nightly price",
                        "type": "integer",
                        "description": "Optional lower bound on nightly price in the selected currency (e.g. 100). Properties below this are excluded from search results. Leave blank for no minimum. Ignored in details mode."
                    },
                    "maxPrice": {
                        "title": "Maximum nightly price",
                        "type": "integer",
                        "description": "Optional upper bound on nightly price in the selected currency (e.g. 400). Properties above this are excluded from search results. Leave blank for no maximum. Ignored in details mode."
                    },
                    "vacationRentals": {
                        "title": "Vacation rentals only",
                        "type": "boolean",
                        "description": "When true, search returns vacation rentals (apartments, homes) instead of hotels. Defaults to false (hotels). Ignored in details mode. Note that rental inventory and fields can differ from hotels.",
                        "default": false
                    },
                    "freeCancellation": {
                        "title": "Free cancellation only",
                        "type": "boolean",
                        "description": "When true, only properties offering free cancellation for the selected dates are returned. Defaults to false. Ignored in details mode. May reduce result count for tight date ranges.",
                        "default": false
                    },
                    "enrichDetails": {
                        "title": "Enrich details (Hotels.com rate + price compare)",
                        "type": "boolean",
                        "description": "When true, each search result is followed by a detail lookup that adds the live Hotels.com nightly rate, competitor OTA prices, full address, phone, detailed amenities, review breakdowns, and typical price range. Defaults to false. Each enriched property bills the 'property-detail' event in addition to 'property-scraped'. Turn on when you need the Hotels.com-specific price, not just the aggregate lowest rate.",
                        "default": false
                    },
                    "maxResults": {
                        "title": "Max results",
                        "minimum": 1,
                        "maximum": 200,
                        "type": "integer",
                        "description": "Maximum number of properties to return in search mode, paginated 20 per page (e.g. 60 fetches 3 pages). Defaults to 20. Higher values cost more and take longer. Ignored in details mode, where every supplied token is fetched.",
                        "default": 20
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
