# LinkedIn Post Comments Scraper (No Cookies) (`data-slayer/linkedin-post-comments`) Actor

Extract root comments and available top replies from public LinkedIn post URLs, including commenter names, profile URLs, headlines, timestamps, reply totals, and reaction breakdowns. Batch up to 1,000 posts and export structured JSON, CSV, or Excel—no LinkedIn cookies or login required.

- **URL**: https://apify.com/data-slayer/linkedin-post-comments.md
- **Developed by:** [Data Slayer](https://apify.com/data-slayer) (community)
- **Categories:** Social media, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 66.7% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 post comment 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 web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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/docs.md):

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

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.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/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

## LinkedIn Post Comments Scraper (No Cookies)

Extract structured root comments and available top replies from public LinkedIn posts—including commenter profiles, timestamps, reply totals, and reaction breakdowns—without providing LinkedIn cookies or login credentials.

### Watch the demo

YouTube video coming soon.

### What this LinkedIn comments scraper returns

Turn one or many supported LinkedIn post URLs into analysis-ready comment records. Each dataset item represents one unique root comment and includes:

- Comment text, LinkedIn comment URL, ID, and timestamp
- Commenter name, headline, LinkedIn profile URL, image URL, and stable ID when available
- Total replies and the number of top replies included in the record
- Total reactions plus like, praise, empathy, appreciation, interest, and other-reaction counts
- Pinned and edited status
- The post URL, post ID, and reported root-comment count
- Available top-reply text, authors, timestamps, reactions, and URLs in a nested array

Results are stored in an Apify dataset and can be downloaded as JSON, CSV, Excel, XML, or another supported dataset format. The default Comments view is designed for analysis, while the Commenter leads view provides a compact set of flat fields for spreadsheets and CRM workflows.

### Common use cases

- Analyze the discussion and engagement around your own or relevant industry posts
- Find people publicly commenting on topics connected to your market
- Export commenter profiles for research, qualification, or responsible outreach
- Build social-listening, sentiment-analysis, and content-research datasets
- Compare reaction and reply patterns across multiple posts
- Feed structured comments into AI, BI, CRM, spreadsheet, or automation workflows

### How to scrape LinkedIn post comments

1. Copy one or more supported public LinkedIn post URLs.
2. Paste them into **LinkedIn Post URLs**.
3. Set **Maximum comments per post**, or keep the default of 100.
4. Click **Start**.
5. Open the dataset to inspect or export the comment records.

No LinkedIn account, session cookie, browser extension, or proxy configuration is requested in the input form.

### Input

The input form has two fields:

| Field | Type | Required | Default | Description |
|---|---|---:|---:|---|
| `post_urls` | array of strings | Yes | — | Add 1–1,000 supported public LinkedIn post URLs. Duplicate URLs are normalized and removed while preserving first-seen order. |
| `max_comments_per_post` | integer | No | `100` | Maximum deduplicated root comments saved per post. Accepted range: `0`–`1,000`. Use `0` to fetch all available roots, subject to a 100-page safety cap per post. Nested top replies do not count toward this limit. |

#### Supported LinkedIn post URL formats

