# Instagram Comments Scraper (`scrapeengine/instagram-comments-scraper`) Actor

📸 Instagram Comments Scraper extracts comments from posts at scale — usernames, text, timestamps, likes & replies. 🔎 Ideal for social listening, UGC mining, sentiment & influencer analysis. ⚙️ Fast, reliable, export to CSV/JSON or API. 🚀 Boost research & engagement.

- **URL**: https://apify.com/scrapeengine/instagram-comments-scraper.md
- **Developed by:** [ScrapeEngine](https://apify.com/scrapeengine) (community)
- **Categories:** Automation, Lead generation, Social media
- **Stats:** 11 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$19.99/month + usage

To use this Actor, you pay a monthly rental fee to the developer. The rent is subtracted from your prepaid usage every month after the free trial period.You also pay for the Apify platform usage, which gets cheaper the higher Apify subscription plan you have.

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

## 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

### Instagram Comments Scraper

Instagram Comments Scraper is a production-ready Apify actor that extracts structured Instagram comment data at scale — including usernames, comment text, timestamps, likes, and replies — from post and reel URLs. It eliminates manual copy‑paste and turns public conversations into clean, analyzable records. Built for marketers, developers, data analysts, and researchers, this Instagram comments extractor helps you scrape Instagram comments, automate Instagram comment data extraction, and export insights for social listening, UGC mining, sentiment analysis, and influencer tracking — all in a workflow-ready format and an Instagram comments API alternative that scales.

### 📊 What data / output can you get?

Below are the exact fields this Instagram comments scraping software outputs for each comment. Data streams in real time to the Apify Dataset and is also saved as a single JSON array under the Key-Value Store key “OUTPUT”.

| Data type | Description | Example value |
| --- | --- | --- |
| postUrl | Source Instagram post or reel URL | https://www.instagram.com/p/DN8-GjPkgjS/ |
| commentUrl | Direct link to the comment (constructed) | https://www.instagram.com/p/DN8-GjPkgjS/c/17894957058162897 |
| id | Comment ID (string) | 17894957058162897 |
| text | Comment text content | Someone point me to the Instagram logo ferris wheel NEOW!! |
| timestamp | UTC ISO date-time string | 2025-08-29T21:07:02.000Z |
| ownerUsername | Commenter’s Instagram handle | sokarlnerry |
| ownerProfilePicUrl | Public profile picture URL | https://scontent-iad3-2.cdninstagram.com/v/t51.2885-19/...jpg |
| likesCount | Number of likes on the comment | 12 |
| repliesCount | Number of replies to this comment | 2 |
| replies | Array of reply objects (same shape: id, text, timestamp, likesCount, ownerUsername, etc.) | [ { "id": "18138927151425955", ... } ] |
| owner | Nested owner object with user metadata (public) | { "username": "sokarlnerry", "is_verified": false, ... } |

Notes:
- Replies include the same core fields as comments (id, text, timestamp, likesCount, ownerUsername, ownerProfilePicUrl, repliesCount, replies[], owner, commentUrl).
- Export your dataset to CSV, JSON, or Excel via Apify. A single-file JSON export is available at Key-Value Store key “OUTPUT”. This makes it easy to download Instagram post comments and export Instagram comments to CSV.

### 🚀 Key features

- 🧭 GraphQL-powered extraction with replies  
  Uses Instagram’s comment GraphQL endpoints to collect comments and, optionally, fetch nested replies per comment for deeper conversation context — ideal for automated Instagram comments scraping.

- 🧩 Structured records with rich metadata  
  Each item includes postUrl, commentUrl, id, text, timestamp, likesCount, repliesCount, replies[], ownerUsername, ownerProfilePicUrl, and a detailed owner object — perfect for Instagram comment data extraction and analytics.

- 📦 Real-time streaming + single-file export  
  Pushes each comment to the Apify Dataset as it’s collected and writes the full result as one JSON array to Key-Value Store key “OUTPUT” — great for bulk Instagram comments downloader workflows and API consumption.

- 📚 Batch scraping from multiple URLs  
  Provide an array of direct post/reel URLs (directUrls) to scrape Instagram comments in bulk in one run. Supports both /p/ and /reel/ URLs for posts and Reels.

- 🧵 Reply control and depth limits  
  Configure includeNestedComments and maxReplies to tailor how many nested replies are fetched per parent comment.

- 🔒 Session ID–aware reliability  
  Supply your Instagram sessionid cookie (sessionId) for reliable doc_id and media_id detection. Without it, Instagram may serve different content and block extraction — essential for robust runs.

- 🛡️ Smart proxy fallback (optional)  
  If direct requests are blocked, the actor can automatically fallback to Apify datacenter and then residential proxies (proxyConfiguration) with up to 3 residential retries.

- 📈 Scoping & pagination controls  
  Limit workload with maxComments (per post) and maxReplies (per comment). Internally capped for stability to 500 comments per post and 50 replies per comment.

- 🧭 Sorting behavior (compatibility setting)  
  Popular sorting is used. The isNewestComments input is kept for compatibility but is not supported by the current GraphQL endpoint.

### 🪄 How to use Instagram Comments Scraper — step by step

1. Sign in to Apify  
   Create a free Apify account or log in.

2. Open the Instagram Comments Scraper actor  
   You’ll run it directly on the Apify platform.

3. Add your input URLs  
   Paste post/reel URLs into directUrls (e.g., https://www.instagram.com/p/SHORTCODE/). Only /p/ and /reel/ URLs are supported.

4. Provide your Instagram Session ID (recommended)  
   Set sessionId to your sessionid cookie from instagram.com after logging in. This is required for reliable extraction of doc_id and media_id.

5. Configure limits and replies  
   - maxComments: limit comments per post (runtime cap 500)  
   - includeNestedComments: true/false to fetch replies  
   - maxReplies: limit replies per comment (runtime cap 50)

6. (Optional) Configure proxy fallback  
   Use proxyConfiguration if you encounter blocks. The actor will attempt datacenter, then residential proxies with up to 3 retries.

7. Run the actor  
   The scraper fetches comments and pushes each record to the Dataset in real time. It also writes a single JSON array to the Key-Value Store key “OUTPUT”.

8. Export results  
   - Dataset: export to CSV, JSON, or Excel  
   - Key-Value Store: download the single JSON array from key “OUTPUT”

Pro tip: Automate runs and pull data via the Apify API to schedule, monitor, and feed downstream pipelines that download Instagram comments, export Instagram comments to CSV/JSON, or sync into analytics tools.

### 🎯 Use cases

| Use case | Description |
| --- | --- |
| Social listening & sentiment | Monitor audience tone and topics by scraping IG post comments at scale for brand and campaign tracking. |
| UGC mining & trend research | Extract comments from Instagram posts to surface ideas, product feedback, and emerging trends. |
| Influencer & campaign analysis | Compare engagement across posts/reels by aggregating comments, likesCount, and repliesCount. |
| Community management | Highlight FAQs and high-impact feedback to streamline responses and improve engagement. |
| Competitor monitoring | Track competitor posts’ comments to benchmark sentiment and messaging impact. |
| Data science & NLP | Build labeled datasets for sentiment or topic models with structured fields (text, timestamp, owner). |
| Academic & market research | Perform longitudinal studies on public discourse using exportable Instagram comments datasets. |
| API pipelines & automation | Orchestrate bulk Instagram comments downloader workflows and feed CSV/JSON exports into BI or CRM systems. |

### 💎 Why choose Instagram Comments Scraper?

This Instagram comment scraper tool prioritizes precision, automation, and reliability for production workflows.

- 🎯 Accurate, structured extraction with replies for deeper context
- 📚 Batch-ready input (directUrls) to scrape IG post and Reels comments in bulk
- 🔌 Developer-friendly outputs: Dataset per-record + Key-Value Store single JSON array (“OUTPUT”)
- 🧰 Works seamlessly with the Apify API for automation and data delivery
- 🛡️ Smart proxy fallback and sessionId support to improve reliability when platforms block direct requests
- 🧭 Clear sorting/limits behavior to keep runs predictable (popular sorting; caps on comments/replies)
- 🧱 More reliable than browser extensions or unstable scripts — built as a compact Apify actor

In short, it’s a production-grade Instagram comments scraper online that delivers clean, consistent outputs for analytics and automation.

### ⚖️ Is it legal / ethical to use Instagram Comments Scraper?

Yes — when done responsibly. This actor is intended to collect publicly available Instagram comments for research and analysis.

Guidelines:
- Only extract publicly visible content.
- Avoid collecting private or sensitive information.
- Comply with Instagram’s Terms of Service and applicable data protection laws (e.g., GDPR/CCPA).
- Use your own session cookie and respect rate limits and platform access policies.
- Consult your legal team for edge cases or jurisdiction-specific rules.

### 🧩 Input parameters & output format

#### Example JSON input
```json
{
  "directUrls": [
    "https://www.instagram.com/p/DN8-GjPkgjS/"
  ],
  "maxComments": 25,
  "maxReplies": 5,
  "sessionId": "YOUR_SESSIONID_COOKIE_HERE",
  "includeNestedComments": true,
  "isNewestComments": false,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
````

#### Parameters

| Field | Type | Description | Default | Required |
| --- | --- | --- | --- | --- |
| directUrls | array | Instagram post or reel URLs (e.g. https://www.instagram.com/p/SHORTCODE/) | — | No |
| maxComments | integer | Maximum comments to scrape per URL (1–500) | 10 | No |
| maxReplies | integer | Maximum replies per comment (0–50) | 5 | No |
| sessionId | string | Instagram sessionid cookie. Required for reliable extraction: without it, doc\_id and media\_id often cannot be found (Instagram serves different content when unauthenticated). Get it from your browser after logging in to instagram.com. | — | No |
| includeNestedComments | boolean | Fetch replies for each comment | true | No |
| isNewestComments | boolean | Kept for compatibility with provided script. Instagram GraphQL here only supports popular sorting. | false | No |
| proxyConfiguration | object | Optional. Used only when platform blocks direct requests: fallback to datacenter proxy, then residential proxy (3 retries). By default no proxy is used. | — | No |

Notes:

- Runtime caps are 500 comments per post and 50 replies per comment for stability.
- Without sessionId, Instagram may present a login wall or omit required identifiers, leading to incomplete or empty results.

#### Example JSON output

```json
[
  {
    "postUrl": "https://www.instagram.com/p/DN8-GjPkgjS/",
    "commentUrl": "https://www.instagram.com/p/DN8-GjPkgjS/c/17894957058162897",
    "id": "17894957058162897",
    "text": "Someone point me to the Instagram logo ferris wheel NEOW!!",
    "ownerUsername": "sokarlnerry",
    "ownerProfilePicUrl": "https://scontent-iad3-2.cdninstagram.com/v/t51.2885-19/example.jpg",
    "timestamp": "2025-08-29T21:07:02.000Z",
    "repliesCount": 2,
    "replies": [
      {
        "id": "18138927151425955",
        "text": "NO to AI images! YES to human craftsmanship!",
        "ownerUsername": "lizziemontgomerydesign",
        "ownerProfilePicUrl": "https://scontent-iad3-1.cdninstagram.com/v/t51.2885-19/example2.jpg",
        "timestamp": "2025-08-29T20:48:20.000Z",
        "repliesCount": 0,
        "replies": [],
        "likesCount": 5,
        "owner": {
          "fbid_v2": "",
          "full_name": "",
          "id": "",
          "is_mentionable": true,
          "is_private": false,
          "is_verified": false,
          "latest_reel_media": 0,
          "profile_pic_id": "",
          "profile_pic_url": "https://scontent-iad3-1.cdninstagram.com/v/t51.2885-19/example2.jpg",
          "username": "lizziemontgomerydesign"
        },
        "commentUrl": "https://www.instagram.com/p/DN8-GjPkgjS/c/17894957058162897/r/18138927151425955"
      }
    ],
    "likesCount": 12,
    "owner": {
      "fbid_v2": "",
      "full_name": "",
      "id": "",
      "is_mentionable": true,
      "is_private": false,
      "is_verified": false,
      "latest_reel_media": 0,
      "profile_pic_id": "",
      "profile_pic_url": "https://scontent-iad3-2.cdninstagram.com/v/t51.2885-19/example.jpg",
      "username": "sokarlnerry"
    }
  }
]
```

Delivery:

- Dataset: one record per comment, pushed as they are scraped.
- Key-Value Store: key “OUTPUT” contains a single JSON array with the same item shape.

Fields that may be empty/unknown:

- owner.fbid\_v2, owner.id, and owner.full\_name may be empty when not present in the public response.

### ❓ FAQ

#### Do I need to log in or provide cookies?

✅ For reliable extraction, provide your Instagram sessionId in the sessionId input. Without it, Instagram may hide required identifiers (doc\_id, media\_id) or present a login wall, resulting in partial or empty results.

#### Can I scrape Instagram Reels comments?

✅ Yes. Provide /reel/ URLs in directUrls to scrape IG Reel comments. Post URLs with /p/ are also supported.

#### Can I sort comments by newest first?

❌ Not with this actor. The isNewestComments flag is kept for compatibility, but the current GraphQL endpoint here only supports popular sorting.

#### How many comments and replies can I extract?

📈 You can set maxComments and maxReplies, but the actor caps runs to 500 comments per post and 50 replies per comment for stability.

#### Does it fetch replies to comments?

✅ Yes. Set includeNestedComments to true and control depth with maxReplies. Replies include id, text, timestamp, likesCount, ownerUsername, and more.

#### How is the output delivered and how can I export it?

💾 Each comment is pushed to the Apify Dataset during the run, and the full array is saved under Key-Value Store key “OUTPUT”. You can export datasets to CSV, JSON, or Excel or access both storages via the Apify API.

#### Do I need to use a proxy?

🛡️ Not by default. If the platform blocks requests, enable proxyConfiguration. The actor will fallback to Apify datacenter and then residential proxies with up to 3 retries.

#### Is there a way to automate and integrate with my stack?

🔌 Yes. Use the Apify API to trigger runs, fetch the Dataset or the “OUTPUT” JSON, and integrate with pipelines that download Instagram comments or export to CSV for BI/CRM systems.

#### Is there a free trial?

🎟️ Apify provides trial minutes, and this actor’s listing includes trial time (e.g., 120 minutes). Check the actor’s page on Apify for current plan details before running large jobs.

### 🚀 Final thoughts

Instagram Comments Scraper is built to extract structured Instagram comment data — complete with replies — from post and reel URLs at scale. Configure limits, add your sessionId for reliability, and stream clean records to the Dataset plus a single-file JSON for fast export. Marketers, developers, analysts, and researchers can automate Instagram comment scraping, export Instagram comments to CSV/JSON, or pull data via API for sentiment and campaign insights. Start today and power automated Instagram comment data extraction with a workflow-ready, production-grade tool.

# Actor input Schema

## `directUrls` (type: `array`):

Instagram post or reel URLs (e.g. https://www.instagram.com/p/SHORTCODE/)

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

Maximum comments to scrape per URL (1–500)

## `maxReplies` (type: `integer`):

Maximum replies per comment (0–50)

## `sessionId` (type: `string`):

Instagram sessionid cookie. Required for reliable extraction: without it, doc\_id and media\_id often cannot be found (Instagram serves different content when unauthenticated). Get it from your browser after logging in to instagram.com.

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

Fetch replies for each comment

## `isNewestComments` (type: `boolean`):

Kept for compatibility with provided script. Instagram GraphQL here only supports popular sorting.

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

Optional. Used only when platform blocks direct requests: fallback to datacenter proxy, then residential proxy (3 retries). By default no proxy is used.

## Actor input object example

```json
{
  "directUrls": [
    "https://www.instagram.com/p/DN8-GjPkgjS"
  ],
  "maxComments": 10,
  "maxReplies": 5,
  "includeNestedComments": true,
  "isNewestComments": false
}
```

# 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 = {
    "directUrls": [
        "https://www.instagram.com/p/DN8-GjPkgjS"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapeengine/instagram-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 = { "directUrls": ["https://www.instagram.com/p/DN8-GjPkgjS"] }

# Run the Actor and wait for it to finish
run = client.actor("scrapeengine/instagram-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 '{
  "directUrls": [
    "https://www.instagram.com/p/DN8-GjPkgjS"
  ]
}' |
apify call scrapeengine/instagram-comments-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Instagram Comments Scraper",
        "description": "📸 Instagram Comments Scraper extracts comments from posts at scale — usernames, text, timestamps, likes & replies. 🔎 Ideal for social listening, UGC mining, sentiment & influencer analysis. ⚙️ Fast, reliable, export to CSV/JSON or API. 🚀 Boost research & engagement.",
        "version": "0.2",
        "x-build-id": "ZBuReaYEtPQx6tZjj"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/scrapeengine~instagram-comments-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-scrapeengine-instagram-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/scrapeengine~instagram-comments-scraper/runs": {
            "post": {
                "operationId": "runs-sync-scrapeengine-instagram-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/scrapeengine~instagram-comments-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-scrapeengine-instagram-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": {
                    "directUrls": {
                        "title": "Post URLs",
                        "type": "array",
                        "description": "Instagram post or reel URLs (e.g. https://www.instagram.com/p/SHORTCODE/)",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxComments": {
                        "title": "Max comments per post",
                        "minimum": 1,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "Maximum comments to scrape per URL (1–500)",
                        "default": 10
                    },
                    "maxReplies": {
                        "title": "Max replies per comment",
                        "minimum": 0,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Maximum replies per comment (0–50)",
                        "default": 5
                    },
                    "sessionId": {
                        "title": "Session ID",
                        "type": "string",
                        "description": "Instagram sessionid cookie. Required for reliable extraction: without it, doc_id and media_id often cannot be found (Instagram serves different content when unauthenticated). Get it from your browser after logging in to instagram.com."
                    },
                    "includeNestedComments": {
                        "title": "Include replies",
                        "type": "boolean",
                        "description": "Fetch replies for each comment",
                        "default": true
                    },
                    "isNewestComments": {
                        "title": "Newest first (not supported)",
                        "type": "boolean",
                        "description": "Kept for compatibility with provided script. Instagram GraphQL here only supports popular sorting.",
                        "default": false
                    },
                    "proxyConfiguration": {
                        "title": "Proxy (fallback only)",
                        "type": "object",
                        "description": "Optional. Used only when platform blocks direct requests: fallback to datacenter proxy, then residential proxy (3 retries). By default no proxy is used."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
