# Threads Scraper (`solidcode/threads-scraper`) Actor

\[💰 $2.30 / 1K] Extract public Threads profiles and posts — follower counts, bios, verified status, post text, likes, replies, reposts, media, hashtags and mentions. Paste profile URLs, @handles, or search by keyword. No login needed.

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

## Pricing

from $2.30 / 1,000 post results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

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

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Threads Scraper

Pull public profiles and posts from Threads at scale — follower counts, verified status, bios, full engagement metrics, and media in one structured feed. No login, no accounts, no manual scrolling: paste a handle, a profile link, a single post link, or a keyword and get clean JSON back. Built for social-media analysts, brand-monitoring teams, and lead-generation researchers who need public Threads data without managing logins or babysitting a browser.

### Why This Scraper?

- **Both profiles and posts in a single run** — two record types side by side: `profile` rows (handle, full name, bio, follower count, verified badge, user ID) and `post` rows (text, engagement, media), each tagged with a `recordType` so you can split them downstream.
- **20+ fields per post** — likes, replies, reposts, quotes, media type, media URLs with width/height, hashtags, mentions, external links, reply/repost flags, repost lineage, Unix timestamp, ISO date, and the canonical post URL.
- **Four input modes, auto-detected** — paste a `@handle`, a bare username, a full profile URL, or an individual post URL, and mix all four in one list. The scraper figures out what each entry is — no mode toggle to configure.
- **Keyword search built in** — type a topic like `artificial intelligence` or `world cup` and collect the matching public posts, complete with the same engagement and media fields.
- **Date-window filtering** — `postedAfter` and `postedBefore` keep only posts inside the date range you care about, so a profile sweep returns just the period you're analyzing.
- **Verified-status and follower counts on every profile** — flag influential and authentic accounts instantly with the `isVerified` badge and exact `followerCount`.
- **Media broken out per item** — photo, video, and carousel posts each return a `media` array of `{ type, url, width, height }` entries, with `mediaType` summarizing the post at a glance.
- **Hashtag and mention extraction** — every post ships clean `hashtags`, `mentions`, and `urls` arrays, parsed from the post's own link structure rather than guessed from raw text.
- **Repost lineage** — `isRepost` and `repostedFrom` distinguish genuine reposts from self-thread replies, so your reach analysis isn't polluted by in-thread chatter.

### Use Cases

**Brand Monitoring**
- Track what verified accounts and large creators are posting about your brand
- Watch engagement on your own Threads posts (likes, replies, reposts, quotes) over time
- Catch keyword mentions of your product or campaign as they surface in public search

**Influencer & Creator Research**
- Build shortlists by follower count and verified status
- Capture a creator's most recent public posts with full engagement metrics
- Compare media mix (photo vs. video vs. carousel) across candidate creators

**Lead Generation**
- Collect public profile details — handle, name, bio, follower count — for outreach lists
- Surface accounts posting about a niche topic via keyword search
- Enrich existing contact lists with verified-status and audience-size signals

**Trend & Content Analysis**
- Mine hashtags and mentions across a topic to map conversation clusters
- Measure which content formats earn the most reposts and replies
- Window posts by date to study a launch, event, or news cycle

**Competitive Intelligence**
- Benchmark a competitor's posting cadence and engagement against your own
- Track follower-count movement on rival accounts over repeated runs
- See which of a competitor's posts go viral by reposts and quote counts

### Getting Started

#### Scrape one profile

