# 🎵 TikTok Explorer (`jupri/tiktok`) Actor

💫 All-in-One TiKToK Scraper

- **URL**: https://apify.com/jupri/tiktok.md
- **Developed by:** [cat](https://apify.com/jupri) (community)
- **Categories:** Social media, Videos
- **Stats:** 94 total users, 0 monthly users, 100.0% runs succeeded, 7 bookmarks
- **User rating**: No ratings yet

## Pricing

$5.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

## Welcome to TikTok Scraper

![dont be sad readme is here](https://raw.githubusercontent.com/JupriGH/resources/main/cats/catframe.png)

### 🎵 About TikTok.com

<img src="https://upload.wikimedia.org/wikipedia/en/a/a9/TikTok_logo.svg">

**TikTok**, whose  [mainland Chinese](https://en.wikipedia.org/wiki/Mainland_China "Mainland China")  counterpart is  **Douyin**,[[a]](https://en.wikipedia.org/wiki/TikTok#cite_note-3)[[3]](https://en.wikipedia.org/wiki/TikTok#cite_note-citizenlab/tiktok-douyin-4)  is a short-form  [video hosting service](https://en.wikipedia.org/wiki/Online_video_platform "Online video platform")  owned by Chinese internet company  [ByteDance](https://en.wikipedia.org/wiki/ByteDance "ByteDance"). It hosts user-submitted videos, which can range in duration from three seconds to 10 minutes.[[4]](https://en.wikipedia.org/wiki/TikTok#cite_note-3_Minutes-5)  It can be accessed with a  [smart phone](https://en.wikipedia.org/wiki/Smart_phone "Smart phone")  [app](https://en.wikipedia.org/wiki/Software_application "Software application").

Since its launch, TikTok has become one of the world's most popular  [social media](https://en.wikipedia.org/wiki/Social_media "Social media")  platforms, using recommendation algorithms that were better than alternative apps at connecting content creators with new audiences.[[5]](https://en.wikipedia.org/wiki/TikTok#cite_note-CNNFung2024-6)  Many of its users are young, of  [Generation Z](https://en.wikipedia.org/wiki/Generation_Z "Generation Z"). In April 2020, TikTok surpassed two billion mobile downloads worldwide.[[6]](https://en.wikipedia.org/wiki/TikTok#cite_note-7)  [Cloudflare](https://en.wikipedia.org/wiki/Cloudflare "Cloudflare")  ranked TikTok the  [most popular website](https://en.wikipedia.org/wiki/List_of_most-visited_websites)  of 2021, surpassing  [Google](https://en.wikipedia.org/wiki/Google_Search "Google Search").[[7]](https://en.wikipedia.org/wiki/TikTok#cite_note-8)  The popularity of TikTok has allowed viral trends in  [food](https://en.wikipedia.org/wiki/TikTok_food_trends "TikTok food trends")  and  [music](https://en.wikipedia.org/wiki/TikTok_Billboard_Top_50 "TikTok Billboard Top 50")  to take off and increase the platform's  [cultural impact](https://en.wikipedia.org/wiki/Cultural_impact_of_TikTok "Cultural impact of TikTok")  worldwide.[[8]](https://en.wikipedia.org/wiki/TikTok#cite_note-9)

### 🎵 About This Actor

All-in-One general purpose TikTok Scraper

**Features :**
- ⭐search videos, users, live.
- ⭐search by hashtag.
- ⭐search by place.
- ⭐search music.
- ⭐access user specific data: info, followers, following, videos, playlist (mix)
- ⭐autodetect tiktok.com URL (aka. Starting URL) input. 
- ⭐minimal inputs.
- ⭐directly open media/video/music URLs (via browser/cookie synchronize) or download individual video (watermarked or unwatermarked) to key-value storage.
- ⭐directly access tiktok.com web internal API, no browser emulation, fast and small memory usage.
- ⭐multiple queries in single request.
- ⭐small docker file size (only 100 mb), fast loading.

### 🎵 IMPORTANT NOTES

To be able to view media file URLs (covers, videos, etc.), you need to synchronize your browser's **Internal Values** *(cookies)* with this Actor, Otherwise, you won’t be able to open the media URLs provided by the Actor results. There are 3 cookies needed from **tiktok.com** domain :

- 🆔`ttwid` 
- 🆔`tt_chain_token` 
- 🆔`tt_csrf_token`

> This process doesn't requires your login info. You can first **Log Out** from **TikTok** if you want or use new fresh ***Chrome Incognito*** window.

Please visit https://www.tiktok.com and find these 3 cookie values from your browser *(device)* and copy paste here:

**Advanced Options**

![enter image description here](https://apify-uploads-prod.s3.us-east-1.amazonaws.com/bN8FD54GMmoyTfOIh-Screenshot_2024-05-17_074105.png)

### 🎵 Video Download

To open video URLs directly from your browser,  you can ***synchronize*** your browser with the Actor (recommended, see above), or download individual video to default Key-Value storage. 

***example:***

```yaml
{ "query": ["7112413115530104090/download"] }
````

The resulting data will same as normal, except link to video URL will be replaced with link to Key-Value storage URLs.

***example:***

```yaml
{
	"id": "7112413115530104090",
	...
    "video": {
	    # watermarked
        "downloadAddr": "https://api.apify.com/v2/key-value-stores/...",
        ...
        # no-watermarked
        "playAddr": "https://api.apify.com/v2/key-value-stores/...",
    }
    ...
}
```

### 🎵 Quick Guide

#### TikTok Query Language

```html
[ [ <COMMAND:> | # | @ ] [ <NAME> | <ID> | <KEYWORD> ] [ / <SECTION> ] | <URL> ]  
```

***Possible Query Values***

|Format|Examples|Description|
|-|-|-|
|**KEYWORDS**| search terms|***Search anything***
|`top:KEYWORDS`|`top:square pants`|Search TOP contents
|`users:KEYWORDS`|`users:joefree`|Search users
|`videos:KEYWORDS`|`videos:yellow cat`|Search videos
|`music:KEYWORDS`|`music:sunda`|Search music
|`live:KEYWORDS`|`live:cat show`|Search live
|**EXPLORE**| | ***Explore Categories***
|`:home`|`explore:home` | Explore Home
|`:CATEGORY_ID`|`explore:119` | Explore video by category ID
|`:CATEGORY_NAME`|`explore:comedy` | Explore video by category name
|**#HASHTAG**|`#music`|***Exploring Hashtag (Challenge)***
|`/info`|`#music/info` | Hashtag info and stats
|`/videos`|`#music/videos` | Hashtag videos
|**@USER**|`@elonmusk`|***Scraping User Info***
|`/info`|`@elonmusk/info`| User info
|`/videos`|`@elonmusk/videos`| User videos
|`/reposts`|`@elonmusk/reposts`| User reposts videos
|`/liked`|`@elonmusk/liked`| User liked videos
|`/playlist`|`@elonmusk/playlist` | User playlist
|`/following`|`@elonmusk/following` | User following
|`/followers`|`@elonmusk/followers` | User followers
|`/suggested`|`@elonmusk/suggested` | Suggested users
|**VIDEO\_ID**|`7112413115530104090`|***Scraping Video Data***
|`/info`|`7112413115530104090/info`| Video info
|`/comments`|`7112413115530104090/comments`| Video comments
|`/related`|`7112413115530104090/related`| Related videos
|`/download`|`7112413115530104090/download`| Download videos
|**playlist:PLAYLIST\_ID**| | ***User Playlist (Mix)***
|`playlist:PLAYLIST_ID`|`playlist:XXXXXXXXXXXXXX` | Playlist videos (see: `@user/playlist`)
|**channel:CHANNEL\_ID**| | ***Exploring Channels***
|`channel:CHANNEL_ID`|`channel:food_and_drink` | Channel videos
|**music:MUSIC\_ID**||***Scraping Music Data***
|`/info`|`music:7112413142386297627/info`|Music info
|`/videos`|`music:7112413142386297627/videos`|Videos using this music
|**place:PLACE\_ID**||***Scraping a Place Related Videos***
|`/info`|`place:22535865204947327/info`|Place info (Boston)
|`/videos`|`place:22535865204947327/videos`| Videos related to place
|**https:URL**| `https://www.tiktok.com` |***Starting URL***
|`/search?q=<KEYWORD>`|| `top:KEYWORD` or only `KEYWORD`
|`/search/video?q=<KEYWORD>`||`video:KEYWORD`
|`/search/user?q=<KEYWORD>`||`user:KEYWORD`
|`/search/live?q=<KEYWORD>`||`live:KEYWORD`
|`/tag/<HASHTAG>`||`#HASHTAG`
|`/place/place-name-<PLACE_ID>`||`place:PLACE_ID`
|`/music/music-name-<MUSIC_ID>`||`music:MUSIC_ID`
|`/channel/<CHANNEL_NAME>`||`channel:CHANNEL_NAME`
|`/<USERNAME>`||`@USERNAME`
|`/<USERNAME>/video/<VIDEO_ID>`||`VIDEO_ID`
|`/explore`||`explore:CATEGORY_ID_OR_NAME`

#### Category List

**QUERY `explore:CATEGORY_ID_OR_NAME`**

|ID|Name|Description|
|-|-|-|
| `100` | `anime_comics` | Anime & Comics |
| `101` | `shows` | Shows |
| `102` | `beauty_care` | Beauty Care |
| `103` | `games` | Games |
| `104` | `comedy` | Comedy |
| `105` | `daily_life` | Daily Life |
| `106` | `family` | Family |
| `107` | `relationship` | Relationship |
| `108` | `drama` | Drama |
| `109` | `outfit` | Outfit |
| `110` | `lipsync` | Lipsync |
| `111` | `food` | Food |
| `112` | `sports` | Sports |
| `113` | `animals` | Animals |
| `114` | `society` | Society |
| `115` | `cars` | Cars |
| `116` | `education` | Education |
| `117` | `fitness_health` | Fitness & Health |
| `118` | `technology` | Technology |
| `119` | `singing_dancing` | Singing & Dancing |

### 🎵 Tutorial

***Running Actor via JavaScript Fetch :***

> ***TODO**: Apify Platform should have example on how to run actor using JS Fetch*

```javascript
const APIFY_TOKEN = "YOUR_APIFY_TOKEN"

var run_inputs  = {"query": ["square pants"], "limit": 50}
var url = "https://api.apify.com/v2/acts/"
	+ "jupri~tiktok/run-sync-get-dataset-items?token=" 
	+ APIFY_TOKEN

var headers     = { "content-type": "application/json" }
var options     = { method: "POST", headers, body: JSON.stringify(run_inputs) }

var response = await fetch(url, options).then(res => res.json())
```

***Example #1: Searching for Video***

```yaml
{ "query": ["square pants"], "limit": 50 }	
```

***Example #2: Searching on Category***

```yaml
## category by id (104 for "Comedy")	
{ "query": ["explore:104"], "limit": 50 }

## category by name
{ "query": ["explore:comedy"], "limit": 50 }	
```

***Example #3: Searching for #hashtag***

```yaml
## hastag videos
{ "query": ["#music"], "limit": 50 }

## hastag info (statistics)
{ "query": ["#music/info"] }
```

***Example #4: User Info***

```yaml
## user videos
{ "query": ["@elonmusk"], "limit": 50 }			
{ "query": ["@elonmusk/videos"], "limit": 50 }

## user info (statistics)
{ "query": ["@elonmusk/info"] } 			
```

***Example #5: Multiple Queries***

> ***Warning**: This is just an example. Different query may have different fields/attributes set. When you request multiple queries, makes sure all have same type of query.*

```yaml
{ 
	# different type of query is OK, but not recommended!
	"query": [
		"square pants",
		"explore:comedy",
		"#music/info",
		"#music",
		"@elonmusk/info",
		"@elonmusk/videos"
	], 
	"limit": 50 # limit per query
}			
```

***Other Examples***

*`... almmost there (just follow your insting for now) ...`*

<img src="https://apify-uploads-prod.s3.us-east-1.amazonaws.com/5SxZhwYwpknFk8ek9-cat.gif" width="240">

### 🎵 ToolTips

#### ❓QUERY :

|Format|Section / Commands |Example|
|-|-|-|
|**KEYWORDS**|`top:` `users:` `videos:` `music:` `live:`|`videos:square pants`
|**explore:**|`home` `CATEGORY_ID` `CATEGORY_NAME`|`explore:comedy`
|**#HASHTAG**|`/info` `/videos` | `#music/videos`
|**@USER**|`/info` `/videos` `/playlist` `/following` `/followers`|`@elonmusk/videos`
|**VIDEO\_ID**|`/info` `/comments` `/related` `/download`|`7112413115530104090/comments`
|**playlist:PLAYLIST\_ID**||`playlist:XXXXXXXXXXXXXX`
|**channel:CHANNEL\_ID**||`channel:dance`
|**music:MUSIC\_ID**|`/info` `/videos`|`music:7112413142386297627/videos`
|**place:PLACE\_ID**|`/info` `/videos`|`place:22535865204947327/videos`
|**URL**||`https://www.tiktok.com/search?q=square pants`

# Actor input Schema

## `query` (type: `array`):

💡 Search Terms or QUERY

## `limit` (type: `integer`):

💡 Minimum number of results <i>(per query)</i>

## `dev_proxy_config` (type: `object`):

💡 <b>Supported protocol:</b><br><br><b>HTTP(S), SOCKS5</b><br><code>{http|socks5}://{user:pass}@{hostname|ip-address}:port</code><br><br><b>Example</b>: <code>socks5://example.com:9000</code>

## `dev_custom_headers` (type: `array`):

💡 Additional HTTP Headers

## `dev_custom_cookies` (type: `array`):

💡 Additional HTTP Cookies

## `dev_transform_fields` (type: `array`):

💡 <b>Transform the resulting output. Select only needed fields.</b><br><br>For nested object use <b>DOT</b>. For example: <pre>address.streetAddress</pre><br>For nested array use <b>NUMBER</b> <i>(index of array element starting from index=0)</i>. For example: <pre>images.0.url</pre>

## `dev_dataset_name` (type: `string`):

💡 <b>Save results into custom named Dataset, use mask to customize dataset name</b><br><br><code>{ACTOR} = actor name<br>{DATE} = date (YYYYMMDD)<br>{TIME} = time (HHMMSS)</code><br><br>This masks can be used to autogenerate Dataset Name.<br><br>example: <i><code>data-{DATE}</code></i><br>Depending on today date the dataset name will be: <code>data-20230603</code><i><br><br>default: <code>data-{ACTOR}-{DATE}-{TIME}</code></i>

## `dev_dataset_clear` (type: `boolean`):

Clear Dataset before insert/update.

## `dev_no_strip` (type: `boolean`):

💡 Keep/Save empty values <i><code>(NULL, FALSE, empty ARRAY, empty OBJECT, empty STRING)</code></i>

## Actor input object example

```json
{
  "query": [
    "square pants",
    "music:iwan fals"
  ],
  "limit": 5
}
```

# 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 = {
    "query": [
        "square pants",
        "music:iwan fals"
    ],
    "limit": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("jupri/tiktok").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 = {
    "query": [
        "square pants",
        "music:iwan fals",
    ],
    "limit": 5,
}

# Run the Actor and wait for it to finish
run = client.actor("jupri/tiktok").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 '{
  "query": [
    "square pants",
    "music:iwan fals"
  ],
  "limit": 5
}' |
apify call jupri/tiktok --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "🎵 TikTok Explorer",
        "description": "💫 All-in-One TiKToK Scraper",
        "version": "0.1",
        "x-build-id": "JqQ3PegyTjowxWgqk"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/jupri~tiktok/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-jupri-tiktok",
                "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/jupri~tiktok/runs": {
            "post": {
                "operationId": "runs-sync-jupri-tiktok",
                "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/jupri~tiktok/run-sync": {
            "post": {
                "operationId": "run-sync-jupri-tiktok",
                "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": {
                    "query": {
                        "title": "❓ Query",
                        "type": "array",
                        "description": "💡 Search Terms or QUERY",
                        "items": {
                            "type": "string"
                        }
                    },
                    "limit": {
                        "title": "♾️ Limit",
                        "type": "integer",
                        "description": "💡 Minimum number of results <i>(per query)</i>"
                    },
                    "dev_proxy_config": {
                        "title": "🌐 PROXY NETWORKING",
                        "type": "object",
                        "description": "💡 <b>Supported protocol:</b><br><br><b>HTTP(S), SOCKS5</b><br><code>{http|socks5}://{user:pass}@{hostname|ip-address}:port</code><br><br><b>Example</b>: <code>socks5://example.com:9000</code>"
                    },
                    "dev_custom_headers": {
                        "title": "📜 HTTP HEADERS",
                        "type": "array",
                        "description": "💡 Additional HTTP Headers",
                        "items": {
                            "type": "object",
                            "required": [
                                "key",
                                "value"
                            ],
                            "properties": {
                                "key": {
                                    "type": "string",
                                    "title": "Key"
                                },
                                "value": {
                                    "type": "string",
                                    "title": "Value"
                                }
                            }
                        }
                    },
                    "dev_custom_cookies": {
                        "title": "🍰 HTTP COOKIES",
                        "type": "array",
                        "description": "💡 Additional HTTP Cookies",
                        "items": {
                            "type": "object",
                            "required": [
                                "key",
                                "value"
                            ],
                            "properties": {
                                "key": {
                                    "type": "string",
                                    "title": "Key"
                                },
                                "value": {
                                    "type": "string",
                                    "title": "Value"
                                }
                            }
                        }
                    },
                    "dev_transform_fields": {
                        "title": "♻️ CUSTOM FIELD",
                        "type": "array",
                        "description": "💡 <b>Transform the resulting output. Select only needed fields.</b><br><br>For nested object use <b>DOT</b>. For example: <pre>address.streetAddress</pre><br>For nested array use <b>NUMBER</b> <i>(index of array element starting from index=0)</i>. For example: <pre>images.0.url</pre>",
                        "items": {
                            "type": "object",
                            "required": [
                                "key",
                                "value"
                            ],
                            "properties": {
                                "key": {
                                    "type": "string",
                                    "title": "Key"
                                },
                                "value": {
                                    "type": "string",
                                    "title": "Value"
                                }
                            }
                        }
                    },
                    "dev_dataset_name": {
                        "title": "📁 CUSTOM STORAGE",
                        "type": "string",
                        "description": "💡 <b>Save results into custom named Dataset, use mask to customize dataset name</b><br><br><code>{ACTOR} = actor name<br>{DATE} = date (YYYYMMDD)<br>{TIME} = time (HHMMSS)</code><br><br>This masks can be used to autogenerate Dataset Name.<br><br>example: <i><code>data-{DATE}</code></i><br>Depending on today date the dataset name will be: <code>data-20230603</code><i><br><br>default: <code>data-{ACTOR}-{DATE}-{TIME}</code></i>"
                    },
                    "dev_dataset_clear": {
                        "title": "Clear Storage",
                        "type": "boolean",
                        "description": "Clear Dataset before insert/update."
                    },
                    "dev_no_strip": {
                        "title": "Disable data cleansing",
                        "type": "boolean",
                        "description": "💡 Keep/Save empty values <i><code>(NULL, FALSE, empty ARRAY, empty OBJECT, empty STRING)</code></i>"
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
