# Facebook Comment scraper (`techforce.global/facebook-public-comments`) Actor

Facebook comment scraper that extracts commenter names and comment text from any public Facebook profile or Page, no login needed. Scrape recent posts, export to JSON/CSV/Excel, or send results straight to Notion, Slack, or Airtable.

- **URL**: https://apify.com/techforce.global/facebook-public-comments.md
- **Developed by:** [Techforce Global](https://apify.com/techforce.global) (community)
- **Categories:** Agents, Automation, Social media
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.50 / 1,000 results

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

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

## What's an Apify Actor?

Actors are 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

### Facebook Public Comment Tracker

Pull **every comment off a Facebook profile or Page's recent posts** — commenter name and comment text — without opening Facebook or copy-pasting a single thread.

Built for community managers, brand-safety teams, and researchers who need to know **who is saying what** on a Facebook profile's public posts, in a clean structured dataset instead of endless scrolling.

> **Paste a profile URL → scroll & collect its recent posts → pull every comment's author + text → export as JSON/CSV/Excel, or deliver straight into Notion, Slack, Jira, and more.**

---

### ⭐ Why This Actor?

- ✅ **Just paste a profile or Page URL** — no post-by-post link collecting, the Actor scrolls the timeline and finds recent posts itself.
- ✅ **Set how deep to go** — `maxPosts` controls how many posts to scan, `maxCommentsPerPost` caps how many comments come back per post.
- ✅ **Expands hidden comments automatically** — clicks through "View more comments" so you're not stuck with just the top 2–3 replies Facebook shows by default.
- ✅ **Works logged in or logged out** — runs anonymously against public content by default, or with a saved Facebook login session (`fb_state.json`) for profiles that need one.
- ✅ **Clean output per comment** — commenter name (`comment_username`) and comment text (`comment_text`) tied back to the `post_url` it came from.
- ✅ **Export-ready** — JSON, CSV, or Excel straight from the Apify dataset, or pull it via the Apify API into your own pipeline.
- ✅ **Deliver anywhere via MCP connectors** — push each post's comments straight into Notion, Slack, Jira, GitHub, Linear, Airtable, and more.

---

### 📝 Use Cases & ROI

| Use Case                           | Time Saved      | What You Get                                                                               |
| ---------------------------------- | --------------- | ------------------------------------------------------------------------------------------ |
| **Brand & reputation monitoring**  | 2–4 hrs/profile | Every commenter and comment on a Page's recent posts, without manually opening each thread |
| **Community management**           | 1–3 hrs/day     | A structured feed of recent comments to triage, moderate, or respond to                    |
| **Competitor & audience research** | 3–5 hrs/profile | What people are actually saying on a competitor's or influencer's posts                    |
| **Sentiment & keyword mining**     | 2–4 hrs/batch   | Raw comment text ready to feed into sentiment analysis or keyword search                   |

---

### 🚀 How to Use

1. Open the Actor on Apify.
2. Paste the **Profile URL** — a full Facebook profile or Page URL (e.g. `https://www.facebook.com/zuck`).
3. Set **Maximum posts** — how many recent posts to scroll through and collect (default: `3`).
4. Set **Maximum comments per post** — how many comments to pull from each collected post (default: `20`).
5. _(Optional, recommended for gated profiles)_ Run `login.py` once to open a real browser, log in manually, and save a session to `src/fb_state.json`. The Actor picks this up automatically on the next run instead of scraping logged out.
6. _(Optional)_ Pick an **MCP connector** to deliver each post's comments into Notion, Slack, Jira, etc.
7. Click **Run** — the Actor opens the profile, scrolls to collect post URLs, then visits each post to expand and extract comments.
8. Download results as JSON, CSV, or Excel from the dataset, or let the connector push them into your tools automatically.

> 🍪 **Login session**: Facebook shows more (and sometimes different) comments to logged-in sessions. If a profile's comments come back empty while logged out, generate `fb_state.json` with `login.py` and re-run.
> 🖥️ **Headful by default**: the browser currently launches with `headless=True`, since Facebook is markedly more likely to block a fully headless session.

---

### 🧩 Input Configuration

| Field                | Type      | Required | Description                                                                                                                                                                                                  |
| -------------------- | --------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `profileUrl`         | String    | ✔️ Yes   | Full Facebook profile or Page URL to scrape.                                                                                                                                                                 |
| `maxPosts`           | Integer   | Optional | Maximum number of posts to scroll through and collect from the timeline. Default: `3`.                                                                                                                       |
| `maxCommentsPerPost` | Integer   | Optional | Maximum number of comments to extract per collected post. Default: `20`.                                                                                                                                     |
| `includeReplies`     | Boolean   | Reserved | Present in the input form; not yet wired into the scraper logic.                                                                                                                                             |
| `proxyConfiguration` | Object    | Reserved | Present in the input form; the Actor does not yet route traffic through Apify Proxy.                                                                                                                         |
| `mcpConnector`       | Connector | Optional | Deliver each post's comments into a connector you've authorized (Notion, Slack, Jira, GitHub, Linear, Airtable, …).                                                                                          |
| `deliveryMode`       | Enum      | Optional | `summary` (one call with all of a post's comments joined together), `chunked` (split a long thread across a few calls/pages), `perComment` (one call per individual comment), or `none`. Default: `summary`. |
| `mcpTool`            | String    | Optional | Tool to call on the connector (e.g. `create_page`, `send_message`, `create_issue`).                                                                                                                          |
| `mcpArguments`       | Object    | Optional | Arguments for the tool; string values support `{placeholders}`.                                                                                                                                              |
| `mcpMessageTemplate` | String    | Optional | Template rendered per post/comment, exposed as the `{message}` placeholder.                                                                                                                                  |

#### Example — Scrape a profile's recent posts

```json
{
  "profileUrl": "https://www.facebook.com/zuck",
  "maxPosts": 5,
  "maxCommentsPerPost": 30
}
````

#### Example — Scrape and post each post's comments to Slack

```json
{
  "profileUrl": "https://www.facebook.com/zuck",
  "maxPosts": 5,
  "mcpConnector": "<your-slack-connector>",
  "deliveryMode": "summary",
  "mcpTool": "send_message",
  "mcpArguments": { "channel": "#comments", "text": "{message}" },
  "mcpMessageTemplate": "*Comments on {postUrl}* ({commentCount} total)\n\n{comments}"
}
```

#### Example — Scrape and create a Notion page per post (chunked for long threads)

```json
{
  "profileUrl": "https://www.facebook.com/zuck",
  "maxPosts": 10,
  "mcpConnector": "<your-notion-connector>",
  "deliveryMode": "chunked",
  "mcpTool": "create_page",
  "mcpArguments": {
    "parent": { "page_id": "<your-page-id>" },
    "pages": [
      {
        "properties": {
          "title": "Comments on {postUrl} (part {part}/{partCount})"
        },
        "content": "{comments}"
      }
    ]
  }
}
```

#### Placeholders available in arguments / template

**All modes:** `{postUrl}` · `{commentCount}` · `{message}`
**Summary / chunked modes add:** `{comments}` (comments joined as `"name: text"` lines)
**Chunked mode adds:** `{part}` · `{partCount}`
**Per-comment mode adds:** `{username}` · `{text}`

***

### 📦 Output Fields

| Field              | Description                              |
| ------------------ | ---------------------------------------- |
| `post_url`         | URL of the post the comment was found on |
| `comment_username` | Name of the person who left the comment  |
| `comment_text`     | The comment's text content               |

#### Example Output

```json
[
  {
    "post_url": "https://www.facebook.com/zuck/posts/1234567890",
    "comment_username": "Jane Doe",
    "comment_text": "This is amazing, thanks for sharing!"
  }
]
```

> You can download the dataset as JSON, HTML, CSV, or Excel directly from the Apify Console.

***

### 🔌 Integrations & Delivery

Deliver scraped comments into any MCP connector you've authorized in Apify — no glue code, no webhooks:

- **Notion** — create a page per post (use `chunked` mode for long comment threads so Notion never times out)
- **Slack / Discord** — post comment summaries to a channel
- **Jira / GitHub / Linear** — open issues or tasks from flagged comments
- **Airtable / Google Sheets** — append a structured row per post or comment
- …or any other MCP-compatible connector

Credentials stay private — delivery runs through the **Apify MCP Proxy**, so the Actor never sees your connector tokens. You can also consume the dataset directly via the **Apify API**, or wire it into **n8n, Zapier, and Make**.

> ⚙️ **Delivery modes:** `summary` sends all of a post's comments in one call, `chunked` splits a long thread across a few calls/pages, and `perComment` sends one call per individual comment. MCP delivery only runs on the Apify platform and never affects what's saved to the dataset.
> 💡 First time with a connector? Run once with a connector selected — the run log prints the connector's available tool names, so you know what to put in **Connector tool name**.

***

### 🛠️ How It Works

1. `login.py` (run once, optional) opens a real browser, lets you log into Facebook manually, and saves the session to `src/fb_state.json`.
2. `src/main.py` reads `profileUrl`, `maxPosts`, and `maxCommentsPerPost` from the input.
3. It launches Playwright (using the saved session if present), opens the profile, and scrolls the timeline to collect post URLs.
4. For each collected post, it opens the post, clicks "View more comments" to expand hidden replies, and reads the DOM to pull each comment's author and text.
5. Each comment is pushed to the dataset as `{ post_url, comment_username, comment_text }`.
6. If an MCP connector is configured, the post's comments are then delivered to it (`summary`, `chunked`, or `perComment`) — this happens after the dataset write and never blocks or discards saved data.

**Built with:** [Apify SDK for Python](https://docs.apify.com/sdk/python/) · [Playwright for Python](https://playwright.dev/python/) · [MCP](https://modelcontextprotocol.io/)

***

### 🆘 Support

For issues, custom scraping requests, or feature suggestions:

**Email**: bhavin.shah@techforceglobal.com

***

#### Need a Custom Pipeline?

Want scheduled refreshes, multi-profile batch runs, sentiment enrichment, or MCP delivery built out sooner?

#### [📅 Book a Free 15-min Consultation](https://calendly.com/techforce-infotech-pvt-ltd/intro-meeting?month=2026-01)

***

Made with ❤️ by **[Techforce](https://www.techforceglobal.com)**
Specialists in High-Performance Web Scrapers and AI Automation.

***

### Disclaimer

This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Facebook or Meta Platforms, Inc. Facebook® is a trademark of Meta Platforms, Inc.; all trademarks are property of their respective owners. The Actor is intended for scraping publicly visible posts and comments only. Do not use it to access private, friends-only, or restricted content, and do not use a saved login session to bypass access controls. Use the data responsibly and in compliance with applicable laws (including GDPR/CCPA), Facebook's Terms of Service, and any consent requirements for storing personal data such as commenter names.

# Actor input Schema

## `profileUrl` (type: `string`):

Public Facebook profile or page URL (e.g. https://www.facebook.com/{username})

## `maxPosts` (type: `integer`):

Maximum number of posts to scan from the profile

## `maxCommentsPerPost` (type: `integer`):

Maximum number of comments to extract per post

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

Extract replies to comments if available

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

Optional proxy settings.

## `mcpConnector` (type: `string`):

Optionally deliver each post's scraped comments into a connector you have authorized — Notion, Slack, Jira, GitHub, Linear, Airtable, or any MCP-compatible connector. Leave empty to only save results to the dataset.

## `deliveryMode` (type: `string`):

How to deliver each post's comments to the connector: 'summary' (one call with all of a post's comments joined together), 'chunked' (split a long comment thread across a few calls so services like Notion never time out), 'perComment' (one call per individual comment), or 'none' (save to dataset only).

## `mcpTool` (type: `string`):

Name of the tool to call on the connector (e.g. 'create\_page' for Notion, 'send\_message' for Slack, 'create\_issue' for Jira/GitHub). If unsure, run once with a connector selected — the log lists the connector's available tools.

## `mcpArguments` (type: `object`):

Arguments passed to the connector tool. String values support {placeholders}. In 'summary' mode: {postUrl}, {commentCount}, {comments} (all comments joined as "name: text" lines) and {message} (the rendered template below). In 'chunked' mode: same as summary but {comments} holds one part of the thread and {part}/{partCount} give the 1-based part number and total. In 'perComment' mode: {postUrl}, {username}, {text} and {message}. Example for Slack: {"channel": "#comments", "text": "{message}"}.

## `mcpMessageTemplate` (type: `string`):

Optional template rendered and exposed as the {message} placeholder in the tool arguments. Summary example: 'Comments on {postUrl} ({commentCount} total):\n\n{comments}'. Per-comment example: '{username}: {text}'.

## Actor input object example

```json
{
  "maxPosts": 3,
  "maxCommentsPerPost": 20,
  "includeReplies": true,
  "proxyConfiguration": {
    "useApifyProxy": false
  },
  "deliveryMode": "summary",
  "mcpTool": "",
  "mcpArguments": {},
  "mcpMessageTemplate": ""
}
```

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("techforce.global/facebook-public-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 = {}

# Run the Actor and wait for it to finish
run = client.actor("techforce.global/facebook-public-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 '{}' |
apify call techforce.global/facebook-public-comments --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Facebook Comment scraper",
        "description": "Facebook comment scraper that extracts commenter names and comment text from any public Facebook profile or Page, no login needed. Scrape recent posts, export to JSON/CSV/Excel, or send results straight to Notion, Slack, or Airtable.",
        "version": "0.1",
        "x-build-id": "EHcQgEdxvfezsHR17"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/techforce.global~facebook-public-comments/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-techforce.global-facebook-public-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/techforce.global~facebook-public-comments/runs": {
            "post": {
                "operationId": "runs-sync-techforce.global-facebook-public-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/techforce.global~facebook-public-comments/run-sync": {
            "post": {
                "operationId": "run-sync-techforce.global-facebook-public-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": [
                    "profileUrl"
                ],
                "properties": {
                    "profileUrl": {
                        "title": "Facebook Profile URL",
                        "type": "string",
                        "description": "Public Facebook profile or page URL (e.g. https://www.facebook.com/{username})"
                    },
                    "maxPosts": {
                        "title": "Max Posts",
                        "minimum": 1,
                        "maximum": 50,
                        "type": "integer",
                        "description": "Maximum number of posts to scan from the profile",
                        "default": 3
                    },
                    "maxCommentsPerPost": {
                        "title": "Max Comments Per Post",
                        "minimum": 1,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Maximum number of comments to extract per post",
                        "default": 20
                    },
                    "includeReplies": {
                        "title": "Include Replies",
                        "type": "boolean",
                        "description": "Extract replies to comments if available",
                        "default": true
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Optional proxy settings.",
                        "default": {
                            "useApifyProxy": false
                        }
                    },
                    "mcpConnector": {
                        "title": "Deliver to (MCP connector)",
                        "type": "string",
                        "description": "Optionally deliver each post's scraped comments into a connector you have authorized — Notion, Slack, Jira, GitHub, Linear, Airtable, or any MCP-compatible connector. Leave empty to only save results to the dataset."
                    },
                    "deliveryMode": {
                        "title": "Delivery mode",
                        "enum": [
                            "summary",
                            "chunked",
                            "perComment",
                            "none"
                        ],
                        "type": "string",
                        "description": "How to deliver each post's comments to the connector: 'summary' (one call with all of a post's comments joined together), 'chunked' (split a long comment thread across a few calls so services like Notion never time out), 'perComment' (one call per individual comment), or 'none' (save to dataset only).",
                        "default": "summary"
                    },
                    "mcpTool": {
                        "title": "Connector tool name",
                        "type": "string",
                        "description": "Name of the tool to call on the connector (e.g. 'create_page' for Notion, 'send_message' for Slack, 'create_issue' for Jira/GitHub). If unsure, run once with a connector selected — the log lists the connector's available tools.",
                        "default": ""
                    },
                    "mcpArguments": {
                        "title": "Connector tool arguments",
                        "type": "object",
                        "description": "Arguments passed to the connector tool. String values support {placeholders}. In 'summary' mode: {postUrl}, {commentCount}, {comments} (all comments joined as \"name: text\" lines) and {message} (the rendered template below). In 'chunked' mode: same as summary but {comments} holds one part of the thread and {part}/{partCount} give the 1-based part number and total. In 'perComment' mode: {postUrl}, {username}, {text} and {message}. Example for Slack: {\"channel\": \"#comments\", \"text\": \"{message}\"}.",
                        "default": {}
                    },
                    "mcpMessageTemplate": {
                        "title": "Message template",
                        "type": "string",
                        "description": "Optional template rendered and exposed as the {message} placeholder in the tool arguments. Summary example: 'Comments on {postUrl} ({commentCount} total):\\n\\n{comments}'. Per-comment example: '{username}: {text}'.",
                        "default": ""
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