```json
{
  "startUrls": ["https://www.threads.net/@zuck"]
}
````

#### Multiple profiles, posts only

```json
{
  "startUrls": ["@zuck", "mosseri", "https://www.threads.net/@natgeo"],
  "includeProfile": false,
  "maxPostsPerProfile": 10
}
```

#### Keyword search with a date window

```json
{
  "searchQueries": ["artificial intelligence", "world cup"],
  "postedAfter": "2025-01-01",
  "postedBefore": "2025-12-31",
  "maxResults": 5
}
```

### Input Reference

#### What to Scrape

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `startUrls` | array | `["https://www.threads.net/@zuck"]` | Profile links, `@handles`, plain usernames, or individual post links — mix them freely. A profile or handle returns that profile plus its public posts; a post link returns just that post. |
| `searchQueries` | array | `[]` | Keywords or phrases to find matching public posts, e.g. `world cup`. Each keyword returns the public posts available without logging in. |

#### Profiles & Posts

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `includeProfile` | boolean | `true` | Also return the profile row (full name, bio, follower count, verified status) for each handle. Turn off if you only want posts. |
| `includePosts` | boolean | `true` | Collect each profile's public posts (text, likes, replies, reposts, media). Turn off for faster, cheaper profile-only runs. |
| `maxPostsPerProfile` | integer | `25` | Maximum public posts per profile, newest first. Set to `0` for all available. |

#### Filters & Limits

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `postedAfter` | string | `""` | Keep only posts published on or after this date, e.g. `2025-01-01`. Blank means no lower limit. |
| `postedBefore` | string | `""` | Keep only posts published on or before this date, e.g. `2025-12-31`. Blank means no upper limit. |
| `maxResults` | integer | `50` | Maximum number of profiles and search keywords to process across the whole run. Set to `0` for no limit. |

### Output

The dataset contains two record types. Use the `recordType` field to separate them, or open the **Profiles** and **Posts** views in the dataset tab.

#### Profile record

```json
{
  "recordType": "profile",
  "userId": "314216",
  "username": "zuck",
  "fullName": "Mark Zuckerberg",
  "biography": "Building the future of human connection.",
  "followerCount": 3850000,
  "isVerified": true,
  "profilePicUrl": "https://instagram.fxxx.fbcdn.net/v/zuck.jpg",
  "url": "https://www.threads.com/@zuck",
  "scrapedAt": "2026-06-28T14:02:11.482000+00:00"
}
```

| Field | Type | Description |
|-------|------|-------------|
| `recordType` | string | Always `"profile"`. |
| `userId` | string | Numeric Threads user ID. |
| `username` | string | Handle without the `@`. |
| `fullName` | string | Display name. |
| `biography` | string | Profile bio text. |
| `followerCount` | integer | Number of followers. |
| `isVerified` | boolean | Whether the account carries a verified badge. |
| `profilePicUrl` | string | Profile picture URL (highest available resolution). |
| `url` | string | Canonical profile URL. |
| `scrapedAt` | string | ISO timestamp of capture. |

#### Post record

```json
{
  "recordType": "post",
  "postId": "3141592653589793",
  "code": "Cxyz123AbCd",
  "username": "zuck",
  "fullName": "Mark Zuckerberg",
  "isVerified": true,
  "text": "Excited to share what we've been building. #AI",
  "likeCount": 48210,
  "replyCount": 1320,
  "repostCount": 905,
  "quoteCount": 211,
  "mediaType": "photo",
  "media": [{ "type": "photo", "url": "https://.../image.jpg", "width": 1080, "height": 1350 }],
  "hashtags": ["AI"],
  "mentions": ["mosseri"],
  "urls": ["https://about.fb.com/news"],
  "isReply": false,
  "isRepost": false,
  "repostedFrom": null,
  "timestamp": 1751120400,
  "date": "2026-06-28T13:00:00+00:00",
  "url": "https://www.threads.com/@zuck/post/Cxyz123AbCd",
  "scrapedAt": "2026-06-28T14:02:11.482000+00:00"
}
```

**Core fields**

| Field | Type | Description |
|-------|------|-------------|
| `recordType` | string | Always `"post"`. |
| `postId` | string | Internal post ID. |
| `code` | string | Shortcode in the post URL. |
| `username` | string | Author handle. |
| `fullName` | string | Author display name. |
| `isVerified` | boolean | Whether the author is verified. |
| `text` | string | Post caption / body text. |
| `url` | string | Canonical post URL. |
| `timestamp` | integer | Publish time as Unix epoch seconds. |
| `date` | string | Publish time as an ISO date. |
| `scrapedAt` | string | ISO timestamp of capture. |

**Engagement & thread**

| Field | Type | Description |
|-------|------|-------------|
| `likeCount` | integer | Number of likes. |
| `replyCount` | integer | Number of replies. |
| `repostCount` | integer | Number of reposts. |
| `quoteCount` | integer | Number of quote posts. |
| `isReply` | boolean | Whether the post is a reply. |
| `isRepost` | boolean | Whether the post is a genuine repost. |
| `repostedFrom` | string | Original author handle when the post is a repost, otherwise `null`. |

**Media & entities**

| Field | Type | Description |
|-------|------|-------------|
| `mediaType` | string | `text`, `photo`, `video`, or `carousel`. |
| `media` | array | Media items, each `{ type, url, width, height }`. |
| `hashtags` | array | Hashtags found in the post. |
| `mentions` | array | `@mentions` found in the post. |
| `urls` | array | External links found in the post. |

### Tips for Best Results

- **Mix entry types in one list.** `startUrls` happily accepts handles, profile links, and post links together — combine a handle sweep with a few specific post links in a single run.
- **Expect the most recent public posts per profile.** Without a login, Threads publishes roughly the latest dozen posts on a profile's public page. The scraper returns those newest posts; set a smaller `maxPostsPerProfile` if you only need the top few.
- **Keyword search returns the current public results.** Each search keyword yields the public posts Threads shows for that term — about 20 of the most recent matches per keyword. Use several focused keywords rather than one broad one to widen coverage. Search returns `post` rows only (no `profile` rows) — add the post authors' handles to `startUrls` if you also want their profile details.
- **Turn off `includePosts` for fast contact lists.** When you only need profile details (name, bio, followers, verified status), disabling posts makes runs faster and cheaper.
- **Use the date window to isolate a campaign.** Set `postedAfter` and `postedBefore` around a launch or event to drop everything outside the period you're analyzing.
- **Filter on `isVerified` and `followerCount` downstream** to rank creators and prioritize authentic, high-reach accounts for outreach.
- **Re-run on a schedule to track movement.** Follower counts and engagement change over time — repeat runs build a trend line for the accounts and topics you watch.

### Pricing

**From $2.30 per 1,000 results** — one of the most cost-effective ways to collect public Threads data. You're charged per result, with two simple rates: each profile collected costs **$4.80 per 1,000** ($0.0048 each), and each post collected costs **$2.30 per 1,000** ($0.0023 each), plus a small fixed **$0.01 start fee** per run. There are no compute or time-based charges — you pay per result, plus that one-time per-run start fee.

| Run | Profiles cost | Posts cost | Start fee | Total |
|-----|---------------|------------|-----------|-------|
| 10 profiles + 100 posts | $0.05 | $0.23 | $0.01 | **$0.29** |
| 50 profiles + 500 posts | $0.24 | $1.15 | $0.01 | **$1.40** |
| 100 profiles + 1,000 posts | $0.48 | $2.30 | $0.01 | **$2.79** |
| 500 profiles + 5,000 posts | $2.40 | $11.50 | $0.01 | **$13.91** |

Apify's loyalty discount tiers apply automatically on top of these rates — Bronze, Silver, and Gold subscribers pay progressively less, so the more you run, the lower your effective cost per result.

### Integrations

Export data in JSON, CSV, Excel, XML, or RSS. Connect to 1,500+ apps:

- **Zapier** / **Make** / **n8n** — Workflow automation
- **Google Sheets** — Direct spreadsheet export
- **Slack** / **Email** — Notifications on new results
- **Webhooks** — Trigger custom APIs on run completion
- **Apify API** — Full programmatic access

### Legal & Ethical Use

This scraper collects only publicly available Threads data — no login, no private content, no follower lists, and no data behind any access wall. Use it in line with Threads' and Meta's terms of service and all applicable laws, including data-protection regulations such as GDPR and CCPA. Do not use collected personal data for spam, harassment, or any purpose that infringes on individuals' privacy rights. You are responsible for ensuring your use of the data is lawful and ethical.

# Actor input Schema

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

Paste Threads profile links, @handles, plain usernames, or individual post links — you can mix them in one list. A profile or handle (e.g. https://www.threads.net/@zuck or just zuck) returns that profile and its public posts. A post link (e.g. https://www.threads.net/@zuck/post/Cxyz123) returns just that post. Leave blank to use the keyword search below.

## `searchQueries` (type: `array`):

Find public posts that match a topic, for example 'artificial intelligence' or 'world cup'. Each keyword returns the matching public posts available without logging in — roughly the top 20 results per keyword (Threads shows a single page of public search results). Leave blank if you are using profile or post links above.

## `includeProfile` (type: `boolean`):

Also return the profile (full name, bio, follower count, verified status) for each handle you scrape. Turn this off if you only want posts.

## `includePosts` (type: `boolean`):

Collect each profile's public posts (text, likes, replies, reposts, media). Turn this off for faster, cheaper runs when you only need profile details.

## `maxPostsPerProfile` (type: `integer`):

Maximum public posts to collect for each profile (newest first). Set to 0 for all available. Note: without logging in, Threads only exposes roughly the most recent 13 posts per profile (a public-access limit set by Threads, not this actor) — so even with a high number or 0 you will receive up to about that many per profile. Each post is returned as its own result. Only applies when 'Include Posts' is on.

## `postedAfter` (type: `string`):

Only keep posts published on or after this date, for example 2025-01-01. Leave blank for no lower limit.

## `postedBefore` (type: `string`):

Only keep posts published on or before this date, for example 2025-12-31. Leave blank for no upper limit.

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

Maximum number of profiles and search keywords to process across the whole run. Set to 0 for no limit. We recommend keeping a limit to control cost. Posts are limited separately by 'Max Posts Per Profile'.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.threads.net/@zuck"
  ],
  "searchQueries": [],
  "includeProfile": true,
  "includePosts": true,
  "maxPostsPerProfile": 25,
  "maxResults": 50
}
```

