# TikTok Scraper (`silentflow/tiktok-scraper`) Actor

Scrape TikTok profiles, videos, hashtags, sounds, locations, search and comments. Get views, likes, shares, bookmarks, creator stats, video download URLs, music and captions as clean JSON. Pull followers, following and reposts too. No login. Ideal for influencer research and trend tracking.

- **URL**: https://apify.com/silentflow/tiktok-scraper.md
- **Developed by:** [SilentFlow](https://apify.com/silentflow) (community)
- **Categories:** Social media, Lead generation
- **Stats:** 4 total users, 3 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 results

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

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

## What's an Apify Actor?

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

## How to integrate an Actor?

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

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

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

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

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

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

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

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

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

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

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


# README

## TikTok Scraper

**Turn any public TikTok into structured data.** Creators, videos, hashtags, sounds, locations, and search, scraped from one actor and delivered as clean records ready for analysis. In seconds, not hours.

### How it works

![How it works](https://api.apify.com/v2/key-value-stores/RTUn5B2hUcyZcxYvL/records/how-it-works-v1.png)

### ✨ Why teams choose this over other TikTok scrapers

Juggling one scraper for profiles, another for hashtags, and a third for search? Tired of untangling nested data before you can use it? Need an account and cookies just to pull a few videos?

- 🧩 **Every TikTok surface in one actor.** Creators, videos, photos, hashtags, sounds, locations, search, comments, following lists, followers, reposts, and related videos. Stop wiring up five tools to cover one platform.
- 📊 **Analytics-ready output.** One flat record per post with views, likes, comments, shares, and bookmarks. Drop it straight into a sheet, dashboard, or model. No nested blobs to clean up.
- 🎬 **The fields you actually use.** Creator profile, video download URL, music, hashtags, captions, ad flags, pinned status, language, and mentions on every post. Plus comments with replies when you want them.
- 🔎 **Filter and sort by what matters.** Narrow profile posts by date range, minimum or maximum likes, and choose between latest, oldest, or most popular order.
- 🤝 **See who follows and who a creator follows.** Pull following or follower lists alongside post data in a single run.
- 🔄 **Capture reposts and related videos.** Scrape a profile's reposts or surface videos related to a specific post without extra setup.
- 🔀 **Mix inputs in one run.** Paste profile, hashtag, sound, and search URLs together, add keywords, and cap the output with a single field.
- 🔓 **No login, no account, no setup.** Public data only. Paste a URL or a keyword and get results.

### 🎯 What you can do with TikTok data

| Team | What they build |
|------|----------------|
| **Influencer marketing** | Shortlist creators in a niche by real views and engagement before spending a dollar on outreach |
| **Growth & social** | Track a hashtag or sound daily to catch a trend while it is still climbing |
| **Competitive research** | Pull a competitor's full video history with metrics into one sheet to see what works |
| **Content strategy** | Find the top-performing formats and sounds for a topic and brief creators with proof |
| **Brand & comms** | Read comments and replies on a viral post to gauge sentiment and spot issues early |
| **Data & ML** | Generate a labeled TikTok dataset across creators, hashtags, and search for analysis or training |

### 📥 Input parameters

| Field | Type | Description |
|-------|------|-------------|
| `startUrls` | array | TikTok URLs to scrape: creator, video, photo, hashtag (`/tag/`), sound (`/music/`), location (`/place/`), or search. |
| `keywords` | array | Search terms to scrape from TikTok search. |
| `location` | string | Region for results, as an ISO country code (for example `US`, `GB`, `DE`). |
| `dateRange` | select | Time filter for search: default, all time, yesterday, this week, this month, last 3 months, last 6 months. |
| `sortType` | select | Search sort order: relevance, most liked, or date posted. |
| `maxItems` | integer | Maximum number of posts to return across the whole run. |
| `maxComments` | integer | If greater than 0, also scrape up to this many comments for each video or photo URL. |
| `includeSearchKeywords` | boolean | Add the source keyword to each post found through search. |
| `customMapFunction` | string | A JavaScript function to reshape each output record (add, rename, or drop fields). |
| `maxFollowing` | integer | If greater than 0, also scrape up to this many accounts each profile follows. |
| `maxFollowers` | integer | If greater than 0, also scrape up to this many of each profile's followers. TikTok limits follower visibility for some accounts. |
| `scrapeReposts` | boolean | Also scrape videos a profile has reposted. |
| `scrapeRelatedVideos` | boolean | For video URLs, also scrape related videos. |
| `onlyPostsNewerThan` | string | Keep only posts on or after this date (YYYY-MM-DD). Applies to every surface. |
| `onlyPostsOlderThan` | string | Keep only posts on or before this date (YYYY-MM-DD). Applies to every surface. |
| `minLikes` | integer | Keep only posts with at least this many likes. Applies to every surface. |
| `maxLikes` | integer | Keep only posts with at most this many likes (0 = no limit). Applies to every surface. |
| `excludePinnedPosts` | boolean | Skip posts a creator has pinned to the top of their profile. |
| `profileSorting` | select | Order for a creator's videos: latest, popular, or oldest. |

### 📊 Output data

Each post is one flat record:

```json
{
  "id": "7341108653442829601",
  "title": "Its curry in a hurry from #NextLevelChef",
  "views": 27300000,
  "likes": 1900000,
  "comments": 14958,
  "shares": 41200,
  "bookmarks": 220500,
  "uploadedAtFormatted": "2024-03-01T18:24:34Z",
  "postPage": "https://www.tiktok.com/@gordonramsayofficial/video/7341108653442829601",
  "hashtags": ["nextlevelchef"],
  "channel": {
    "username": "gordonramsayofficial",
    "name": "Gordon Ramsay",
    "verified": true,
    "followers": 40800000,
    "videos": 699
  },
  "video": {
    "url": "https://v16-webapp-prime.us.tiktok.com/video/...",
    "cover": "https://...",
    "duration": 38.5
  },
  "song": {
    "title": "original sound",
    "artist": "Gordon Ramsay"
  }
}
````

When `maxComments` is set, comments are returned as their own records:

```json
{
  "id": "7636459125458682654",
  "text": "Now it looks authentic",
  "likes": 24173,
  "createTime": 1709235474,
  "replyCount": 20,
  "author": { "username": "zenobiaroneisha", "nickname": "Zee" }
}
```

### 🗂️ Data fields

| Group | Fields |
|-------|--------|
| **Post** | id, title, views, likes, comments, shares, bookmarks, uploadedAt, uploadedAtFormatted, postPage, hashtags, inputSource, isAd, isSponsored, isPinned, isSlideshow, mentions, textLanguage, stickers |
| **Creator** | channel.id, username, name, bio, avatar, verified, url, followers, following, videos, likes |
| **Video** | video.url, cover, thumbnail, width, height, ratio, duration |
| **Photo** | images (url, width, height) for photo posts |
| **Music** | song.id, title, artist, album, duration, cover |
| **Captions** | subtitle, subtitleInformation |
| **Location** | poi (name, address, city) |
| **Comment** | id, text, likes, createTime, replyCount, author, replies |
| **Profile (followers/following)** | id, username, nickname, bio, avatar, verified, followers, following, hearts, videos, secUid, url, inputSource |

### 🚀 Examples

**Pull a creator's full video history**
Add `https://www.tiktok.com/@gordonramsayofficial` to `startUrls` and set `maxItems`.

**Track a trending hashtag**
Add `https://www.tiktok.com/tag/recipe` to scrape the latest posts using that hashtag.

**Find videos using a sound**
Add a `https://www.tiktok.com/music/...` URL to pull every post built on that track.

**Search a topic across TikTok**
Set `keywords` to `["air fryer recipes"]` with `sortType` of most liked to surface the best-performing videos.

**Read the conversation on a viral video**
Add the video URL and set `maxComments` to 200 to collect comments and replies.

**See who a creator follows**
Add a creator URL to `startUrls` and set `maxFollowing` to the number of accounts you want. Each account the creator follows is returned as its own profile record.

**Pull a creator's reposts**
Add a creator URL and set `scrapeReposts` to true. Reposted videos are added to the output alongside the creator's own posts.

### 💻 Integrations

Run it from your own code with the Apify client.

**Python**

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("YOUR_USERNAME/tiktok-scraper").call(run_input={
    "startUrls": ["https://www.tiktok.com/@gordonramsayofficial"],
    "maxItems": 100,
})
for post in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(post["channel"]["username"], post["views"])
```

**JavaScript**

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

const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });
const run = await client.actor('YOUR_USERNAME/tiktok-scraper').call({
    keywords: ['air fryer recipes'],
    sortType: 'MOST_LIKED',
    maxItems: 100,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.map((p) => `${p.channel.username}: ${p.views}`));
```

Results are also available as JSON, CSV, or Excel from the dataset.

### 📈 Performance

| What | Detail |
|------|--------|
| Coverage | Creators, videos, photos, hashtags, sounds, locations, search, and comments |
| Output | One flat record per post, 50+ fields, deduplicated |
| Scale | Mix many inputs and keywords in one run; cap with `maxItems` |
| Pricing | Pay per post returned, set on the actor page |

### 💡 Tips for best results

- **Mix surfaces in one run.** Combine a creator, a hashtag, and a few keywords in the same input to cover a topic from every angle at once.
- **Use `maxItems` to control cost.** Each TikTok entry point returns a few hundred posts per query, so set the cap to what you need and add more URLs for more reach.
- **Set a region.** Use `location` to match the country you care about, since trending content differs by market.
- **Reshape on the fly.** Use `customMapFunction` to keep only the fields you need, for example just `id`, `views`, and `channel.username`.
- **Search smart.** Pair `keywords` with `sortType` of most liked to pull the strongest videos for a topic instead of the newest.

### ❓ FAQ

**Do I need a TikTok account or login?**
No. No login, no API key, no cookies. The scraper reads publicly available data.

**Can it scrape private accounts?**
No. Public profiles, videos, and comments only.

**Can I get profiles, hashtags, and search in one run?**
Yes. Mix creator, video, hashtag, sound, location, and search URLs, plus keywords, in a single input.

**Can I download the videos?**
Each post includes a `video.url` you can use to fetch the file.

**How many posts can I get from one hashtag or profile?**
TikTok serves a few hundred posts per query. For more reach, add more URLs or keywords rather than expecting one query to return everything.

**What formats can I export?**
JSON, CSV, and Excel, or pull results straight from the API.

### 📬 Support

Need something this scraper does not do yet? We ship features fast.

- Feature requests go straight to our backlog
- Custom needs? We do tailored integrations

Response time: usually under 24 hours.

# Actor input Schema

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

TikTok user, video, photo, search, tag, music, or location URLs to scrape.

## `keywords` (type: `array`):

Keywords to search on TikTok.

## `dateRange` (type: `string`):

Date filter for search results. Applies to keyword and search inputs only.

## `location` (type: `string`):

Region to retrieve results from, as an ISO 3166-1 alpha-2 country code (e.g. US, GB, DE).

## `sortType` (type: `string`):

Sort order for search results. Applies to keyword and search inputs only.

## `maxItems` (type: `integer`):

Maximum number of items to output.

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

If > 0, also scrape up to this many comments for each video/photo URL.

## `customMapFunction` (type: `string`):

JavaScript function to transform each output item. Use to rename or add fields. Not for filtering.

## `includeSearchKeywords` (type: `boolean`):

When enabled, adds the source search keyword to each item.

## `maxFollowing` (type: `integer`):

If greater than 0, also scrape up to this many accounts each profile follows.

## `maxFollowers` (type: `integer`):

If greater than 0, also scrape up to this many of each profile's followers. TikTok limits follower visibility for some accounts.

## `scrapeReposts` (type: `boolean`):

Also scrape videos a profile has reposted.

## `scrapeRelatedVideos` (type: `boolean`):

For video URLs, also scrape related videos.

## `onlyPostsNewerThan` (type: `string`):

Keep only posts on or after this date (YYYY-MM-DD). Applies to all surfaces.

## `onlyPostsOlderThan` (type: `string`):

Keep only posts on or before this date (YYYY-MM-DD). Applies to all surfaces.

## `minLikes` (type: `integer`):

Keep only posts with at least this many likes. Applies to all surfaces.

## `maxLikes` (type: `integer`):

Keep only posts with at most this many likes (0 = no limit). Applies to all surfaces.

## `excludePinnedPosts` (type: `boolean`):

Skip posts a creator has pinned to the top of their profile.

## `profileSorting` (type: `string`):

Order for a creator's videos: latest, most popular, or oldest.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.tiktok.com/@gordonramsayofficial"
  ],
  "dateRange": "DEFAULT",
  "location": "US",
  "sortType": "RELEVANCE",
  "maxItems": 1000,
  "maxComments": 0,
  "customMapFunction": "(object) => { return {...object} }",
  "maxFollowing": 0,
  "maxFollowers": 0,
  "minLikes": 0,
  "maxLikes": 0,
  "profileSorting": "latest"
}
```

# Actor output Schema

## `results` (type: `string`):

Complete post data including: id, title, views, likes, comments, shares, uploadedAt, postPage, hashtags, channel info, video metadata, and song info.

# 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.tiktok.com/@gordonramsayofficial"
    ],
    "customMapFunction": (object) => { return {...object} }
};

// Run the Actor and wait for it to finish
const run = await client.actor("silentflow/tiktok-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.tiktok.com/@gordonramsayofficial"],
    "customMapFunction": "(object) => { return {...object} }",
}

# Run the Actor and wait for it to finish
run = client.actor("silentflow/tiktok-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.tiktok.com/@gordonramsayofficial"
  ],
  "customMapFunction": "(object) => { return {...object} }"
}' |
apify call silentflow/tiktok-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "TikTok Scraper",
        "description": "Scrape TikTok profiles, videos, hashtags, sounds, locations, search and comments. Get views, likes, shares, bookmarks, creator stats, video download URLs, music and captions as clean JSON. Pull followers, following and reposts too. No login. Ideal for influencer research and trend tracking.",
        "version": "1.0",
        "x-build-id": "ckueRfuOI4lRiCsWm"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/silentflow~tiktok-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-silentflow-tiktok-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/silentflow~tiktok-scraper/runs": {
            "post": {
                "operationId": "runs-sync-silentflow-tiktok-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/silentflow~tiktok-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-silentflow-tiktok-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": "Start URLs",
                        "type": "array",
                        "description": "TikTok user, video, photo, search, tag, music, or location URLs to scrape.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "keywords": {
                        "title": "Search Keywords",
                        "type": "array",
                        "description": "Keywords to search on TikTok.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "dateRange": {
                        "title": "Date Range",
                        "enum": [
                            "DEFAULT",
                            "ALL_TIME",
                            "YESTERDAY",
                            "THIS_WEEK",
                            "THIS_MONTH",
                            "LAST_THREE_MONTHS",
                            "LAST_SIX_MONTHS"
                        ],
                        "type": "string",
                        "description": "Date filter for search results. Applies to keyword and search inputs only.",
                        "default": "DEFAULT"
                    },
                    "location": {
                        "title": "Region",
                        "type": "string",
                        "description": "Region to retrieve results from, as an ISO 3166-1 alpha-2 country code (e.g. US, GB, DE).",
                        "default": "US"
                    },
                    "sortType": {
                        "title": "Sort Type",
                        "enum": [
                            "RELEVANCE",
                            "MOST_LIKED",
                            "DATE_POSTED"
                        ],
                        "type": "string",
                        "description": "Sort order for search results. Applies to keyword and search inputs only.",
                        "default": "RELEVANCE"
                    },
                    "maxItems": {
                        "title": "Max items",
                        "type": "integer",
                        "description": "Maximum number of items to output.",
                        "default": 1000
                    },
                    "maxComments": {
                        "title": "Max comments per post",
                        "type": "integer",
                        "description": "If > 0, also scrape up to this many comments for each video/photo URL.",
                        "default": 0
                    },
                    "customMapFunction": {
                        "title": "Custom map function",
                        "type": "string",
                        "description": "JavaScript function to transform each output item. Use to rename or add fields. Not for filtering."
                    },
                    "includeSearchKeywords": {
                        "title": "Include Search Keywords",
                        "type": "boolean",
                        "description": "When enabled, adds the source search keyword to each item."
                    },
                    "maxFollowing": {
                        "title": "Max following",
                        "type": "integer",
                        "description": "If greater than 0, also scrape up to this many accounts each profile follows.",
                        "default": 0
                    },
                    "maxFollowers": {
                        "title": "Max followers",
                        "type": "integer",
                        "description": "If greater than 0, also scrape up to this many of each profile's followers. TikTok limits follower visibility for some accounts.",
                        "default": 0
                    },
                    "scrapeReposts": {
                        "title": "Scrape reposts",
                        "type": "boolean",
                        "description": "Also scrape videos a profile has reposted."
                    },
                    "scrapeRelatedVideos": {
                        "title": "Scrape related videos",
                        "type": "boolean",
                        "description": "For video URLs, also scrape related videos."
                    },
                    "onlyPostsNewerThan": {
                        "title": "Only posts newer than",
                        "type": "string",
                        "description": "Keep only posts on or after this date (YYYY-MM-DD). Applies to all surfaces."
                    },
                    "onlyPostsOlderThan": {
                        "title": "Only posts older than",
                        "type": "string",
                        "description": "Keep only posts on or before this date (YYYY-MM-DD). Applies to all surfaces."
                    },
                    "minLikes": {
                        "title": "Min likes",
                        "type": "integer",
                        "description": "Keep only posts with at least this many likes. Applies to all surfaces.",
                        "default": 0
                    },
                    "maxLikes": {
                        "title": "Max likes",
                        "type": "integer",
                        "description": "Keep only posts with at most this many likes (0 = no limit). Applies to all surfaces.",
                        "default": 0
                    },
                    "excludePinnedPosts": {
                        "title": "Exclude pinned posts",
                        "type": "boolean",
                        "description": "Skip posts a creator has pinned to the top of their profile."
                    },
                    "profileSorting": {
                        "title": "Profile video order",
                        "enum": [
                            "latest",
                            "popular",
                            "oldest"
                        ],
                        "type": "string",
                        "description": "Order for a creator's videos: latest, most popular, or oldest.",
                        "default": "latest"
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
