# Facebook Comments Scraper (`outspoken_strategy/facebook-comments-scraper`) Actor

Scrape comments from one or MANY Facebook post URLs in a single run. Returns comment text, author, likes, reply counts and timestamps, with each comment attributed back to the post URL it came from.

- **URL**: https://apify.com/outspoken\_strategy/facebook-comments-scraper.md
- **Developed by:** [code craker](https://apify.com/outspoken_strategy) (community)
- **Categories:** Social media, News, E-commerce
- **Stats:** 3 total users, 2 monthly users, 58.8% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 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.

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

## Facebook Comments Scraper

Extract comments from **one or many Facebook posts** in a single run. Paste a list of post URLs and get back structured data — comment text, author, likes, reply counts, timestamps — with every comment linked to the post it came from.

### Features

- ✅ **Batch scraping** — pass many post URLs in one run instead of one run per post; comments are attributed back to their source post via the `postUrl` / `facebookUrl` / `inputUrl` fields.
- ✅ **Works on posts, videos, reels and group permalinks.**
- ✅ **Replies (nested comments)** — optionally expand reply threads (`includeReplies`).
- ✅ **Comment ordering** — scrape under Facebook's *All comments*, *Most relevant* or *Newest first* filter.
- ✅ **Bring your own session or use the built-in one** — paste your own Facebook cookies for a private, dedicated session, or leave it empty and use the actor's default shared session.
- ✅ **Partial results are never lost** — comments are saved to the dataset after each post, so a run that hits its time limit keeps everything scraped so far.
- ✅ **Resilient to Facebook UI changes** — comments are read from Facebook's own GraphQL data with a shape-tolerant parser, not from fragile CSS selectors.
- ✅ **Drop-in compatible** with integrations built against `apify/facebook-comments-scraper` (same `startUrls` / `resultsLimit` input, same key output fields).

### Input

```json
{
    "startUrls": [
        { "url": "https://www.facebook.com/nasa/posts/pfbid02..." },
        { "url": "https://www.facebook.com/permalink.php?story_fbid=...&id=..." }
    ],
    "maxComments": 50,
    "includeReplies": false,
    "sortComments": "all"
}
````

| Field | Type | Default | Description |
|---|---|---|---|
| `startUrls` | array | — | Post URLs as `{ "url": "..." }` objects (or plain strings). Many posts per run are supported. |
| `postUrls` | array | — | Alternative plain string list; merged with `startUrls`. |
| `maxComments` | integer | `50` | Target number of comments **per post** (not total). `resultsLimit` is an accepted alias. |
| `includeReplies` | boolean | `false` | Also expand and collect replies. `includeNestedComments` is an accepted alias. |
| `sortComments` | string | `"all"` | `all` (recommended — surfaces the most comments), `relevant`, or `newest`. |
| `cookies` | array | — | Your own Facebook session cookies (see [Authentication](#authentication)). Leave empty to use the actor's default session. |
| `proxyConfiguration` | object | Apify RESIDENTIAL | Keep residential — Facebook blocks most datacenter IPs. |

### Output

One dataset item per comment:

```json
{
    "id": "1234567890",
    "commentId": "1234567890",
    "text": "Great post!",
    "date": "2026-07-01T10:20:30.000Z",
    "timestamp": 1782642030,
    "likesCount": 12,
    "repliesCount": 3,
    "commentUrl": "https://www.facebook.com/.../posts/...?comment_id=...",
    "postUrl": "https://www.facebook.com/nasa/posts/pfbid02...",
    "facebookUrl": "https://www.facebook.com/nasa/posts/pfbid02...",
    "inputUrl": "https://www.facebook.com/nasa/posts/pfbid02...",
    "author": {
        "id": "100001",
        "name": "Jane Doe",
        "profileUrl": "https://www.facebook.com/jane",
        "avatar": "https://..."
    },
    "profileId": "100001",
    "profileName": "Jane Doe",
    "profileUrl": "https://www.facebook.com/jane",
    "profilePicture": "https://...",
    "threadingDepth": 0,
    "parentCommentId": null,
    "isReply": false,
    "scrapedAt": "2026-07-03T12:00:00.000Z"
}
```

`postUrl` / `facebookUrl` / `inputUrl` always echo the **exact input URL** the comment came from, so batched runs can be reliably split back per post.

Download the results as JSON, CSV, Excel or XML from the run's **Dataset** tab, or fetch them through the [Apify API](https://docs.apify.com/api/v2).

### Authentication

Facebook hides most comments from anonymous visitors, so the scraper runs with a logged-in session. You have two options:

#### Option 1 — your own cookies (recommended)

You get a private session that is not shared with other users:

1. Create or use a **throwaway** Facebook account — never your personal one. Disable 2FA on it.
2. Log into that account in your browser.
3. Export the cookies with a browser extension such as [Cookie-Editor](https://cookie-editor.com/) (Export → JSON).
4. Paste the JSON array into the **Facebook session cookies** input field.

The export must include the `c_user` and `xs` cookies — those two carry the session.

#### Option 2 — default session (zero setup)

Leave the cookies field empty and the actor uses its built-in default session. This is the fastest way to try the actor, but the session is **shared between all users**, so it can be rate-limited or temporarily unavailable during busy periods. For production workloads, use your own cookies.

> ⚠️ Automated access can violate Facebook's Terms of Service and accounts used for scraping can get checkpointed or banned. Only scrape public data you are allowed to access, and use a dedicated throwaway account.

### Usage tips

- **Runtime**: expect roughly 30–60 seconds per post (page load + comment expansion). Size your run timeout accordingly: `120 + 30 × number_of_posts` seconds is a safe floor.
- **Memory**: 4096 MB is the recommended run memory (a full Chrome browser runs inside the actor).
- **Proxies**: keep the default Apify RESIDENTIAL group. Datacenter IPs are widely blocked by Facebook and will produce empty results or login walls.
- **Empty results?** Check the `DEBUG_SCREENSHOT` and `DEBUG_HTML` keys in the run's key-value store — they show exactly what the browser saw. The most common causes are expired cookies, a blocked proxy IP, comments turned off on the post, or a deleted/private post.

### API / integration example

Using the [Apify JavaScript client](https://docs.apify.com/api/client/js/):

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

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

const run = await client.actor('YOUR_USERNAME/facebook-comments-scraper').call({
    startUrls: [
        { url: 'https://www.facebook.com/nasa/posts/pfbid02...' },
        { url: 'https://www.facebook.com/spacex/posts/pfbid02...' },
    ],
    maxComments: 100,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
// Group comments back per post:
const byPost = Map.groupBy(items, (c) => c.postUrl);
```

#### Migrating from `apify/facebook-comments-scraper`

This actor accepts the same core input (`startUrls` + `resultsLimit` / `maxComments`, `includeNestedComments`) and returns the same key output fields (`id`, `text`, `date`, `likesCount`, `facebookUrl`/`postUrl`/`inputUrl`, flat `profileName`/`profileId` author fields), so in most integrations you only need to change the actor ID.

### FAQ

**Why does a run need cookies at all?**
Facebook returns only a handful of comments (often none) to visitors who are not logged in. A session makes the full comment list available.

**Can it scrape comments from private groups?**
Only if the account whose cookies you provide is a member of that group.

**How many posts can I pass in one run?**
There is no hard limit — posts are processed sequentially in one browser session. For very large batches, split into runs of ~20–50 posts so each finishes within its timeout.

**Does it collect personal data?**
Comments include public author names and profile URLs. You are responsible for using scraped data in compliance with GDPR/CCPA and other applicable laws.

***

### Development

Built with the [Apify SDK](https://docs.apify.com/sdk/js/) + Playwright.

```bash
apify login   # once
apify push    # build & deploy from this directory
```

**Actor configuration for owners:**

- `FB_COOKIES` (secret env var) — the default session used when a user provides no cookies: a JSON cookie array or a `name=value; name2=value2` string.
- `FB_EMAIL` / `FB_PASSWORD` (secret env vars) — optional automated-login fallback; the resulting session is cached in a key-value store across runs.
- Permission level (Console → Settings): works under both **limited** (default) and **full** permissions. Under limited permissions the login-session cache uses an actor-owned store (`facebook-comments-session`); under full permissions it can share the `facebook-session` store with other actors of the owner.

**How it works internally:**

1. Launches Playwright Chrome through a residential proxy and restores the Facebook session (input cookies → `FB_COOKIES` → cached login → automated login, failing fast with an actionable error when no auth exists).
2. Opens each post URL and listens to Facebook's `/api/graphql` responses, extracting raw `Comment` nodes with a shape-tolerant JSON walker (no hardcoded payload paths).
3. Best-effort switches the ordering to "All comments", then repeatedly clicks "View more comments" (and reply expanders when enabled) and scrolls until the per-post target is reached or the feed runs dry.
4. Pushes items to the dataset per post and updates the run status message with live progress.
5. On failures or empty runs, saves `DEBUG_SCREENSHOT` and `DEBUG_HTML` to the run's key-value store.

### Support

Found a bug or need a field added? Open an issue or email **m83588864@gmail.com** and we'll take a look.

# Actor input Schema

## `startUrls` (type: `array`):

Facebook post URLs to scrape comments from (post permalinks — e.g. https://www.facebook.com/PAGE/posts/..., permalink.php?story\_fbid=..., /videos/..., /reel/... or group permalinks). Accepts many posts per run.

## `postUrls` (type: `array`):

Alternative to startUrls: a plain list of post URL strings. Both fields can be used together; URLs are merged and de-duplicated.

## `maxComments` (type: `integer`):

Maximum number of comments to collect for EACH post URL (not a total across posts). Higher values make runs longer.

## `includeReplies` (type: `boolean`):

Also expand and collect replies to comments. Replies have isReply=true, a threadingDepth > 0 and count toward the per-post limit. Slower when enabled.

## `sortComments` (type: `string`):

Which Facebook comment ordering to request before collecting. "All comments" surfaces the most comments and is the best choice for scraping; "Most relevant" keeps Facebook's default filter; "Newest first" is not available on every post. Switching is best-effort — if the menu is not found, the post's default ordering is used.

## `cookies` (type: `array`):

Cookies of a logged-in Facebook session as a JSON array. How to get them: 1) create/use a THROWAWAY Facebook account (never your personal one), 2) log into it in your browser, 3) export cookies with an extension such as Cookie-Editor (Export -> JSON), 4) paste the JSON array here. The "c\_user" and "xs" cookies must be present. Leave empty to use the actor's default session.

