# TikTok Video Scraper — Creator Feeds (`herus13/tiktok-video-scraper`) Actor

Scrape any public TikTok creator's recent videos: views, likes, comments, shares, description, music, cover, and timestamps. Browser-signed, no login.

- **URL**: https://apify.com/herus13/tiktok-video-scraper.md
- **Developed by:** [bootforge](https://apify.com/herus13) (community)
- **Categories:** Automation, Social media, Videos
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 video scrapeds

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
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

## TikTok Video Scraper

The TikTok Video Scraper is an Apify actor that extracts a public [TikTok](https://www.tiktok.com) creator's **recent videos** by handle or profile URL — no login, no account, no cookies. It returns one structured record per video: description, timestamp, view/like/comment/share counts, duration, cover image, and TikTok's CDN video link. Optionally downloads each video's file too, so you get a link that actually plays outside TikTok.

Use it for creator research, content benchmarking, trend tracking, and social-media analytics — exported to JSON, CSV, or Excel.

> **How it works:** this actor is browser-signed — it drives a real anti-detect browser (Camoufox) to obtain TikTok's request signature, so results are reliable but it is slower and pricier per unit than pure-HTTP scrapers. For profile identity and stats only (no videos), use the companion [TikTok Profile Scraper](https://apify.com/herus13/tiktok-profile-scraper).

### Table of contents

- [What the TikTok video scraper does](#what-the-tiktok-video-scraper-does)
- [How to scrape TikTok videos](#how-to-scrape-tiktok-videos)
- [TikTok video scraper input](#tiktok-video-scraper-input)
- [TikTok video data output](#tiktok-video-data-output)
- [How much it costs](#how-much-it-costs)
- [Recommended proxies for TikTok videos](#recommended-proxies-for-tiktok-videos)
- [Why this TikTok video scraper](#why-this-tiktok-video-scraper)
- [FAQ](#faq)
- [Rate this actor](#rate-this-actor-)
- [Related actors](#related-actors)

### What the TikTok video scraper does

- 🔓 **No login required** — anonymous, browser-signed extraction; no TikTok account, password, or session cookie.
- 🔗 **Handle or URL input** — accepts `nasa`, `@nasa`, or `https://www.tiktok.com/@nasa`.
- 🎬 **Recent-video feed per handle** — description, timestamps, view/like/comment/share counts, duration, cover, and video URL, one row per video.
- 🎚️ **Configurable depth** — `max_videos` caps how many recent videos to pull per handle (default 30, ~one feed page).
- ⬇️ **Optional playable download link** — `download_videos` downloads each video's file and hosts it for you, so you get a `download_url` that plays anywhere (the raw `video_url` is TikTok's signed CDN link and only works from our scrape session).
- 📊 **Flat, join-ready output** — every video row carries the parent creator's `unique_id`/`sec_uid`, so it joins cleanly across handles in CSV or a dataset.
- 💵 **Pay only for delivered videos** — $0.003 per video; not-found, blocked, and errored handles are never charged. Video downloads are billed separately, per 10MB.

### How to scrape TikTok videos

1. Click **Try for free** and open the actor.
2. Add one or more `targets` (handles or profile URLs).
3. Set `max_videos` — how many recent videos to pull per handle.
4. Optional: set `max_profiles` to cap how many handles to process.
5. Keep the default **US residential** proxy prefill, then click **Start**.
6. Export the data as **JSON, CSV, or Excel**, or pull it from the [Apify API](https://docs.apify.com/api/v2).

Scrape one creator's recent videos:

```json
{
  "targets": ["nasa"],
  "max_videos": 30,
  "proxy": {"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "US"}
}
````

Scrape several handles, capped:

```json
{
  "targets": ["nasa", "@natgeo", "https://www.tiktok.com/@bbcearth"],
  "max_videos": 10,
  "max_profiles": 2,
  "proxy": {"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "US"}
}
```

Scrape with a playable download link per video:

```json
{
  "targets": ["nasa"],
  "max_videos": 10,
  "download_videos": true,
  "proxy": {"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "US"}
}
```

### TikTok video scraper input

| Field | Description |
|---|---|
| `targets` | Handles or profile URLs (`nasa`, `@nasa`, or `https://www.tiktok.com/@nasa`). Returns each creator's recent videos. Required. |
| `max_videos` | How many recent videos to fetch per handle (default 30, ~one feed page). |
| `max_profiles` | Optional cap on how many handles from `targets` to process. |
| `proxy` | Proxy config. **US residential required** — TikTok blocks datacenter and non-US IPs. Prefilled with Apify RESIDENTIAL pinned to the US. |
| `ms_token` | Optional reliability boost. Paste a fresh `msToken` cookie value from a logged-out tiktok.com session to warm-start the feed. Leave blank to let the browser mint its own; a stale token is ignored. |
| `download_videos` | Optional, off by default. Downloads each video's file and adds a `download_url` you can play/download from anywhere. Adds a per-10MB charge (see pricing below). |

### TikTok video data output

Each delivered video is one flat dataset row, keyed by `video_id` and carrying the parent creator's `unique_id`/`sec_uid`. Sample (with `download_videos: true`):

```json
{
  "unique_id": "nasa",
  "sec_uid": "MS4wLjABAAAA...",
  "video_id": "7312345678901234567",
  "description": "A new view of the Pillars of Creation from JWST.",
  "create_time": 1751500800,
  "play_count": 4200000,
  "digg_count": 310000,
  "comment_count": 5400,
  "share_count": 22000,
  "duration_sec": 34,
  "cover_url": "https://p16-sign-va.tiktokcdn.com/...",
  "video_url": "https://v16-webapp-prime.us.tiktok.com/video/tos/useast8/...&signature=...",
  "download_url": "https://api.apify.com/v2/key-value-stores/abc123/records/7312345678901234567-tiktok-video",
  "download_note": "download_url is a direct link to the video file... use download_url instead.",
  "source": "item_list",
  "scraped_at": "2026-07-07T00:00:00Z"
}
```

| Field | Description |
|---|---|
| `unique_id` | Parent creator handle the video belongs to. |
| `sec_uid` | Creator's stable TikTok ID (joins rows across handles). |
| `video_id` | Unique video ID. |
| `description` | Video caption text. |
| `create_time` | Post timestamp, Unix seconds. |
| `play_count` | View count. |
| `digg_count` | Like count. |
| `comment_count` | Comment count. |
| `share_count` | Share count. |
| `duration_sec` | Video length in seconds. |
| `cover_url` | Thumbnail/cover image URL. |
| `video_url` | TikTok's raw, signed CDN link to the video file. **Not directly playable outside our scrape session** — it's signed against the proxy IP that fetched it and returns 403 from any other IP. Set `download_videos: true` for a link that actually plays. |
| `download_url` | Only present when `download_videos: true`. A direct, playable download link (hosted in this run's Apify key-value store); its lifetime follows your Apify plan's data-retention setting. |
| `download_note` | Only present when `download_videos: true`. Short explanation of the `video_url` vs `download_url` difference above. |
| `source` | How the row was obtained (e.g. `item_list`). |
| `scraped_at` | ISO timestamp of the scrape. |

Handles that error out (not found, blocked, or fetch failure) contribute zero rows and are never charged.

### How much it costs

This actor uses **pay-per-event** pricing — you pay for the videos you scrape, not for time.

| Event | USD |
|---|---|
| Actor start (per GB memory) | $0.0001 |
| Video scraped | $0.003 |
| Video file, per 10MB (only with `download_videos: true`) | $0.02 |

| Typical run (default 2 GB) | Videos | Cost |
|---|---|---|
| Single handle, 30 videos | 30 | ~$0.0902 |
| 10 creators, 30 videos each | 300 | ~$0.9002 |
| 100 creators, 10 videos each | 1,000 | ~$3.0002 |
| Single handle, 30 videos, `download_videos: true` (~5MB avg) | 30 | ~$0.6902 |

You only pay for videos actually delivered. Handles that are not-found, blocked, or errored are **not** charged. The per-10MB video-file charge only applies when `download_videos: true` and only for videos successfully downloaded.

### Recommended proxies for TikTok videos

A **US residential** proxy is required — TikTok blocks datacenter IPs (like Apify's servers) and non-US exits. The proxy input prefills Apify's RESIDENTIAL group **pinned to the US** (`apifyProxyCountry: "US"`), and the scraper defaults any provider to a US exit unless you set a country, so the correct region is applied out of the box.

The actor supports **Apify Proxy** and external providers (Bright Data, Oxylabs, SmartProxy, or any raw proxy URL). If you run your own scrapers — inside or outside Apify — and need reliable residential IPs for TikTok, social, or e-commerce sites, we use and recommend DataImpulse (pay-as-you-go, per-country targeting, no monthly minimum):

👉 **[Get DataImpulse residential proxies](https://dataimpulse.com/?aff=404588\&utm_source=apify)** (referral link)

```json
// Apify managed proxy (easiest)
{"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "US"}

// Bright Data
{"provider": "brightdata", "username": "YOUR_USER", "password": "YOUR_PASS", "zone": "residential", "country": "US"}

// Oxylabs
{"provider": "oxylabs", "username": "YOUR_USER", "password": "YOUR_PASS", "proxy_type": "residential", "country": "US"}

// Any proxy URL
{"provider": "raw_urls", "urls": ["http://user:pass@proxy.example.com:8080"]}
```

### Why this TikTok video scraper

- **No login, no cookies** — anonymous extraction of publicly visible video data; nothing from your TikTok account is used.
- **Browser-signed reliability** — drives a real anti-detect browser (Camoufox) to produce TikTok's signed `item_list` request, without reverse-engineering the signer.
- **Flat, join-ready rows** — one row per video, each stamped with the parent creator's `unique_id`/`sec_uid` for clean cross-handle joins in CSV.
- **Honest billing** — pay only for delivered videos; not-found, blocked, and errored handles never produce rows and are never charged. If every handle fails, the run raises instead of a silent zero-result success.
- **Open source** — the underlying `tiktok-scraper` Python package ships a Typer CLI and a FastAPI server; the Apify wrapper is a thin layer.

### FAQ

**Do I need a TikTok account or login?**
No. The actor extracts only publicly visible video data anonymously — no account, password, or session cookie. It reads the same recent-video feed a logged-out visitor sees on a creator's profile page.

**Do I need a proxy?**
Yes — a US residential proxy is required. TikTok blocks requests from datacenter IPs (like Apify's servers) and from non-US exits. The proxy input prefills the easiest option: Apify RESIDENTIAL pinned to `US`, so it works out of the box.

**Which proxies work best for TikTok?**
Residential IPs with per-country targeting, pinned to the US. Apify's RESIDENTIAL group works by default; for your own scrapers we recommend [DataImpulse](https://dataimpulse.com/?aff=404588\&utm_source=apify) residential proxies (referral link) — pay-as-you-go with per-country targeting.

**Why does this actor need a browser? The profile actor doesn't.**
TikTok's video feed (`item_list`) requires a signed request that only a real browser session produces reliably. This actor drives an anti-detect browser (Camoufox) to capture that signed response, which is why it needs more memory and runs slower per handle than the HTTP-only profile actor. The optional `msToken` input can warm-start the feed on flaky IPs.

**How deep does it go — full history or just recent?**
Recent videos only, up to `max_videos` per handle (default 30, ~one feed page). It is not a full video-history crawler.

**Is scraping TikTok legal?**
This actor collects only publicly available video data. You are responsible for complying with TikTok's terms and applicable laws. Do not collect personal data without a lawful basis.

**Why doesn't `video_url` play in my browser or media player?**
`video_url` is TikTok's raw CDN link, signed against the specific proxy IP that fetched it — it returns 403 Forbidden from any other IP, regardless of headers, and isn't meant to be opened directly. Set `download_videos: true` to get a `download_url` that actually plays anywhere (see pricing above for the added cost).

### Rate this actor ⭐

If the TikTok Video Scraper saved you time, please **leave a review on its Apify Store page** — ratings help other people find it and tell us what to build next. Hit a bug or missing field? Open an issue or contact us through the actor's **Issues** tab and we'll fix it fast — recency and reliability are what keep this actor ranking.

### Related actors

Building a broader social or lead pipeline? Pair this actor with our other scrapers — same proxy config format, same Pydantic-validated output, all open source.

- **[TikTok Profile Scraper](https://apify.com/herus13/tiktok-profile-scraper)** — public TikTok profile identity and stats (nickname, bio, avatar, follower/following/heart/video counts). No login, HTTP-only, cheaper per unit.
- **[TikTok Shop Product Scraper](https://apify.com/herus13/tiktok-shop-scraper)** — scrape TikTok Shop products across 10 regions (US, GB, VN, TH, PH, MY, SG, JP, MX, BR): variants, prices, seller info, ratings, sold counts.
- **[Instagram Profile Scraper](https://apify.com/herus13/instagram-profile-scraper)** — public Instagram profiles: bio, followers, recent posts. No login.
- **[Google Maps Business & Contact Scraper](https://apify.com/herus13/google-maps-scraper)** — extract business leads with emails, phone numbers, reviews, images, and social links.

# Actor input Schema

## `targets` (type: `array`):

@handles, bare handles, or full profile URLs (https://www.tiktok.com/@lielie229). Returns each creator's recent videos.

## `max_videos` (type: `integer`):

How many recent videos to fetch per handle. Default 30 (~one feed page).

## `max_profiles` (type: `integer`):

Optional cap on how many handles to process.

## `proxy` (type: `object`):

<p><strong>Required.</strong> TikTok blocks datacenter IPs and non-US exits. Use US residential proxies.</p>
## `ms_token` (type: `string`):

<p>Optional reliability boost. TikTok's video feed stays empty until its anti-bot handshake mints an <code>msToken</code> cookie, and minting is flaky on residential IPs. Paste a fresh <code>msToken</code> cookie value from a logged-out tiktok.com browser session (DevTools → Application → Cookies) to warm-start the feed. Leave blank to let the browser mint its own. A stale token is ignored.</p>
## `download_videos` (type: `boolean`):

<p>When on, also downloads each video's file and gives you a <code>download_url</code> playable from anywhere. Off by default, <code>video_url</code> is TikTok's raw signed CDN link — it only works from our proxy's IP at scrape time and returns <strong>403</strong> if opened elsewhere.</p><p>Adds a per-10MB charge on top of the per-video price. <code>download_url</code> is hosted in this run's Apify key-value store; its lifetime follows your Apify plan's data-retention setting (7 days on Free, 31 on paid plans by default).</p>

## Actor input object example

```json
{
  "targets": [
    "lielie229"
  ],
  "max_videos": 30,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  },
  "download_videos": false
}
```

# Actor output Schema

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

TikTok videos with stats (one row per video). With download\_videos=true, rows also include download\_url (playable file link) and download\_note.

# 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 = {
    "targets": [
        "lielie229"
    ],
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("herus13/tiktok-video-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 = {
    "targets": ["lielie229"],
    "proxy": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "US",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("herus13/tiktok-video-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 '{
  "targets": [
    "lielie229"
  ],
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}' |
apify call herus13/tiktok-video-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "TikTok Video Scraper — Creator Feeds",
        "description": "Scrape any public TikTok creator's recent videos: views, likes, comments, shares, description, music, cover, and timestamps. Browser-signed, no login.",
        "version": "0.3",
        "x-build-id": "maILRX9b9fttmoauY"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/herus13~tiktok-video-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-herus13-tiktok-video-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/herus13~tiktok-video-scraper/runs": {
            "post": {
                "operationId": "runs-sync-herus13-tiktok-video-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/herus13~tiktok-video-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-herus13-tiktok-video-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": {
                    "targets": {
                        "title": "TikTok handles or profile URLs",
                        "type": "array",
                        "description": "@handles, bare handles, or full profile URLs (https://www.tiktok.com/@lielie229). Returns each creator's recent videos.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "max_videos": {
                        "title": "Max videos per handle",
                        "minimum": 1,
                        "type": "integer",
                        "description": "How many recent videos to fetch per handle. Default 30 (~one feed page).",
                        "default": 30
                    },
                    "max_profiles": {
                        "title": "Max handles",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Optional cap on how many handles to process."
                    },
                    "proxy": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "<p><strong>Required.</strong> TikTok blocks datacenter IPs and non-US exits. Use US residential proxies.</p>"
                    },
                    "ms_token": {
                        "title": "msToken (advanced, optional)",
                        "type": "string",
                        "description": "<p>Optional reliability boost. TikTok's video feed stays empty until its anti-bot handshake mints an <code>msToken</code> cookie, and minting is flaky on residential IPs. Paste a fresh <code>msToken</code> cookie value from a logged-out tiktok.com browser session (DevTools → Application → Cookies) to warm-start the feed. Leave blank to let the browser mint its own. A stale token is ignored.</p>"
                    },
                    "download_videos": {
                        "title": "Download videos (adds cost)",
                        "type": "boolean",
                        "description": "<p>When on, also downloads each video's file and gives you a <code>download_url</code> playable from anywhere. Off by default, <code>video_url</code> is TikTok's raw signed CDN link — it only works from our proxy's IP at scrape time and returns <strong>403</strong> if opened elsewhere.</p><p>Adds a per-10MB charge on top of the per-video price. <code>download_url</code> is hosted in this run's Apify key-value store; its lifetime follows your Apify plan's data-retention setting (7 days on Free, 31 on paid plans by default).</p>",
                        "default": false
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
