# Threads Scraper - Scrape threads.net Posts, No Login (`logiover/threads-scraper`) Actor

No-login Threads scraper & unofficial API alternative. Export public Threads posts, replies, profiles & engagement to CSV, JSON or Excel.

- **URL**: https://apify.com/logiover/threads-scraper.md
- **Developed by:** [Logiover](https://apify.com/logiover) (community)
- **Categories:** Social media, Marketing, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.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 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

<div align="center">

## Threads Scraper — Scrape threads.net Posts & Profiles

#### Scrape Threads (threads.com / threads.net) posts by username, post URL, or keyword/tag — text, likes, replies, reposts, quotes, media & date. No login.

<br>

![No login](https://img.shields.io/badge/✓_No_login-no_cookies-2ea44f?style=for-the-badge)
![No API key](https://img.shields.io/badge/✓_No_API_key-needed-2ea44f?style=for-the-badge)
![No browser hassle](https://img.shields.io/badge/📦_Recent_posts-per_target-1f6feb?style=for-the-badge)
![Export](https://img.shields.io/badge/Export-JSON·CSV·Excel·API-f59e0b?style=for-the-badge)
![Account safe](https://img.shields.io/badge/0%25-ban_risk-9333ea?style=for-the-badge)

<br>

**Point it at any @handle, post URL, or search keyword and pull public Threads posts with full engagement — likes, replies, reposts and quotes.**
The fast, no-API-key way to collect Threads data at scale.

</div>

---

### 📌 Overview

The **Threads Scraper** collects public posts from Meta's **Threads**
(`threads.com` / `threads.net`) in three ways:

- by **username** — walk a profile's timeline,
- by **post URL** — grab a single post plus its visible reply thread,
- by **search term or #tag** — pull matching public posts.

Every post comes back with complete metadata: **likes, replies, reposts and
quotes**, plus the text, hashtags, mentions, media (images & videos), language,
author and the post date.

> ℹ️ **Note on volume:** Threads shows logged-out visitors a limited *timeline*
> window — about **~25 posts per profile** and **~20 per search/tag** before a
> login wall. This Actor pushes far past that by **expanding reply threads**:
> each post's page also exposes its full visible reply thread (~25-30 posts), so
> one profile typically yields **300-700 posts**, not 25. Volume then scales with
> the number of seeds — point it at many handles / tags / post URLs and it
> aggregates everything (deduped by post id). See **Volume & limits** below.

It needs **no login, no cookies and no API key** — it reads only public data
through residential proxies, so there's **zero risk to any Threads or Instagram
account**.

> ✅ Add many handles, post URLs or search terms and raise `maxResults` to
> assemble an **analysis-ready Threads dataset** in a single run.

---

### ✨ Features

| | Feature | Description |
|---|---|---|
| 🧵 | **3 input modes** | Scrape by username, by post URL, or by keyword / #tag — mix them in one run. |
| 📦 | **Recent public posts** | Collects each target's most recent public posts (login-free window). |
| 📊 | **Full engagement** | Likes, replies, reposts & quotes for every post. |
| 🖼️ | **Media included** | Image and video URLs, including carousels. |
| 🏷️ | **Rich post data** | Hashtags, mentions, language, reply flag & paid-partnership flag. |
| 👤 | **Author context** | Username, full name, verified status and avatar per post. |
| 🛡️ | **Login-free & safe** | Public-page access over residential proxies — no account, no ban risk. |
| 📤 | **Any format** | Export to JSON, CSV, Excel, HTML or pull via API & webhooks. |

---

### 🎯 Who it's for

- **Content & competitor analysis** — see which Threads posts and formats win in your niche.
- **Brand & creator monitoring** — archive an account's output with engagement over time.
- **Social listening** — track keywords and #tags across public Threads conversations.
- **Data science & ML** — build labelled post datasets for NLP, sentiment & trend analysis.

---

### 🚀 Input

| Field | Type | Description |
|---|---|---|
| `usernames` | array | Threads @handles or profile URLs. e.g. `["zuck", "@mosseri"]` |
| `postUrls` | array | Threads post URLs (post + visible replies). |
| `searchTerms` | array | Keywords or #tags to search. e.g. `["ai", "#travel"]` |
| `maxResults` | integer | Max posts per target (timeline + expanded replies). `0` = unlimited (recommended). Default `0`. |
| `includeReplies` | boolean | Expand each target post's reply thread (~25-30 posts each). **Main volume multiplier.** Default `true`. |
| `expandFromProfiles` | boolean | Expand reply threads of posts collected from profiles. Default `true`. |
| `expandFromSearch` | boolean | Expand reply threads of posts returned by searches/tags. Default `false`. |
| `maxExpandPerTarget` | integer | How many of a target's posts to open for expansion. Default `30`. |
| `maxRepliesPerPost` | integer | Cap on replies kept per expanded post. Default `50`. |
| `proxyConfiguration` | object | Residential proxy (default: Apify Proxy · RESIDENTIAL · US). |

Provide **at least one** of `usernames`, `postUrls`, or `searchTerms`.

#### Example input

```json
{
  "usernames": ["zuck", "https://www.threads.com/@mosseri"],
  "searchTerms": ["#ai"],
  "maxResults": 100,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"],
    "apifyProxyCountry": "US"
  }
}
````

***

### 📤 Output

Each item is one Threads post:

```json
{
  "postId": "3906263078447871896",
  "code": "DY11ZLWG_eY",
  "url": "https://www.threads.com/@zuck/post/DY11ZLWG_eY",
  "text": "Today Biohub is sharing a major scientific advance...",
  "createdAt": "2026-05-27T...Z",
  "lang": "en",
  "likeCount": 1948,
  "replyCount": 385,
  "repostCount": 124,
  "quoteCount": 25,
  "isReply": false,
  "isPaidPartnership": false,
  "hashtags": [],
  "mentions": [],
  "media": [{ "type": "image", "url": "https://...cdninstagram.com/..." }],
  "author": {
    "id": "63055343223",
    "username": "zuck",
    "fullName": "Mark Zuckerberg",
    "isVerified": true,
    "profilePicUrl": "https://..."
  },
  "fromSource": "zuck",
  "scrapedAt": "2026-..."
}
```

| Field | Description |
|---|---|
| `postId` / `code` / `url` | Post identifiers and canonical link. |
| `text` | Full post text. |
| `createdAt` | ISO 8601 timestamp. |
| `likeCount` / `replyCount` / `repostCount` / `quoteCount` | Engagement metrics. |
| `isReply` / `isPaidPartnership` | Post flags. |
| `hashtags` / `mentions` | Parsed from the text. |
| `media` | Array of `{ type, url }` for images and videos. |
| `author` | Username, full name, verified status, avatar. |
| `fromSource` | The username, post URL, or search term this post came from. |

***

### 📈 Volume & limits (honest numbers)

Threads gates logged-out visitors. Here is what each mode actually returns,
measured live:

| Mode | Raw public window | With reply expansion |
|---|---|---|
| **Profile** (`usernames`) | ~25 posts (1 timeline page, then login wall) | **~300-700 posts** per profile |
| **Post URL** (`postUrls`) | post + full visible reply thread (~30 posts) | already includes the thread |
| **Search / tag** (`searchTerms`) | ~20 posts (no guest pagination at all) | ~20 × (replies) if `expandFromSearch` on |

**How the multiplier works:** a profile timeline gives ~25 posts before the
login wall. The Actor then opens each of those posts' pages, and each page also
embeds its **reply thread** (~25-30 more posts). Aggregating and de-duplicating
those turns ~25 into several hundred.

**Realistic max per run = (number of seeds) × (per-seed yield).** Examples:

- 10 profiles → roughly **3,000-6,000 posts**
- 50 search terms (no expansion) → ~1,000 posts
- 20 post URLs → ~600 posts

Every post is deduped by id across the whole run, so overlapping seeds never
produce duplicate rows.

**The hard cap that remains:** the **profile timeline itself** is capped at ~25
posts for logged-out access — Meta does not paginate a profile or a search
deeper without a login, and this Actor uses no login (zero ban risk). So you
cannot get a profile's *full historical* post list. What you *can* do is
multiply rows via reply threads and scale breadth across many seeds. If you need
a profile's deep history, no login-free method exists.

***

### 💡 Tips

- **Max volume:** keep `maxResults: 0` and `includeReplies: true` (defaults).
- **Even more rows:** raise `maxExpandPerTarget` / `maxRepliesPerPost`.
- **Breadth wins:** add many handles, tags and post URLs in one run — they
  aggregate and dedupe automatically.
- **Mix modes:** combine `usernames`, `postUrls` and `searchTerms` in a single run.
- **Proxies:** keep the **RESIDENTIAL** default — Threads blocks datacenter IPs.
- **Search:** prefix with `#` for tags, or use plain keywords for full-text search.

***

### ⚖️ Legal & ethical use

This Actor collects only **publicly available** Threads data and accesses **no
private or login-gated content**. You are responsible for using the data in line
with Threads' / Meta's Terms, applicable laws (including GDPR/CCPA) and privacy
regulations. Do not use scraped personal data for spam or unlawful purposes.

***

### ❓ FAQ

#### Is this a Threads API alternative?

Yes. It scrapes public Threads posts without any official Threads / Meta API,
developer account or app keys — just give it usernames, post URLs or keywords and
run. There is no public Threads data API, so this is the practical way to export
post data.

#### Does it need a Threads or Instagram login?

No. It reads public pages only — no login, no cookies you provide, no account.
There's no account involved at all, so there's zero ban risk.

#### How many posts can I get per profile?

The profile *timeline* is capped at ~25 posts for logged-out access, but with
reply expansion (on by default) the Actor also pulls each post's reply thread, so
a single profile usually yields **300-700 posts**. Run many profiles/tags in one
go to reach several thousand.

#### Can it scrape replies to a Threads post?

Yes — pass the post URL and it returns the post plus its visible reply thread
(~30 posts). This is also what powers the profile volume multiplier.

#### Which domains work — threads.com or threads.net?

Both. `threads.com` and `threads.net` handles and URLs are accepted
interchangeably.

#### Is this an unofficial Threads API for scraping without login?

Yes. There is no public Threads data API, so this Actor works as an unofficial
Threads API alternative — it scrapes public posts, profiles and replies without
any login, cookies or app keys.

#### How do I export Threads data to CSV or JSON?

Run the Actor, then download the dataset from the run's **Storage** tab or pull
it via API. Threads posts export to CSV, JSON, Excel or HTML for analysis-ready
datasets.

#### Can it scrape a Threads profile without an API key?

Yes. Point it at any @handle to scrape a public Threads profile's recent posts
and engagement — no API key, no developer account and no login required.

***

### 📝 Changelog

#### 2026-06-07

- Docs: added coverage for using the Actor as an unofficial Threads API alternative, exporting Threads data to CSV/JSON, and scraping a Threads profile without an API key.

#### 2026-06-05

- 🛡️ Reliability fix: results are no longer dropped by strict output validation — runs now complete cleanly even at high volume (thousands of results).
- ⚡ Stability & performance hardening; fresh rebuild.

# Actor input Schema

## `usernames` (type: `array`):

Threads @handles or profile URLs to scrape posts from. Examples: 'zuck', '@mosseri', 'https://www.threads.com/@natgeo'.

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

Specific Threads post URLs to scrape (the post plus its visible reply thread). Example: 'https://www.threads.com/@zuck/post/DY11ZLWG\_eY'.

## `searchTerms` (type: `array`):

Keywords or #tags to search public Threads posts for. Examples: 'ai', '#travel', 'startup'.

## `maxResults` (type: `integer`):

Maximum posts to collect per target (timeline + expanded reply threads). 0 = unlimited (recommended for max volume). With reply expansion on, a single profile can yield several hundred posts.

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

Open each target post's page to also collect its reply thread (~25-30 posts each). This is the main volume multiplier — it turns a ~26-post profile into several hundred posts. Uses cheap HTTP fetches, no extra browser.

## `expandFromProfiles` (type: `boolean`):

When 'Include reply threads' is on, also expand the reply thread of each post collected from a profile timeline.

## `expandFromSearch` (type: `boolean`):

When 'Include reply threads' is on, also expand the reply thread of each post returned by a search term / tag. Off by default (search posts come from many authors).

## `maxExpandPerTarget` (type: `integer`):

How many of a target's own posts to open for reply expansion. Higher = more rows but more HTTP requests. Default 30 covers a full profile timeline.

## `maxRepliesPerPost` (type: `integer`):

Cap on how many reply posts to keep from each expanded post page. Default 50.

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

Threads requires residential proxies. Leave the default (Apify Proxy · RESIDENTIAL group, US).

## Actor input object example

```json
{
  "usernames": [
    "zuck",
    "https://www.threads.com/@mosseri"
  ],
  "postUrls": [
    "https://www.threads.com/@zuck/post/DY11ZLWG_eY"
  ],
  "searchTerms": [
    "ai",
    "#travel"
  ],
  "maxResults": 0,
  "includeReplies": true,
  "expandFromProfiles": true,
  "expandFromSearch": false,
  "maxExpandPerTarget": 12,
  "maxRepliesPerPost": 15,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

## `fromSource` (type: `string`):

Source username / post URL / search term

## `text` (type: `string`):

Post text

## `likeCount` (type: `string`):

Likes

## `replyCount` (type: `string`):

Replies

## `repostCount` (type: `string`):

Reposts

## `createdAt` (type: `string`):

Post date

## `url` (type: `string`):

Post URL

# 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 = {
    "usernames": [
        "zuck"
    ],
    "maxExpandPerTarget": 12,
    "maxRepliesPerPost": 15,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("logiover/threads-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 = {
    "usernames": ["zuck"],
    "maxExpandPerTarget": 12,
    "maxRepliesPerPost": 15,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("logiover/threads-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 '{
  "usernames": [
    "zuck"
  ],
  "maxExpandPerTarget": 12,
  "maxRepliesPerPost": 15,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}' |
apify call logiover/threads-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Threads Scraper - Scrape threads.net Posts, No Login",
        "description": "No-login Threads scraper & unofficial API alternative. Export public Threads posts, replies, profiles & engagement to CSV, JSON or Excel.",
        "version": "1.0",
        "x-build-id": "cLoU4fvsxDZg4eqBw"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/logiover~threads-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-logiover-threads-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/logiover~threads-scraper/runs": {
            "post": {
                "operationId": "runs-sync-logiover-threads-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/logiover~threads-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-logiover-threads-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": {
                    "usernames": {
                        "title": "Threads usernames",
                        "type": "array",
                        "description": "Threads @handles or profile URLs to scrape posts from. Examples: 'zuck', '@mosseri', 'https://www.threads.com/@natgeo'.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "postUrls": {
                        "title": "Post URLs",
                        "type": "array",
                        "description": "Specific Threads post URLs to scrape (the post plus its visible reply thread). Example: 'https://www.threads.com/@zuck/post/DY11ZLWG_eY'.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "searchTerms": {
                        "title": "Search terms / tags",
                        "type": "array",
                        "description": "Keywords or #tags to search public Threads posts for. Examples: 'ai', '#travel', 'startup'.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxResults": {
                        "title": "Max results per target",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum posts to collect per target (timeline + expanded reply threads). 0 = unlimited (recommended for max volume). With reply expansion on, a single profile can yield several hundred posts.",
                        "default": 0
                    },
                    "includeReplies": {
                        "title": "Include reply threads (expand)",
                        "type": "boolean",
                        "description": "Open each target post's page to also collect its reply thread (~25-30 posts each). This is the main volume multiplier — it turns a ~26-post profile into several hundred posts. Uses cheap HTTP fetches, no extra browser.",
                        "default": true
                    },
                    "expandFromProfiles": {
                        "title": "Expand profile posts",
                        "type": "boolean",
                        "description": "When 'Include reply threads' is on, also expand the reply thread of each post collected from a profile timeline.",
                        "default": true
                    },
                    "expandFromSearch": {
                        "title": "Expand search posts",
                        "type": "boolean",
                        "description": "When 'Include reply threads' is on, also expand the reply thread of each post returned by a search term / tag. Off by default (search posts come from many authors).",
                        "default": false
                    },
                    "maxExpandPerTarget": {
                        "title": "Max posts to expand per target",
                        "minimum": 0,
                        "type": "integer",
                        "description": "How many of a target's own posts to open for reply expansion. Higher = more rows but more HTTP requests. Default 30 covers a full profile timeline.",
                        "default": 30
                    },
                    "maxRepliesPerPost": {
                        "title": "Max replies kept per post",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Cap on how many reply posts to keep from each expanded post page. Default 50.",
                        "default": 50
                    },
                    "proxyConfiguration": {
                        "title": "Proxy",
                        "type": "object",
                        "description": "Threads requires residential proxies. Leave the default (Apify Proxy · RESIDENTIAL group, US).",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ],
                            "apifyProxyCountry": "US"
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