# Actor output Schema

## `profiles` (type: `string`):

Table of scraped Threads profiles with follower counts, bios, and verified status.

## `posts` (type: `string`):

Table of public posts collected, with likes, replies, reposts, and media.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

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

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "startUrls": [
        "https://www.threads.net/@zuck"
    ],
    "searchQueries": [],
    "includeProfile": true,
    "includePosts": true,
    "maxPostsPerProfile": 25,
    "postedAfter": "",
    "postedBefore": "",
    "maxResults": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("solidcode/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 = {
    "startUrls": ["https://www.threads.net/@zuck"],
    "searchQueries": [],
    "includeProfile": True,
    "includePosts": True,
    "maxPostsPerProfile": 25,
    "postedAfter": "",
    "postedBefore": "",
    "maxResults": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("solidcode/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 '{
  "startUrls": [
    "https://www.threads.net/@zuck"
  ],
  "searchQueries": [],
  "includeProfile": true,
  "includePosts": true,
  "maxPostsPerProfile": 25,
  "postedAfter": "",
  "postedBefore": "",
  "maxResults": 50
}' |
apify call solidcode/threads-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Threads Scraper",
        "description": "[💰 $2.30 / 1K] Extract public Threads profiles and posts — follower counts, bios, verified status, post text, likes, replies, reposts, media, hashtags and mentions. Paste profile URLs, @handles, or search by keyword. No login needed.",
        "version": "1.0",
        "x-build-id": "KlSbqbvT51DU04hpw"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/solidcode~threads-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-solidcode-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/solidcode~threads-scraper/runs": {
            "post": {
                "operationId": "runs-sync-solidcode-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/solidcode~threads-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-solidcode-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": {
                    "startUrls": {
                        "title": "Threads Profiles or Post URLs",
                        "type": "array",
                        "description": "Paste Threads profile links, @handles, plain usernames, or individual post links — you can mix them in one list. A profile or handle (e.g. https://www.threads.net/@zuck or just zuck) returns that profile and its public posts. A post link (e.g. https://www.threads.net/@zuck/post/Cxyz123) returns just that post. Leave blank to use the keyword search below.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "searchQueries": {
                        "title": "Search Keywords",
                        "type": "array",
                        "description": "Find public posts that match a topic, for example 'artificial intelligence' or 'world cup'. Each keyword returns the matching public posts available without logging in — roughly the top 20 results per keyword (Threads shows a single page of public search results). Leave blank if you are using profile or post links above.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "includeProfile": {
                        "title": "Include Profile Details",
                        "type": "boolean",
                        "description": "Also return the profile (full name, bio, follower count, verified status) for each handle you scrape. Turn this off if you only want posts.",
                        "default": true
                    },
                    "includePosts": {
                        "title": "Include Posts",
                        "type": "boolean",
                        "description": "Collect each profile's public posts (text, likes, replies, reposts, media). Turn this off for faster, cheaper runs when you only need profile details.",
                        "default": true
                    },
                    "maxPostsPerProfile": {
                        "title": "Max Posts Per Profile",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum public posts to collect for each profile (newest first). Set to 0 for all available. Note: without logging in, Threads only exposes roughly the most recent 13 posts per profile (a public-access limit set by Threads, not this actor) — so even with a high number or 0 you will receive up to about that many per profile. Each post is returned as its own result. Only applies when 'Include Posts' is on.",
                        "default": 25
                    },
                    "postedAfter": {
                        "title": "Posted After",
                        "type": "string",
                        "description": "Only keep posts published on or after this date, for example 2025-01-01. Leave blank for no lower limit."
                    },
                    "postedBefore": {
                        "title": "Posted Before",
                        "type": "string",
                        "description": "Only keep posts published on or before this date, for example 2025-12-31. Leave blank for no upper limit."
                    },
                    "maxResults": {
                        "title": "Max Profiles / Searches",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum number of profiles and search keywords to process across the whole run. Set to 0 for no limit. We recommend keeping a limit to control cost. Posts are limited separately by 'Max Posts Per Profile'.",
                        "default": 50
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
