# Airbnb Calendar Scraper · Availability & Occupancy (`corent1robert/airbnb-calendar-availability-scraper`) Actor

Extract availability calendars, occupancy rates, and pricing from any Airbnb market. Paste a city search URL to scan hundreds of listings at once, or monitor specific properties. Outputs per-listing occupancy %, blocked days, price / night, full daily calendar. Built for STR managers and investors.

- **URL**: https://apify.com/corent1robert/airbnb-calendar-availability-scraper.md
- **Developed by:** [Corentin Robert](https://apify.com/corent1robert) (community)
- **Categories:** Travel, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.80 / 1,000 results

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

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Airbnb Calendar Availability Scraper

Paste **Airbnb URLs** — listing URLs, search URLs, or a mix of both — and get the full availability calendar for every property. Day by day, for as many months ahead as you need: open dates, blocked dates, min/max night rules, and a calculated occupancy rate. One clean row per listing, export-ready.

**Listing URL** (`airbnb.com/rooms/…`) → calendar for that specific property.  
**Search URL** (`airbnb.com/s/Paris--France/homes`) → discovers all listings in that market, fetches their calendars in one run.

**No login. No API key. No Airbnb account.**

### Who is this for?

| You are… | Typical goal | Suggested setup |
|----------|--------------|-----------------|
| **STR manager / conciergerie** | Track competitor occupancy in your market | Paste a city search URL, `monthsAhead: 6`, run weekly |
| **Revenue management analyst** | Feed availability data to a dynamic pricing tool | API/JSON, `monthsAhead: 12`, scheduled run |
| **Travel agency** | Check availability before proposing a property | Paste the listing URL, `monthsAhead: 1` or 2 |
| **STR investor** | Estimate annual revenue potential before buying | `monthsAhead: 12` — look at `occupancyRate` + `firstAvailableDate` |
| **Market research firm** | Aggregate occupancy patterns at city level | Search URL + `discoveryMode: full`, export CSV or JSON |
| **Property manager** | Monitor your own listings' blocked calendars | Your own listing URLs, daily scheduled run |

**What you get by default:** one row per listing with `city`, `propertyType`, `rooms`, `beds`, `rating`, `availableDays`, `blockedDays`, `occupancyRate`, `firstAvailableDate`, and the full `calendar` array (one entry per day).

Part of the **[Airbnb Actors suite](#airbnb-actors-suite-outreacher--corent1robert)** — see linked Actors for host discovery, listing depth, reviews, and atypical stays.

### What you get

| Field | Type | Description |
|-------|------|-------------|
| `listingId` | string | Numeric Airbnb listing ID |
| `listingUrl` | string | Canonical `airbnb.com/rooms/ID` URL |
| `listingName` | string | Listing title as shown on Airbnb |
| `propertyType` | string | e.g. `Apartment in Paris`, `Private room in Lyon` |
| `city` | string | City from listing title |
| `rooms` | number | Number of bedrooms |
| `beds` | number | Number of beds |
| `bathrooms` | number | Number of bathrooms |
| `searchPrice` | string | Price shown in search results (e.g. `$1,156`) |
| `searchPriceQualifier` | string | Price context (e.g. `for 5 nights`, `per night`) |
| `rating` | number | Numeric rating (e.g. `4.92`) — `null` for new listings |
| `reviewCount` | number | Number of reviews — `null` for new listings |
| `sourceUrl` | string | The search URL that found this listing |
| `searchRank` | number | Position in discovery results |
| `scrapedAt` | string | ISO 8601 scrape timestamp |
| `firstDateScanned` | string | First date in the calendar window |
| `lastDateScanned` | string | Last date in the calendar window |
| `currency` | string | Currency used for pricing |
| `monthsScraped` | number | Months returned by the API |
| `totalDays` | number | Total days scanned |
| `availableDays` | number | Days open to booking |
| `blockedDays` | number | Days blocked (booked or owner-blocked) |
| `occupancyRate` | number | `blockedDays / totalDays × 100` (%) |
| `firstAvailableDate` | string | Nearest open check-in date |
| `calendar` | array | One object per day (see below) |

> `listingName`, `propertyType`, `city`, `rooms`, `beds`, `bathrooms`, `searchPrice`, and `rating` come from Airbnb's search result JSON — they are only available when a **search URL** is used as input. With direct listing URLs, these fields are absent.

#### Calendar day object

| Field | Type | Description |
|-------|------|-------------|
| `date` | string | `YYYY-MM-DD` |
| `available` | boolean | Open for booking |
| `availableForCheckin` | boolean | Check-in allowed |
| `availableForCheckout` | boolean | Check-out allowed |
| `bookable` | boolean | Fully bookable (checkin + min nights satisfied) |
| `minNights` | number | Minimum stay from this date |
| `maxNights` | number | Maximum stay from this date |
| `price` | string\|null | Formatted nightly price — `null` when not exposed by Airbnb |

### Typical fill rates

| Field | Fill | Notes |
|-------|------|-------|
| `available`, `availableForCheckin/out`, `bookable` | **100%** | Every day returned by the API |
| `minNights`, `maxNights` | **100%** | Always present |
| `occupancyRate`, `firstAvailableDate` | **100%** | Computed from calendar |
| `listingName`, `propertyType`, `city`, `rooms`, `beds` | **~100%** (search URL only) | From search JSON |
| `rating`, `reviewCount` | **~90%** (search URL only) | New listings have no rating yet → `null` |
| `price` | **~0–30%** | Only when Airbnb exposes it via the calendar API |

### How it works

1. **Parse input** — each URL is classified as a listing URL or a search URL.
2. **For listing URLs** — extract the listing ID and call Airbnb's `PdpAvailabilityCalendar` API directly (up to 12 months per request, auto-heals stale hashes).
3. **For search URLs** — fetch search result pages, extract listing IDs and metadata from the embedded JSON. In Quick scan mode this is 1 pass; in Maximum coverage mode, 17 passes with different date windows, guest counts, and trip lengths (finds 4–6× more listings).
4. **Fetch calendars** — 10 listings in parallel for all discovered listings.
5. **Push data** — one dataset row per listing as soon as the calendar is fetched.

HTTP-only — no browser, no Airbnb login, 256 MB RAM.

### Performance

| Input | Listings | Months | Wall time |
|-------|----------|--------|-----------|
| 1 listing URL | 1 | 3 | ~3 s |
| 20 listing URLs | 20 | 3 | ~8 s |
| Search URL — quick scan | 100–400 | 3 | ~1–2 min |
| Search URL — maximum coverage (Paris) | 2 000–3 000 | 3 | ~10–20 min |

For 500+ listings, add `proxyConfiguration` to avoid rate limiting on the calendar API.

### Airbnb Actors suite (Outreacher / corent1robert)

| Step | Actor | Link | Best for |
|------|--------|------|----------|
| 1 — **Discover hosts** | Airbnb Pro Host Business Email Scraper | [Store →](https://apify.com/corent1robert/airbnb-professional-host-scraper) | City search, pro host contacts |
| 2 — **Size portfolios** | Airbnb Host Portfolio Scraper | [Store →](https://apify.com/corent1robert/airbnb-host-portfolio-scraper) | Profile URLs → listing count, geo, room counts |
| 3 — **Full listing rows** | Airbnb Property Details Scraper | [Store →](https://apify.com/corent1robert/airbnb-property-details-scraper) | 30+ fields: amenities, GPS, photos, pricing |
| 4 — **Atypical stays** | Airbnb Atypical Stays Scraper | [Store →](https://apify.com/corent1robert/airbnb-atypical-stays-scraper) | Castles, treehouses, boats |
| 5 — **Reviews** | Airbnb Reviews Scraper | [Store →](https://apify.com/corent1robert/airbnb-reviews-scraper) | Every review — rating, comment, date |
| 6 — **Calendar & occupancy** | **This Actor** | [Console →](https://console.apify.com/actors/m2YJQ936UUhd1nc9c) | Day-level availability, occupancy rate |

### Quick Start

1. Open the Actor in Apify Console.
2. Paste one or more Airbnb URLs in the **Airbnb URLs** field:
   - A listing URL: `https://www.airbnb.com/rooms/25497233`
   - A search URL: `https://www.airbnb.com/s/Paris--France/homes`
   - Or a mix of both
3. Set **Months ahead** (default 3).
4. For search URLs, choose **Discovery mode** — Quick scan for a fast sample, Maximum coverage for full market breadth.
5. Click **Start** — results appear in the Dataset tab.

Open the **Overview** view for a summary table, or **Flat calendar** for one row per day (Excel/Sheets-friendly).

### Input

#### Console fields

| Field | Default | Description |
|-------|---------|-------------|
| `urls` | 1 sample listing URL | Listing URLs (`/rooms/…`) and/or search URLs (`/s/…`) — mix freely |
| `monthsAhead` | `"3"` | How many months to fetch: `"1"`, `"2"`, `"3"`, `"6"`, or `"12"` |
| `discoveryMode` | `"quick"` | For search URLs: `"quick"` = 1 pass (fast), `"full"` = 17 passes (4–6× more listings) |

#### API-only fields

| Field | Default | Description |
|-------|---------|-------------|
| `currency` | auto-detected | ISO 4217 code (e.g. `"EUR"`) — inferred from the search URL location |
| `proxyConfiguration` | — | Apify proxy config; recommended for 500+ listing runs |
| `verboseLogs` | `false` | Log API hash and per-request timing |

#### Example — listing URLs

```json
{
  "urls": ["https://www.airbnb.com/rooms/25497233"],
  "monthsAhead": "3"
}
````

#### Example — city quick scan

```json
{
  "urls": ["https://www.airbnb.com/s/Lisbon--Portugal/homes"],
  "monthsAhead": "3"
}
```

#### Example — full market scan

```json
{
  "urls": ["https://www.airbnb.com/s/Paris--France/homes"],
  "monthsAhead": "3",
  "discoveryMode": "full",
  "proxyConfiguration": { "useApifyProxy": true }
}
```

#### Example — mix

```json
{
  "urls": [
    "https://www.airbnb.com/s/Barcelona--Spain/homes",
    "https://www.airbnb.com/rooms/25497233"
  ],
  "monthsAhead": "6",
  "discoveryMode": "full"
}
```

### Output sample

```json
{
  "listingId": "1672982064669323496",
  "listingUrl": "https://www.airbnb.com/rooms/1672982064669323496",
  "listingName": "Marais district - Authentic, quiet, Parisian charm",
  "propertyType": "Apartment in Paris",
  "city": "Paris",
  "rooms": 1,
  "beds": 2,
  "bathrooms": 1,
  "searchPrice": "$1,156",
  "searchPriceQualifier": "for 5 nights",
  "rating": 4.92,
  "reviewCount": 47,
  "sourceUrl": "https://www.airbnb.com/s/Paris--France/homes",
  "searchRank": 2,
  "scrapedAt": "2026-05-30T09:00:00.000Z",
  "firstDateScanned": "2026-05-30",
  "lastDateScanned": "2026-08-30",
  "currency": "EUR",
  "monthsScraped": 3,
  "totalDays": 92,
  "availableDays": 8,
  "blockedDays": 84,
  "occupancyRate": 91.3,
  "firstAvailableDate": "2026-07-13",
  "calendar": [
    {
      "date": "2026-05-30",
      "available": false,
      "availableForCheckin": false,
      "availableForCheckout": true,
      "bookable": false,
      "minNights": 5,
      "maxNights": 90,
      "price": null
    }
  ]
}
```

### Limitations

- **Availability only, no booking.** Reads the public calendar — does not book, hold, or request dates.
- **Price is often null.** Only populated when Airbnb exposes it via the calendar API. For pricing on a specific date range, use [Property Details Scraper](https://apify.com/corent1robert/airbnb-property-details-scraper).
- **Max 24 months ahead.** Airbnb's calendar returns no data beyond ~2 years out.
- **Deleted / private listings** return a `403` — the Actor writes an error row with an `error` field instead of crashing.
- **Listing metadata (city, rooms, beds…) requires a search URL.** With direct listing URLs, these fields are absent.
- **Rate limits on large runs.** For 500+ listings, add `proxyConfiguration` to avoid 429 errors.
- **Maximum coverage is slow on dense cities.** Paris or Barcelona can yield 2 000–3 000 listings across 17 discovery passes. Expect 10–20 minutes.

### Local development

```bash
npm install
apify run
```

Output in `storage/datasets/default/`. Edit `.actor/INPUT.json` to change the input.

### Support

Questions or custom workflows: **corentin@outreacher.fr**

# Actor input Schema

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

Paste one or more Airbnb URLs — mix freely:

• **Listing URL** — `https://www.airbnb.com/rooms/12345` → fetches the calendar for that specific property
• **Search URL** — `https://www.airbnb.com/s/Paris--France/homes` → discovers all listings in that city and fetches their calendars

To get a search URL: go to Airbnb, search for a city (add any filters you want — property type, guests…), then copy the URL from your browser.

## `monthsAhead` (type: `string`):

How many months of availability to fetch, starting from today.

## `discoveryMode` (type: `string`):

Quick scan uses 1 search pass — fast, covers listings available around today's dates. Maximum coverage runs 17 passes with different dates, guest counts, and trip lengths — finds 4–6× more listings but takes longer.

## `proxyConfiguration` (type: `object`):

Airbnb aggressively rate-limits direct IP traffic. Use Apify Residential proxies (recommended) or your own proxy to avoid 429 errors on large market scans.

## Actor input object example

```json
{
  "urls": [
    "https://www.airbnb.com/s/Paris--France/homes"
  ],
  "monthsAhead": "3",
  "discoveryMode": "quick"
}
```

# Actor output Schema

## `dataset` (type: `string`):

One row per listing — summary + nested calendar array.

## `overview` (type: `string`):

One row per listing — occupancy rate, available/blocked day counts, first open date. No calendar array. Best for comparing listings at a glance.

## `flatCalendar` (type: `string`):

One row per listing × date — listingId, date, available, checkin, checkout, bookable, minNights, maxNights, price. Best for pivot tables, date lookups, and Excel/Sheets analysis.

## `runLog` (type: `string`):

Progress log with listing counts and duration.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "urls": [
        "https://www.airbnb.com/s/Paris--France/homes"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("corent1robert/airbnb-calendar-availability-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "urls": ["https://www.airbnb.com/s/Paris--France/homes"] }

# Run the Actor and wait for it to finish
run = client.actor("corent1robert/airbnb-calendar-availability-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "urls": [
    "https://www.airbnb.com/s/Paris--France/homes"
  ]
}' |
apify call corent1robert/airbnb-calendar-availability-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Airbnb Calendar Scraper · Availability & Occupancy",
        "description": "Extract availability calendars, occupancy rates, and pricing from any Airbnb market. Paste a city search URL to scan hundreds of listings at once, or monitor specific properties. Outputs per-listing occupancy %, blocked days, price / night, full daily calendar. Built for STR managers and investors.",
        "version": "1.2",
        "x-build-id": "eaCKTNYNmFqZby9bN"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/corent1robert~airbnb-calendar-availability-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-corent1robert-airbnb-calendar-availability-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/corent1robert~airbnb-calendar-availability-scraper/runs": {
            "post": {
                "operationId": "runs-sync-corent1robert-airbnb-calendar-availability-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/corent1robert~airbnb-calendar-availability-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-corent1robert-airbnb-calendar-availability-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "urls"
                ],
                "properties": {
                    "urls": {
                        "title": "Airbnb URLs",
                        "type": "array",
                        "description": "Paste one or more Airbnb URLs — mix freely:\n\n• **Listing URL** — `https://www.airbnb.com/rooms/12345` → fetches the calendar for that specific property\n• **Search URL** — `https://www.airbnb.com/s/Paris--France/homes` → discovers all listings in that city and fetches their calendars\n\nTo get a search URL: go to Airbnb, search for a city (add any filters you want — property type, guests…), then copy the URL from your browser.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "monthsAhead": {
                        "title": "Months ahead",
                        "enum": [
                            "1",
                            "2",
                            "3",
                            "6",
                            "12"
                        ],
                        "type": "string",
                        "description": "How many months of availability to fetch, starting from today.",
                        "default": "3"
                    },
                    "discoveryMode": {
                        "title": "Discovery mode (search URLs only)",
                        "enum": [
                            "quick",
                            "full"
                        ],
                        "type": "string",
                        "description": "Quick scan uses 1 search pass — fast, covers listings available around today's dates. Maximum coverage runs 17 passes with different dates, guest counts, and trip lengths — finds 4–6× more listings but takes longer.",
                        "default": "quick"
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Airbnb aggressively rate-limits direct IP traffic. Use Apify Residential proxies (recommended) or your own proxy to avoid 429 errors on large market scans."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