## `fbEmail` (type: `string`):

Alternative to cookies: email/phone of a throwaway Facebook account. If set together with fbPassword, the actor logs in itself and caches the session for future runs. The account must have 2FA disabled. Cookie export is more reliable — automated logins from datacenter IPs often trigger Facebook checkpoints.

## `fbPassword` (type: `string`):

Password for the account in fbEmail. Stored encrypted.

## `resultsLimit` (type: `integer`):

Alias for "Max comments per post", kept for compatibility with integrations built against apify/facebook-comments-scraper. If both are set, maxComments wins.

## `includeNestedComments` (type: `boolean`):

Alias for "Include replies", kept for compatibility with integrations built against apify/facebook-comments-scraper. Enabling either option expands replies.

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

Proxy to route traffic through. Keep Apify RESIDENTIAL proxies with a country set — Facebook blocks most datacenter IPs, and the random global residential pool often hands out dead exit IPs, so the actor defaults RESIDENTIAL to US exits when no country is chosen.

## `headless` (type: `boolean`):

Uncheck to run a headed browser (useful only for local debugging).

## Actor input object example

```json
{
  "startUrls": [],
  "postUrls": [],
  "maxComments": 50,
  "includeReplies": false,
  "sortComments": "all",
  "includeNestedComments": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  },
  "headless": true
}
```

