# iCal / ICS Calendar Parser (`automation-lab/ical-parser`) Actor

Parse iCal/ICS calendar files from URLs or raw text. Extracts events with summary, start/end, location, attendees, organizer, recurrence rules, and more.

- **URL**: https://apify.com/automation-lab/ical-parser.md
- **Developed by:** [Stas Persiianenko](https://apify.com/automation-lab) (community)
- **Categories:** Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN 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.
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

## iCal / ICS Calendar Parser

The **iCal / ICS Calendar Parser** fetches and parses iCalendar (.ics) files from URLs or raw text and outputs structured JSON with events, attendees, recurrence rules, timezone info, and more. Bulk-parse multiple calendar sources in a single run — no proxy needed, pure computation.

Try it now at [apify.com/automation-lab/ical-parser](https://apify.com/automation-lab/ical-parser).

---

### What does iCal Parser do?

The actor accepts one or more ICS calendar sources (URLs or raw text) and extracts every calendar event into clean, structured JSON. For each event you get:

- **Summary** (event title) and **description**
- **Start and end dates** in ISO 8601 format
- **Location** (physical address or virtual meeting link)
- **Organizer** name and email
- **Attendees** with name, email, role, and RSVP status
- **Recurrence rules** (RRULE) with optional expansion into individual occurrences
- **Categories**, **status** (CONFIRMED, TENTATIVE, CANCELLED), and **UID**
- **URL** associated with the event
- **All-day flag**, created/modified timestamps, and source tracking

Supports any standard iCalendar file: Google Calendar, Outlook, Apple Calendar, Fastmail, Proton Calendar, Calendly, Zoom, and any app that exports .ics files.

---

### Who is iCal Parser for?

**Automation engineers** building calendar-driven workflows:
- Sync events from public calendars into databases, spreadsheets, or CRMs
- Trigger actions when new events appear on a team calendar
- Aggregate events from multiple calendar sources into a single dataset

**Data analysts** tracking scheduled events across organizations:
- Extract conference schedules, meetup events, or holiday calendars
- Build dashboards from public calendar data
- Monitor competitor event schedules for market intelligence

**Developers** integrating calendar data into applications:
- Parse ICS feeds from third-party APIs without writing parsing logic
- Convert calendar exports into JSON for web apps or mobile apps
- Batch-process calendar archives for migration projects

**HR and operations teams** managing company-wide schedules:
- Export and analyze company holiday calendars across regions
- Track office closures, training sessions, and team events
- Generate reports from shared calendar data

---

### Why use iCal Parser?

- No proxy needed — works with public ICS URLs directly, zero bandwidth cost
- Bulk parsing — process multiple calendar sources in a single run
- Recurring event expansion — optionally expand RRULE-based recurring events into individual occurrences
- Date filtering — extract only events within a specific date range
- Universal format support — any RFC 5545 compliant ICS file works
- Graceful error handling — bad URLs are skipped, valid sources still process
- Raw text support — paste ICS content directly, no file hosting needed
- Structured output — clean JSON ready for databases, APIs, and spreadsheets

---

### Output data sample

Each calendar event produces one JSON object:

| Field | Type | Example |
|-------|------|---------|
| uid | string | `20210118_09lrg7@google.com` |
| summary | string | `New Year's Day` |
| description | string | `Public holiday` |
| location | string | `Conference Room B` |
| startDate | string | `2026-01-01T00:00:00.000Z` |
| endDate | string | `2026-01-02T00:00:00.000Z` |
| allDay | boolean | `true` |
| organizer | string | `Alice <alice@example.com>` |
| attendees | array | `[{email, name, role, status}]` |
| status | string | `CONFIRMED` |
| url | string | `https://meet.example.com/abc` |
| categories | array | `["Work", "Meeting"]` |
| rrule | string | `FREQ=WEEKLY;COUNT=10` |
| created | string | `2024-06-03T10:13:45.000Z` |
| lastModified | string | `2024-06-03T10:13:45.000Z` |
| icsSource | string | URL or `raw-text-1` |

---

### How much does it cost to parse calendar events?

iCal Parser uses pay-per-event pricing with tiered discounts based on your Apify subscription plan:

| Event | FREE | BRONZE | SILVER | GOLD | PLATINUM | DIAMOND |
|-------|------|--------|--------|------|----------|---------|
| Run started (one-time) | $0.005 | $0.005 | $0.005 | $0.005 | $0.005 | $0.005 |
| Per event parsed | $0.001 | $0.0009 | $0.0008 | $0.00065 | $0.0005 | $0.0004 |

**Example costs (FREE tier):**
- Parse 1 calendar with 50 events: $0.005 + 50 x $0.001 = **$0.055**
- Parse 5 calendars with 200 total events: $0.005 + 200 x $0.001 = **$0.205**
- Parse 1 calendar with 1,000 events: $0.005 + 1000 x $0.001 = **$1.005**

No proxy costs, no hidden fees. The actor runs on 256 MB memory and finishes in seconds.

---

### How to parse ICS calendar files step by step

1. Go to [iCal Parser on Apify](https://apify.com/automation-lab/ical-parser)
2. Click **Start**
3. Enter one or more ICS file URLs (e.g., a Google Calendar public link)
4. Optionally set a date range to filter events
5. Toggle "Expand recurring events" if you want individual occurrences
6. Click **Start** and wait for results
7. Download data as JSON, CSV, Excel, or connect to 2,000+ apps via integrations

---

### Input configuration

#### Calendar Input

| Field | Type | Description |
|-------|------|-------------|
| ICS file URLs | string[] | URLs of ICS/iCal files to fetch and parse |
| Raw ICS text | string[] | Paste raw ICS file content directly |

#### Filters

| Field | Type | Description |
|-------|------|-------------|
| Events from date | string | Only include events starting on or after this date (YYYY-MM-DD) |
| Events to date | string | Only include events ending on or before this date (YYYY-MM-DD) |

#### Advanced Options

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| Max events per calendar | integer | Unlimited | Cap the number of events extracted per source |
| Expand recurring events | boolean | false | Expand RRULE recurring events into individual occurrences |
| Include raw data | boolean | false | Include the raw parsed event object for debugging |

---

### Output format

Results are stored in an Apify dataset. Each event is one record with the fields shown in the data sample table above.

**Attendees** are an array of objects, each containing:
- `email` — attendee email address
- `name` — display name (if available)
- `role` — REQ-PARTICIPANT, OPT-PARTICIPANT, etc.
- `status` — ACCEPTED, DECLINED, TENTATIVE, NEEDS-ACTION

---

### Tips for best results

- **Google Calendar**: Use the public ICS link: `https://calendar.google.com/calendar/ical/{CALENDAR_ID}/public/basic.ics`
- **Outlook/Office 365**: Use the "Publish calendar" feature to get an ICS link
- **Apple Calendar**: Subscribe links use `.ics` format and work directly
- **Recurring events**: Use "Expand recurring events" to get individual occurrences. Without expansion, recurring events appear once with their RRULE string
- **Date filtering**: Use date filters to limit output to a specific time window — especially useful for large calendars with years of history
- **Performance**: The actor processes calendars sequentially. For faster results with many URLs, split across multiple runs

---

### Integrations

Connect iCal Parser output to your workflows:

- **Google Sheets** — auto-sync calendar events to a spreadsheet for team visibility
- **Zapier / Make / n8n** — trigger workflows when new events appear in a public calendar
- **Airtable** — build a searchable database of events from multiple calendars
- **Slack / Email** — get notifications when specific events are added to a calendar
- **Webhooks** — push parsed events to your own API endpoint in real-time
- **Power BI / Tableau** — visualize event patterns, busy periods, and scheduling trends

---

### API usage

#### Node.js

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

const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });

const run = await client.actor('automation-lab/ical-parser').call({
    icsUrls: ['https://www.officeholidays.com/ics/usa'],
    dateFrom: '2026-01-01',
    dateTo: '2026-12-31',
    maxEvents: 100,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Parsed ${items.length} events`);
items.forEach(event => console.log(`${event.startDate} - ${event.summary}`));
````

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")

run = client.actor("automation-lab/ical-parser").call(run_input={
    "icsUrls": ["https://www.officeholidays.com/ics/usa"],
    "dateFrom": "2026-01-01",
    "dateTo": "2026-12-31",
    "maxEvents": 100,
})

items = list(client.dataset(run["defaultDatasetId"]).iterate_items())
print(f"Parsed {len(items)} events")
for event in items:
    print(f"{event['startDate']} - {event['summary']}")
```

#### cURL

```bash
curl "https://api.apify.com/v2/acts/automation-lab~ical-parser/runs?token=YOUR_APIFY_TOKEN" \
  -X POST \
  -H "Content-Type: application/json" \
  -d '{
    "icsUrls": ["https://www.officeholidays.com/ics/usa"],
    "dateFrom": "2026-01-01",
    "dateTo": "2026-12-31",
    "maxEvents": 100
  }'
```

***

### Use with MCP (AI assistants)

Connect this actor to Claude, ChatGPT, or any MCP-compatible AI assistant.

#### Claude Code (terminal)

```bash
claude mcp add --transport http apify "https://mcp.apify.com?tools=automation-lab/ical-parser"
```

#### Claude Desktop / Cursor / VS Code

Add to your MCP config file (`claude_desktop_config.json` or `.cursor/mcp.json`):

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com?tools=automation-lab/ical-parser",
            "headers": {
                "Authorization": "Bearer YOUR_APIFY_TOKEN"
            }
        }
    }
}
```

**Example prompts:**

- *"Parse the US holiday calendar and list all holidays in 2026"*
- *"Fetch this Google Calendar ICS link and show me all events next month"*
- *"Parse these two calendar URLs and find overlapping events"*
- *"Expand the recurring events from this calendar for Q2 2026"*

***

### Is it legal to parse ICS calendar files?

iCalendar (.ics) is an open standard ([RFC 5545](https://www.ietf.org/rfc/rfc5545.txt)). Parsing publicly shared calendar files is standard practice — it is the entire purpose of the ICS format. The actor only accesses URLs you provide and does not scrape any website.

Always ensure you have permission to access any calendar URLs you provide. Public calendars (holidays, events, schedules) are freely accessible by design.

***

### FAQ

**Q: What ICS file formats are supported?**
A: Any file following the iCalendar standard (RFC 5545). This includes exports from Google Calendar, Outlook, Apple Calendar, Fastmail, Proton Calendar, Calendly, Zoom, and virtually any calendar application.

**Q: Can I parse password-protected or private calendars?**
A: The actor fetches ICS files via HTTP GET. If the calendar URL requires no authentication (like Google Calendar "public" links or Outlook "published" links), it works. For calendars requiring login, you would need to use the authenticated ICS URL that some providers offer (e.g., Google Calendar's "secret address in iCal format").

**Q: What happens if a URL is invalid or unreachable?**
A: The actor logs an error for that URL and continues processing the remaining URLs. Your run will still succeed with data from all valid sources.

**Q: How does recurring event expansion work?**
A: When "Expand recurring events" is enabled, events with RRULE patterns (e.g., `FREQ=WEEKLY;COUNT=10`) are expanded into individual occurrences within the date window. Each occurrence gets a unique UID suffix. Without expansion, you get the base event with its RRULE string.

**Q: Is there a limit on calendar size?**
A: The actor runs on 256 MB memory, which handles calendars with thousands of events easily. ICS files are text-based and typically small (a calendar with 1,000 events is usually under 1 MB).

***

### Related actors

- [automation-lab/curl-to-code-converter](https://apify.com/automation-lab/curl-to-code-converter) — Convert cURL commands to Python, JavaScript, PHP, Go, and more
- [automation-lab/base64-converter](https://apify.com/automation-lab/base64-converter) — Encode and decode base64 data
- [automation-lab/unicode-text-inspector](https://apify.com/automation-lab/unicode-text-inspector) — Inspect Unicode code points and character properties in text

# Actor input Schema

## `icsUrls` (type: `array`):

Enter URLs of ICS/iCal files to fetch and parse. Supports public calendar links (Google Calendar, Outlook, Apple Calendar, etc.).

## `icsTexts` (type: `array`):

Paste raw ICS/iCal text directly. Each entry should be a complete ICS file content starting with BEGIN:VCALENDAR.

## `dateFrom` (type: `string`):

Filter events starting on or after this date (ISO 8601 format: YYYY-MM-DD). Leave empty to include all past events.

## `dateTo` (type: `string`):

Filter events ending on or before this date (ISO 8601 format: YYYY-MM-DD). Leave empty to include all future events.

## `maxEvents` (type: `integer`):

Maximum number of events to extract per ICS source. Set to 0 for unlimited.

## `expandRecurring` (type: `boolean`):

When enabled, recurring events (daily, weekly, monthly, etc.) are expanded into individual occurrences. When disabled, recurring events appear once with their RRULE included.

## `includeRawData` (type: `boolean`):

Include the raw parsed event object in the output for debugging or advanced use cases.

## Actor input object example

```json
{
  "icsUrls": [
    "https://www.officeholidays.com/ics/usa"
  ],
  "icsTexts": [],
  "maxEvents": 100,
  "expandRecurring": false,
  "includeRawData": false
}
```

# Actor output Schema

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

No description

# API

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

## JavaScript example

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

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

// Prepare Actor input
const input = {
    "icsUrls": [
        "https://www.officeholidays.com/ics/usa"
    ],
    "icsTexts": [],
    "maxEvents": 100,
    "expandRecurring": false,
    "includeRawData": false
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation-lab/ical-parser").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 = {
    "icsUrls": ["https://www.officeholidays.com/ics/usa"],
    "icsTexts": [],
    "maxEvents": 100,
    "expandRecurring": False,
    "includeRawData": False,
}

# Run the Actor and wait for it to finish
run = client.actor("automation-lab/ical-parser").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 '{
  "icsUrls": [
    "https://www.officeholidays.com/ics/usa"
  ],
  "icsTexts": [],
  "maxEvents": 100,
  "expandRecurring": false,
  "includeRawData": false
}' |
apify call automation-lab/ical-parser --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "iCal / ICS Calendar Parser",
        "description": "Parse iCal/ICS calendar files from URLs or raw text. Extracts events with summary, start/end, location, attendees, organizer, recurrence rules, and more.",
        "version": "0.1",
        "x-build-id": "oxtUrlCnUafhCzyIc"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/automation-lab~ical-parser/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-automation-lab-ical-parser",
                "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/automation-lab~ical-parser/runs": {
            "post": {
                "operationId": "runs-sync-automation-lab-ical-parser",
                "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/automation-lab~ical-parser/run-sync": {
            "post": {
                "operationId": "run-sync-automation-lab-ical-parser",
                "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": {
                    "icsUrls": {
                        "title": "📅 ICS file URLs",
                        "type": "array",
                        "description": "Enter URLs of ICS/iCal files to fetch and parse. Supports public calendar links (Google Calendar, Outlook, Apple Calendar, etc.).",
                        "items": {
                            "type": "string"
                        }
                    },
                    "icsTexts": {
                        "title": "📝 Raw ICS text",
                        "type": "array",
                        "description": "Paste raw ICS/iCal text directly. Each entry should be a complete ICS file content starting with BEGIN:VCALENDAR.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "dateFrom": {
                        "title": "📆 Events from date",
                        "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
                        "type": "string",
                        "description": "Filter events starting on or after this date (ISO 8601 format: YYYY-MM-DD). Leave empty to include all past events."
                    },
                    "dateTo": {
                        "title": "📆 Events to date",
                        "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
                        "type": "string",
                        "description": "Filter events ending on or before this date (ISO 8601 format: YYYY-MM-DD). Leave empty to include all future events."
                    },
                    "maxEvents": {
                        "title": "⚙️ Max events per calendar",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum number of events to extract per ICS source. Set to 0 for unlimited.",
                        "default": 0
                    },
                    "expandRecurring": {
                        "title": "🔄 Expand recurring events",
                        "type": "boolean",
                        "description": "When enabled, recurring events (daily, weekly, monthly, etc.) are expanded into individual occurrences. When disabled, recurring events appear once with their RRULE included.",
                        "default": false
                    },
                    "includeRawData": {
                        "title": "🗄️ Include raw event data",
                        "type": "boolean",
                        "description": "Include the raw parsed event object in the output for debugging or advanced use cases.",
                        "default": false
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