```text
https://www.linkedin.com/feed/update/urn:li:activity:7408723748973056001
https://www.linkedin.com/posts/username_topic-activity-7408723748973056001-AbCd
https://www.linkedin.com/posts/username_topic-ugcPost-7408723748973056001-AbCd
````

Tracking parameters and fragments are removed. A comment-specific URL is normalized to its parent post; targeted single-comment scraping is not supported.

#### Input example

```json
{
  "post_urls": [
    "https://www.linkedin.com/feed/update/urn:li:activity:7408723748973056001"
  ],
  "max_comments_per_post": 100
}
```

For API migration compatibility, the runtime also accepts hidden aliases: `posts`, `postUrls`, or `linkedin_post_url` for `post_urls`, and `maxItems` for `max_comments_per_post`. The visible form and new integrations should use the canonical snake\_case fields above. Conflicting aliases or unknown keys fail validation before any comment requests are made.

### Output fields

Each dataset item is one root comment. Every declared key is present. Unavailable strings and timestamps are `null`; IDs are strings to avoid precision loss; counters are non-negative integers.

| Field | Type | Description |
|---|---|---|
| `post_url` | string | Canonical input post URL. |
| `post_id` | string or null | Numeric LinkedIn activity ID stored as a string. |
| `post_comment_count` | integer or null | Total root-comment count reported for the post when available. |
| `comment_id` | string or null | Numeric LinkedIn comment ID stored as a string. |
| `comment_url` | string or null | Direct LinkedIn comment URL. |
| `comment_text` | string or null | Root-comment text. |
| `commented_at` | string or null | UTC ISO 8601 timestamp derived from the numeric timestamp. |
| `commented_at_timestamp` | integer or null | Unix timestamp in milliseconds. |
| `is_pinned` | boolean | Whether the root comment is pinned. |
| `is_edited` | boolean | Whether the root comment is marked edited. |
| `reply_count` | integer | Total replies reported for the root comment. |
| `top_reply_count` | integer | Number of reply objects included in `top_replies`. This can be lower than `reply_count`. |
| `total_reaction_count` | integer | Sum of every non-negative reaction counter returned for the comment. |
| `like_count` | integer | Like reactions. |
| `praise_count` | integer | Praise reactions. |
| `empathy_count` | integer | Empathy reactions. |
| `appreciation_count` | integer | Appreciation reactions. |
| `interest_count` | integer | Interest reactions. |
| `other_reaction_count` | integer | Reaction counters not represented by the five named fields. |
| `commenter_id` | string or null | Stable LinkedIn member or entity ID when available. |
| `commenter_type` | string | `profile`, `company`, or `unknown`, derived from the commenter URL. |
| `commenter_name` | string or null | Commenter display name. |
| `commenter_headline` | string or null | Public commenter headline or subtitle. |
| `commenter_linkedin_url` | string or null | Public LinkedIn profile or entity URL. |
| `commenter_image_url` | string or null | Public image URL returned with the commenter. LinkedIn-hosted image URLs can expire. |
| `top_replies` | array | Available top replies normalized into the reply schema below. |

#### Top-reply fields

Each object inside `top_replies` contains:

| Field | Type | Description |
|---|---|---|
| `reply_id` | string or null | Numeric LinkedIn reply ID stored as a string. |
| `reply_url` | string or null | Direct reply URL. |
| `reply_text` | string or null | Reply text. |
| `replied_at` | string or null | UTC ISO 8601 timestamp. |
| `replied_at_timestamp` | integer or null | Unix timestamp in milliseconds. |
| `is_pinned` | boolean | Whether the reply is pinned. |
| `is_edited` | boolean | Whether the reply is marked edited. |
| `reply_count` | integer | Nested reply count reported for this reply. |
| `total_reaction_count` | integer | Total reactions on the reply. |
| `like_count` | integer | Like reactions. |
| `praise_count` | integer | Praise reactions. |
| `empathy_count` | integer | Empathy reactions. |
| `appreciation_count` | integer | Appreciation reactions. |
| `interest_count` | integer | Interest reactions. |
| `other_reaction_count` | integer | Other non-negative reaction counters. |
| `commenter_id` | string or null | Reply author's stable LinkedIn ID when available. |
| `commenter_type` | string | `profile`, `company`, or `unknown`. |
| `commenter_name` | string or null | Reply author's display name. |
| `commenter_headline` | string or null | Reply author's public headline. |
| `commenter_linkedin_url` | string or null | Reply author's LinkedIn URL. |
| `commenter_image_url` | string or null | Reply author's image URL. |

### Output example

```json
{
  "post_url": "https://www.linkedin.com/feed/update/urn:li:activity:7408723748973056001",
  "post_id": "7408723748973056001",
  "post_comment_count": 445,
  "comment_id": "7408723949095772161",
  "comment_url": "https://www.linkedin.com/feed/update/urn:li:activity:7408723748973056001?commentUrn=...",
  "comment_text": "A thoughtful example comment about the post.",
  "commented_at": "2025-12-22T04:23:56.899Z",
  "commented_at_timestamp": 1766377436899,
  "is_pinned": false,
  "is_edited": false,
  "reply_count": 2,
  "top_reply_count": 1,
  "total_reaction_count": 55,
  "like_count": 45,
  "praise_count": 0,
  "empathy_count": 7,
  "appreciation_count": 3,
  "interest_count": 0,
  "other_reaction_count": 0,
  "commenter_id": "ACoAAAExampleCommenterId",
  "commenter_type": "profile",
  "commenter_name": "Example Commenter",
  "commenter_headline": "Marketing leader",
  "commenter_linkedin_url": "https://www.linkedin.com/in/example-commenter",
  "commenter_image_url": "https://media.licdn.com/dms/image/example-profile-photo",
  "top_replies": [
    {
      "reply_id": "7408730400212037632",
      "reply_url": "https://www.linkedin.com/feed/update/urn:li:activity:7408723748973056001?replyUrn=...",
      "reply_text": "A useful follow-up reply.",
      "replied_at": "2025-12-22T04:49:34.966Z",
      "replied_at_timestamp": 1766378974966,
      "is_pinned": false,
      "is_edited": false,
      "reply_count": 0,
      "total_reaction_count": 19,
      "like_count": 17,
      "praise_count": 0,
      "empathy_count": 0,
      "appreciation_count": 0,
      "interest_count": 2,
      "other_reaction_count": 0,
      "commenter_id": "ACoAAAExampleReplyAuthorId",
      "commenter_type": "profile",
      "commenter_name": "Example Reply Author",
      "commenter_headline": "Research analyst",
      "commenter_linkedin_url": "https://www.linkedin.com/in/example-reply-author",
      "commenter_image_url": null
    }
  ]
}
```

The downloadable `example-output.json` included with this Actor definition contains the same example with complete URLs.

### Pagination, ordering, and duplicate handling

- Pagination continues automatically until the requested root-comment limit, the end of available pages, or the 100-page safety cap.
- Page size is not assumed and may vary.
- `max_comments_per_post` is applied after duplicate removal.
- Duplicate root comments keep their first occurrence, using post ID plus comment ID when available.
- Results preserve input-post order and the order returned by the comment source. The Actor does not re-sort comments by timestamp.
- Nested top replies are retained with their root comment and do not become separate dataset items.

### Run summary and partial results

The Actor writes `RUN_SUMMARY` to the default key-value store. It includes overall counts and a per-post status with:

- Input position and canonical post URL
- Status: `succeeded`, `no_results`, `partial`, `failed`, or `capped`
- Reported total comments, comments saved, and pages fetched
- Sanitized error code and message when applicable

If some posts fail, successful and partial comment rows remain available and the summary status is `partial`. If every post request fails, the summary is written before the Actor run fails. A valid post with no returned comments produces an empty dataset and `no_results`, not a fabricated error row.

### API example

Start the Actor through the Apify API using your Apify token:

```bash
curl -X POST \
  "https://api.apify.com/v2/acts/data-slayer~linkedin-post-comments/runs?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "post_urls": [
      "https://www.linkedin.com/feed/update/urn:li:activity:7408723748973056001"
    ],
    "max_comments_per_post": 100
  }'