# 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 = {
    "startUrls": [],
    "postUrls": [],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("outspoken_strategy/facebook-comments-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 = {
    "startUrls": [],
    "postUrls": [],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("outspoken_strategy/facebook-comments-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 '{
  "startUrls": [],
  "postUrls": [],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}' |
apify call outspoken_strategy/facebook-comments-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Facebook Comments Scraper",
        "description": "Scrape comments from one or MANY Facebook post URLs in a single run. Returns comment text, author, likes, reply counts and timestamps, with each comment attributed back to the post URL it came from.",
        "version": "0.0",
        "x-build-id": "1bTthKDucTrYEMeta"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/outspoken_strategy~facebook-comments-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-outspoken_strategy-facebook-comments-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/outspoken_strategy~facebook-comments-scraper/runs": {
            "post": {
                "operationId": "runs-sync-outspoken_strategy-facebook-comments-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/outspoken_strategy~facebook-comments-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-outspoken_strategy-facebook-comments-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "startUrls": {
                        "title": "Post URLs",
                        "type": "array",
                        "description": "Facebook post URLs to scrape comments from (post permalinks — e.g. https://www.facebook.com/PAGE/posts/..., permalink.php?story_fbid=..., /videos/..., /reel/... or group permalinks). Accepts many posts per run.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "postUrls": {
                        "title": "Post URLs (plain list)",
                        "type": "array",
                        "description": "Alternative to startUrls: a plain list of post URL strings. Both fields can be used together; URLs are merged and de-duplicated.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxComments": {
                        "title": "Max comments per post",
                        "minimum": 1,
                        "maximum": 2000,
                        "type": "integer",
                        "description": "Maximum number of comments to collect for EACH post URL (not a total across posts). Higher values make runs longer.",
                        "default": 50
                    },
                    "includeReplies": {
                        "title": "Include replies (nested comments)",
                        "type": "boolean",
                        "description": "Also expand and collect replies to comments. Replies have isReply=true, a threadingDepth > 0 and count toward the per-post limit. Slower when enabled.",
                        "default": false
                    },
                    "sortComments": {
                        "title": "Comment ordering",
                        "enum": [
                            "all",
                            "relevant",
                            "newest"
                        ],
                        "type": "string",
                        "description": "Which Facebook comment ordering to request before collecting. \"All comments\" surfaces the most comments and is the best choice for scraping; \"Most relevant\" keeps Facebook's default filter; \"Newest first\" is not available on every post. Switching is best-effort — if the menu is not found, the post's default ordering is used.",
                        "default": "all"
                    },
                    "cookies": {
                        "title": "Facebook session cookies",
                        "type": "array",
                        "description": "Cookies of a logged-in Facebook session as a JSON array. How to get them: 1) create/use a THROWAWAY Facebook account (never your personal one), 2) log into it in your browser, 3) export cookies with an extension such as Cookie-Editor (Export -> JSON), 4) paste the JSON array here. The \"c_user\" and \"xs\" cookies must be present. Leave empty to use the actor's default session."
                    },
                    "fbEmail": {
                        "title": "Facebook email (automated login)",
                        "type": "string",
                        "description": "Alternative to cookies: email/phone of a throwaway Facebook account. If set together with fbPassword, the actor logs in itself and caches the session for future runs. The account must have 2FA disabled. Cookie export is more reliable — automated logins from datacenter IPs often trigger Facebook checkpoints."
                    },
                    "fbPassword": {
                        "title": "Facebook password (automated login)",
                        "type": "string",
                        "description": "Password for the account in fbEmail. Stored encrypted."
                    },
                    "resultsLimit": {
                        "title": "Results limit (alias)",
                        "minimum": 1,
                        "maximum": 2000,
                        "type": "integer",
                        "description": "Alias for \"Max comments per post\", kept for compatibility with integrations built against apify/facebook-comments-scraper. If both are set, maxComments wins."
                    },
                    "includeNestedComments": {
                        "title": "Include nested comments (alias)",
                        "type": "boolean",
                        "description": "Alias for \"Include replies\", kept for compatibility with integrations built against apify/facebook-comments-scraper. Enabling either option expands replies.",
                        "default": false
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Proxy to route traffic through. Keep Apify RESIDENTIAL proxies with a country set — Facebook blocks most datacenter IPs, and the random global residential pool often hands out dead exit IPs, so the actor defaults RESIDENTIAL to US exits when no country is chosen.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ],
                            "apifyProxyCountry": "US"
                        }
                    },
                    "headless": {
                        "title": "Run browser headless",
                        "type": "boolean",
                        "description": "Uncheck to run a headed browser (useful only for local debugging).",
                        "default": true
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