```

You can also connect runs to Apify schedules, webhooks, Make, Zapier, Google Sheets, or an MCP-compatible workflow using Apify's standard integrations.

### Related Data Slayer LinkedIn Actors

- [LinkedIn Post Analytics Scraper](https://apify.com/data-slayer/linkedin-post-analytics-scraper) — retrieve post content and aggregate engagement analytics.
- [LinkedIn Post Reactions Scraper](https://apify.com/data-slayer/linkedin-post-reactions) — retrieve the people and entities reacting to public posts.
- [LinkedIn Post Engagers Email Finder](https://apify.com/data-slayer/linkedin-post-engagers-email-finder-no-cookies) — build enriched lead records from public post engagement.

### Frequently asked questions

#### Do I need a LinkedIn account, cookie, or login?

No. The input requires supported public LinkedIn post URLs. It does not request your LinkedIn credentials or session cookies.

#### Does the comment limit include replies?

No. `max_comments_per_post` counts unique root-comment dataset items. Available top replies are nested inside those records and do not count toward the limit.

#### Does `top_replies` contain every reply?

Not necessarily. `reply_count` is the reported total, while `top_reply_count` is the number of reply objects actually included. Treat `top_replies` as the available top-reply sample rather than a complete reply-thread guarantee.

#### What does a limit of zero mean?

`max_comments_per_post: 0` requests all available root comments, with a maximum of 100 pages per post. Large discussions can therefore take longer and consume more usage than a bounded run.

#### Can I process multiple posts in one run?

Yes. Add up to 1,000 supported post URLs. The runtime processes posts in bounded groups while preserving input-post order in the dataset.

#### Can I scrape one specific comment URL?

No. Comment-specific URLs are normalized to their parent post. The Actor extracts root comments from the post according to the configured limit.

#### Why can `post_comment_count` differ from the number of dataset rows?

The reported count describes available root comments at the source. Your configured limit, duplicate removal, page cap, unavailable pages, or source changes can result in fewer saved rows.

### Responsible use

Use the Actor and its output responsibly and in accordance with applicable laws, platform terms, and your organization's data policies. Avoid using personal data for unsolicited, discriminatory, deceptive, or harmful activity.

This independent Actor is not affiliated with, endorsed by, or sponsored by LinkedIn Corporation. LinkedIn is a trademark of its respective owner.

### Support

If a supported public post produces an unexpected result, open an issue from the Actor's **Issues** tab and include the run ID, input URL format, and observed behavior. Do not include credentials or private data.

# Actor input Schema

## `post_urls` (type: `array`):

Required. Add 1–1,000 public LinkedIn post URLs. Supported formats include linkedin.com/posts/…-activity-…, linkedin.com/posts/…-ugcPost-…, and linkedin.com/feed/update/urn:li:activity:…. Tracking parameters are removed. Comment-specific URLs are normalized to their parent post; targeted single-comment scraping is not supported.

## `max_comments_per_post` (type: `integer`):

Maximum number of root comments to save for each post. Reply data returned with those comments does not count toward this limit. Enter 0 to fetch all available comments, with a 100-page safety cap per post.

## Actor input object example

```json
{
  "post_urls": [
    "https://www.linkedin.com/feed/update/urn:li:activity:7408723748973056001"
  ],
  "max_comments_per_post": 100
}
```

# Actor output Schema

## `results` (type: `string`):

One dataset item per unique root comment, in input-post and source order.

## `run_summary` (type: `string`):

Per-post completion, page, count, and sanitized error details.

# 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 = {
    "post_urls": [
        "https://www.linkedin.com/feed/update/urn:li:activity:7408723748973056001"
    ],
    "max_comments_per_post": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("data-slayer/linkedin-post-comments").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 = {
    "post_urls": ["https://www.linkedin.com/feed/update/urn:li:activity:7408723748973056001"],
    "max_comments_per_post": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("data-slayer/linkedin-post-comments").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 '{
  "post_urls": [
    "https://www.linkedin.com/feed/update/urn:li:activity:7408723748973056001"
  ],
  "max_comments_per_post": 100
}' |
apify call data-slayer/linkedin-post-comments --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=data-slayer/linkedin-post-comments",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "LinkedIn Post Comments Scraper (No Cookies)",
        "description": "Extract root comments and available top replies from public LinkedIn post URLs, including commenter names, profile URLs, headlines, timestamps, reply totals, and reaction breakdowns. Batch up to 1,000 posts and export structured JSON, CSV, or Excel—no LinkedIn cookies or login required.",
        "version": "1.0",
        "x-build-id": "hU382VZUUgbeMWiDN"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/data-slayer~linkedin-post-comments/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-data-slayer-linkedin-post-comments",
                "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/data-slayer~linkedin-post-comments/runs": {
            "post": {
                "operationId": "runs-sync-data-slayer-linkedin-post-comments",
                "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/data-slayer~linkedin-post-comments/run-sync": {
            "post": {
                "operationId": "run-sync-data-slayer-linkedin-post-comments",
                "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": [
                    "post_urls"
                ],
                "properties": {
                    "post_urls": {
                        "title": "LinkedIn Post URLs",
                        "minItems": 1,
                        "maxItems": 1000,
                        "uniqueItems": true,
                        "type": "array",
                        "description": "Required. Add 1–1,000 public LinkedIn post URLs. Supported formats include linkedin.com/posts/…-activity-…, linkedin.com/posts/…-ugcPost-…, and linkedin.com/feed/update/urn:li:activity:…. Tracking parameters are removed. Comment-specific URLs are normalized to their parent post; targeted single-comment scraping is not supported.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "max_comments_per_post": {
                        "title": "Maximum comments per post",
                        "minimum": 0,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Maximum number of root comments to save for each post. Reply data returned with those comments does not count toward this limit. Enter 0 to fetch all available comments, with a 100-page safety cap per post."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
